From f81eedc322b43a5d0bcadc36c77812975bf1c9ff Mon Sep 17 00:00:00 2001 From: FlxPo Date: Fri, 20 Mar 2026 18:10:36 +0100 Subject: [PATCH 01/24] refactor --- examples/quickstart-fr-ci.py | 2 +- examples/quickstart-fr.py | 11 +- mobility/choice_models/congestion_state.py | 23 + .../destination_sequence_sampler.py | 27 +- .../evaluation/car_traffic_evaluation.py | 3 +- .../public_transport_network_evaluation.py | 2 +- .../evaluation/routing_evaluation.py | 7 +- .../evaluation/travel_costs_evaluation.py | 10 +- mobility/choice_models/population_trips.py | 963 ++++-------------- .../population_trips_checkpoint.py | 194 ---- .../choice_models/population_trips_resume.py | 193 ---- .../choice_models/population_trips_run.py | 847 +++++++++++++++ .../population_trips_run_results.py | 685 +++++++++++++ mobility/choice_models/results.py | 942 ----------------- mobility/choice_models/state_updater.py | 89 +- .../top_k_mode_sequence_search.py | 19 +- .../choice_models/travel_costs_aggregator.py | 301 ++++-- mobility/file_asset.py | 22 +- mobility/transport_costs/od_flows_asset.py | 32 +- .../transport_costs/path_generalized_cost.py | 14 +- mobility/transport_costs/path_travel_costs.py | 100 +- .../path_travel_costs_snapshot.py | 18 +- .../congested_path_graph_snapshot.py | 24 +- .../contracted_path_graph_snapshot.py | 19 +- mobility/transport_modes/car/car_mode.py | 14 + .../transport_modes/carpool/carpool_mode.py | 15 + .../detailed_carpool_generalized_cost.py | 14 +- .../detailed/detailed_carpool_travel_costs.py | 40 +- .../detailed_carpool_travel_costs_snapshot.py | 58 ++ .../public_transport_generalized_cost.py | 4 +- mobility/transport_modes/transport_mode.py | 12 + ...opulation_trips_results_can_be_computed.py | 10 +- ...pulation_trips_results_are_reproducible.py | 4 +- ..._001_travel_costs_aggregator_congestion.py | 77 ++ .../unit/test_901_quickstart_drift_guard.py | 2 +- 35 files changed, 2365 insertions(+), 2432 deletions(-) create mode 100644 mobility/choice_models/congestion_state.py delete mode 100644 mobility/choice_models/population_trips_checkpoint.py delete mode 100644 mobility/choice_models/population_trips_resume.py create mode 100644 mobility/choice_models/population_trips_run.py create mode 100644 mobility/choice_models/population_trips_run_results.py delete mode 100644 mobility/choice_models/results.py create mode 100644 mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py create mode 100644 tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py diff --git a/examples/quickstart-fr-ci.py b/examples/quickstart-fr-ci.py index 5b66b270..c694d6b9 100644 --- a/examples/quickstart-fr-ci.py +++ b/examples/quickstart-fr-ci.py @@ -37,7 +37,7 @@ def run_quickstart_ci(): weekday_flows = population_trips.get()["weekday_flows"].collect() # You can compute global metrics for this population - global_metrics = population_trips.evaluate("global_metrics") + global_metrics = population_trips.weekday_run.evaluate("global_metrics") return { "weekday_flows": weekday_flows, diff --git a/examples/quickstart-fr.py b/examples/quickstart-fr.py index 0007b9de..c2ab4fab 100644 --- a/examples/quickstart-fr.py +++ b/examples/quickstart-fr.py @@ -38,12 +38,13 @@ # You can get weekday trips to inspect them weekday_flows = population_trips.get()["weekday_flows"].collect() -# You can compute global metrics for this population -global_metrics = population_trips.evaluate("global_metrics") +# You can compute global metrics for weekday trips +global_metrics = population_trips.weekday_run.evaluate("global_metrics") -# You can plot OD flows, with labels for prominent cities -labels = population_trips.get_prominent_cities() -population_trips.plot_od_flows(labels=labels) +# You can plot weekday OD flows, with labels for prominent cities +weekday_results = population_trips.weekday_run.results() +labels = weekday_results.get_prominent_cities() +weekday_results.plot_od_flows(labels=labels) # You can get a report of the parameters used in the model report = population_trips.parameters_dataframe() diff --git a/mobility/choice_models/congestion_state.py b/mobility/choice_models/congestion_state.py new file mode 100644 index 00000000..6a55bcff --- /dev/null +++ b/mobility/choice_models/congestion_state.py @@ -0,0 +1,23 @@ +from dataclasses import dataclass + +from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset + + +@dataclass(frozen=True) +class CongestionState: + """Explicit run-owned congestion state for one iteration. + + This stores the persisted OD-flow assets that define the current congestion + view for each congestion-enabled mode. Travel-cost readers can derive the + appropriate snapshot artifacts directly from these assets without keeping + hidden mutable pointers. + """ + + run_key: str + is_weekday: bool + iteration: int + flow_assets_by_mode: dict[str, VehicleODFlowsAsset] + + def for_mode(self, mode_name: str) -> VehicleODFlowsAsset | None: + """Return the persisted flow asset backing the given mode.""" + return self.flow_assets_by_mode.get(str(mode_name)) diff --git a/mobility/choice_models/destination_sequence_sampler.py b/mobility/choice_models/destination_sequence_sampler.py index d79cd973..d8a183a4 100644 --- a/mobility/choice_models/destination_sequence_sampler.py +++ b/mobility/choice_models/destination_sequence_sampler.py @@ -14,20 +14,19 @@ class DestinationSequenceSampler: steps into per-iteration destination sequences. """ - def run( - self, - motives, - transport_zones, - remaining_sinks, - iteration, - chains, - demand_groups, - costs, - tmp_folders, - parameters, - seed - ): - + def sample( + self, + motives, + transport_zones, + remaining_sinks, + iteration, + chains, + demand_groups, + costs, + tmp_folders, + parameters, + seed, + ) -> pl.DataFrame: """Compute destination sequences for one iteration. Builds utilities with cost uncertainty, derives destination probabilities, diff --git a/mobility/choice_models/evaluation/car_traffic_evaluation.py b/mobility/choice_models/evaluation/car_traffic_evaluation.py index 3f417007..9214134e 100644 --- a/mobility/choice_models/evaluation/car_traffic_evaluation.py +++ b/mobility/choice_models/evaluation/car_traffic_evaluation.py @@ -12,8 +12,7 @@ def __init__(self, results): def get( - self, - weekday: bool = True + self ): car_mode = [m for m in self.results.modes if m.inputs["parameters"].name == "car"] diff --git a/mobility/choice_models/evaluation/public_transport_network_evaluation.py b/mobility/choice_models/evaluation/public_transport_network_evaluation.py index 7be52157..b9c63bcb 100644 --- a/mobility/choice_models/evaluation/public_transport_network_evaluation.py +++ b/mobility/choice_models/evaluation/public_transport_network_evaluation.py @@ -36,7 +36,7 @@ def get( crs="EPSG:3035" ) - fp = public_transport_graph.cache_path.parent / "public_transport_network.gpkg" + fp = public_transport_graph.cache_path.parent / (self.results.inputs_hash + "-public_transport_network.gpkg") gdf.to_file( fp, diff --git a/mobility/choice_models/evaluation/routing_evaluation.py b/mobility/choice_models/evaluation/routing_evaluation.py index f47da1ba..23ae46c4 100644 --- a/mobility/choice_models/evaluation/routing_evaluation.py +++ b/mobility/choice_models/evaluation/routing_evaluation.py @@ -32,18 +32,15 @@ def __init__(self, results): def get( self, - routes: pl.DataFrame, - weekday: bool = True + routes: pl.DataFrame ): """ - Generate and evaluate route paths on a given day type (weekday or weekend). + Generate and evaluate route paths for the current run. Parameters ---------- routes : pl.DataFrame Route list with origin and destination coordinates. - weekday : bool, optional - If True, evaluate weekday conditions (default is True). Returns ------- diff --git a/mobility/choice_models/evaluation/travel_costs_evaluation.py b/mobility/choice_models/evaluation/travel_costs_evaluation.py index ad90e9d5..d6942782 100644 --- a/mobility/choice_models/evaluation/travel_costs_evaluation.py +++ b/mobility/choice_models/evaluation/travel_costs_evaluation.py @@ -31,7 +31,6 @@ def get( self, ref_costs: List, variable: str = "time", - weekday: bool = True, plot: bool = True ): """ @@ -67,9 +66,6 @@ def get( variable: str Controls wether the comparison is made on "time" or "distance". - - weekday: - Controls wether the comparison is made on weekday or weekend results. plot: bool Should a scatter plot of the results be displayed. @@ -79,8 +75,8 @@ def get( pl.DataFrame Input ref_costs dataframe with a distance_model and a time_model column. """ - - costs = self.results.weekday_costs if weekday else self.results.weekend_costs + + costs = self.results.costs transport_zones = self.results.transport_zones.get() ref_costs = self.convert_to_dataframe(ref_costs) @@ -243,4 +239,4 @@ def join_transport_zone_ids(self, ref_costs, transport_zones): .join(destinations, on="ref_index") ) - return ref_costs \ No newline at end of file + return ref_costs diff --git a/mobility/choice_models/population_trips.py b/mobility/choice_models/population_trips.py index a9b6cc8a..4cc38313 100644 --- a/mobility/choice_models/population_trips.py +++ b/mobility/choice_models/population_trips.py @@ -1,128 +1,88 @@ -import os -import pathlib -import logging -import shutil -import random - -import geopandas as gpd -import matplotlib.pyplot as plt import polars as pl -from typing import List -from typing import Dict, Tuple +from typing import Dict, List -from mobility.file_asset import FileAsset -from mobility.population import Population -from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator +from mobility.asset import Asset from mobility.choice_models.population_trips_parameters import PopulationTripsParameters -from mobility.choice_models.destination_sequence_sampler import DestinationSequenceSampler -from mobility.choice_models.top_k_mode_sequence_search import TopKModeSequenceSearch -from mobility.choice_models.state_initializer import StateInitializer -from mobility.choice_models.state_updater import StateUpdater -from mobility.choice_models.results import Results -from mobility.choice_models.transition_schema import TRANSITION_EVENT_SCHEMA -from mobility.motives import Motive, HomeMotive, OtherMotive -from mobility.transport_modes.transport_mode import TransportMode +from mobility.choice_models.population_trips_run import PopulationTripsRun +from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator +from mobility.motives import HomeMotive, Motive, OtherMotive from mobility.parsers.mobility_survey import MobilitySurvey -from mobility.choice_models.population_trips_checkpoint import PopulationTripsCheckpointAsset -from mobility.choice_models.population_trips_resume import ( - compute_resume_plan, - try_load_checkpoint, - restore_state_or_fresh_start, - prune_tmp_artifacts, - rehydrate_congestion_snapshot, -) - -class PopulationTrips(FileAsset): - """ - Distributes the population between possible daily schedules. - - A daily schedule is a sequence of activities (being home, working, - studying...) occuring in distinct transport zones, with a trip to - go from one activity to the other, using available modes (walk, car, - bicycle...). A special "stay home all day" is also modelled. - - The model generates alternative schedules for each population group, - based on schedules extracted from mobility surveys. The process - spatializes these schedules (attributes a transport zone to each - activity), then finds valid mode sequences (accounting for available - modes and vehicle availability constraints). - - Each activity has a utility that depends on its duration and - opportunities occupancy, and each trip has a negative utility (a - cost) that depends on its duration and distance. The utility of a - given schedule is the sum of these activities and trips utilities. - - People choose schedules based on their utilities through a discrete - choice model. - - """ - +from mobility.population import Population +from mobility.transport_modes.transport_mode import TransportMode + + +class PopulationTrips: + """Compatibility wrapper around weekday and weekend `PopulationTripsRun` assets.""" + def __init__( - - self, - population: Population, - modes: List[TransportMode] = None, - motives: List[Motive] = None, - surveys: List[MobilitySurvey] = None, - parameters: PopulationTripsParameters = None, - n_iterations: int = None, - alpha: float = None, - k_mode_sequences: int = None, - dest_prob_cutoff: float = None, - n_iter_per_cost_update: int = None, - cost_uncertainty_sd: float = None, - seed: int = None, - mode_sequence_search_parallel: bool = None, - min_activity_time_constant: float = None, - simulate_weekend: bool = None - - ): - """ - Initialize a PopulationTrips model and its caching backend. - - This constructor validates core inputs (modes, motives, surveys), - resolves model parameters (either from a PopulationTripsParameters - instance or from explicit keyword arguments), and sets up internal - components used during simulation (state initialization, destination - sampling, mode sequence search, and state updates). A TravelCostsAggregator - is built from the provided modes. Cache file paths are derived from the - MOBILITY_PROJECT_DATA_FOLDER environment variable and passed to FileAsset. - - Parameters - ---------- - population : Population - Population object containing demand groups and transport zones. - modes : list[TransportMode] - Available transport modes. Must contain at least one TransportMode. - motives : list[Motive] - Activity motives used to build and spatialize schedules. Must contain - at least one Motive and include HomeMotive and OtherMotive. - surveys : list[MobilitySurvey] - Mobility surveys providing empirical activity chains. Must contain at - least one MobilitySurvey. - parameters : PopulationTripsParameters, optional - Parameter container. Must not be combined with explicit parameter - keyword arguments. - - Raises - ------ - ValueError - If modes, motives, or surveys are empty, or if required motives are missing. - TypeError - If any element of modes, motives, or surveys has an incorrect type. - - Notes - ----- - Randomness is controlled by parameters.seed. If seed is None, a non-deterministic - RNG is used. The model itself is executed lazily via FileAsset.get()/create(). - """ + self, + population: Population, + modes: List[TransportMode] = None, + motives: List[Motive] = None, + surveys: List[MobilitySurvey] = None, + parameters: PopulationTripsParameters = None, + n_iterations: int = None, + alpha: float = None, + k_mode_sequences: int = None, + dest_prob_cutoff: float = None, + n_iter_per_cost_update: int = None, + cost_uncertainty_sd: float = None, + seed: int = None, + mode_sequence_search_parallel: bool = None, + min_activity_time_constant: float = None, + simulate_weekend: bool = None, + ): + """Initialize the multi-day PopulationTrips compatibility wrapper. + + The wrapper validates its high-level inputs, normalizes constructor + parameters into a `PopulationTripsParameters` instance, builds a shared + `TravelCostsAggregator`, and creates one underlying `PopulationTripsRun` + asset for weekdays plus one for weekends. The weekend run is enabled or + disabled according to `simulate_weekend`. + Args: + population: Population object containing demand groups and transport + zones. + modes: Available transport modes. Must contain at least one + `TransportMode`. + motives: Activity motives used to build and spatialize schedules. + Must contain at least one `Motive` and include `HomeMotive` and + `OtherMotive`. + surveys: Mobility surveys providing empirical activity chains. Must + contain at least one `MobilitySurvey`. + parameters: Parameter container. When provided, explicit keyword + arguments are merged into this model and revalidated. + n_iterations: Optional override for + `PopulationTripsParameters.n_iterations`. + alpha: Optional override for `PopulationTripsParameters.alpha`. + k_mode_sequences: Optional override for + `PopulationTripsParameters.k_mode_sequences`. + dest_prob_cutoff: Optional override for + `PopulationTripsParameters.dest_prob_cutoff`. + n_iter_per_cost_update: Optional override for + `PopulationTripsParameters.n_iter_per_cost_update`. + cost_uncertainty_sd: Optional override for + `PopulationTripsParameters.cost_uncertainty_sd`. + seed: Optional override for `PopulationTripsParameters.seed`. + mode_sequence_search_parallel: Optional override for + `PopulationTripsParameters.mode_sequence_search_parallel`. + min_activity_time_constant: Optional override for + `PopulationTripsParameters.min_activity_time_constant`. + simulate_weekend: Optional override for + `PopulationTripsParameters.simulate_weekend`. + + Raises: + ValueError: If modes, motives, or surveys are empty, or if required + motives are missing. + TypeError: If any element of modes, motives, or surveys has an + incorrect type. + """ self.validate_modes(modes) self.validate_motives(motives) self.validate_surveys(surveys) - parameters = self.prepare_parameters( + parameters = Asset.prepare_parameters( parameters=parameters, parameters_cls=PopulationTripsParameters, explicit_args={ @@ -139,700 +99,161 @@ def __init__( }, owner_name="PopulationTrips", ) - - if parameters.seed is None: - self.rng = random.Random() - else: - self.rng = random.Random(parameters.seed) - - self.state_initializer = StateInitializer() - self.destination_sequence_sampler = DestinationSequenceSampler() - self.top_k_mode_sequence_search = TopKModeSequenceSearch() - self.state_updater = StateUpdater() costs_aggregator = TravelCostsAggregator(modes) - - inputs = { - "version": 3, - "population": population, - "costs_aggregator": costs_aggregator, - "motives": motives, - "modes": modes, - "surveys": surveys, - "parameters": parameters - } - - project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - - cache_path = { - - "weekday_flows": project_folder / "population_trips" / "weekday" / "weekday_flows.parquet", - "weekday_sinks": project_folder / "population_trips" / "weekday" / "weekday_sinks.parquet", - "weekday_costs": project_folder / "population_trips" / "weekday" / "weekday_costs.parquet", - "weekday_chains": project_folder / "population_trips" / "weekday" / "weekday_chains.parquet", - "weekday_transitions": project_folder / "population_trips" / "weekday" / "weekday_transitions.parquet", - - "weekend_flows": project_folder / "population_trips" / "weekend" / "weekend_flows.parquet", - "weekend_sinks": project_folder / "population_trips" / "weekend" / "weekend_sinks.parquet", - "weekend_costs": project_folder / "population_trips" / "weekend" / "weekend_costs.parquet", - "weekend_chains": project_folder / "population_trips" / "weekend" / "weekend_chains.parquet", - "weekend_transitions": project_folder / "population_trips" / "weekend" / "weekend_transitions.parquet", - - "demand_groups": project_folder / "population_trips" / "demand_groups.parquet" - - } - - super().__init__(inputs, cache_path) - - - def validate_motives(self, motives: List[Motive]) -> None: - - if not motives: - raise ValueError("PopulationTrips needs at least one motive in `motives`.") - - for motive in motives: - if not isinstance(motive, Motive): - raise TypeError(f"PopulationTrips motives argument should be a list of `Motive` instances, but received one object of class {type(motive)}.") - if not any(isinstance(m, OtherMotive) for m in motives): - raise ValueError("PopulationTrips `motives` argument should contain a `OtherMotive`.") + weekday_run = PopulationTripsRun( + population=population, + costs_aggregator=costs_aggregator, + motives=motives, + modes=modes, + surveys=surveys, + parameters=parameters, + is_weekday=True, + enabled=True, + ) - if not any(isinstance(m, HomeMotive) for m in motives): - raise ValueError("PopulationTrips `motives` argument should contain a `HomeMotive`.") + weekend_run = PopulationTripsRun( + population=population, + costs_aggregator=costs_aggregator, + motives=motives, + modes=modes, + surveys=surveys, + parameters=parameters, + is_weekday=False, + enabled=parameters.simulate_weekend, + ) + self.weekday_run = weekday_run + self.weekend_run = weekend_run - def validate_modes(self, modes: List[TransportMode]) -> None: + self.cache_path = self._build_cache_path() - if not modes: - raise ValueError("PopulationTrips needs at least one mode in `modes`.") + + def get(self) -> Dict[str, pl.LazyFrame]: + """Return the combined weekday/weekend outputs for this wrapper. - for mode in modes: - if not isinstance(mode, TransportMode): - raise TypeError(f"PopulationTrips modes argument should be a list of `TransportMode` instances, but received one object of class {type(mode)}.") + This method delegates execution to the underlying `PopulationTripsRun` + assets, then exposes their cached parquet outputs through the legacy + `PopulationTrips` mapping. - def validate_surveys(self, surveys: List[MobilitySurvey]) -> None: + Returns: + dict[str, pl.LazyFrame]: Lazy readers for weekday outputs, weekend + outputs, and shared `demand_groups`. + """ + self.weekday_run.get() + self.weekend_run.get() + return self.get_cached_asset() - if not surveys: - raise ValueError("PopulationTrips needs at least one survey in `surveys`.") + + def create_and_get_asset(self) -> Dict[str, pl.LazyFrame]: + """Return the combined outputs through the legacy asset-style API. - for survey in surveys: - if not isinstance(survey, MobilitySurvey): - raise TypeError(f"PopulationTrips surveys argument should be a list of `MobilitySurvey` instances, but received one object of class {type(survey)}.") + Returns: + dict[str, pl.LazyFrame]: Mapping of cache names to parquet scans. + """ + return self.get() + - def get_cached_asset(self) -> Dict[str, pl.LazyFrame]: - """Return lazy readers for all cached model outputs. + """Compatibility alias returning lazy readers for cached outputs. Returns: dict[str, pl.LazyFrame]: Mapping of cache names to parquet scans. """ - return {k: pl.scan_parquet(v) for k, v in self.cache_path.items()} - - - def create_and_get_asset(self) -> Dict[str, pl.LazyFrame]: - """Create cached outputs and return lazy readers for all cache files. + return {key: pl.scan_parquet(path) for key, path in self.cache_path.items()} - Returns: - dict[str, pl.LazyFrame]: Mapping of cache names to parquet scans. + + def remove(self, remove_checkpoints: bool = True): + """Remove cached outputs for the underlying day-type run assets. + + Args: + remove_checkpoints: When `True`, also remove saved checkpoints for + the underlying weekday and weekend runs. """ - - weekday_flows, weekday_sinks, demand_groups, weekday_costs, weekday_chains, weekday_transitions = self.run_model(is_weekday=True) - - weekday_flows.write_parquet(self.cache_path["weekday_flows"]) - weekday_sinks.write_parquet(self.cache_path["weekday_sinks"]) - weekday_costs.write_parquet(self.cache_path["weekday_costs"]) - weekday_chains.write_parquet(self.cache_path["weekday_chains"]) - weekday_transitions.write_parquet(self.cache_path["weekday_transitions"]) - - demand_groups.write_parquet(self.cache_path["demand_groups"]) - - if self.inputs["parameters"].simulate_weekend: - - weekend_flows, weekend_sinks, demand_groups, weekend_costs, weekend_chains, weekend_transitions = self.run_model(is_weekday=False) - - weekend_flows.write_parquet(self.cache_path["weekend_flows"]) - weekend_sinks.write_parquet(self.cache_path["weekend_sinks"]) - weekend_costs.write_parquet(self.cache_path["weekend_costs"]) - weekend_chains.write_parquet(self.cache_path["weekend_chains"]) - weekend_transitions.write_parquet(self.cache_path["weekend_transitions"]) - - else: - if not os.path.exists(self.cache_path["weekend_flows"].parent): - os.mkdir(self.cache_path["weekend_flows"].parent) - pl.DataFrame().write_parquet(self.cache_path["weekend_flows"]) - pl.DataFrame().write_parquet(self.cache_path["weekend_sinks"]) - pl.DataFrame().write_parquet(self.cache_path["weekend_costs"]) - pl.DataFrame().write_parquet(self.cache_path["weekend_chains"]) - self._empty_transition_events().write_parquet(self.cache_path["weekend_transitions"]) - - return {k: pl.scan_parquet(v) for k, v in self.cache_path.items()} - - def run_model(self, is_weekday: bool) -> Tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame, pl.DataFrame, pl.DataFrame, pl.DataFrame]: - """Run the iterative assignment for weekday/weekend. + self.weekday_run.remove(remove_checkpoints=remove_checkpoints) + self.weekend_run.remove(remove_checkpoints=remove_checkpoints) + + + def validate_motives(self, motives: List[Motive]) -> None: + """Validate the motives passed to the wrapper constructor. Args: - is_weekday (bool): Whether to compute weekday flows. + motives: Motive objects that define the activity types available to + the simulation. - Returns: - tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame, pl.DataFrame, pl.DataFrame, pl.DataFrame]: - Final step-level flows, sinks, demand groups, costs, reference chains, - and per-iteration transition events. + Raises: + ValueError: If no motives are provided, or if `HomeMotive` or + `OtherMotive` is missing. + TypeError: If any element is not a `Motive` instance. """ + if not motives: + raise ValueError("PopulationTrips needs at least one motive in `motives`.") - population = self.inputs["population"] - costs_aggregator = self.inputs["costs_aggregator"] - motives = self.inputs["motives"] - modes = self.inputs["modes"] - surveys = self.inputs["surveys"] - parameters = self.inputs["parameters"] - - cache_path = self.cache_path["weekday_flows"] if is_weekday is True else self.cache_path["weekend_flows"] - - run_key = self.inputs_hash - resume_plan = compute_resume_plan( - run_key=run_key, - is_weekday=is_weekday, - n_iterations=parameters.n_iterations, - ) - if resume_plan.resume_from_iter is None: - logging.info("No checkpoint found for run_key=%s is_weekday=%s. Starting from scratch.", run_key, str(is_weekday)) - else: - logging.info( - "Latest checkpoint found for run_key=%s is_weekday=%s: iteration=%s", - run_key, - str(is_weekday), - str(resume_plan.resume_from_iter), - ) - tmp_folders = self.prepare_tmp_folders(cache_path, resume=(resume_plan.resume_from_iter is not None)) - - chains_by_motive, chains, demand_groups = self.state_initializer.get_chains( - population, - surveys, - motives, - modes, - is_weekday - ) - - motive_dur, home_night_dur = self.state_initializer.get_mean_activity_durations( - chains_by_motive, - demand_groups - ) - - stay_home_state, current_states = self.state_initializer.get_stay_home_state( - demand_groups, - home_night_dur, - motives, - parameters.min_activity_time_constant, - ) - - sinks = self.state_initializer.get_sinks( - chains_by_motive, - motives, - population.transport_zones - ) - - costs = self.state_initializer.get_current_costs( - costs_aggregator, - congestion=False - ) - - remaining_sinks = sinks.clone() - transition_events_per_iter = [] - start_iteration = 1 - - if resume_plan.resume_from_iter is not None: - ckpt = try_load_checkpoint( - run_key=run_key, - is_weekday=is_weekday, - iteration=resume_plan.resume_from_iter, - ) - current_states, remaining_sinks, restored = restore_state_or_fresh_start( - ckpt=ckpt, - stay_home_state=stay_home_state, - sinks=sinks, - rng=self.rng, - ) - - if restored: - start_iteration = resume_plan.start_iteration - logging.info( - "Resuming PopulationTrips from checkpoint: run_key=%s is_weekday=%s iteration=%s", - run_key, - str(is_weekday), - str(resume_plan.resume_from_iter), - ) - prune_tmp_artifacts(tmp_folders=tmp_folders, keep_up_to_iter=resume_plan.resume_from_iter) - costs = rehydrate_congestion_snapshot( - costs_aggregator=costs_aggregator, - run_key=run_key, - last_completed_iter=resume_plan.resume_from_iter, - n_iter_per_cost_update=parameters.n_iter_per_cost_update, - ) - - for iteration in range(start_iteration, parameters.n_iterations+1): - - logging.info(f"Iteration n°{iteration}") - - seed = self.rng.getrandbits(64) - - ( - self.destination_sequence_sampler.run( - motives, - population.transport_zones, - remaining_sinks, - iteration, - chains_by_motive, - demand_groups, - costs, - tmp_folders, - parameters, - seed - ) - .write_parquet(tmp_folders["spatialized-chains"] / f"spatialized_chains_{iteration}.parquet") - ) - - - ( - self.top_k_mode_sequence_search.run( - iteration, - costs_aggregator, - tmp_folders, - parameters + for motive in motives: + if not isinstance(motive, Motive): + raise TypeError( + "PopulationTrips motives argument should be a list of `Motive` " + f"instances, but received one object of class {type(motive)}." ) - .write_parquet(tmp_folders["modes"] / f"mode_sequences_{iteration}.parquet") - ) - - current_states, current_states_steps, transition_events = self.state_updater.get_new_states( - current_states, - demand_groups, - chains_by_motive, - costs_aggregator, - remaining_sinks, - motive_dur, - iteration, - tmp_folders, - home_night_dur, - stay_home_state, - parameters, - motives - ) - transition_events_per_iter.append(transition_events) - - costs = self.state_updater.get_new_costs( - costs, - iteration, - parameters.n_iter_per_cost_update, - current_states_steps, - costs_aggregator, - run_key=self.inputs_hash - ) - - remaining_sinks = self.state_updater.get_new_sinks( - current_states_steps, - sinks, - motives - ) - - # Save per-iteration checkpoint after all state has been advanced. - try: - PopulationTripsCheckpointAsset( - run_key=run_key, - is_weekday=is_weekday, - iteration=iteration, - current_states=current_states, - remaining_sinks=remaining_sinks, - rng_state=self.rng.getstate(), - ).create_and_get_asset() - except Exception: - logging.exception("Failed to save checkpoint for iteration %s.", str(iteration)) - - # If we resumed after completing all iterations (or start_iteration > n_iterations), - # rebuild step-level flows from cached artifacts for final output. - if "current_states_steps" not in locals(): - possible_states_steps = self.state_updater.get_possible_states_steps( - current_states, - demand_groups, - chains_by_motive, - costs_aggregator, - remaining_sinks, - motive_dur, - parameters.n_iterations, - motives, - parameters.min_activity_time_constant, - tmp_folders - ) - current_states_steps = self.state_updater.get_current_states_steps(current_states, possible_states_steps) - - - costs = costs_aggregator.get_costs_by_od_and_mode( - ["cost", "distance", "time", "ghg_emissions"], - congestion=True - ) - - current_states_steps = ( - - current_states_steps - - # Add demand groups informations - .join( - demand_groups.select(["demand_group_id", "home_zone_id", "csp", "n_cars"]), - on=["demand_group_id"] - ) - .drop("demand_group_id") - - # Add costs info - .join( - costs, - on=["from", "to", "mode"], - how="left" - ) - - # Add the is_weekday info - .with_columns( - is_weekday=pl.lit(is_weekday) - ) - - ) - transitions = ( - pl.concat(transition_events_per_iter, how="vertical") - if transition_events_per_iter - else self._empty_transition_events() - ) - - return current_states_steps, sinks, demand_groups, costs, chains, transitions + if not any(isinstance(m, OtherMotive) for m in motives): + raise ValueError("PopulationTrips `motives` argument should contain a `OtherMotive`.") - def remove(self, remove_checkpoints: bool = True): - """Remove cached outputs for this PopulationTrips run. + if not any(isinstance(m, HomeMotive) for m in motives): + raise ValueError("PopulationTrips `motives` argument should contain a `HomeMotive`.") - By default this also removes any saved checkpoints for this run_key, to avoid - resuming from stale intermediate state after a "clean" remove. - """ - super().remove() - - if remove_checkpoints: - run_key = self.inputs_hash - removed = 0 - removed += PopulationTripsCheckpointAsset.remove_checkpoints_for_run(run_key=run_key, is_weekday=True) - removed += PopulationTripsCheckpointAsset.remove_checkpoints_for_run(run_key=run_key, is_weekday=False) - if removed > 0: - logging.info("Removed %s checkpoint files for run_key=%s", str(removed), str(run_key)) - + def validate_modes(self, modes: List[TransportMode]) -> None: + """Validate the transport modes passed to the wrapper constructor. - def prepare_tmp_folders(self, cache_path, resume: bool = False): - """Create per-run temp folders next to the cache path. - Args: - cache_path (pathlib.Path): Target cache file used to derive temp roots. - - Returns: - dict[str, pathlib.Path]: Mapping of temp folder names to paths. - """ - - inputs_hash = str(cache_path.stem).split("-")[0] - - def ensure_dir(folder_name): - path = cache_path.parent / (inputs_hash + "-" + folder_name) - if resume is False: - shutil.rmtree(path, ignore_errors=True) - os.makedirs(path, exist_ok=True) - return path - - folders = ["spatialized-chains", "modes", "flows", "sequences-index"] - folders = {f: ensure_dir(f) for f in folders} - - return folders - - - def evaluate(self, metric, **kwargs): - """ - Evaluate model outputs using a specified metric. - - This method loads cached simulation results, wraps them in a `Results` - object, and dispatches to the appropriate evaluation function. - - Parameters - ---------- - metric : str - Name of the evaluation metric to compute. Must be one of the metrics - methods accepted by Results - **kwargs : dict, optional - Additional arguments forwarded to the underlying metric function. - For example, `weekday=True` or `plot=True`. - - Returns - ------- - pl.DataFrame or object - Result of the chosen evaluation function, typically a Polars DataFrame. - Some metrics may also trigger plots if plotting is enabled. - """ - - self.get() - - results = Results( - transport_zones=self.inputs["population"].inputs["transport_zones"], - weekday_states_steps=pl.scan_parquet(self.cache_path["weekday_flows"]), - weekend_states_steps=pl.scan_parquet(self.cache_path["weekend_flows"]), - weekday_sinks=pl.scan_parquet(self.cache_path["weekday_sinks"]), - weekend_sinks=pl.scan_parquet(self.cache_path["weekend_sinks"]), - weekday_costs=pl.scan_parquet(self.cache_path["weekday_costs"]), - weekend_costs=pl.scan_parquet(self.cache_path["weekend_costs"]), - weekday_chains=pl.scan_parquet(self.cache_path["weekday_chains"]), - weekend_chains=pl.scan_parquet(self.cache_path["weekend_chains"]), - weekday_transitions=pl.scan_parquet(self.cache_path["weekday_transitions"]), - weekend_transitions=pl.scan_parquet(self.cache_path["weekend_transitions"]), - demand_groups=pl.scan_parquet(self.cache_path["demand_groups"]), - surveys=self.inputs["surveys"], - modes=self.inputs["modes"] - ) - - if metric not in results.metrics_methods.keys(): - available = ", ".join(results.metrics_methods.keys()) - raise ValueError(f"Unknown evaluation metric: {metric}. Available metrics are: {available}") - - evaluation = results.metrics_methods[metric](**kwargs) - - return evaluation - - - def plot_modal_share(self, zone="origin", mode="car", period="weekdays", - labels=None, labels_size=[10, 6, 4], labels_color="black"): - """ - Plot modal share for the given mode in the origin or destination zones during weekdays or weekends. - - Parameters - ---------- - zone : string, optional - "origin" or "destination" zones. The default is "origin". - mode : string, optional - Mode for which you want to see the share. Could be one of the modes previously defined (such as "bicycle") - or "public_transport" (will show all the journeys at least partly made with public transport. The default is "car". - period : string, optional - "weekdays" or ""weekends". The default is "weekdays". - - Returns - ------- - mode_share : pd.DataFrame - Mode share for the given mode in each transport zone. + modes: Transport modes available to the simulation. + Raises: + ValueError: If no modes are provided. + TypeError: If any element is not a `TransportMode` instance. """ - logging.info(f"🗺️ Plotting {mode} modal share for {zone} zones during {period}") - - if period == "weekdays": - population_df = self.get()["weekday_flows"].collect().to_pandas() - elif period == "weekends": - population_df = self.get()["weekend_flows"].collect().to_pandas() - else: - logging.info(f"{period} not implemented yet!") - return NotImplemented - - if zone == "origin": - left_column = "from" - elif zone == "destination": - left_column = "to" - - mode_share = population_df.groupby([left_column, "mode"]).sum("n_persons") - mode_share = mode_share.reset_index().set_index([left_column]) - mode_share["total"] = mode_share.groupby([left_column])["n_persons"].sum() - mode_share["modal_share"] = mode_share["n_persons"] / mode_share["total"] - - - if mode == "public_transport": - mode_name = "Public transport" - mode_share["mode"] = mode_share["mode"].replace(r"\S+/public_transport/\S+", "public_transport", regex=True) - else: - mode_name = mode.capitalize() - mode_share = mode_share[mode_share["mode"] == mode] - - transport_zones_df = self.inputs["population"].transport_zones.get() - - gc = gpd.GeoDataFrame( - transport_zones_df.merge(mode_share, how="left", right_on=left_column, left_on="transport_zone_id", suffixes=('', '_z'))).fillna(0) - gcp = gc.plot("modal_share", legend=True) - gcp.set_axis_off() - plt.title(f"{mode_name} share per {zone} transport zone ({period})") - - if isinstance(labels, gpd.GeoDataFrame): - self.__show_labels__(labels, labels_size, labels_color) - - plt.show() - - return mode_share - - def plot_od_flows(self, mode="all", motive="all", period="weekdays", level_of_detail=1, - n_largest=2000, color="blue", transparency=0.2, zones_color="xkcd:light grey", - labels=None, labels_size=[10, 6, 4], labels_color="black"): - """ - Plot flows between the different zones for the given mode, motive, period and level of detail. - - Number of OD shows, colors and transparency are configurable. - - Parameters - ---------- - mode : TYPE, optional - DESCRIPTION. The default is "all". - motive : TYPE, optional - DESCRIPTION. The default is "all". - period : TYPE, optional - DESCRIPTION. The default is "weekdays". - level_of_detail : TYPE, optional - DESCRIPTION. The default is 0. - n_largest : TYPE, optional - DESCRIPTION. The default is 2000. - color : TYPE, optional - DESCRIPTION. The default is "blue". - transparency : TYPE, optional - DESCRIPTION. The default is 0.2. - zones_color : TYPE, optional - DESCRIPTION. The default is "gray". - - Returns - ------- - biggest_flows : pd.DataFrame - Biggest flows between different transport zones. - - """ - if level_of_detail == 0: - logging.info("OD between communes not implemented yet") - return NotImplemented - elif level_of_detail != 1: - logging.info("Level of detail should be 0 or 1") - return NotImplemented - else: - logging.info(f"🗺️ Plotting {mode} origin-destination flows during {period}") - - if motive != "all": - logging.info("Speficic motives not implemented yet") - return NotImplemented - - if period == "weekdays": - population_df = self.get()["weekday_flows"].collect().to_pandas() - elif period == "weekends": - population_df = self.get()["weekend_flows"].collect().to_pandas() - - mode_name = mode.capitalize() - - if mode != "all": - if mode == "count": - population_df["mode"] = population_df["mode"].fillna("unknown_mode") - count_modes = population_df.groupby("mode")[["mode"]].count() - print(count_modes) - return count_modes - if mode == "public_transport": - mode_name = "Public transport" - population_df = population_df[population_df["mode"].fillna("unknown_mode").str.contains("public_transport")] - else: - population_df = population_df[population_df["mode"] == mode] - - # Find all biggest origin-destination between different transport zones - biggest_flows = population_df.groupby(["from", "to"]).sum("n_persons").reset_index() - biggest_flows = biggest_flows.where(biggest_flows["from"] != biggest_flows["to"]).nlargest(n_largest, "n_persons") - transport_zones_df = self.inputs["population"].transport_zones.get() - biggest_flows = biggest_flows.merge( - transport_zones_df, left_on="from", right_on="transport_zone_id", suffixes=('', '_from')) - biggest_flows = biggest_flows.merge( - transport_zones_df, left_on="to", right_on="transport_zone_id", suffixes=('', '_to')) - - # Add all the transport zones in gray, as background - gc = gpd.GeoDataFrame(transport_zones_df) - gcp = gc.plot(color=zones_color) - gcp.set_axis_off() - - # Put a legend for width on bottom right, title on the top - x_min = float(biggest_flows[["x"]].min().iloc[0]) - y_min = float(biggest_flows[["y"]].min().iloc[0]) - plt.plot([x_min, x_min+4000], [y_min, y_min], linewidth=2, color=color) - plt.text(x_min+6000, y_min-1000, "1 000", color=color) - plt.title(f"{mode_name} flows between transport zones on {period}") - - # Draw all origin-destinations - for index, row in biggest_flows.iterrows(): - plt.plot([row["x"], row["x_to"]], [row["y"], row["y_to"]], - linewidth=row["n_persons"]/500, color=color, alpha=transparency) - - if isinstance(labels, gpd.GeoDataFrame): - self.__show_labels__(labels, labels_size, labels_color) - - plt.show() - - return biggest_flows - - def __show_labels__(self, labels, size, color): - for index, row in labels.iterrows(): - if row["prominence"] == 1: - plt.annotate(row["local_admin_unit_name"], (row["x"], row["y"]), - size=size[0], ha="center", va="center", color=color) - elif row["prominence"] <3: - plt.annotate(row["local_admin_unit_name"], (row["x"], row["y"]), - size=size[1], ha="center", va="center", color=color) - else: - plt.annotate(row["local_admin_unit_name"], (row["x"], row["y"]), - size=size[2], ha="center", va="center", color=color) - - def get_prominent_cities(self, n_cities=20, n_levels=3, distance_km=2): - """ - Get the most prominent cities, ie the biggest cities that are not close to a bigger city. + if not modes: + raise ValueError("PopulationTrips needs at least one mode in `modes`.") - Useful to label a map and reducing the number of overlaps without mising an important city. + for mode in modes: + if not isinstance(mode, TransportMode): + raise TypeError( + "PopulationTrips modes argument should be a list of `TransportMode` " + f"instances, but received one object of class {type(mode)}." + ) - Parameters - ---------- - n_cities : int, optional - Number of cities to include in the list. The default is 20. - n_levels : int, optional - Levels of prominence to consider. - distance_km : int, optional - If a city is closer than this distance to a bigger one, it will be considered less prominent. - The default is 2. + def validate_surveys(self, surveys: List[MobilitySurvey]) -> None: + """Validate the mobility surveys passed to the wrapper constructor. - Returns - ------- - None. + Args: + surveys: Survey assets used to derive reference activity chains. + Raises: + ValueError: If no surveys are provided. + TypeError: If any element is not a `MobilitySurvey` instance. """ - # Get the flows, the study area and the transport zones dataframes - population_df = self.get()["weekday_flows"].collect().to_pandas() - study_area_df = self.inputs["population"].transport_zones.study_area.get() - tzdf = self.inputs["population"].transport_zones.get() - - # Group flows per local admin unit - flows_per_commune = population_df.merge(tzdf, left_on="from", right_on="transport_zone_id") - flows_per_commune = flows_per_commune.groupby("local_admin_unit_id")["n_persons"].sum().reset_index() - flows_per_commune = flows_per_commune.merge(study_area_df) - - # Keep the most important cities and five them an initial prominence depending on total flows - # Use n_levels here in the future - flows_per_commune = flows_per_commune.sort_values(by="n_persons", ascending=False).head(n_cities*2).reset_index() - flows_per_commune.loc[0, "prominence"] = 1 - flows_per_commune.loc[1:n_cities//2, "prominence"] = 2 - flows_per_commune.loc[n_cities//2+1:n_cities, "prominence"] = 3 - flows_per_commune.loc[n_cities+1:n_cities*2, "prominence"] = 3 - - # Transform them into a GeoDataFrame - geoflows = gpd.GeoDataFrame(flows_per_commune) - - # If an admin unit is too close to a bigger admin unit, make it less prominent - for i in range(n_cities//2): - coords = flows_per_commune.loc[i, "geometry"] - geoflows["dists"] = geoflows["geometry"].distance(coords) - # Use distance_km here - geoflows.loc[ - ((geoflows["dists"] < distance_km*1000) & (geoflows.index > i)), "prominence" - ] = geoflows["prominence"] + 2 - geoflows = geoflows.sort_values(by="prominence").reset_index(drop=True) - - # Keep only the most prominent admin units and add their centroids - geoflows = geoflows[geoflows["prominence"] <= n_levels] - xy_coords = geoflows["geometry"].centroid.get_coordinates() - geoflows = geoflows.merge(xy_coords, left_index=True, right_index=True) - - return geoflows - - - def _empty_transition_events(self) -> pl.DataFrame: - """Build an empty transition-events table with the canonical schema. + if not surveys: + raise ValueError("PopulationTrips needs at least one survey in `surveys`.") + + for survey in surveys: + if not isinstance(survey, MobilitySurvey): + raise TypeError( + "PopulationTrips surveys argument should be a list of `MobilitySurvey` " + f"instances, but received one object of class {type(survey)}." + ) + + def _build_cache_path(self) -> Dict[str, str]: + """Expose child run cache paths through the legacy wrapper keys. Returns: - pl.DataFrame: Empty transition-events dataframe. + dict[str, pathlib.Path]: Mapping from legacy `PopulationTrips` + output names to the underlying weekday and weekend run asset files. """ - return pl.DataFrame(schema=TRANSITION_EVENT_SCHEMA) + weekday_paths = self.weekday_run.cache_path + weekend_paths = self.weekend_run.cache_path + keys = ("flows", "sinks", "costs", "chains", "transitions") + cache_paths = {f"weekday_{key}": weekday_paths[key] for key in keys} + cache_paths.update({f"weekend_{key}": weekend_paths[key] for key in keys}) + cache_paths["demand_groups"] = weekday_paths["demand_groups"] + return cache_paths diff --git a/mobility/choice_models/population_trips_checkpoint.py b/mobility/choice_models/population_trips_checkpoint.py deleted file mode 100644 index 2c641438..00000000 --- a/mobility/choice_models/population_trips_checkpoint.py +++ /dev/null @@ -1,194 +0,0 @@ -import os -import json -import pickle -import pathlib -import logging -import re - -import polars as pl - -from mobility.file_asset import FileAsset - - -class PopulationTripsCheckpointAsset(FileAsset): - """Per-iteration checkpoint for PopulationTrips to enable crash-safe resume. - - The checkpoint is keyed by: - - run_key: PopulationTrips.inputs_hash (includes the seed and all params) - - is_weekday: True/False - - iteration: last completed iteration k - - Payload: - - current_states (pl.DataFrame) - - remaining_sinks (pl.DataFrame) - - rng_state (pickle of random.Random.getstate()) - - Notes: - - We write a JSON meta file last so incomplete checkpoints are ignored. - - This asset is intentionally not part of the main model dependency graph; - it is only used as an optional resume source. - """ - - SCHEMA_VERSION = 1 - - def __init__( - self, - *, - run_key: str, - is_weekday: bool, - iteration: int, - current_states: pl.DataFrame | None = None, - remaining_sinks: pl.DataFrame | None = None, - rng_state=None, - ): - self._payload_current_states = current_states - self._payload_remaining_sinks = remaining_sinks - self._payload_rng_state = rng_state - - inputs = { - "run_key": str(run_key), - "is_weekday": bool(is_weekday), - "iteration": int(iteration), - "schema_version": self.SCHEMA_VERSION, - } - - project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - period = "weekday" if is_weekday else "weekend" - base_dir = project_folder / "population_trips" / period / "checkpoints" - - stem = f"checkpoint_{run_key}_iter_{int(iteration)}" - cache_path = { - "current_states": base_dir / f"{stem}_current_states.parquet", - "remaining_sinks": base_dir / f"{stem}_remaining_sinks.parquet", - "rng_state": base_dir / f"{stem}_rng_state.pkl", - "meta": base_dir / f"{stem}.json", - } - - super().__init__(inputs, cache_path) - - def get_cached_asset(self): - current_states = pl.read_parquet(self.cache_path["current_states"]) - remaining_sinks = pl.read_parquet(self.cache_path["remaining_sinks"]) - with open(self.cache_path["rng_state"], "rb") as f: - rng_state = pickle.load(f) - - meta = {} - try: - with open(self.cache_path["meta"], "r", encoding="utf-8") as f: - meta = json.load(f) - except Exception: - # Meta is only for convenience; payload files are the source of truth. - pass - - return { - "current_states": current_states, - "remaining_sinks": remaining_sinks, - "rng_state": rng_state, - "meta": meta, - } - - def create_and_get_asset(self): - for p in self.cache_path.values(): - pathlib.Path(p).parent.mkdir(parents=True, exist_ok=True) - - if self._payload_current_states is None or self._payload_remaining_sinks is None or self._payload_rng_state is None: - raise ValueError("Checkpoint payload is missing (current_states, remaining_sinks, rng_state).") - - def atomic_write_bytes(final_path: pathlib.Path, data: bytes): - tmp = pathlib.Path(str(final_path) + ".tmp") - with open(tmp, "wb") as f: - f.write(data) - os.replace(tmp, final_path) - - def atomic_write_text(final_path: pathlib.Path, text: str): - tmp = pathlib.Path(str(final_path) + ".tmp") - with open(tmp, "w", encoding="utf-8") as f: - f.write(text) - os.replace(tmp, final_path) - - # Write payload first - tmp_states = pathlib.Path(str(self.cache_path["current_states"]) + ".tmp") - self._payload_current_states.write_parquet(tmp_states) - os.replace(tmp_states, self.cache_path["current_states"]) - - tmp_sinks = pathlib.Path(str(self.cache_path["remaining_sinks"]) + ".tmp") - self._payload_remaining_sinks.write_parquet(tmp_sinks) - os.replace(tmp_sinks, self.cache_path["remaining_sinks"]) - - atomic_write_bytes(self.cache_path["rng_state"], pickle.dumps(self._payload_rng_state, protocol=pickle.HIGHEST_PROTOCOL)) - - # Meta last, so readers only see complete checkpoints. - meta = { - "run_key": self.inputs["run_key"], - "is_weekday": self.inputs["is_weekday"], - "iteration": self.inputs["iteration"], - "schema_version": self.SCHEMA_VERSION, - } - atomic_write_text(self.cache_path["meta"], json.dumps(meta, sort_keys=True)) - - logging.info( - "Checkpoint saved: run_key=%s is_weekday=%s iteration=%s", - self.inputs["run_key"], - str(self.inputs["is_weekday"]), - str(self.inputs["iteration"]), - ) - - return self.get_cached_asset() - - @staticmethod - def find_latest_checkpoint_iter(*, run_key: str, is_weekday: bool) -> int | None: - project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - period = "weekday" if is_weekday else "weekend" - base_dir = project_folder / "population_trips" / period / "checkpoints" - if not base_dir.exists(): - return None - - # FileAsset prefixes filenames with its own inputs_hash, so we match on the suffix. - pattern = f"*checkpoint_{run_key}_iter_*.json" - candidates = list(base_dir.glob(pattern)) - if not candidates: - return None - - rx = re.compile(rf"checkpoint_{re.escape(run_key)}_iter_(\d+)\.json$") - best = None - for p in candidates: - m = rx.search(p.name) - if not m: - continue - it = int(m.group(1)) - if best is None or it > best: - best = it - - return best - - @staticmethod - def remove_checkpoints_for_run(*, run_key: str, is_weekday: bool) -> int: - """Remove all checkpoint files for a given run_key and period. - - Returns number of files removed. - """ - project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - period = "weekday" if is_weekday else "weekend" - base_dir = project_folder / "population_trips" / period / "checkpoints" - if not base_dir.exists(): - return 0 - - # FileAsset prefixes filenames with its own inputs_hash, so just match suffix fragments. - pattern = f"*checkpoint_{run_key}_iter_*" - removed = 0 - for p in base_dir.glob(pattern): - try: - p.unlink(missing_ok=True) - removed += 1 - except Exception: - logging.exception("Failed to remove checkpoint file: %s", str(p)) - - # Also delete any stray tmp files. - for p in base_dir.glob(pattern + ".tmp"): - try: - p.unlink(missing_ok=True) - removed += 1 - except Exception: - logging.exception("Failed to remove checkpoint tmp file: %s", str(p)) - - return removed diff --git a/mobility/choice_models/population_trips_resume.py b/mobility/choice_models/population_trips_resume.py deleted file mode 100644 index 313b24f3..00000000 --- a/mobility/choice_models/population_trips_resume.py +++ /dev/null @@ -1,193 +0,0 @@ -import logging -from dataclasses import dataclass - -import polars as pl -import pandas as pd - -from mobility.choice_models.population_trips_checkpoint import PopulationTripsCheckpointAsset -from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset - - -@dataclass(frozen=True) -class ResumePlan: - """Plan for resuming a PopulationTrips run.""" - - run_key: str - is_weekday: bool - resume_from_iter: int | None # last completed iteration to resume from (k), or None - start_iteration: int # first iteration to compute (k+1, or 1) - - -def compute_resume_plan(*, run_key: str, is_weekday: bool, n_iterations: int) -> ResumePlan: - """Computes the resume plan for a PopulationTrips run. - - This inspects the checkpoint folder and returns: - - the last completed iteration (k), if a checkpoint exists - - the next iteration to compute (k+1), or 1 when no checkpoint exists - - Note: If k == n_iterations, then start_iteration == n_iterations + 1 and - callers should treat the iteration loop as complete (no-op). - - Args: - run_key: Hash-like identifier for the run. Must match - PopulationTrips.inputs_hash. - is_weekday: Whether this is the weekday simulation (True) or weekend (False). - n_iterations: Total number of iterations configured for this run. - - Returns: - ResumePlan describing whether to resume and which iteration to start from. - """ - latest = PopulationTripsCheckpointAsset.find_latest_checkpoint_iter( - run_key=run_key, - is_weekday=is_weekday, - ) - if latest is None: - return ResumePlan(run_key=run_key, is_weekday=is_weekday, resume_from_iter=None, start_iteration=1) - - k = min(int(latest), int(n_iterations)) - return ResumePlan(run_key=run_key, is_weekday=is_weekday, resume_from_iter=k, start_iteration=k + 1) - - -def try_load_checkpoint(*, run_key: str, is_weekday: bool, iteration: int): - """Loads a checkpoint payload (best-effort). - - Args: - run_key: Run identifier. - is_weekday: Weekday/weekend selector. - iteration: Iteration number k (last completed). - - Returns: - The checkpoint payload dict as returned by PopulationTripsCheckpointAsset.get(), - or None if loading fails for any reason. - """ - try: - return PopulationTripsCheckpointAsset( - run_key=run_key, - is_weekday=is_weekday, - iteration=iteration, - ).get() - except Exception: - logging.exception("Failed to load checkpoint (run_key=%s, is_weekday=%s, iteration=%s).", run_key, str(is_weekday), str(iteration)) - return None - - -def restore_state_or_fresh_start( - *, - ckpt, - stay_home_state: pl.DataFrame, - sinks: pl.DataFrame, - rng, -): - """Restores iteration state from a checkpoint or returns a clean start state. - - This is the core of resume correctness: to continue deterministically, both - the model state and the RNG state must be restored. - - Args: - ckpt: Checkpoint payload dict (or None) returned by try_load_checkpoint(). - stay_home_state: Baseline "stay home" state used to build a clean start. - sinks: Initial sinks; used to build a clean start remaining_sinks. - rng: random.Random instance to restore with rng.setstate(...). - - Returns: - Tuple of: - - current_states: pl.DataFrame - - remaining_sinks: pl.DataFrame - - restored: bool indicating whether checkpoint restoration succeeded. - """ - - fresh_current_states = ( - stay_home_state - .select(["demand_group_id", "iteration", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) - .clone() - ) - fresh_remaining_sinks = sinks.clone() - - if ckpt is None: - return fresh_current_states, fresh_remaining_sinks, False - - try: - rng.setstate(ckpt["rng_state"]) - except Exception: - logging.exception("Failed to restore RNG state from checkpoint; restarting from scratch.") - return fresh_current_states, fresh_remaining_sinks, False - - return ckpt["current_states"], ckpt["remaining_sinks"], True - - -def prune_tmp_artifacts(*, tmp_folders, keep_up_to_iter: int) -> None: - """Deletes temp artifacts beyond the last completed iteration. - - If a run crashed mid-iteration, temp parquet files for that iteration may - exist. This ensures we don't accidentally reuse partial artifacts on resume. - - Args: - tmp_folders: Dict of temp folders produced by PopulationTrips.prepare_tmp_folders(). - keep_up_to_iter: Last completed iteration k; any artifacts for >k are removed. - """ - try: - for p in tmp_folders["spatialized-chains"].glob("spatialized_chains_*.parquet"): - it = int(p.stem.split("_")[-1]) - if it > keep_up_to_iter: - p.unlink(missing_ok=True) - for p in tmp_folders["modes"].glob("mode_sequences_*.parquet"): - it = int(p.stem.split("_")[-1]) - if it > keep_up_to_iter: - p.unlink(missing_ok=True) - except Exception: - logging.exception("Failed to prune temp artifacts on resume. Continuing anyway.") - - -def rehydrate_congestion_snapshot( - *, - costs_aggregator, - run_key: str, - last_completed_iter: int, - n_iter_per_cost_update: int, -): - """Rehydrates congestion snapshot state for deterministic resume. - - The model stores a pointer to the "current congestion snapshot" in-memory. - After a crash/restart, that pointer is lost, even though the snapshot files - are cached on disk. This function reloads the last applicable flow asset and - re-applies it so that subsequent cost lookups use the same congested costs - as an uninterrupted run. - - Args: - costs_aggregator: TravelCostsAggregator instance from PopulationTrips inputs. - run_key: Run identifier (PopulationTrips.inputs_hash). - last_completed_iter: Last completed iteration k. - n_iter_per_cost_update: Update cadence. 0 means no congestion feedback. - - Returns: - A costs dataframe from costs_aggregator.get(...), using congested costs - when rehydration succeeds, or falling back to free-flow on failure. - """ - if n_iter_per_cost_update <= 0 or last_completed_iter < 1: - return costs_aggregator.get(congestion=False) - - last_update_iter = 1 + ((last_completed_iter - 1) // n_iter_per_cost_update) * n_iter_per_cost_update - if last_update_iter < 1: - return costs_aggregator.get(congestion=False) - - try: - # Load the existing flow asset for the last congestion update iteration. - flow_asset = VehicleODFlowsAsset( - vehicle_od_flows=pd.DataFrame({"from": [], "to": [], "vehicle_volume": []}), - run_key=run_key, - iteration=last_update_iter, - mode_name="car", - ) - flow_asset.get() - - # Apply snapshot to the road mode so get(congestion=True) is aligned. - for mode in costs_aggregator.modes: - if getattr(mode, "congestion", False) and getattr(mode, "name", None) == "car": - # Restore the in-memory pointer to the correct congestion snapshot. - mode.travel_costs.apply_flow_snapshot(flow_asset) - break - - return costs_aggregator.get(congestion=True) - except Exception: - logging.exception("Failed to rehydrate congestion snapshot on resume; falling back to free-flow costs until next update.") - return costs_aggregator.get(congestion=False) diff --git a/mobility/choice_models/population_trips_run.py b/mobility/choice_models/population_trips_run.py new file mode 100644 index 00000000..ab268cfc --- /dev/null +++ b/mobility/choice_models/population_trips_run.py @@ -0,0 +1,847 @@ +import json +import logging +import os +import pathlib +import pickle +import random +import re +import shutil +from dataclasses import dataclass +from typing import Any, List + +import pandas as pd +import polars as pl + +from mobility.choice_models.congestion_state import CongestionState +from mobility.choice_models.destination_sequence_sampler import DestinationSequenceSampler +from mobility.choice_models.population_trips_parameters import PopulationTripsParameters +from mobility.choice_models.population_trips_run_results import PopulationTripsRunResults +from mobility.choice_models.state_initializer import StateInitializer +from mobility.choice_models.state_updater import StateUpdater +from mobility.choice_models.top_k_mode_sequence_search import ModeSequenceSearcher +from mobility.choice_models.transition_schema import TRANSITION_EVENT_SCHEMA +from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator +from mobility.file_asset import FileAsset +from mobility.motives import Motive +from mobility.parsers.mobility_survey import MobilitySurvey +from mobility.population import Population +from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset +from mobility.transport_modes.transport_mode import TransportMode + + +@dataclass(frozen=True) +class _ResumePlan: + run_key: str + is_weekday: bool + resume_from_iteration: int | None + start_iteration: int + + +@dataclass(frozen=True) +class _ResumeState: + current_states: pl.DataFrame + remaining_sinks: pl.DataFrame + congestion_state: CongestionState | None + start_iteration: int + restored: bool + + +@dataclass(frozen=True) +class _RunContext: + population: Population + costs_aggregator: TravelCostsAggregator + motives: List[Motive] + modes: List[TransportMode] + surveys: List[MobilitySurvey] + parameters: PopulationTripsParameters + is_weekday: bool + run_key: str + tmp_folders: dict[str, pathlib.Path] + resume_plan: _ResumePlan + + +@dataclass +class _RunState: + chains_by_motive: pl.DataFrame + chains: pl.DataFrame + demand_groups: pl.DataFrame + motive_dur: pl.DataFrame + home_night_dur: pl.DataFrame + stay_home_state: pl.DataFrame + sinks: pl.DataFrame + current_states: pl.DataFrame + remaining_sinks: pl.DataFrame + costs: pl.DataFrame + congestion_state: CongestionState | None + start_iteration: int + current_states_steps: pl.DataFrame | None = None + + +class PopulationTripsRun(FileAsset): + """Single day-type PopulationTrips asset.""" + + def __init__( + self, + *, + population: Population, + costs_aggregator: TravelCostsAggregator, + motives: List[Motive], + modes: List[TransportMode], + surveys: List[MobilitySurvey], + parameters: PopulationTripsParameters, + is_weekday: bool, + enabled: bool = True, + ) -> None: + """Initialize a single weekday or weekend PopulationTrips run.""" + inputs = { + "version": 1, + "population": population, + "costs_aggregator": costs_aggregator, + "motives": motives, + "modes": modes, + "surveys": surveys, + "parameters": parameters, + "is_weekday": is_weekday, + "enabled": enabled, + } + + self.rng = random.Random(parameters.seed) if parameters.seed is not None else random.Random() + self.state_initializer = StateInitializer() + self.destination_sequence_sampler = DestinationSequenceSampler() + self.mode_sequence_searcher = ModeSequenceSearcher() + self.state_updater = StateUpdater() + + project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) + period = "weekday" if is_weekday else "weekend" + + cache_path = { + "flows": project_folder / "population_trips" / period / "flows.parquet", + "sinks": project_folder / "population_trips" / period / "sinks.parquet", + "costs": project_folder / "population_trips" / period / "costs.parquet", + "chains": project_folder / "population_trips" / period / "chains.parquet", + "transitions": project_folder / "population_trips" / period / "transitions.parquet", + "demand_groups": project_folder / "population_trips" / period / "demand_groups.parquet", + } + super().__init__(inputs, cache_path) + + + def create_and_get_asset(self) -> dict[str, pl.LazyFrame]: + """Run the simulation for this day type and materialize cached outputs.""" + if not self.inputs["enabled"]: + self._write_empty_outputs() + return self.get_cached_asset() + + ctx = self._build_run_context() + state = self._build_run_state(ctx) + for iteration in range(state.start_iteration, ctx.parameters.n_iterations + 1): + self._run_iteration(ctx, state, iteration) + self._save_iteration_state(ctx, state, iteration) + + self._materialize_current_states_steps_if_missing(ctx, state) + + final_costs = self._build_final_costs(ctx, state) + final_flows = self._build_final_flows(ctx, state, final_costs) + transitions = self._build_transitions(ctx) + + self._write_outputs( + flows=final_flows, + sinks=state.sinks, + costs=final_costs, + chains=state.chains, + transitions=transitions, + demand_groups=state.demand_groups, + ) + + return self.get_cached_asset() + + + def _write_empty_outputs(self) -> None: + """Write empty outputs for a disabled day type.""" + for path in self.cache_path.values(): + path.parent.mkdir(parents=True, exist_ok=True) + pl.DataFrame().write_parquet(self.cache_path["flows"]) + pl.DataFrame().write_parquet(self.cache_path["sinks"]) + pl.DataFrame().write_parquet(self.cache_path["costs"]) + pl.DataFrame().write_parquet(self.cache_path["chains"]) + self._empty_transition_events().write_parquet(self.cache_path["transitions"]) + pl.DataFrame().write_parquet(self.cache_path["demand_groups"]) + + + def _build_run_context(self) -> _RunContext: + """Assemble immutable run-level context for this execution.""" + parameters = self.inputs["parameters"] + is_weekday = self.inputs["is_weekday"] + run_key = self.inputs_hash + resume_plan = self._build_resume_plan( + run_key=run_key, + is_weekday=is_weekday, + n_iterations=parameters.n_iterations, + ) + self._log_resume_plan(resume_plan) + tmp_folders = self._prepare_tmp_folders( + run_key=run_key, + base_folder=self.cache_path["flows"].parent, + resume=(resume_plan.resume_from_iteration is not None), + ) + return _RunContext( + population=self.inputs["population"], + costs_aggregator=self.inputs["costs_aggregator"], + motives=self.inputs["motives"], + modes=self.inputs["modes"], + surveys=self.inputs["surveys"], + parameters=parameters, + is_weekday=is_weekday, + run_key=run_key, + tmp_folders=tmp_folders, + resume_plan=resume_plan, + ) + + + def _build_resume_plan( + self, + *, + run_key: str, + is_weekday: bool, + n_iterations: int, + ) -> _ResumePlan: + """Decide whether this run resumes from a saved iteration or starts fresh.""" + latest_saved_iteration = self._find_latest_saved_iteration( + run_key=run_key, + is_weekday=is_weekday, + ) + if latest_saved_iteration is None: + return _ResumePlan( + run_key=run_key, + is_weekday=is_weekday, + resume_from_iteration=None, + start_iteration=1, + ) + + last_completed_iteration = min(int(latest_saved_iteration), int(n_iterations)) + return _ResumePlan( + run_key=run_key, + is_weekday=is_weekday, + resume_from_iteration=last_completed_iteration, + start_iteration=last_completed_iteration + 1, + ) + + + def _find_latest_saved_iteration(self, *, run_key: str, is_weekday: bool) -> int | None: + """Return the latest completed iteration whose saved state is available.""" + iteration_state_folder = self._get_tmp_folder_paths( + run_key=run_key, + base_folder=self.cache_path["flows"].parent, + )["iteration-state"] + if not iteration_state_folder.exists(): + return None + + completion_files = list(iteration_state_folder.glob("iteration_state_*.json")) + if not completion_files: + return None + + latest_iteration = None + iteration_pattern = re.compile(r"iteration_state_(\d+)\.json$") + for path in completion_files: + match = iteration_pattern.search(path.name) + if match is None: + continue + iteration = int(match.group(1)) + if latest_iteration is None or iteration > latest_iteration: + latest_iteration = iteration + + return latest_iteration + + + def _log_resume_plan(self, resume_plan: _ResumePlan) -> None: + """Log whether this run starts fresh or resumes from a saved iteration.""" + if resume_plan.resume_from_iteration is None: + logging.info( + "No saved iteration found for run_key=%s is_weekday=%s. Starting from scratch.", + resume_plan.run_key, + str(resume_plan.is_weekday), + ) + return + + logging.info( + "Latest saved iteration found for run_key=%s is_weekday=%s: iteration=%s", + resume_plan.run_key, + str(resume_plan.is_weekday), + str(resume_plan.resume_from_iteration), + ) + + + def _prepare_tmp_folders( + self, + *, + run_key: str, + base_folder: pathlib.Path, + resume: bool = False, + ) -> dict[str, pathlib.Path]: + """Create per-run temp folders next to the cache path.""" + def ensure_dir(path: pathlib.Path) -> pathlib.Path: + if resume is False: + shutil.rmtree(path, ignore_errors=True) + os.makedirs(path, exist_ok=True) + return path + + return { + name: ensure_dir(path) + for name, path in self._get_tmp_folder_paths(run_key=run_key, base_folder=base_folder).items() + } + + + def _get_tmp_folder_paths( + self, + *, + run_key: str, + base_folder: pathlib.Path, + ) -> dict[str, pathlib.Path]: + """Return the per-run temp folder paths without creating them.""" + folder_names = [ + "destination-sequences", + "modes", + "flows", + "sequences-index", + "transitions", + "iteration-state", + ] + return {name: base_folder / f"{run_key}-{name}" for name in folder_names} + + + def _build_run_state(self, ctx: _RunContext) -> _RunState: + """Build the initial mutable state, then apply resume restoration.""" + chains_by_motive, chains, demand_groups = self.state_initializer.get_chains( + ctx.population, + ctx.surveys, + ctx.motives, + ctx.modes, + ctx.is_weekday, + ) + motive_dur, home_night_dur = self.state_initializer.get_mean_activity_durations( + chains_by_motive, + demand_groups, + ) + stay_home_state, current_states = self.state_initializer.get_stay_home_state( + demand_groups, + home_night_dur, + ctx.motives, + ctx.parameters.min_activity_time_constant, + ) + sinks = self.state_initializer.get_sinks( + chains_by_motive, + ctx.motives, + ctx.population.transport_zones, + ) + state = _RunState( + chains_by_motive=chains_by_motive, + chains=chains, + demand_groups=demand_groups, + motive_dur=motive_dur, + home_night_dur=home_night_dur, + stay_home_state=stay_home_state, + sinks=sinks, + current_states=current_states, + remaining_sinks=sinks.clone(), + costs=self.state_initializer.get_current_costs( + ctx.costs_aggregator, + congestion=False, + ), + congestion_state=None, + start_iteration=1, + ) + self._apply_resume_state(ctx, state) + return state + + + def _apply_resume_state(self, ctx: _RunContext, state: _RunState) -> None: + """Apply either the restored iteration state or the fresh start state.""" + resume_state = self._restore_resume_state(ctx, state) + state.current_states = resume_state.current_states + state.remaining_sinks = resume_state.remaining_sinks + state.congestion_state = resume_state.congestion_state + state.start_iteration = resume_state.start_iteration + if not resume_state.restored: + return + + logging.info( + "Resuming PopulationTrips from saved iteration: run_key=%s is_weekday=%s iteration=%s", + ctx.run_key, + str(ctx.is_weekday), + str(ctx.resume_plan.resume_from_iteration), + ) + state.costs = ctx.costs_aggregator.get( + congestion=(state.congestion_state is not None), + congestion_state=state.congestion_state, + ) + + + def _restore_resume_state(self, ctx: _RunContext, state: _RunState) -> _ResumeState: + """Restore the latest saved iteration state, or return a fresh start state.""" + fresh_state = self._build_fresh_resume_state( + stay_home_state=state.stay_home_state, + sinks=state.sinks, + ) + if ctx.resume_plan.resume_from_iteration is None: + return fresh_state + + saved_state = self._load_saved_iteration_state( + ctx=ctx, + iteration=ctx.resume_plan.resume_from_iteration, + ) + if saved_state is None: + return fresh_state + + try: + self.rng.setstate(saved_state["rng_state"]) + except Exception: + logging.exception("Failed to restore RNG state from saved iteration; restarting from scratch.") + return fresh_state + + self._prune_iteration_artifacts( + tmp_folders=ctx.tmp_folders, + keep_up_to_iteration=ctx.resume_plan.resume_from_iteration, + ) + congestion_state = self._load_congestion_state( + ctx=ctx, + last_completed_iteration=ctx.resume_plan.resume_from_iteration, + ) + return _ResumeState( + current_states=saved_state["current_states"], + remaining_sinks=saved_state["remaining_sinks"], + congestion_state=congestion_state, + start_iteration=ctx.resume_plan.start_iteration, + restored=True, + ) + + + def _build_fresh_resume_state( + self, + *, + stay_home_state: pl.DataFrame, + sinks: pl.DataFrame, + ) -> _ResumeState: + """Build the clean initial state used when no saved iteration can be restored.""" + current_states = ( + stay_home_state + .select(["demand_group_id", "iteration", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) + .clone() + ) + return _ResumeState( + current_states=current_states, + remaining_sinks=sinks.clone(), + congestion_state=None, + start_iteration=1, + restored=False, + ) + + + def _load_saved_iteration_state( + self, + *, + ctx: _RunContext, + iteration: int, + ) -> dict[str, object] | None: + """Load the saved run state for one completed iteration.""" + try: + paths = self._get_iteration_state_paths(ctx=ctx, iteration=iteration) + with open(paths["rng_state"], "rb") as file: + rng_state = pickle.load(file) + return { + "current_states": pl.read_parquet(paths["current_states"]), + "remaining_sinks": pl.read_parquet(paths["remaining_sinks"]), + "rng_state": rng_state, + } + except Exception: + logging.exception( + "Failed to load saved iteration state (run_key=%s, is_weekday=%s, iteration=%s).", + ctx.run_key, + str(ctx.is_weekday), + str(iteration), + ) + return None + + + def _load_congestion_state( + self, + *, + ctx: _RunContext, + last_completed_iteration: int, + ) -> CongestionState | None: + """Load the congestion state active after the last completed iteration.""" + if ctx.parameters.n_iter_per_cost_update <= 0 or last_completed_iteration < 1: + return None + + last_update_iteration = ( + 1 + ((last_completed_iteration - 1) // ctx.parameters.n_iter_per_cost_update) * ctx.parameters.n_iter_per_cost_update + ) + if last_update_iteration < 1: + return None + + try: + flow_assets_by_mode = {} + empty_flows = pd.DataFrame({"from": [], "to": [], "vehicle_volume": []}) + + for mode in ctx.costs_aggregator.iter_congestion_enabled_modes(): + mode_name = mode.inputs["parameters"].name + flow_asset = VehicleODFlowsAsset( + vehicle_od_flows=empty_flows, + run_key=ctx.run_key, + is_weekday=ctx.is_weekday, + iteration=last_update_iteration, + mode_name=mode_name, + ) + flow_asset.get() + flow_assets_by_mode[mode_name] = flow_asset + + if not flow_assets_by_mode: + return None + + return CongestionState( + run_key=ctx.run_key, + is_weekday=ctx.is_weekday, + iteration=last_update_iteration, + flow_assets_by_mode=flow_assets_by_mode, + ) + except Exception: + logging.exception("Failed to load congestion state on resume; falling back to free-flow costs until next update.") + return None + + + def _run_iteration(self, ctx: _RunContext, state: _RunState, iteration: int) -> None: + """Execute one simulation iteration and update the mutable run state.""" + logging.info("Iteration %s", str(iteration)) + seed = self.rng.getrandbits(64) + + self._sample_and_write_destination_sequences(ctx, state, iteration, seed) + self._search_and_write_mode_sequences(ctx, state, iteration) + transition_events = self._update_iteration_state(ctx, state, iteration) + self._write_transition_events(ctx, iteration, transition_events) + + + def _sample_and_write_destination_sequences( + self, + ctx: _RunContext, + state: _RunState, + iteration: int, + seed: int, + ) -> None: + """Run destination sampling and persist destination sequences for one iteration.""" + ( + self.destination_sequence_sampler.sample( + ctx.motives, + ctx.population.transport_zones, + state.remaining_sinks, + iteration, + state.chains_by_motive, + state.demand_groups, + state.costs, + ctx.tmp_folders, + ctx.parameters, + seed, + ) + .write_parquet(ctx.tmp_folders["destination-sequences"] / f"destination_sequences_{iteration}.parquet") + ) + + + def _search_and_write_mode_sequences(self, ctx: _RunContext, state: _RunState, iteration: int) -> None: + """Run mode-sequence search and persist the results for one iteration.""" + ( + self.mode_sequence_searcher.search( + iteration, + ctx.costs_aggregator, + ctx.tmp_folders, + ctx.parameters, + congestion_state=state.congestion_state, + ) + .write_parquet(ctx.tmp_folders["modes"] / f"mode_sequences_{iteration}.parquet") + ) + + + def _update_iteration_state(self, ctx: _RunContext, state: _RunState, iteration: int) -> pl.DataFrame: + """Advance the simulation state by one iteration and return transition events.""" + state.current_states, state.current_states_steps, transition_events = self.state_updater.get_new_states( + state.current_states, + state.demand_groups, + state.chains_by_motive, + ctx.costs_aggregator, + state.congestion_state, + state.remaining_sinks, + state.motive_dur, + iteration, + ctx.tmp_folders, + state.home_night_dur, + state.stay_home_state, + ctx.parameters, + ctx.motives, + ) + state.costs, state.congestion_state = self.state_updater.get_new_costs( + state.costs, + iteration, + ctx.parameters.n_iter_per_cost_update, + state.current_states_steps, + ctx.costs_aggregator, + congestion_state=state.congestion_state, + run_key=ctx.run_key, + is_weekday=ctx.is_weekday, + ) + state.remaining_sinks = self.state_updater.get_new_sinks( + state.current_states_steps, + state.sinks, + ctx.motives, + ) + return transition_events + + + def _write_transition_events(self, ctx: _RunContext, iteration: int, transition_events: pl.DataFrame) -> None: + """Persist transition events produced for one iteration.""" + transition_events.write_parquet( + ctx.tmp_folders["transitions"] / f"transition_events_{iteration}.parquet" + ) + + + def _save_iteration_state(self, ctx: _RunContext, state: _RunState, iteration: int) -> None: + """Save the run state after one completed iteration.""" + try: + paths = self._get_iteration_state_paths(ctx=ctx, iteration=iteration) + self._write_dataframe_file(paths["current_states"], state.current_states) + self._write_dataframe_file(paths["remaining_sinks"], state.remaining_sinks) + self._write_pickle_file(paths["rng_state"], self.rng.getstate()) + self._write_json_file( + paths["completion"], + { + "run_key": ctx.run_key, + "is_weekday": ctx.is_weekday, + "iteration": iteration, + }, + ) + except Exception: + logging.exception("Failed to save iteration state for iteration %s.", str(iteration)) + + + def _get_iteration_state_paths(self, *, ctx: _RunContext, iteration: int) -> dict[str, pathlib.Path]: + """Return the file paths used to save the run state after one iteration.""" + folder = ctx.tmp_folders["iteration-state"] + return { + "current_states": folder / f"current_states_{iteration}.parquet", + "remaining_sinks": folder / f"remaining_sinks_{iteration}.parquet", + "rng_state": folder / f"rng_state_{iteration}.pkl", + "completion": folder / f"iteration_state_{iteration}.json", + } + + + def _write_dataframe_file(self, final_path: pathlib.Path, dataframe: pl.DataFrame) -> None: + """Write a dataframe through a temporary file, then replace the target.""" + temp_path = pathlib.Path(str(final_path) + ".tmp") + dataframe.write_parquet(temp_path) + os.replace(temp_path, final_path) + + + def _write_pickle_file(self, final_path: pathlib.Path, value: Any) -> None: + """Write a Python object through a temporary file, then replace the target.""" + temp_path = pathlib.Path(str(final_path) + ".tmp") + with open(temp_path, "wb") as file: + file.write(pickle.dumps(value, protocol=pickle.HIGHEST_PROTOCOL)) + os.replace(temp_path, final_path) + + + def _write_json_file(self, final_path: pathlib.Path, value: dict[str, Any]) -> None: + """Write JSON through a temporary file, then replace the target.""" + temp_path = pathlib.Path(str(final_path) + ".tmp") + with open(temp_path, "w", encoding="utf-8") as file: + json.dump(value, file, sort_keys=True) + os.replace(temp_path, final_path) + + + def _prune_iteration_artifacts( + self, + *, + tmp_folders: dict[str, pathlib.Path], + keep_up_to_iteration: int, + ) -> None: + """Delete per-iteration artifacts beyond the last completed iteration.""" + try: + self._prune_iteration_files( + tmp_folders["destination-sequences"], + "destination_sequences_*.parquet", + keep_up_to_iteration, + ) + self._prune_iteration_files( + tmp_folders["modes"], + "mode_sequences_*.parquet", + keep_up_to_iteration, + ) + self._prune_iteration_files( + tmp_folders["transitions"], + "transition_events_*.parquet", + keep_up_to_iteration, + ) + self._prune_iteration_files( + tmp_folders["iteration-state"], + "current_states_*.parquet", + keep_up_to_iteration, + ) + self._prune_iteration_files( + tmp_folders["iteration-state"], + "remaining_sinks_*.parquet", + keep_up_to_iteration, + ) + self._prune_iteration_files( + tmp_folders["iteration-state"], + "rng_state_*.pkl", + keep_up_to_iteration, + ) + self._prune_iteration_files( + tmp_folders["iteration-state"], + "iteration_state_*.json", + keep_up_to_iteration, + ) + except Exception: + logging.exception("Failed to prune iteration artifacts on resume. Continuing anyway.") + + + def _prune_iteration_files( + self, + folder: pathlib.Path, + pattern: str, + keep_up_to_iteration: int, + ) -> None: + """Delete files matching one iteration pattern beyond the keep boundary.""" + for path in folder.glob(pattern): + match = re.search(r"(\d+)(?=\.[^.]+$)", path.name) + if match is None: + continue + iteration = int(match.group(1)) + if iteration > keep_up_to_iteration: + path.unlink(missing_ok=True) + + + def _materialize_current_states_steps_if_missing(self, ctx: _RunContext, state: _RunState) -> None: + """Materialize per-step state rows when no iteration produced them.""" + if state.current_states_steps is not None: + return + + possible_states_steps = self.state_updater.get_possible_states_steps( + state.current_states, + state.demand_groups, + state.chains_by_motive, + ctx.costs_aggregator, + state.congestion_state, + state.remaining_sinks, + state.motive_dur, + ctx.parameters.n_iterations, + ctx.motives, + ctx.parameters.min_activity_time_constant, + ctx.tmp_folders, + ) + state.current_states_steps = self.state_updater.get_current_states_steps( + state.current_states, + possible_states_steps, + ) + + + def _build_final_costs(self, ctx: _RunContext, state: _RunState) -> pl.DataFrame: + """Compute the final OD costs to attach to the written outputs.""" + return ctx.costs_aggregator.get_costs_by_od_and_mode( + ["cost", "distance", "time", "ghg_emissions"], + congestion=(state.congestion_state is not None), + congestion_state=state.congestion_state, + ) + + + def _build_final_flows(self, ctx: _RunContext, state: _RunState, costs: pl.DataFrame) -> pl.DataFrame: + """Join final per-step states with demand-group attributes and costs.""" + return ( + state.current_states_steps + .join( + state.demand_groups.select(["demand_group_id", "home_zone_id", "csp", "n_cars"]), + on=["demand_group_id"], + ) + .drop("demand_group_id") + .join( + costs, + on=["from", "to", "mode"], + how="left", + ) + .with_columns( + is_weekday=pl.lit(ctx.is_weekday), + ) + ) + + + def _build_transitions(self, ctx: _RunContext) -> pl.DataFrame: + """Combine persisted per-iteration transition events into the final table.""" + transition_paths = sorted(ctx.tmp_folders["transitions"].glob("transition_events_*.parquet")) + if not transition_paths: + return self._empty_transition_events() + + return pl.concat([pl.read_parquet(path) for path in transition_paths], how="vertical") + + + def _empty_transition_events(self) -> pl.DataFrame: + """Return an empty transition-events frame with the expected schema.""" + return pl.DataFrame(schema=TRANSITION_EVENT_SCHEMA) + + + def _write_outputs( + self, + *, + flows: pl.DataFrame, + sinks: pl.DataFrame, + costs: pl.DataFrame, + chains: pl.DataFrame, + transitions: pl.DataFrame, + demand_groups: pl.DataFrame, + ) -> None: + """Write the final run artifacts to their parquet cache paths.""" + flows.write_parquet(self.cache_path["flows"]) + sinks.write_parquet(self.cache_path["sinks"]) + costs.write_parquet(self.cache_path["costs"]) + chains.write_parquet(self.cache_path["chains"]) + transitions.write_parquet(self.cache_path["transitions"]) + demand_groups.write_parquet(self.cache_path["demand_groups"]) + + + def get_cached_asset(self) -> dict[str, pl.LazyFrame]: + """Return lazy readers for this run's cached parquet outputs.""" + return {key: pl.scan_parquet(path) for key, path in self.cache_path.items()} + + + def results(self) -> PopulationTripsRunResults: + """Return the analysis helper bound to this run's cached outputs.""" + self.get() + cached = self.get_cached_asset() + + return PopulationTripsRunResults( + inputs_hash=self.inputs_hash, + is_weekday=self.inputs["is_weekday"], + transport_zones=self.inputs["population"].inputs["transport_zones"], + demand_groups=cached["demand_groups"], + states_steps=cached["flows"], + sinks=cached["sinks"], + costs=cached["costs"], + chains=cached["chains"], + transitions=cached["transitions"], + surveys=self.inputs["surveys"], + modes=self.inputs["modes"], + ) + + + def evaluate(self, metric, **kwargs) -> object: + """Evaluate this run using a named run-level metric.""" + results = self.results() + + if metric not in results.metrics_methods: + available = ", ".join(results.metrics_methods.keys()) + raise ValueError(f"Unknown evaluation metric: {metric}. Available metrics are: {available}") + + return results.metrics_methods[metric](**kwargs) + + + def remove(self, remove_checkpoints: bool = True) -> None: + """Remove cached outputs for this run and its saved iteration state.""" + super().remove() + for path in self._get_tmp_folder_paths( + run_key=self.inputs_hash, + base_folder=self.cache_path["flows"].parent, + ).values(): + shutil.rmtree(path, ignore_errors=True) diff --git a/mobility/choice_models/population_trips_run_results.py b/mobility/choice_models/population_trips_run_results.py new file mode 100644 index 00000000..74a2ec68 --- /dev/null +++ b/mobility/choice_models/population_trips_run_results.py @@ -0,0 +1,685 @@ +import json +import logging + +import geopandas as gpd +import matplotlib.pyplot as plt +import numpy as np +import plotly.express as px +import polars as pl + +from typing import Literal + +from mobility.choice_models.evaluation.car_traffic_evaluation import CarTrafficEvaluation +from mobility.choice_models.evaluation.public_transport_network_evaluation import ( + PublicTransportNetworkEvaluation, +) +from mobility.choice_models.evaluation.routing_evaluation import RoutingEvaluation +from mobility.choice_models.evaluation.travel_costs_evaluation import TravelCostsEvaluation +from mobility.choice_models.transition_metrics import state_waterfall as _state_waterfall + + +class PopulationTripsRunResults: + """Run-scoped analysis helper for one `PopulationTripsRun` output set.""" + + def __init__( + self, + *, + inputs_hash, + is_weekday: bool, + transport_zones, + demand_groups, + states_steps, + sinks, + costs, + chains, + transitions, + surveys, + modes, + ): + self.inputs_hash = inputs_hash + self.is_weekday = bool(is_weekday) + self.transport_zones = transport_zones + self.demand_groups = demand_groups + self.states_steps = states_steps + self.sinks = sinks + self.costs = costs + self.chains = chains + self.transitions = transitions + self.surveys = surveys + self.modes = modes + + self.metrics_methods = { + "global_metrics": self.global_metrics, + "metrics_by_variable": self.metrics_by_variable, + "sink_occupation": self.sink_occupation, + "state_waterfall": self.state_waterfall, + "trip_count_by_demand_group": self.trip_count_by_demand_group, + "distance_per_person": self.distance_per_person, + "ghg_per_person": self.ghg_per_person, + "time_per_person": self.time_per_person, + "cost_per_person": self.cost_per_person, + "immobility": self.immobility, + "car_traffic": self.car_traffic, + "travel_costs": self.travel_costs, + "routing": self.routing, + "public_transport_network": self.public_transport_network, + } + + @property + def period(self) -> str: + """Return the string period label expected by plotting methods.""" + return "weekdays" if self.is_weekday else "weekends" + + def global_metrics(self, normalize: bool = True): + """Compute high-level trip, time, and distance metrics for this run.""" + ref_states_steps = ( + self.chains.rename({"travel_time": "time"}) + .with_columns(country=pl.col("country").cast(pl.String())) + ) + + transport_zones_df = ( + pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) + .filter(pl.col("is_inner_zone")) + .lazy() + ) + study_area_df = pl.DataFrame(self.transport_zones.study_area.get().drop("geometry", axis=1)).lazy() + + n_persons = ( + self.demand_groups.rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .join(study_area_df.select(["local_admin_unit_id", "country"]), on=["local_admin_unit_id"]) + .group_by("country") + .agg(pl.col("n_persons").sum()) + .collect(engine="streaming") + ) + + def aggregate(df): + return ( + df.filter(pl.col("motive_seq_id") != 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .join(study_area_df.select(["local_admin_unit_id", "country"]), on=["local_admin_unit_id"]) + .group_by("country") + .agg( + n_trips=pl.col("n_persons").sum(), + time=(pl.col("time") * pl.col("n_persons")).sum(), + distance=(pl.col("distance") * pl.col("n_persons")).sum(), + ) + .unpivot(index="country") + .collect(engine="streaming") + ) + + trip_count = aggregate(self.states_steps) + trip_count_ref = aggregate(ref_states_steps) + + comparison = trip_count.join(trip_count_ref, on=["country", "variable"], suffix="_ref") + + if normalize: + comparison = ( + comparison.join(n_persons, on=["country"]) + .with_columns( + value=pl.col("value") / pl.col("n_persons"), + value_ref=pl.col("value_ref") / pl.col("n_persons"), + ) + ) + + return ( + comparison.with_columns(delta=pl.col("value") - pl.col("value_ref")) + .with_columns(delta_relative=pl.col("delta") / pl.col("value_ref")) + .select(["country", "variable", "value", "value_ref", "delta", "delta_relative"]) + ) + + def metrics_by_variable( + self, + variable: Literal["mode", "motive", "time_bin", "distance_bin"] = None, + normalize: bool = True, + plot: bool = False, + ): + """Compare model outputs and reference chains by one categorical variable.""" + ref_states_steps = ( + self.chains.rename({"travel_time": "time"}) + .with_columns(mode=pl.col("mode").cast(pl.String())) + ) + + transport_zones_df = ( + pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) + .filter(pl.col("is_inner_zone")) + .lazy() + ) + + n_persons = ( + self.demand_groups.rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .collect()["n_persons"] + .sum() + ) + + def aggregate(df): + return ( + df.filter(pl.col("motive_seq_id") != 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .with_columns( + time_bin=(pl.col("time") * 60.0).cut([0.0, 5.0, 10, 20, 30.0, 45.0, 60.0, 1e6], left_closed=True), + distance_bin=pl.col("distance").cut([0.0, 1.0, 5.0, 10.0, 20.0, 40.0, 80.0, 1e6], left_closed=True), + ) + .group_by(variable) + .agg( + n_trips=pl.col("n_persons").sum(), + time=(pl.col("time") * pl.col("n_persons")).sum(), + distance=(pl.col("distance") * pl.col("n_persons")).sum(), + ) + .melt(variable) + .collect(engine="streaming") + ) + + with pl.StringCache(): + trip_count = aggregate(self.states_steps) + trip_count_ref = aggregate(ref_states_steps) + + comparison = trip_count.join( + trip_count_ref, + on=["variable", variable], + suffix="_ref", + how="full", + coalesce=True, + ) + + if normalize: + comparison = comparison.with_columns( + value=pl.col("value") / n_persons, + value_ref=pl.col("value_ref") / n_persons, + ) + + comparison = ( + comparison.with_columns(delta=pl.col("value") - pl.col("value_ref")) + .with_columns(delta_relative=pl.col("delta") / pl.col("value_ref")) + .select(["variable", variable, "value", "value_ref", "delta", "delta_relative"]) + ) + + if plot: + comparison_plot_df = ( + comparison.select(["variable", variable, "value", "value_ref"]) + .melt(["variable", variable], variable_name="value_type") + .sort(variable) + ) + + fig = px.bar( + comparison_plot_df, + x=variable, + y="value", + color="value_type", + facet_col="variable", + barmode="group", + facet_col_spacing=0.05, + ) + fig.update_yaxes(matches=None, showticklabels=True) + fig.show("browser") + + return comparison + + def immobility(self, plot: bool = True): + """Compute immobility by country and socio-professional category.""" + surveys_immobility = [ + pl.DataFrame(s.get()["p_immobility"].reset_index()).with_columns( + country=pl.lit(s.inputs["parameters"].country, pl.String()) + ) + for s in self.surveys + ] + column_name = "immobility_weekday" if self.is_weekday else "immobility_weekend" + surveys_immobility = ( + pl.concat(surveys_immobility) + .with_columns(p_immobility=pl.col(column_name)) + .select(["country", "csp", "p_immobility"]) + ) + + transport_zones_df = ( + pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) + .filter(pl.col("is_inner_zone")) + .lazy() + ) + study_area_df = ( + pl.DataFrame(self.transport_zones.study_area.get().drop("geometry", axis=1)[["local_admin_unit_id", "country"]]).lazy() + ) + + immobility = ( + self.states_steps.filter(pl.col("motive_seq_id") == 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .with_columns(pl.col("csp").cast(pl.String())) + .join( + self.demand_groups.rename({"n_persons": "n_persons_dem_grp", "home_zone_id": "transport_zone_id"}) + .with_columns(pl.col("csp").cast(pl.String())), + on=["transport_zone_id", "csp", "n_cars"], + how="right", + ) + .join(transport_zones_df, on="transport_zone_id") + .join(study_area_df, on="local_admin_unit_id") + .group_by(["country", "csp"]) + .agg( + n_persons_imm=pl.col("n_persons").fill_null(0.0).sum(), + n_persons_dem_grp=pl.col("n_persons_dem_grp").sum(), + ) + .with_columns(p_immobility=pl.col("n_persons_imm") / pl.col("n_persons_dem_grp")) + .join(surveys_immobility.lazy(), on=["country", "csp"], suffix="_ref") + .with_columns(n_persons_imm_ref=pl.col("n_persons_dem_grp") * pl.col("p_immobility_ref")) + .collect(engine="streaming") + ) + + if plot: + immobility_m = ( + immobility.select(["country", "csp", "n_persons_imm", "n_persons_imm_ref"]) + .melt(["country", "csp"], value_name="n_pers_immobility") + .sort("csp") + ) + fig = px.bar( + immobility_m, + x="csp", + y="n_pers_immobility", + color="variable", + barmode="group", + facet_col="country", + ) + fig = fig.update_xaxes(matches=None) + fig.show("browser") + + return immobility + + def sink_occupation(self, plot_motive: str = None, mask_outliers: bool = False): + """Compute sink occupation per zone and motive for this run.""" + transport_zones_df = ( + pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) + .filter(pl.col("is_inner_zone")) + .lazy() + ) + + sink_occupation = ( + self.states_steps.filter(pl.col("motive_seq_id") != 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .group_by(["to", "motive"]) + .agg(pl.col("duration").sum()) + .join(self.sinks.select(["to", "motive", "sink_capacity"]), on=["to", "motive"]) + .with_columns(sink_occupation=pl.col("duration") / pl.col("sink_capacity")) + .rename({"to": "transport_zone_id"}) + .collect(engine="streaming") + ) + + if plot_motive: + tz = self.transport_zones.get().to_crs(4326) + tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") + tz = tz.merge( + sink_occupation.filter(pl.col("motive") == plot_motive).to_pandas(), + on="transport_zone_id", + how="left", + ) + tz["sink_occupation"] = tz["sink_occupation"].fillna(0.0) + if mask_outliers: + tz["sink_occupation"] = self.mask_outliers(tz["sink_occupation"]) + self.plot_map(tz, "sink_occupation", plot_motive) + + return sink_occupation + + def state_waterfall( + self, + quantity: Literal["distance", "utility", "travel_time", "trip_count"], + plot: bool = True, + top_n: int = 5, + demand_group_ids: list[int] | None = None, + ) -> tuple[pl.DataFrame, pl.DataFrame]: + """Run one state-pair waterfall metric for this run.""" + return _state_waterfall( + transitions=self.transitions, + quantity=quantity, + demand_groups=self.demand_groups, + transport_zones=self.transport_zones, + plot=plot, + top_n=top_n, + demand_group_ids=demand_group_ids, + ) + + def trip_count_by_demand_group(self, plot: bool = False, mask_outliers: bool = False): + """Count trips and trips per person by demand group for this run.""" + transport_zones_df = ( + pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) + .filter(pl.col("is_inner_zone")) + .lazy() + ) + + trip_count = ( + self.states_steps.filter(pl.col("motive_seq_id") != 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .group_by(["transport_zone_id", "csp", "n_cars"]) + .agg(n_trips=pl.col("n_persons").sum()) + .join(self.demand_groups.rename({"home_zone_id": "transport_zone_id"}), on=["transport_zone_id", "csp", "n_cars"]) + .with_columns(n_trips_per_person=pl.col("n_trips") / pl.col("n_persons")) + .collect(engine="streaming") + ) + + if plot: + tz = self.transport_zones.get().to_crs(4326) + tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") + tz = tz.merge( + trip_count.group_by(["transport_zone_id"]) + .agg(n_trips_per_person=pl.col("n_trips").sum() / pl.col("n_persons").sum()) + .to_pandas(), + on="transport_zone_id", + how="left", + ) + tz["n_trips_per_person"] = tz["n_trips_per_person"].fillna(0.0) + if mask_outliers: + tz["n_trips_per_person"] = self.mask_outliers(tz["n_trips_per_person"]) + self.plot_map(tz, "n_trips_per_person") + + return trip_count + + def metric_per_person( + self, + metric: str, + plot: bool = False, + mask_outliers: bool = False, + compare_with=None, + plot_delta: bool = False, + ): + """Aggregate a metric and metric-per-person by demand group for this run.""" + transport_zones_df = ( + pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) + .filter(pl.col("is_inner_zone")) + .lazy() + ) + + metric_per_person = metric + "_per_person" + + metric_per_groups_and_transport_zones = ( + self.states_steps.filter(pl.col("motive_seq_id") != 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(self.costs, on=["from", "to", "mode"]) + .group_by(["transport_zone_id", "csp", "n_cars"]) + .agg(metric=(pl.col(metric) * pl.col("n_persons")).sum()) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .join(self.demand_groups.rename({"home_zone_id": "transport_zone_id"}), on=["transport_zone_id", "csp", "n_cars"]) + .with_columns(metric_per_person=pl.col("metric") / pl.col("n_persons")) + .rename({"metric": metric, "metric_per_person": metric_per_person}) + .collect(engine="streaming") + ) + + if compare_with is not None: + try: + compare_with.get() + prefix = "weekday" if self.is_weekday else "weekend" + states_steps_comp = pl.scan_parquet(compare_with.cache_path[f"{prefix}_flows"]) + costs_comp = pl.scan_parquet(compare_with.cache_path[f"{prefix}_costs"]) + except Exception: + raise Exception("The PopulationTrips to compare with did not work. Try to run it alone?") + + metric_comp = metric + "_comp" + metric_per_person_comp = metric + "_per_person_comp" + metric_per_groups_and_transport_zones_comp = ( + states_steps_comp.filter(pl.col("motive_seq_id") != 0) + .rename({"home_zone_id": "transport_zone_id"}) + .join(costs_comp, on=["from", "to", "mode"]) + .group_by(["transport_zone_id", "csp", "n_cars"]) + .agg(metric=(pl.col(metric) * pl.col("n_persons")).sum()) + .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) + .join(self.demand_groups.rename({"home_zone_id": "transport_zone_id"}), on=["transport_zone_id", "csp", "n_cars"]) + .with_columns(metric_per_person=pl.col("metric") / pl.col("n_persons")) + .rename({"metric": metric_comp, "metric_per_person": metric_per_person_comp}) + .collect(engine="streaming") + ) + metric_per_groups_and_transport_zones = ( + metric_per_groups_and_transport_zones.join( + metric_per_groups_and_transport_zones_comp.select( + [ + "transport_zone_id", + "csp", + "n_cars", + "n_persons", + "local_admin_unit_id", + metric_comp, + metric_per_person_comp, + ] + ), + on=["transport_zone_id", "csp", "n_cars"], + ) + .with_columns(delta=pl.col(metric_per_person) - pl.col(metric_per_person_comp)) + ) + + if plot or plot_delta: + tz = self.transport_zones.get().to_crs(4326) + tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") + tz = tz.merge( + metric_per_groups_and_transport_zones.group_by(["transport_zone_id"]) + .agg(metric_per_person=pl.col(metric).sum() / pl.col("n_persons").sum()) + .rename({"metric_per_person": metric_per_person}) + .to_pandas(), + on="transport_zone_id", + how="left", + ) + + if plot_delta: + tz = tz.merge( + metric_per_groups_and_transport_zones.group_by(["transport_zone_id"]) + .agg(metric_per_person_comp=pl.col(metric_comp).sum() / pl.col("n_persons").sum()) + .rename({"metric_per_person_comp": metric_per_person_comp}) + .to_pandas(), + on="transport_zone_id", + how="left", + ) + tz["delta"] = tz[metric_per_person] - tz[metric_per_person_comp] + + if plot: + tz[metric_per_person] = tz[metric_per_person].fillna(0.0) + if mask_outliers: + tz[metric_per_person] = self.mask_outliers(tz[metric_per_person]) + self.plot_map(tz, metric_per_person) + + if plot_delta: + tz["delta"] = tz["delta"].fillna(0.0) + if mask_outliers: + tz["delta"] = self.mask_outliers(tz["delta"]) + self.plot_map(tz, "delta", color_continuous_scale="RdBu_r", color_continuous_midpoint=0) + + return metric_per_groups_and_transport_zones + + def distance_per_person(self, *args, **kwargs): + return self.metric_per_person("distance", *args, **kwargs) + + def ghg_per_person(self, *args, **kwargs): + return self.metric_per_person("ghg_emissions_per_trip", *args, **kwargs) + + def time_per_person(self, *args, **kwargs): + return self.metric_per_person("time", *args, **kwargs) + + def cost_per_person(self, *args, **kwargs): + return self.metric_per_person("cost", *args, **kwargs) + + def plot_map(self, tz, value: str = None, motive: str = None, plot_method: str = "browser", + color_continuous_scale="Viridis", color_continuous_midpoint=None): + """Render a Plotly choropleth for a transport-zone metric.""" + logging.getLogger("kaleido").setLevel(logging.WARNING) + fig = px.choropleth( + tz.drop(columns="geometry"), + geojson=json.loads(tz.to_json()), + locations="transport_zone_id", + featureidkey="properties.transport_zone_id", + color=value, + hover_data=["transport_zone_id", value], + color_continuous_scale=color_continuous_scale, + color_continuous_midpoint=color_continuous_midpoint, + projection="mercator", + title=motive, + subtitle=motive, + ) + fig.update_geos(fitbounds="geojson", visible=False) + fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) + fig.show(plot_method) + + def plot_modal_share(self, zone="origin", mode="car", labels=None, labels_size=[10, 6, 4], labels_color="black"): + """Plot modal share for a selected mode by origin or destination zone.""" + logging.info(f"Plotting {mode} modal share for {zone} zones during {self.period}") + population_df = self.states_steps.collect().to_pandas() + + left_column = "from" if zone == "origin" else "to" + mode_share = population_df.groupby([left_column, "mode"]).sum("n_persons") + mode_share = mode_share.reset_index().set_index([left_column]) + mode_share["total"] = mode_share.groupby([left_column])["n_persons"].sum() + mode_share["modal_share"] = mode_share["n_persons"] / mode_share["total"] + + if mode == "public_transport": + mode_name = "Public transport" + mode_share["mode"] = mode_share["mode"].replace(r"\S+/public_transport/\S+", "public_transport", regex=True) + else: + mode_name = mode.capitalize() + mode_share = mode_share[mode_share["mode"] == mode] + + transport_zones_df = self.transport_zones.get() + gc = gpd.GeoDataFrame( + transport_zones_df.merge(mode_share, how="left", right_on=left_column, left_on="transport_zone_id", suffixes=('', '_z')) + ).fillna(0) + gcp = gc.plot("modal_share", legend=True) + gcp.set_axis_off() + plt.title(f"{mode_name} share per {zone} transport zone ({self.period})") + + if isinstance(labels, gpd.GeoDataFrame): + self._show_labels(labels, labels_size, labels_color) + + plt.show() + return mode_share + + def plot_od_flows( + self, + mode="all", + motive="all", + level_of_detail=1, + n_largest=2000, + color="blue", + transparency=0.2, + zones_color="xkcd:light grey", + labels=None, + labels_size=[10, 6, 4], + labels_color="black", + ): + """Plot OD flows for a selected mode and this run's period.""" + if level_of_detail == 0: + logging.info("OD between communes not implemented yet") + return NotImplemented + if level_of_detail != 1: + logging.info("Level of detail should be 0 or 1") + return NotImplemented + + logging.info(f"Plotting {mode} origin-destination flows during {self.period}") + if motive != "all": + logging.info("Speficic motives not implemented yet") + return NotImplemented + + population_df = self.states_steps.collect().to_pandas() + mode_name = mode.capitalize() + + if mode != "all": + if mode == "count": + population_df["mode"] = population_df["mode"].fillna("unknown_mode") + count_modes = population_df.groupby("mode")[["mode"]].count() + print(count_modes) + return count_modes + if mode == "public_transport": + mode_name = "Public transport" + population_df = population_df[population_df["mode"].fillna("unknown_mode").str.contains("public_transport")] + else: + population_df = population_df[population_df["mode"] == mode] + + biggest_flows = population_df.groupby(["from", "to"]).sum("n_persons").reset_index() + biggest_flows = biggest_flows.where(biggest_flows["from"] != biggest_flows["to"]).nlargest(n_largest, "n_persons") + transport_zones_df = self.transport_zones.get() + biggest_flows = biggest_flows.merge( + transport_zones_df, left_on="from", right_on="transport_zone_id", suffixes=('', '_from') + ) + biggest_flows = biggest_flows.merge( + transport_zones_df, left_on="to", right_on="transport_zone_id", suffixes=('', '_to') + ) + + gc = gpd.GeoDataFrame(transport_zones_df) + gcp = gc.plot(color=zones_color) + gcp.set_axis_off() + + x_min = float(biggest_flows[["x"]].min().iloc[0]) + y_min = float(biggest_flows[["y"]].min().iloc[0]) + plt.plot([x_min, x_min + 4000], [y_min, y_min], linewidth=2, color=color) + plt.text(x_min + 6000, y_min - 1000, "1 000", color=color) + plt.title(f"{mode_name} flows between transport zones on {self.period}") + + for _, row in biggest_flows.iterrows(): + plt.plot( + [row["x"], row["x_to"]], + [row["y"], row["y_to"]], + linewidth=row["n_persons"] / 500, + color=color, + alpha=transparency, + ) + + if isinstance(labels, gpd.GeoDataFrame): + self._show_labels(labels, labels_size, labels_color) + + plt.show() + return biggest_flows + + def get_prominent_cities(self, n_cities=20, n_levels=3, distance_km=2): + """Get the most prominent cities for labeling maps.""" + population_df = self.states_steps.collect().to_pandas() + study_area_df = self.transport_zones.study_area.get() + tzdf = self.transport_zones.get() + + flows_per_commune = population_df.merge(tzdf, left_on="from", right_on="transport_zone_id") + flows_per_commune = flows_per_commune.groupby("local_admin_unit_id")["n_persons"].sum().reset_index() + flows_per_commune = flows_per_commune.merge(study_area_df) + flows_per_commune = flows_per_commune.sort_values(by="n_persons", ascending=False).head(n_cities * 2).reset_index() + flows_per_commune.loc[0, "prominence"] = 1 + flows_per_commune.loc[1 : n_cities // 2, "prominence"] = 2 + flows_per_commune.loc[n_cities // 2 + 1 : n_cities, "prominence"] = 3 + flows_per_commune.loc[n_cities + 1 : n_cities * 2, "prominence"] = 3 + + geoflows = gpd.GeoDataFrame(flows_per_commune) + + for i in range(n_cities // 2): + coords = flows_per_commune.loc[i, "geometry"] + geoflows["dists"] = geoflows["geometry"].distance(coords) + geoflows.loc[ + ((geoflows["dists"] < distance_km * 1000) & (geoflows.index > i)), "prominence" + ] = geoflows["prominence"] + 2 + geoflows = geoflows.sort_values(by="prominence").reset_index(drop=True) + + geoflows = geoflows[geoflows["prominence"] <= n_levels] + xy_coords = geoflows["geometry"].centroid.get_coordinates() + return geoflows.merge(xy_coords, left_index=True, right_index=True) + + @staticmethod + def _show_labels(labels, size, color): + """Annotate a matplotlib axes with place labels.""" + for _, row in labels.iterrows(): + if row["prominence"] == 1: + plt.annotate(row["local_admin_unit_name"], (row["x"], row["y"]), size=size[0], ha="center", va="center", color=color) + elif row["prominence"] < 3: + plt.annotate(row["local_admin_unit_name"], (row["x"], row["y"]), size=size[1], ha="center", va="center", color=color) + else: + plt.annotate(row["local_admin_unit_name"], (row["x"], row["y"]), size=size[2], ha="center", va="center", color=color) + + def mask_outliers(self, series): + """Mask outliers in a numeric pandas/Series-like array.""" + s = series.copy() + q25 = s.quantile(0.25) + q75 = s.quantile(0.75) + iqr = q75 - q25 + lower, upper = q25 - 1.5 * iqr, q75 + 1.5 * iqr + return s.mask((s < lower) | (s > upper), np.nan) + + def car_traffic(self, *args, **kwargs): + return CarTrafficEvaluation(self).get(*args, **kwargs) + + def travel_costs(self, *args, **kwargs): + return TravelCostsEvaluation(self).get(*args, **kwargs) + + def routing(self, *args, **kwargs): + return RoutingEvaluation(self).get(*args, **kwargs) + + def public_transport_network(self, *args, **kwargs): + return PublicTransportNetworkEvaluation(self).get(*args, **kwargs) diff --git a/mobility/choice_models/results.py b/mobility/choice_models/results.py deleted file mode 100644 index f0186e01..00000000 --- a/mobility/choice_models/results.py +++ /dev/null @@ -1,942 +0,0 @@ -import json -import logging -import numpy as np -import polars as pl -import plotly.express as px - -from typing import Literal -from mobility.choice_models.evaluation.travel_costs_evaluation import TravelCostsEvaluation -from mobility.choice_models.evaluation.car_traffic_evaluation import CarTrafficEvaluation -from mobility.choice_models.evaluation.routing_evaluation import RoutingEvaluation -from mobility.choice_models.evaluation.public_transport_network_evaluation import PublicTransportNetworkEvaluation -from mobility.choice_models.transition_metrics import state_waterfall as _state_waterfall - -class Results: - - def __init__( - self, - transport_zones, - demand_groups, - weekday_states_steps, - weekend_states_steps, - weekday_sinks, - weekend_sinks, - weekday_costs, - weekend_costs, - weekday_chains, - weekend_chains, - weekday_transitions, - weekend_transitions, - surveys, - modes - ): - - self.transport_zones = transport_zones - self.demand_groups = demand_groups - - self.weekday_states_steps = weekday_states_steps - self.weekend_states_steps = weekend_states_steps - - self.weekday_sinks = weekday_sinks - self.weekend_sinks = weekend_sinks - - self.weekday_costs = weekday_costs - self.weekend_costs = weekend_costs - - self.weekday_chains = weekday_chains - self.weekend_chains = weekend_chains - - self.weekday_transitions = weekday_transitions - self.weekend_transitions = weekend_transitions - - self.surveys = surveys - self.modes = modes - - self.metrics_methods = { - "global_metrics": self.global_metrics, - "metrics_by_variable": self.metrics_by_variable, - "sink_occupation": self.sink_occupation, - "state_waterfall": self.state_waterfall, - "trip_count_by_demand_group": self.trip_count_by_demand_group, - "distance_per_person": self.distance_per_person, - "ghg_per_person": self.ghg_per_person, - "time_per_person": self.time_per_person, - "cost_per_person": self.cost_per_person, - "immobility": self.immobility, - "car_traffic": self.car_traffic, - "travel_costs": self.travel_costs, - "routing": self.routing, - "public_transport_network": self.public_transport_network - } - - - - def global_metrics( - self, - weekday: bool = True, - normalize: bool = True - ): - - states_steps = self.weekday_states_steps if weekday else self.weekend_states_steps - - ref_states_steps = self.weekday_chains if weekday else self.weekend_chains - - # Align column names and formats (should be done upstream when the data is created) - ref_states_steps = ( - ref_states_steps - .rename({"travel_time": "time"}) - .with_columns( - country=pl.col("country").cast(pl.String()) - ) - ) - - transport_zones_df = ( - pl.DataFrame( - self.transport_zones.get().drop("geometry", axis=1) - ) - .filter(pl.col("is_inner_zone")) - .lazy() - ) - - study_area_df = pl.DataFrame(self.transport_zones.study_area.get().drop("geometry", axis=1)).lazy() - - n_persons = ( - self.demand_groups - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .join( - study_area_df.select(["local_admin_unit_id", "country"]), - on=["local_admin_unit_id"] - ) - .group_by("country") - .agg( - pl.col("n_persons").sum() - ) - .collect(engine="streaming") - ) - - def aggregate(df, transport_zones_df, study_area_df): - - result = ( - df - .filter(pl.col("motive_seq_id") != 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .join( - study_area_df.select(["local_admin_unit_id", "country"]), - on=["local_admin_unit_id"] - ) - .group_by("country") - .agg( - n_trips=pl.col("n_persons").sum(), - time=(pl.col("time")*pl.col("n_persons")).sum(), - distance=(pl.col("distance")*pl.col("n_persons")).sum() - ) - .unpivot(index="country") - .collect(engine="streaming") - ) - - return result - - trip_count = aggregate(states_steps, transport_zones_df, study_area_df) - trip_count_ref = aggregate(ref_states_steps, transport_zones_df, study_area_df) - - comparison = ( - trip_count - .join( - trip_count_ref, - on=["country", "variable"], - suffix="_ref" - ) - ) - - if normalize: - comparison = ( - comparison - .join(n_persons, on=["country"]) - .with_columns( - value=pl.col("value")/pl.col("n_persons"), - value_ref=pl.col("value_ref")/pl.col("n_persons") - ) - ) - - comparison = ( - comparison - .with_columns( - delta=pl.col("value") - pl.col("value_ref") - ) - .with_columns( - delta_relative=pl.col("delta")/pl.col("value_ref") - ) - .select(["country", "variable", "value", "value_ref", "delta", "delta_relative"]) - ) - - return comparison - - - - def metrics_by_variable( - self, - variable: Literal["mode", "motive", "time_bin", "distance_bin"] = None, - weekday: bool = True, - normalize: bool = True, - plot: bool = False - ): - - states_steps = self.weekday_states_steps if weekday else self.weekend_states_steps - ref_states_steps = self.weekday_chains if weekday else self.weekend_chains - - ref_states_steps = ( - ref_states_steps - .rename({"travel_time": "time"}) - .with_columns( - mode=pl.col("mode").cast(pl.String()) - ) - ) - - transport_zones_df = ( - pl.DataFrame( - self.transport_zones.get().drop("geometry", axis=1) - ) - .filter(pl.col("is_inner_zone")) - .lazy() - ) - - n_persons = ( - self.demand_groups - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .collect()["n_persons"].sum() - ) - - def aggregate(df): - - results = ( - df - .filter(pl.col("motive_seq_id") != 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .with_columns( - time_bin=(pl.col("time")*60.0).cut([0.0, 5.0, 10, 20, 30.0, 45.0, 60.0, 1e6], left_closed=True), - distance_bin=pl.col("distance").cut([0.0, 1.0, 5.0, 10.0, 20.0, 40.0, 80.0, 1e6], left_closed=True) - ) - .group_by(variable) - .agg( - n_trips=pl.col("n_persons").sum(), - time=(pl.col("time")*pl.col("n_persons")).sum(), - distance=(pl.col("distance")*pl.col("n_persons")).sum() - ) - .melt(variable) - .collect(engine="streaming") - ) - - return results - - with pl.StringCache(): - - trip_count = aggregate(states_steps) - trip_count_ref = aggregate(ref_states_steps) - - - comparison = ( - trip_count - .join( - trip_count_ref, - on=["variable", variable], - suffix="_ref", - how="full", - coalesce=True - ) - ) - - if normalize: - comparison = ( - comparison - .with_columns( - value=pl.col("value")/n_persons, - value_ref=pl.col("value_ref")/n_persons - ) - ) - - comparison = ( - comparison - .with_columns( - delta=pl.col("value") - pl.col("value_ref") - ) - .with_columns( - delta_relative=pl.col("delta")/pl.col("value_ref") - ) - .select(["variable", variable, "value", "value_ref", "delta", "delta_relative"]) - ) - - if plot: - - comparison_plot_df = ( - comparison - .select(["variable", variable, "value", "value_ref"]) - .melt(["variable", variable], variable_name="value_type") - .sort(variable) - ) - - - fig = px.bar( - comparison_plot_df, - x=variable, - y="value", - color="value_type", - facet_col="variable", - barmode="group", - facet_col_spacing=0.05 - ) - fig.update_yaxes(matches=None, showticklabels=True) - fig.show("browser") - - return comparison - - - - def immobility( - self, - weekday: bool = True, - plot: bool = True - ): - - states_steps = self.weekday_states_steps if weekday else self.weekend_states_steps - - surveys_immobility = [ - ( - pl.DataFrame(s.get()["p_immobility"].reset_index()) - .with_columns( - country=pl.lit(s.inputs["parameters"].country, pl.String()) - ) - ) - for s in self.surveys - ] - surveys_immobility = ( - pl.concat(surveys_immobility) - .with_columns( - p_immobility=( - pl.when(weekday) - .then(pl.col("immobility_weekday")) - .otherwise(pl.col("immobility_weekend")) - ) - ) - .select(["country", "csp", "p_immobility"]) - ) - - - transport_zones_df = ( - pl.DataFrame( - self.transport_zones.get().drop("geometry", axis=1) - ) - .filter(pl.col("is_inner_zone")) - .lazy() - ) - - study_area_df = ( - pl.DataFrame( - self.transport_zones.study_area.get() - .drop("geometry", axis=1) - [["local_admin_unit_id", "country"]] - ).lazy() - ) - - - immobility = ( - - states_steps - .filter(pl.col("motive_seq_id") == 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .with_columns(pl.col("csp").cast(pl.String())) - .join( - ( - self.demand_groups.rename({"n_persons": "n_persons_dem_grp", "home_zone_id": "transport_zone_id"}) - .with_columns(pl.col("csp").cast(pl.String())) - ), - on=["transport_zone_id", "csp", "n_cars"], - how="right" - ) - .join( - transport_zones_df, on="transport_zone_id" - ) - .join( - study_area_df, on="local_admin_unit_id" - ) - .group_by(["country", "csp"]) - .agg( - n_persons_imm=pl.col("n_persons").fill_null(0.0).sum(), - n_persons_dem_grp=pl.col("n_persons_dem_grp").sum() - ) - .with_columns( - p_immobility=pl.col("n_persons_imm")/pl.col("n_persons_dem_grp") - ) - .join( - surveys_immobility.lazy(), - on=["country", "csp"], - suffix="_ref" - ) - .with_columns( - n_persons_imm_ref=pl.col("n_persons_dem_grp")*pl.col("p_immobility_ref") - ) - .collect(engine="streaming") - - ) - - if plot: - - immobility_m = ( - immobility - .select(["country", "csp", "n_persons_imm", "n_persons_imm_ref"]) - .melt(["country", "csp"], value_name="n_pers_immobility") - .sort("csp") - ) - - fig = px.bar( - immobility_m, - x="csp", - y="n_pers_immobility", - color="variable", - barmode="group", - facet_col="country" - ) - fig = fig.update_xaxes(matches=None) - fig.show("browser") - - return immobility - - - def sink_occupation( - self, - weekday: bool = True, - plot_motive: str = None, - mask_outliers: bool = False - ): - """ - Compute sink occupation per (zone, motive), optionally map a single motive. - - Parameters - ---------- - weekday : bool, default True - Use weekday (True) or weekend (False) flows/sinks. - plot_motive : str, optional - If provided, renders a choropleth of occupation for that motive. - - Returns - ------- - pl.DataFrame - Columns: ['transport_zone_id', 'motive', 'duration', 'sink_capacity', 'sink_occupation']. - 'sink_occupation' = total occupied duration / capacity. - """ - - states_steps = self.weekday_states_steps if weekday else self.weekend_states_steps - sinks = self.weekday_sinks if weekday else self.weekend_sinks - - transport_zones_df = ( - pl.DataFrame( - self.transport_zones.get().drop("geometry", axis=1) - ) - .filter(pl.col("is_inner_zone")) - .lazy() - ) - - sink_occupation = ( - states_steps - .filter(pl.col("motive_seq_id") != 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .group_by(["to", "motive"]) - .agg( - pl.col("duration").sum() - ) - .join( - sinks.select(["to", "motive", "sink_capacity"]), - on=["to", "motive"] - ) - .with_columns( - sink_occupation=pl.col("duration")/pl.col("sink_capacity") - ) - .rename({"to": "transport_zone_id"}) - .collect(engine="streaming") - ) - - if plot_motive: - - tz = self.transport_zones.get() - tz = tz.to_crs(4326) - tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") - - tz = tz.merge( - sink_occupation.filter(pl.col("motive") == plot_motive).to_pandas(), - on="transport_zone_id", - how="left" - ) - - tz["sink_occupation"] = tz["sink_occupation"].fillna(0.0) - - if mask_outliers: - tz["sink_occupation"] = self.mask_outliers(tz["sink_occupation"]) - - print("Plot map for", plot_motive) - self.plot_map(tz, "sink_occupation", plot_motive) - - return sink_occupation - - def state_waterfall( - self, - quantity: Literal["distance", "utility", "travel_time", "trip_count"], - weekday: bool = True, - plot: bool = True, - top_n: int = 5, - demand_group_ids: list[int] | None = None, - ) -> tuple[pl.DataFrame, pl.DataFrame]: - """Run one state-pair waterfall metric. - - This is the single public entrypoint for state-waterfall diagnostics. - Use `quantity` to switch the decomposition target. - - Args: - quantity (Literal["distance", "utility", "travel_time", "trip_count"]): - Quantity to decompose in the waterfall. - weekday (bool): Use weekday transitions when True, weekend otherwise. - plot (bool): Whether to render the interactive plot. - top_n (int): Number of largest absolute state-pair deltas per iteration. - demand_group_ids (list[int] | None): Optional demand-group filter. - - Returns: - tuple[pl.DataFrame, pl.DataFrame]: Iteration totals and ranked state-pair deltas. - - Example: - results.state_waterfall( - quantity="distance", - weekday=True, - top_n=5, - ) - """ - transitions = self.weekday_transitions if weekday else self.weekend_transitions - return _state_waterfall( - transitions=transitions, - quantity=quantity, - demand_groups=self.demand_groups, - transport_zones=self.transport_zones, - plot=plot, - top_n=top_n, - demand_group_ids=demand_group_ids, - ) - - def trip_count_by_demand_group( - self, - weekday: bool = True, - plot: bool = False, - mask_outliers: bool = False - ): - """ - Count trips and trips per person by demand group; optional map at home-zone level. - - Parameters - ---------- - weekday : bool, default True - Use weekday (True) or weekend (False) states. - plot : bool, default False - When True, shows a choropleth of average trips per person by home zone. - - Returns - ------- - pl.DataFrame - Grouped by ['home_zone_id', 'csp', 'n_cars'] with: - - n_trips: total trips - - n_persons: group size - - n_trips_per_person: n_trips / n_persons - """ - - states_steps = self.weekday_states_steps if weekday else self.weekend_states_steps - - transport_zones_df = ( - pl.DataFrame( - self.transport_zones.get().drop("geometry", axis=1) - ) - .filter(pl.col("is_inner_zone")) - .lazy() - ) - - trip_count = ( - states_steps - .filter(pl.col("motive_seq_id") != 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .group_by(["transport_zone_id", "csp", "n_cars"]) - .agg( - n_trips=pl.col("n_persons").sum() - ) - .join(self.demand_groups.rename({"home_zone_id": "transport_zone_id"}), on=["transport_zone_id", "csp", "n_cars"]) - .with_columns( - n_trips_per_person=pl.col("n_trips")/pl.col("n_persons") - ) - .collect(engine="streaming") - ) - - if plot: - - tz = self.transport_zones.get() - tz = tz.to_crs(4326) - tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") - - tz = tz.merge( - ( - trip_count - .group_by(["transport_zone_id"]) - .agg( - n_trips_per_person=pl.col("n_trips").sum()/pl.col("n_persons").sum() - ) - .to_pandas() - ), - on="transport_zone_id", - how="left" - ) - - tz["n_trips_per_person"] = tz["n_trips_per_person"].fillna(0.0) - - if mask_outliers: - tz["n_trips_per_person"] = self.mask_outliers(tz["n_trips_per_person"]) - - self.plot_map(tz, "n_trips_per_person") - - return trip_count - - def metric_per_person( - self, - metric: str, - weekday: bool = True, - plot: bool = False, - mask_outliers: bool = False, - compare_with = None, - plot_delta = False - ): - """ - Aggregate total value and value per person by demand group for this metric. - Metric can be : cost, time, distance, ghg - - Parameters - ---------- - metric : str - One of cost, time, distance, ghg - weekday : bool, default True - Use weekday (True) or weekend (False) data. - plot : bool, default False - When True, shows a choropleth of average time per person by home zone. - - Returns - ------- - pl.DataFrame - Grouped by ['home_zone_id', 'csp', 'n_cars'] with: - - metric (column has actually the name of the metric): sum(metric * n_persons) (* 60.0 (minutes) for time) - - n_persons: group size - - metric_per_person: metric / n_persons - """ - - states_steps = self.weekday_states_steps if weekday else self.weekend_states_steps - costs = self.weekday_costs if weekday else self.weekend_costs - - if compare_with is not None: - try: - compare_with.get() - weekday_states_steps_comp = pl.scan_parquet(compare_with.cache_path["weekday_flows"]) - weekend_states_steps_comp = pl.scan_parquet(compare_with.cache_path["weekend_flows"]) - weekday_costs_comp = pl.scan_parquet(compare_with.cache_path["weekday_costs"]) - weekend_costs_comp = pl.scan_parquet(compare_with.cache_path["weekend_costs"]) - states_steps_comp = weekday_states_steps_comp if weekday else weekend_states_steps_comp - costs_comp = weekday_costs_comp if weekday else weekend_costs_comp - except: - Exception("The PopulationsTrips to compare with did not work. Try to run them alone?") - - - transport_zones_df = ( - pl.DataFrame( - self.transport_zones.get().drop("geometry", axis=1) - ) - .filter(pl.col("is_inner_zone")) - .lazy() - ) - - metric_per_person = metric + "_per_person" - - metric_per_groups_and_transport_zones = ( - states_steps - .filter(pl.col("motive_seq_id") != 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join(costs, on=["from", "to", "mode"]) - .group_by(["transport_zone_id", "csp", "n_cars"]) - .agg( - metric=(pl.col(metric)*pl.col("n_persons")).sum() - ) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) .join(self.demand_groups.rename({"home_zone_id": "transport_zone_id"}), on=["transport_zone_id", "csp", "n_cars"]) - .with_columns( - metric_per_person=pl.col("metric")/pl.col("n_persons") - ) - .rename({"metric": metric, "metric_per_person": metric_per_person}) - .collect(engine="streaming") - ) - - if compare_with is not None: - metric_comp = metric + "_comp" - metric_per_person_comp = metric + "_per_person_comp" - metric_per_groups_and_transport_zones_comp = ( - states_steps_comp - .filter(pl.col("motive_seq_id") != 0) - .rename({"home_zone_id": "transport_zone_id"}) - .join(costs_comp, on=["from", "to", "mode"]) - .group_by(["transport_zone_id", "csp", "n_cars"]) - .agg( - metric=(pl.col(metric)*pl.col("n_persons")).sum() - ) - .join( - transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), - on=["transport_zone_id"] - ) - .join(self.demand_groups.rename({"home_zone_id": "transport_zone_id"}), on=["transport_zone_id", "csp", "n_cars"]) - .with_columns( - metric_per_person=pl.col("metric")/pl.col("n_persons") - ) - .rename({"metric": metric_comp, "metric_per_person": metric_per_person_comp}) - .collect(engine="streaming") - ) - metric_per_groups_and_transport_zones = ( - metric_per_groups_and_transport_zones - .join(metric_per_groups_and_transport_zones_comp.select(["transport_zone_id", "csp", "n_cars", "n_persons", "local_admin_unit_id", - metric_comp, metric_per_person_comp]), - on=["transport_zone_id", "csp", "n_cars"]) # Same TZ ids? - .with_columns(delta=pl.col(metric_per_person)-pl.col(metric_per_person_comp)) - ) - - - if plot or plot_delta: - - tz = self.transport_zones.get() - tz = tz.to_crs(4326) - tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") - - tz = tz.merge( - ( - metric_per_groups_and_transport_zones - .group_by(["transport_zone_id"]) - .agg( - metric_per_person=pl.col(metric).sum()/pl.col("n_persons").sum() - ) - .rename({"metric_per_person": metric_per_person}) - .to_pandas() - ), - on="transport_zone_id", - how="left" - ) - - if plot_delta: - tz = tz.merge( - ( - metric_per_groups_and_transport_zones - .group_by(["transport_zone_id"]) - .agg( - metric_per_person_comp=pl.col(metric_comp).sum()/pl.col("n_persons").sum() - # Assumption : always same number of persons in TZ - ) - .rename({"metric_per_person_comp": metric_per_person_comp}) - .to_pandas() - ), - on="transport_zone_id", - how="left" - ) - tz["delta"] = tz[metric_per_person] - tz[metric_per_person_comp] - - - if plot: - tz[metric_per_person] = tz[metric_per_person].fillna(0.0) - - if mask_outliers: - tz[metric_per_person] = self.mask_outliers(tz[metric_per_person]) - - self.plot_map(tz, metric_per_person) - - - if plot_delta: - tz["delta"] = tz["delta"].fillna(0.0) - - if mask_outliers: - tz["delta"] = self.mask_outliers(tz["delta"]) - - self.plot_map(tz, "delta", color_continuous_scale="RdBu_r", color_continuous_midpoint=0) - - - return metric_per_groups_and_transport_zones - - - def distance_per_person(self, *args, **kwargs): - """ - Aggregate total travel distance and distance per person by demand group. - - Parameters - ---------- - weekday : bool, default True - Use weekday (True) or weekend (False) data. - plot : bool, default False - When True, shows a choropleth of average distance per person by home zone. - - Returns - ------- - pl.DataFrame - Grouped by ['home_zone_id', 'csp', 'n_cars'] with: - - distance: sum(distance * n_persons) - - n_persons: group size - - distance_per_person: distance / n_persons - """ - return self.metric_per_person("distance", *args, **kwargs) - - def ghg_per_person(self, *args, **kwargs): - return self.metric_per_person("ghg_emissions_per_trip", *args, **kwargs) - - def time_per_person(self, *args, **kwargs): - """ - Aggregate total travel time and time per person by demand group. - - Parameters - ---------- - weekday : bool, default True - Use weekday (True) or weekend (False) data. - plot : bool, default False - When True, shows a choropleth of average time per person by home zone. - - Returns - ------- - pl.DataFrame - Grouped by ['home_zone_id', 'csp', 'n_cars'] with: - - time: sum(time * n_persons) * 60.0 (minutes) - - n_persons: group size - - time_per_person: time / n_persons - """ - return self.metric_per_person("time", *args, **kwargs) - - - - def cost_per_person(self, *args, **kwargs): - """ - Aggregate total travel cost and cost per person by demand group. - - Parameters - ---------- - weekday : bool, default True - Use weekday (True) or weekend (False) data. - plot : bool, default False - When True, shows a choropleth of average time per person by home zone. - - Returns - ------- - pl.DataFrame - Grouped by ['home_zone_id', 'csp', 'n_cars'] with: - - cost: sum(cost * n_persons) - - n_persons: group size - - time_per_person: cost / n_persons - """ - return self.metric_per_person("cost", *args, **kwargs) - - - - def plot_map(self, tz, value: str = None, motive: str = None, plot_method: str = "browser", - color_continuous_scale="Viridis", color_continuous_midpoint=None): - """ - Render a Plotly choropleth for a transport-zone metric. - - Parameters - ---------- - tz : geopandas.GeoDataFrame - Zones GeoDataFrame in EPSG:4326 with columns: - ['transport_zone_id', value, 'geometry']. - value : str - Column name to color by (e.g., 'sink_occupation'). - - Returns - ------- - None - Displays an interactive map in the browser. - """ - logging.getLogger("kaleido").setLevel(logging.WARNING) - #plot_method="png" - - fig = px.choropleth( - tz.drop(columns="geometry"), - geojson=json.loads(tz.to_json()), - locations="transport_zone_id", - featureidkey="properties.transport_zone_id", - color=value, - hover_data=["transport_zone_id", value], - color_continuous_scale=color_continuous_scale, - color_continuous_midpoint= color_continuous_midpoint, - projection="mercator", - title=motive, - subtitle=motive - ) - fig.update_geos(fitbounds="geojson", visible=False) - fig.update_layout(margin=dict(l=0,r=0,t=0,b=0)) - fig.show(plot_method) - - - def mask_outliers(self, series): - """ - Mask outliers in a numeric pandas/Series-like array. - - Parameters - ---------- - series : array-like - Numeric series to clean. - - Returns - ------- - array-like - Series with outliers replaced by NaN (bounds: Q1 - 1.5*IQR, Q3 + 1.5*IQR). - """ - - s = series.copy() - q25 = s.quantile(0.25) - q75 = s.quantile(0.75) - iqr = q75 - q25 - lower, upper = q25 - 1.5 * iqr, q75 + 1.5 * iqr - - return s.mask((s < lower) | (s > upper), np.nan) - - def car_traffic(self, *args, **kwargs): - return CarTrafficEvaluation(self).get(*args, **kwargs) - - def travel_costs(self, *args, **kwargs): - return TravelCostsEvaluation(self).get(*args, **kwargs) - - def routing(self, *args, **kwargs): - return RoutingEvaluation(self).get(*args, **kwargs) - - def public_transport_network(self, *args, **kwargs): - return PublicTransportNetworkEvaluation(self).get(*args, **kwargs) - - - - - diff --git a/mobility/choice_models/state_updater.py b/mobility/choice_models/state_updater.py index fcd30ab4..1c60cdcb 100644 --- a/mobility/choice_models/state_updater.py +++ b/mobility/choice_models/state_updater.py @@ -20,6 +20,7 @@ def get_new_states( demand_groups: pl.DataFrame, chains: pl.DataFrame, costs_aggregator: Any, + congestion_state: Any, remaining_sinks: pl.DataFrame, motive_dur: pl.DataFrame, iteration: int, @@ -45,7 +46,7 @@ def get_new_states( capacity and saturation utility penalty. motive_dur (pl.DataFrame): Mean activity durations by (csp,motive). iteration (int): Current iteration (1-based). - tmp_folders (dict[str, pathlib.Path]): Paths to “spatialized-chains” and “modes”. + tmp_folders (dict[str, pathlib.Path]): Paths to “destination-sequences” and “modes”. home_night_dur (pl.DataFrame): Mean remaining home-night duration by csp. stay_home_state (pl.DataFrame): Baseline “stay-home” state rows. parameters (PopulationTripsParameters): Coefficients and tunables. @@ -60,6 +61,7 @@ def get_new_states( demand_groups, chains, costs_aggregator, + congestion_state, remaining_sinks, motive_dur, iteration, @@ -139,6 +141,7 @@ def get_possible_states_steps( demand_groups, chains, costs_aggregator, + congestion_state, sinks, motive_dur, iteration, @@ -161,7 +164,7 @@ def get_possible_states_steps( motive_dur (pl.DataFrame): Mean durations per (csp,motive). iteration (int): Current iteration to pick latest artifacts. activity_utility_coeff (float): Coefficient for activity utility. - tmp_folders (dict[str, pathlib.Path]): Must contain "spatialized-chains" and "modes". + tmp_folders (dict[str, pathlib.Path]): Must contain "destination-sequences" and "modes". Returns: pl.DataFrame: Candidate per-step rows with columns including @@ -174,8 +177,9 @@ def get_possible_states_steps( cost_by_od_and_modes = ( costs_aggregator.get_costs_by_od_and_mode( ["cost", "distance", "time"], - congestion=True, - detail_distances=False + congestion=(congestion_state is not None), + detail_distances=False, + congestion_state=congestion_state, ) ) @@ -188,7 +192,7 @@ def get_possible_states_steps( # Keep only the last occurrence of any motive - destination sequence # (the sampler might generate the same sequence twice) spat_chains = ( - pl.scan_parquet(tmp_folders['spatialized-chains']) + pl.scan_parquet(tmp_folders['destination-sequences']) .sort("iteration", descending=True) .unique( subset=["demand_group_id", "motive_seq_id", "dest_seq_id", "seq_step_index"], @@ -747,44 +751,59 @@ def get_current_states_steps(self, current_states, possible_states_steps): - def get_new_costs(self, costs, iteration, n_iter_per_cost_update, current_states_steps, costs_aggregator, run_key=None): - """Optionally recompute congested costs from current flows. + def get_new_costs( + self, + costs, + iteration, + n_iter_per_cost_update, + current_states_steps, + costs_aggregator, + congestion_state=None, + run_key=None, + is_weekday=None, + ): + """Return the OD costs to use after the current iteration. + + This method aggregates step-level flows by OD and mode, then delegates + the congestion update decision to ``costs_aggregator``. When congestion + updates are disabled, it returns the input ``costs`` unchanged. - Aggregates OD flows by mode, updates network/user-equilibrium in the - `costs_aggregator`, and returns refreshed costs when the cadence matches. - Args: costs (pl.DataFrame): Current OD costs. - iteration (int): Current iteration (1-based). - n_iter_per_cost_update (int): Update cadence; 0 disables updates. - current_states_steps (pl.DataFrame): Step-level flows (by mode). - costs_aggregator (TravelCostsAggregator): Cost updater. - + iteration (int): Current iteration, using 1-based indexing. + n_iter_per_cost_update (int): Number of iterations between cost + updates. Zero disables congestion updates. + current_states_steps (pl.DataFrame): Step-level flows by mode. + costs_aggregator (TravelCostsAggregator): Aggregator responsible for + updating and returning the current cost view. + run_key (str | None): Optional run identifier used to isolate + per-run congestion snapshots. + Returns: - pl.DataFrame: Updated OD costs (or original if no update ran). + tuple[pl.DataFrame, Any]: The OD costs to use after the current + iteration, and the explicit congestion state that produced them. """ - if n_iter_per_cost_update > 0 and (iteration-1) % n_iter_per_cost_update == 0: - - logging.info("Updating costs...") - - od_flows_by_mode = ( - current_states_steps - .filter(pl.col("motive_seq_id") != 0) - .group_by(["from", "to", "mode"]) - .agg( - flow_volume=pl.col("n_persons").sum() - ) - ) - - has_congestion = any(getattr(m, "congestion", False) for m in costs_aggregator.modes) + if n_iter_per_cost_update <= 0: + return costs, congestion_state - # Only build/update congestion snapshots when at least one mode handles congestion. - if has_congestion: - costs_aggregator.update(od_flows_by_mode, run_key=run_key, iteration=iteration) - costs = costs_aggregator.get(congestion=True) + od_flows_by_mode = ( + current_states_steps + .filter(pl.col("motive_seq_id") != 0) + .group_by(["from", "to", "mode"]) + .agg( + flow_volume=pl.col("n_persons").sum() + ) + ) - return costs + return costs_aggregator.get_costs_for_next_iteration( + iteration=iteration, + cost_update_interval=n_iter_per_cost_update, + od_flows_by_mode=od_flows_by_mode, + congestion_state=congestion_state, + run_key=run_key, + is_weekday=is_weekday, + ) def get_new_sinks( diff --git a/mobility/choice_models/top_k_mode_sequence_search.py b/mobility/choice_models/top_k_mode_sequence_search.py index 2fb76a46..55d91e16 100644 --- a/mobility/choice_models/top_k_mode_sequence_search.py +++ b/mobility/choice_models/top_k_mode_sequence_search.py @@ -15,7 +15,7 @@ from mobility.transport_modes.compute_subtour_mode_probabilities import compute_subtour_mode_probabilities_serial, modes_list_to_dict from mobility.choice_models.add_index import add_index -class TopKModeSequenceSearch: +class ModeSequenceSearcher: """Finds top-k mode sequences for spatialized trip chains. Prepares per-iteration inputs (costs, allowed leg modes, location chains), @@ -23,7 +23,7 @@ class TopKModeSequenceSearch: into per-chain mode sequences with a compact index. """ - def run(self, iteration, costs_aggregator, tmp_folders, parameters): + def search(self, iteration, costs_aggregator, tmp_folders, parameters, congestion_state=None) -> pl.DataFrame: """Compute top-k mode sequences for all spatialized chains of an iteration. Builds temporary artifacts (mode props, OD costs, allowed leg modes, @@ -34,7 +34,7 @@ def run(self, iteration, costs_aggregator, tmp_folders, parameters): iteration (int): Iteration number (>=1). costs_aggregator (TravelCostsAggregator): Provides per-mode OD costs. tmp_folders (dict[str, pathlib.Path]): Workspace; must include - "spatialized-chains", "modes", and a parent folder for temp files. + "destination-sequences", "modes", and a parent folder for temp files. parameters (PopulationTripsParameters): Provides k for top-k and other tuning values. @@ -46,13 +46,13 @@ def run(self, iteration, costs_aggregator, tmp_folders, parameters): Notes: - Spawns a subprocess running `compute_subtour_mode_probabilities.py`. - Uses on-disk intermediates (pickle/parquet/json) under the parent of - "spatialized-chains". + "destination-sequences". - Assigns stable small integers to `mode_seq_id` via `add_index`. """ - parent_folder_path = tmp_folders["spatialized-chains"].parent + parent_folder_path = tmp_folders["destination-sequences"].parent - chains_path = tmp_folders["spatialized-chains"] / f"spatialized_chains_{iteration}.parquet" + chains_path = tmp_folders["destination-sequences"] / f"destination_sequences_{iteration}.parquet" tmp_path = parent_folder_path / "tmp_results" shutil.rmtree(tmp_path, ignore_errors=True) @@ -86,8 +86,9 @@ def run(self, iteration, costs_aggregator, tmp_folders, parameters): costs = ( costs_aggregator.get_costs_by_od_and_mode( ["cost"], - congestion=True, - detail_distances=False + congestion=(congestion_state is not None), + detail_distances=False, + congestion_state=congestion_state, ) # Cast costs to ints to avoid float comparison instabilities later .with_columns( @@ -198,4 +199,4 @@ def run(self, iteration, costs_aggregator, tmp_folders, parameters): ) return all_results - \ No newline at end of file + diff --git a/mobility/choice_models/travel_costs_aggregator.py b/mobility/choice_models/travel_costs_aggregator.py index bf5b7217..4383d2de 100644 --- a/mobility/choice_models/travel_costs_aggregator.py +++ b/mobility/choice_models/travel_costs_aggregator.py @@ -1,9 +1,10 @@ -import os import polars as pl import logging from typing import List +from mobility.choice_models.congestion_state import CongestionState from mobility.in_memory_asset import InMemoryAsset +from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset class TravelCostsAggregator(InMemoryAsset): @@ -17,6 +18,7 @@ def get( self, metrics=["cost", "distance"], congestion: bool = False, + congestion_state: CongestionState | None = None, aggregate_by_od: bool = True, detail_distances: bool = False ): @@ -24,16 +26,26 @@ def get( logging.info("Aggregating costs...") if aggregate_by_od is True: - costs = self.get_costs_by_od(metrics, congestion) + costs = self.get_costs_by_od(metrics, congestion, congestion_state=congestion_state) else: - costs = self.get_costs_by_od_and_mode(metrics, congestion, detail_distances) + costs = self.get_costs_by_od_and_mode( + metrics, + congestion, + detail_distances, + congestion_state=congestion_state, + ) return costs - def get_costs_by_od(self, metrics: List, congestion: bool): + def get_costs_by_od(self, metrics: List, congestion: bool, congestion_state: CongestionState | None = None): - costs = self.get_costs_by_od_and_mode(metrics, congestion, detail_distances=False) + costs = self.get_costs_by_od_and_mode( + metrics, + congestion, + detail_distances=False, + congestion_state=congestion_state, + ) costs = costs.with_columns([ (pl.col("cost").neg().exp()).alias("prob") @@ -58,7 +70,8 @@ def get_costs_by_od_and_mode( self, metrics: List, congestion: bool, - detail_distances: bool = False + detail_distances: bool = False, + congestion_state: CongestionState | None = None, ): # Hack to match the current API and compute the GHG emissions from @@ -79,10 +92,14 @@ def get_costs_by_od_and_mode( for mode in modes: - if mode.inputs["parameters"].congestion: - gc = pl.DataFrame(mode.inputs["generalized_cost"].get(metrics, congestion, detail_distances=detail_distances)) - else: - gc = pl.DataFrame(mode.inputs["generalized_cost"].get(metrics, detail_distances=detail_distances)) + gc = pl.DataFrame( + mode.inputs["generalized_cost"].get( + metrics, + congestion=congestion, + detail_distances=detail_distances, + congestion_state=congestion_state, + ) + ) costs.append( pl.DataFrame(gc) @@ -146,9 +163,19 @@ def get_costs_by_od_and_mode( return costs - def get_prob_by_od_and_mode(self, metrics: List, congestion: bool): + def get_prob_by_od_and_mode( + self, + metrics: List, + congestion: bool, + congestion_state: CongestionState | None = None, + ): - costs = self.get_costs_by_od_and_mode(metrics, congestion, detail_distances=False) + costs = self.get_costs_by_od_and_mode( + metrics, + congestion, + detail_distances=False, + congestion_state=congestion_state, + ) prob = ( @@ -175,83 +202,175 @@ def get_prob_by_od_and_mode(self, metrics: List, congestion: bool): return prob - def update(self, od_flows_by_mode, run_key=None, iteration=None): - - logging.info("Updating travel costs given OD flows...") - - # prob_by_od_and_mode = self.get_prob_by_od_and_mode(["cost"], congestion=True) - - # od_flows_by_mode = ( - # od_flows - # .join(prob_by_od_and_mode, on=["from", "to"]) - # .with_columns((pl.col("flow_volume")*pl.col("prob")).alias("flow_volume")) - # .select(["from", "to", "mode", "flow_volume"]) - # ) - - for mode in self.modes: - - if mode.inputs["parameters"].congestion is True: - - if mode.inputs["parameters"].name in ["car", "carpool"]: - - flows = ( - od_flows_by_mode - .filter(pl.col("mode").is_in(["car", "carpool"])) - .with_columns((pl.when(pl.col("mode") == "car").then(1.0).otherwise(0.5)).alias("veh_per_pers")) - .with_columns((pl.col("flow_volume")*pl.col("veh_per_pers")).alias("vehicle_volume")) - .group_by(["from", "to"]) - .agg(pl.col("vehicle_volume").sum()) - .select(["from", "to", "vehicle_volume"]) - ) - - elif mode.inputs["parameters"].name == "car/public_transport/walk": - - logging.info( - """ - Intermodal mode car/public_transport/walk has no flow - volume to vehicle volume for now : no vehicle will be - assigned to the road network and the congestion will - not account for this specific transport mode. - """ - ) - - else: - - raise ValueError("No flow volume to vehicle volume model for mode : " + mode.inputs["parameters"].name) - - flow_asset = None - if run_key is not None and iteration is not None: - # Persist vehicle flows as a first-class asset so downstream congestion - # snapshots are isolated per run/iteration and safe for parallel runs. - from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - try: - n_rows = flows.height - vol_sum = float(flows["vehicle_volume"].sum()) if "vehicle_volume" in flows.columns else float("nan") - except Exception: - n_rows, vol_sum = None, None - logging.info( - "Congestion update input: run_key=%s iteration=%s mode=%s rows=%s vehicle_volume_sum=%s", - str(run_key), - str(iteration), - str(mode.name), - str(n_rows), - str(vol_sum), - ) - flow_asset = VehicleODFlowsAsset( - flows.to_pandas(), - run_key=str(run_key), - iteration=int(iteration), - mode_name=str(mode.inputs["parameters"].name) - ) - flow_asset.get() - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "Flow asset ready: inputs_hash=%s path=%s", - flow_asset.inputs_hash, - str(flow_asset.cache_path), - ) + def iter_congestion_enabled_modes(self): + """Yield congestion-enabled modes in dependency-safe order.""" + return iter( + sorted( + (mode for mode in self.modes if mode.inputs["parameters"].congestion), + key=lambda mode: ( + mode.inputs["parameters"].name != "car", + mode.inputs["parameters"].name != "carpool", + mode.inputs["parameters"].name, + ), + ) + ) - mode.inputs["travel_costs"].update(flows, flow_asset=flow_asset) - - + def merge_congestion_flows(self, *congestion_flows): + """Merge multiple OD vehicle-flow contributions into one table. + + Args: + *congestion_flows: Optional ``pl.DataFrame`` objects with + ``["from", "to", "vehicle_volume"]``. + + Returns: + pl.DataFrame | None: Merged OD vehicle flows, or ``None`` when no + contribution is provided. + """ + valid_flows = [flows for flows in congestion_flows if flows is not None] + if not valid_flows: + return None + + return ( + pl.concat(valid_flows) + .group_by(["from", "to"]) + .agg(pl.col("vehicle_volume").sum()) + .select(["from", "to", "vehicle_volume"]) + ) + + def create_vehicle_flow_snapshot( + self, + congestion_flows, + *, + run_key=None, + is_weekday=None, + iteration=None, + mode_name: str, + ): + """Persist congestion flows as a period-scoped snapshot asset.""" + if run_key is None or is_weekday is None or iteration is None: + return None + + flow_asset = VehicleODFlowsAsset( + congestion_flows.to_pandas(), + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(iteration), + mode_name=str(mode_name), + ) + flow_asset.get() + return flow_asset + + def build_congestion_state(self, od_flows_by_mode, *, run_key=None, is_weekday=None, iteration=None): + """Build the explicit congestion state for the current iteration.""" + logging.info("Building congestion state from OD flows...") + congestion_flows_by_mode = { + mode.inputs["parameters"].name: mode.build_congestion_flows(od_flows_by_mode) + for mode in self.iter_congestion_enabled_modes() + } + + merged_road_flows = self.merge_congestion_flows( + congestion_flows_by_mode.get("car"), + congestion_flows_by_mode.get("carpool"), + ) + + flow_assets_by_mode = {} + for mode in self.iter_congestion_enabled_modes(): + mode_name = mode.inputs["parameters"].name + congestion_flows = ( + merged_road_flows + if mode_name in {"car", "carpool"} + else congestion_flows_by_mode.get(mode_name) + ) + + if congestion_flows is None: + continue + + flow_asset = self.create_vehicle_flow_snapshot( + congestion_flows, + run_key=run_key, + is_weekday=is_weekday, + iteration=iteration, + mode_name=mode_name, + ) + if flow_asset is not None: + flow_assets_by_mode[mode_name] = flow_asset + + if not flow_assets_by_mode or run_key is None or is_weekday is None or iteration is None: + return None + + return CongestionState( + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(iteration), + flow_assets_by_mode=flow_assets_by_mode, + ) + + def has_enabled_congestion(self) -> bool: + """Return whether any mode has congestion feedback enabled. + + Returns: + bool: True when at least one configured mode has congestion enabled. + """ + return any(mode.inputs["parameters"].congestion for mode in self.modes) + + def should_recompute_congested_costs(self, iteration: int, update_interval: int) -> bool: + """Return whether congested costs should be recomputed this iteration. + + Args: + iteration (int): Current model iteration, using 1-based indexing. + update_interval (int): Number of iterations between congestion + recomputations. Zero disables congestion updates. + + Returns: + bool: True when congestion updates are enabled and this iteration + matches the configured recomputation schedule. + """ + return update_interval > 0 and (iteration - 1) % update_interval == 0 + + def get_costs_for_next_iteration( + self, + *, + iteration: int, + cost_update_interval: int, + od_flows_by_mode, + congestion_state: CongestionState | None = None, + run_key=None, + is_weekday=None, + ): + """Return the costs to use after processing the current iteration. + + When congestion is enabled and the update interval matches, this + recomputes congested costs from the current iteration OD flows before + returning the current congested view. Otherwise, it returns the current + cost view unchanged. + + Args: + iteration (int): Current model iteration, using 1-based indexing. + cost_update_interval (int): Number of iterations between congestion + recomputations. Zero disables congestion updates. + od_flows_by_mode (pl.DataFrame): Aggregated OD flows with one row per + ``["from", "to", "mode"]`` and a ``flow_volume`` column. + run_key (str | None): Optional run identifier used to isolate + per-run congestion snapshots. + is_weekday (bool | None): Whether the current simulation pass is the + weekday pass. Used to isolate weekday/weekend flow snapshots. + + Returns: + tuple[pl.DataFrame, CongestionState | None]: The OD costs to use + after processing the current iteration, and the explicit + congestion state that produced them. + """ + if self.should_recompute_congested_costs(iteration, cost_update_interval): + congestion_state = self.build_congestion_state( + od_flows_by_mode, + run_key=run_key, + is_weekday=is_weekday, + iteration=iteration, + ) + return ( + self.get( + congestion=(congestion_state is not None), + congestion_state=congestion_state, + ), + congestion_state, + ) diff --git a/mobility/file_asset.py b/mobility/file_asset.py index 14ac33a0..43342373 100644 --- a/mobility/file_asset.py +++ b/mobility/file_asset.py @@ -134,18 +134,28 @@ def update_ancestors_if_needed(self): # Build a graph of input assets graph = nx.DiGraph() + + def iter_file_assets(value): + if isinstance(value, FileAsset): + yield value + elif isinstance(value, dict): + for nested in value.values(): + yield from iter_file_assets(nested) + elif isinstance(value, (list, tuple, set)): + for nested in value: + yield from iter_file_assets(nested) def add_upstream_deps(asset): graph.add_node(asset) for inp in asset.inputs.values(): - if isinstance(inp, FileAsset): - graph.add_node(inp) - graph.add_edge(inp, asset) - add_upstream_deps(inp) + for dep in iter_file_assets(inp): + graph.add_node(dep) + graph.add_edge(dep, asset) + add_upstream_deps(dep) for inp in self.inputs.values(): - if isinstance(inp, FileAsset): - add_upstream_deps(inp) + for dep in iter_file_assets(inp): + add_upstream_deps(dep) # Find out which ones need to be updated and recompute them, as well # as all their descendants diff --git a/mobility/transport_costs/od_flows_asset.py b/mobility/transport_costs/od_flows_asset.py index bd0b9da6..ce55aa18 100644 --- a/mobility/transport_costs/od_flows_asset.py +++ b/mobility/transport_costs/od_flows_asset.py @@ -12,13 +12,22 @@ class VehicleODFlowsAsset(FileAsset): This intentionally stores only what the congestion builder needs: ["from","to","vehicle_volume"]. - The cache key is (run_key, iteration, mode_name), where run_key should be - PopulationTrips.inputs_hash (includes the seed). + The cache key is (run_key, is_weekday, iteration, mode_name), where run_key + should be PopulationTrips.inputs_hash (includes the seed). """ - def __init__(self, vehicle_od_flows: pd.DataFrame, *, run_key: str, iteration: int, mode_name: str): + def __init__( + self, + vehicle_od_flows: pd.DataFrame, + *, + run_key: str, + is_weekday: bool, + iteration: int, + mode_name: str, + ): inputs = { "run_key": str(run_key), + "is_weekday": bool(is_weekday), "iteration": int(iteration), "mode_name": str(mode_name), "schema_version": 1 @@ -30,15 +39,7 @@ def __init__(self, vehicle_od_flows: pd.DataFrame, *, run_key: str, iteration: i super().__init__(inputs, cache_path) def get_cached_asset(self) -> pd.DataFrame: - df = pd.read_parquet(self.cache_path) - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "VehicleODFlowsAsset cache hit: inputs_hash=%s path=%s rows=%s", - self.inputs_hash, - str(self.cache_path), - df.shape[0], - ) - return df + return pd.read_parquet(self.cache_path) def create_and_get_asset(self) -> pd.DataFrame: self.cache_path.parent.mkdir(parents=True, exist_ok=True) @@ -49,11 +50,4 @@ def create_and_get_asset(self) -> pd.DataFrame: df = df[expected_cols] if all(c in df.columns for c in expected_cols) else df df.to_parquet(self.cache_path, index=False) - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "VehicleODFlowsAsset written: inputs_hash=%s path=%s rows=%s", - self.inputs_hash, - str(self.cache_path), - df.shape[0], - ) return df diff --git a/mobility/transport_costs/path_generalized_cost.py b/mobility/transport_costs/path_generalized_cost.py index c410a868..fcbfdc4a 100644 --- a/mobility/transport_costs/path_generalized_cost.py +++ b/mobility/transport_costs/path_generalized_cost.py @@ -1,5 +1,6 @@ import pandas as pd from mobility.in_memory_asset import InMemoryAsset +from mobility.choice_models.congestion_state import CongestionState class PathGeneralizedCost(InMemoryAsset): @@ -12,10 +13,19 @@ def __init__(self, travel_costs, parameters, mode_name): super().__init__(inputs) - def get(self, metrics=["cost"], congestion: bool = False, detail_distances: bool = False) -> pd.DataFrame: + def get( + self, + metrics=["cost"], + congestion: bool = False, + detail_distances: bool = False, + congestion_state: CongestionState | None = None, + ) -> pd.DataFrame: metrics = list(metrics) - costs = self.inputs["travel_costs"].get(congestion) + costs = self.inputs["travel_costs"].get( + congestion=congestion, + congestion_state=congestion_state, + ) # study_area = self.travel_costs.transport_zones.study_area.get() transport_zones_df = self.inputs["travel_costs"].inputs["transport_zones"].get().drop(columns="geometry") diff --git a/mobility/transport_costs/path_travel_costs.py b/mobility/transport_costs/path_travel_costs.py index e7fd2e93..e17d35a7 100644 --- a/mobility/transport_costs/path_travel_costs.py +++ b/mobility/transport_costs/path_travel_costs.py @@ -17,6 +17,7 @@ from mobility.transport_graphs.congested_path_graph_snapshot import CongestedPathGraphSnapshot from mobility.transport_graphs.contracted_path_graph_snapshot import ContractedPathGraphSnapshot from mobility.transport_costs.path_travel_costs_snapshot import PathTravelCostsSnapshot +from mobility.choice_models.congestion_state import CongestionState from typing import List @@ -84,9 +85,22 @@ def __init__( super().__init__(inputs, cache_path) - # When congestion updates are used, we keep a pointer to the latest - # per-iteration snapshot so `get(congestion=True)` is isolated per run. - self._current_congested_snapshot = None + def get(self, congestion: bool = False, congestion_state: CongestionState | None = None) -> pd.DataFrame: + requested_congestion = congestion and congestion_state is None + self.update_ancestors_if_needed() + + if self.is_update_needed(): + asset = self.create_and_get_asset(congestion=requested_congestion) + self.update_hash(self.inputs_hash) + if congestion_state is None: + return asset + + if congestion and congestion_state is not None: + snapshot = self.get_snapshot_asset(congestion_state) + if snapshot is not None: + return snapshot.get() + + return self.get_cached_asset(congestion=congestion) def get_cached_asset(self, congestion: bool = False) -> pd.DataFrame: """ @@ -99,22 +113,7 @@ def get_cached_asset(self, congestion: bool = False) -> pd.DataFrame: if congestion is False: path = self.cache_path["freeflow"] else: - if self._current_congested_snapshot is not None: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "PathTravelCosts.get(congestion=True) using snapshot: snapshot_hash=%s snapshot_path=%s", - self._current_congested_snapshot.inputs_hash, - str(self._current_congested_snapshot.cache_path), - ) - return self._current_congested_snapshot.get() - # If no congestion snapshot has been applied in this run, treat - # "congested" as free-flow to avoid reusing stale shared caches. - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "PathTravelCosts.get(congestion=True) no snapshot -> fallback to freeflow: %s", - str(self.cache_path["freeflow"]), - ) - path = self.cache_path["freeflow"] + path = self.cache_path["congested"] logging.info("Travel costs already prepared. Reusing the file : " + str(path)) costs = pd.read_parquet(path) @@ -134,20 +133,19 @@ def create_and_get_asset(self, congestion: bool = False) -> pd.DataFrame: logging.info("Preparing travel costs for mode " + mode) self.inputs["transport_zones"].get() - self.inputs["contracted_path_graph"].get() if congestion is False: + self.inputs["contracted_path_graph"].get() output_path = self.cache_path["freeflow"] + path_graph = self.inputs["contracted_path_graph"] else: - if self._current_congested_snapshot is not None: - return self._current_congested_snapshot.get() - # Same rationale as get_cached_asset(): without an applied snapshot, - # compute free-flow costs. - output_path = self.cache_path["freeflow"] + self.inputs["congested_path_graph"].get() + output_path = self.cache_path["congested"] + path_graph = self.inputs["congested_path_graph"] costs = self.compute_costs_by_OD( self.inputs["transport_zones"], - self.inputs["contracted_path_graph"], + path_graph, output_path, ) @@ -191,35 +189,19 @@ def compute_costs_by_OD( return costs - - def update(self, od_flows, flow_asset=None): - """ - Update congestion state. - """ - + def get_congested_graph_path(self, flow_asset=None) -> pathlib.Path: + """Return the graph path backing the current congested cost view.""" + if flow_asset is not None: + return self.build_snapshot_asset(flow_asset).inputs["contracted_graph"].inputs["congested_graph"].get() + return self.inputs["congested_path_graph"].get() + + def get_snapshot_asset(self, congestion_state: CongestionState) -> PathTravelCostsSnapshot | None: + flow_asset = congestion_state.for_mode(self.inputs["mode_name"]) if flow_asset is None: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "PathTravelCosts.update legacy(shared) path: mode=%s", - str(self.inputs["mode_name"]), - ) - self.inputs["contracted_path_graph"].update(od_flows) - self._current_congested_snapshot = None - self.create_and_get_asset(congestion=True) - return - - self._apply_flow_snapshot(flow_asset) - - def apply_flow_snapshot(self, flow_asset) -> None: - """Repoint this mode's congested costs to the snapshot defined by `flow_asset`. - - This is primarily used when resuming a run from a checkpoint: the snapshot - files exist on disk, but the in-memory pointer to the "current snapshot" - is lost on restart. - """ - self._apply_flow_snapshot(flow_asset) + return None + return self.build_snapshot_asset(flow_asset) - def _apply_flow_snapshot(self, flow_asset) -> None: + def build_snapshot_asset(self, flow_asset) -> PathTravelCostsSnapshot: congested_graph = CongestedPathGraphSnapshot( modified_graph=self.inputs["modified_path_graph"], transport_zones=self.inputs["transport_zones"], @@ -234,17 +216,7 @@ def _apply_flow_snapshot(self, flow_asset) -> None: routing_parameters=self.inputs["routing_parameters"], contracted_graph=contracted_graph, ) - - self._current_congested_snapshot = snapshot - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "PathTravelCosts snapshot selected: mode=%s flow_hash=%s snapshot_hash=%s snapshot_path=%s", - str(self.inputs["mode_name"]), - flow_asset.get_cached_hash(), - snapshot.inputs_hash, - str(snapshot.cache_path), - ) - snapshot.get() + return snapshot def clone(self): diff --git a/mobility/transport_costs/path_travel_costs_snapshot.py b/mobility/transport_costs/path_travel_costs_snapshot.py index ecd4feca..f886586d 100644 --- a/mobility/transport_costs/path_travel_costs_snapshot.py +++ b/mobility/transport_costs/path_travel_costs_snapshot.py @@ -36,26 +36,10 @@ def __init__( super().__init__(inputs, cache_path) def get_cached_asset(self) -> pd.DataFrame: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "Congested travel costs snapshot cache hit: inputs_hash=%s path=%s", - self.inputs_hash, - str(self.cache_path), - ) - else: - logging.info("Congested travel costs snapshot already prepared. Reusing: " + str(self.cache_path)) return pd.read_parquet(self.cache_path) def create_and_get_asset(self) -> pd.DataFrame: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "Computing congested travel costs snapshot: inputs_hash=%s contracted_graph=%s out=%s", - self.inputs_hash, - str(self.inputs["contracted_graph"].cache_path), - str(self.cache_path), - ) - else: - logging.info("Computing congested travel costs snapshot...") + logging.info("Computing congested travel costs snapshot...") transport_zones: TransportZones = self.inputs["transport_zones"] contracted_graph: ContractedPathGraphSnapshot = self.inputs["contracted_graph"] diff --git a/mobility/transport_graphs/congested_path_graph_snapshot.py b/mobility/transport_graphs/congested_path_graph_snapshot.py index ccb12168..65e2084a 100644 --- a/mobility/transport_graphs/congested_path_graph_snapshot.py +++ b/mobility/transport_graphs/congested_path_graph_snapshot.py @@ -43,32 +43,12 @@ def __init__( super().__init__(inputs, cache_path) def get_cached_asset(self) -> pathlib.Path: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - vf: VehicleODFlowsAsset = self.inputs["vehicle_flows"] - logging.info( - "Congested snapshot graph cache hit: inputs_hash=%s mode=%s flows_hash=%s path=%s", - self.inputs_hash, - self.inputs["mode_name"], - vf.get_cached_hash(), - str(self.cache_path), - ) - else: - logging.info("Congested snapshot graph already prepared. Reusing: " + str(self.cache_path)) + logging.info("Congested snapshot graph already prepared. Reusing: " + str(self.cache_path)) return self.cache_path def create_and_get_asset(self) -> pathlib.Path: vehicle_flows: VehicleODFlowsAsset = self.inputs["vehicle_flows"] - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "Building congested snapshot graph: inputs_hash=%s mode=%s flows_hash=%s flows_path=%s out=%s", - self.inputs_hash, - self.inputs["mode_name"], - vehicle_flows.get_cached_hash(), - str(vehicle_flows.cache_path), - str(self.cache_path), - ) - else: - logging.info("Building congested snapshot graph...") + logging.info("Building congested snapshot graph...") vehicle_flows.get() # ensure parquet exists script = RScript(resources.files('mobility.transport_graphs').joinpath('load_path_graph.R')) diff --git a/mobility/transport_graphs/contracted_path_graph_snapshot.py b/mobility/transport_graphs/contracted_path_graph_snapshot.py index 2ffb6dc9..ff2cdb0c 100644 --- a/mobility/transport_graphs/contracted_path_graph_snapshot.py +++ b/mobility/transport_graphs/contracted_path_graph_snapshot.py @@ -23,26 +23,11 @@ def __init__(self, congested_graph: CongestedPathGraphSnapshot): super().__init__(inputs, cache_path) def get_cached_asset(self) -> pathlib.Path: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "Contracted snapshot graph cache hit: inputs_hash=%s path=%s", - self.inputs_hash, - str(self.cache_path), - ) - else: - logging.info("Contracted snapshot graph already prepared. Reusing: " + str(self.cache_path)) + logging.info("Contracted snapshot graph already prepared. Reusing: " + str(self.cache_path)) return self.cache_path def create_and_get_asset(self) -> pathlib.Path: - if os.environ.get("MOBILITY_DEBUG_CONGESTION") == "1": - logging.info( - "Contracting snapshot graph: inputs_hash=%s in=%s out=%s", - self.inputs_hash, - str(self.inputs["congested_graph"].cache_path), - str(self.cache_path), - ) - else: - logging.info("Contracting snapshot graph...") + logging.info("Contracting snapshot graph...") congested_graph_path = self.inputs["congested_graph"].get() script = RScript(resources.files('mobility.transport_graphs').joinpath('contract_path_graph.R')) diff --git a/mobility/transport_modes/car/car_mode.py b/mobility/transport_modes/car/car_mode.py index b107dd47..f9fe581f 100644 --- a/mobility/transport_modes/car/car_mode.py +++ b/mobility/transport_modes/car/car_mode.py @@ -13,6 +13,7 @@ from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters from mobility.transport_graphs.speed_modifier import SpeedModifier from pydantic import Field +import polars as pl class CarMode(TransportMode): """ @@ -92,6 +93,19 @@ def __init__( parameters_cls=CarModeParameters, ) + def build_congestion_flows(self, od_flows_by_mode): + """Build road vehicle flows from car person flows.""" + return ( + od_flows_by_mode + .filter(pl.col("mode") == "car") + .with_columns( + pl.col("flow_volume").alias("vehicle_volume") + ) + .group_by(["from", "to"]) + .agg(pl.col("vehicle_volume").sum()) + .select(["from", "to", "vehicle_volume"]) + ) + class CarModeParameters(TransportModeParameters): """Parameters for car mode.""" diff --git a/mobility/transport_modes/carpool/carpool_mode.py b/mobility/transport_modes/carpool/carpool_mode.py index af8ed071..a647eb5c 100644 --- a/mobility/transport_modes/carpool/carpool_mode.py +++ b/mobility/transport_modes/carpool/carpool_mode.py @@ -6,6 +6,7 @@ from mobility.transport_modes.carpool.detailed import DetailedCarpoolRoutingParameters, DetailedCarpoolGeneralizedCostParameters, DetailedCarpoolTravelCosts, DetailedCarpoolGeneralizedCost from mobility.transport_modes.modal_transfer import IntermodalTransfer from pydantic import Field +import polars as pl class CarpoolMode(TransportMode): @@ -46,12 +47,26 @@ def __init__( parameters_cls=CarpoolModeParameters, ) + def build_congestion_flows(self, od_flows_by_mode): + """Build road vehicle flows from carpool person flows.""" + vehicles_per_person = 1.0 / self.inputs["parameters"].persons_per_vehicle + return ( + od_flows_by_mode + .filter(pl.col("mode") == "carpool") + .with_columns( + (pl.col("flow_volume") * vehicles_per_person).alias("vehicle_volume") + ) + .group_by(["from", "to"]) + .agg(pl.col("vehicle_volume").sum()) + .select(["from", "to", "vehicle_volume"]) + ) class CarpoolModeParameters(TransportModeParameters): """Parameters for carpool mode.""" name: Literal["carpool"] = "carpool" ghg_intensity: float = 0.109 + persons_per_vehicle: float = Field(default=2.0, gt=0.0) multimodal: bool = True return_mode: Literal["carpool_return"] = "carpool_return" survey_ids: list[str] = Field(default_factory=list) diff --git a/mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py b/mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py index 7b23c653..882a9c75 100644 --- a/mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py +++ b/mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py @@ -3,6 +3,7 @@ from typing import Annotated from pydantic import BaseModel, ConfigDict, Field +from mobility.choice_models.congestion_state import CongestionState from mobility.in_memory_asset import InMemoryAsset from mobility.cost_of_time_parameters import CostOfTimeParameters @@ -16,10 +17,19 @@ def __init__(self, travel_costs, parameters): super().__init__(inputs) - def get(self, metrics=["cost"], congestion: bool = False, detail_distances: bool = False) -> pd.DataFrame: + def get( + self, + metrics=["cost"], + congestion: bool = False, + detail_distances: bool = False, + congestion_state: CongestionState | None = None, + ) -> pd.DataFrame: metrics = list(metrics) - costs = self.inputs["travel_costs"].get(congestion) + costs = self.inputs["travel_costs"].get( + congestion=congestion, + congestion_state=congestion_state, + ) study_area = self.inputs["travel_costs"].inputs["car_travel_costs"].inputs["transport_zones"].study_area.get() transport_zones = self.inputs["travel_costs"].inputs["car_travel_costs"].inputs["transport_zones"].get() diff --git a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py b/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py index dbf8acf9..9e7844d4 100644 --- a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py +++ b/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py @@ -9,10 +9,14 @@ from importlib import resources from pydantic import BaseModel, ConfigDict, Field +from mobility.choice_models.congestion_state import CongestionState from mobility.file_asset import FileAsset from mobility.r_utils.r_script import RScript from mobility.transport_modes.modal_transfer import IntermodalTransfer from mobility.transport_costs.path_travel_costs import PathTravelCosts +from mobility.transport_modes.carpool.detailed.detailed_carpool_travel_costs_snapshot import ( + DetailedCarpoolTravelCostsSnapshot, +) class DetailedCarpoolTravelCosts(FileAsset): @@ -37,6 +41,23 @@ def __init__( super().__init__(inputs, cache_path) + def get(self, congestion: bool = False, congestion_state: CongestionState | None = None) -> pd.DataFrame: + requested_congestion = congestion and congestion_state is None + self.update_ancestors_if_needed() + + if self.is_update_needed(): + asset = self.create_and_get_asset(congestion=requested_congestion) + self.update_hash(self.inputs_hash) + if congestion_state is None: + return asset + + if congestion and congestion_state is not None: + snapshot = self.get_snapshot_asset(congestion_state) + if snapshot is not None: + return snapshot.get() + + return self.get_cached_asset(congestion=congestion) + def get_cached_asset(self, congestion: bool = False) -> pd.DataFrame: if congestion is False: @@ -83,7 +104,7 @@ def compute_travel_costs( script = RScript(resources.files('mobility.transport_modes.carpool.detailed').joinpath('compute_carpool_travel_costs.R')) if congestion is True: - graph = car_travel_costs.congested_path_graph.get() + graph = car_travel_costs.get_congested_graph_path() else: graph = car_travel_costs.modified_path_graph.get() @@ -103,9 +124,20 @@ def compute_travel_costs( return costs - def update(self, od_flows): - - self.create_and_get_asset(congestion=True) + def get_snapshot_asset( + self, + congestion_state: CongestionState, + ) -> DetailedCarpoolTravelCostsSnapshot | None: + flow_asset = congestion_state.for_mode("carpool") + if flow_asset is None: + return None + + return DetailedCarpoolTravelCostsSnapshot( + car_travel_costs=self.inputs["car_travel_costs"], + parameters=self.inputs["parameters"], + modal_transfer=self.inputs["modal_transfer"], + road_flow_asset=flow_asset, + ) class DetailedCarpoolRoutingParameters(BaseModel): diff --git a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py b/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py new file mode 100644 index 00000000..0cb5b67e --- /dev/null +++ b/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py @@ -0,0 +1,58 @@ +import json +import os +import pathlib + +import pandas as pd + +from importlib import resources + +from mobility.file_asset import FileAsset +from mobility.r_utils.r_script import RScript + + +class DetailedCarpoolTravelCostsSnapshot(FileAsset): + """Per-congestion-state carpool travel costs derived from a road snapshot.""" + + def __init__( + self, + *, + car_travel_costs, + parameters, + modal_transfer, + road_flow_asset, + ): + inputs = { + "car_travel_costs": car_travel_costs, + "parameters": parameters, + "modal_transfer": modal_transfer, + "road_flow_asset": road_flow_asset, + "schema_version": 1, + } + + cache_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / "travel_costs_congested_carpool.parquet" + super().__init__(inputs, cache_path) + + def get_cached_asset(self) -> pd.DataFrame: + return pd.read_parquet(self.cache_path) + + def create_and_get_asset(self) -> pd.DataFrame: + car_travel_costs = self.inputs["car_travel_costs"] + graph = car_travel_costs.get_congested_graph_path(self.inputs["road_flow_asset"]) + + script = RScript( + resources.files("mobility.transport_modes.carpool.detailed").joinpath( + "compute_carpool_travel_costs.R" + ) + ) + script.run( + args=[ + str(car_travel_costs.transport_zones.cache_path), + str(car_travel_costs.transport_zones.study_area.cache_path["polygons"]), + str(graph), + str(graph), + json.dumps(self.inputs["modal_transfer"].model_dump(mode="json")), + str(self.cache_path), + ] + ) + + return pd.read_parquet(self.cache_path) diff --git a/mobility/transport_modes/public_transport/public_transport_generalized_cost.py b/mobility/transport_modes/public_transport/public_transport_generalized_cost.py index 9790db6d..6249e2bc 100644 --- a/mobility/transport_modes/public_transport/public_transport_generalized_cost.py +++ b/mobility/transport_modes/public_transport/public_transport_generalized_cost.py @@ -1,5 +1,6 @@ import pandas as pd +from mobility.choice_models.congestion_state import CongestionState from mobility.in_memory_asset import InMemoryAsset class PublicTransportGeneralizedCost(InMemoryAsset): @@ -30,7 +31,8 @@ def get( self, metrics=["cost"], congestion: bool = True, - detail_distances: bool = False + detail_distances: bool = False, + congestion_state: CongestionState | None = None, ) -> pd.DataFrame: first_leg_mode_name = self.inputs["first_leg_mode_name"] diff --git a/mobility/transport_modes/transport_mode.py b/mobility/transport_modes/transport_mode.py index ecdf18ec..a7debfd0 100644 --- a/mobility/transport_modes/transport_mode.py +++ b/mobility/transport_modes/transport_mode.py @@ -90,6 +90,18 @@ def clone(self): parameters_cls=params.__class__, ) + def build_congestion_flows(self, od_flows_by_mode): + """Build congestion-relevant flows for this mode. + + Args: + od_flows_by_mode (pl.DataFrame): Aggregated person flows by + ``["from", "to", "mode"]``. + + Returns: + pl.DataFrame | None: Congestion-relevant flows for this mode, or + ``None`` when this mode does not directly refresh congestion. + """ + return None class TransportModeParameters(BaseModel): """Common parameters for transport mode definitions.""" diff --git a/tests/back/integration/test_009_population_trips_results_can_be_computed.py b/tests/back/integration/test_009_population_trips_results_can_be_computed.py index dbf68f9d..87542ee3 100644 --- a/tests/back/integration/test_009_population_trips_results_can_be_computed.py +++ b/tests/back/integration/test_009_population_trips_results_can_be_computed.py @@ -142,11 +142,11 @@ def test_009_population_trips_results_can_be_computed(test_data, safe_json): ) # Evaluate various metrics - global_metrics = pop_trips.evaluate("global_metrics") - weekday_sink_occupation = pop_trips.evaluate("sink_occupation", weekday=True) - weekday_trip_count_by_demand_group = pop_trips.evaluate("trip_count_by_demand_group", weekday=True) - weekday_distance_per_person = pop_trips.evaluate("distance_per_person", weekday=True) - weekday_time_per_person = pop_trips.evaluate("time_per_person", weekday=True) + global_metrics = pop_trips.weekday_run.evaluate("global_metrics") + weekday_sink_occupation = pop_trips.weekday_run.evaluate("sink_occupation") + weekday_trip_count_by_demand_group = pop_trips.weekday_run.evaluate("trip_count_by_demand_group") + weekday_distance_per_person = pop_trips.weekday_run.evaluate("distance_per_person") + weekday_time_per_person = pop_trips.weekday_run.evaluate("time_per_person") # Normalize results to pandas DataFrames gm_df = _to_pandas(global_metrics) diff --git a/tests/back/integration/test_010_population_trips_results_are_reproducible.py b/tests/back/integration/test_010_population_trips_results_are_reproducible.py index a0120c95..9b82ea1f 100644 --- a/tests/back/integration/test_010_population_trips_results_are_reproducible.py +++ b/tests/back/integration/test_010_population_trips_results_are_reproducible.py @@ -43,7 +43,7 @@ def test_010_population_trips_results_are_reproducible(test_data): ) ) - metrics_run_1 = pop_trips.evaluate("global_metrics") + metrics_run_1 = pop_trips.weekday_run.evaluate("global_metrics") # Remove the results then re run the model with the same inputs pop_trips.remove() @@ -65,7 +65,7 @@ def test_010_population_trips_results_are_reproducible(test_data): ) ) - metrics_run_2 = pop_trips.evaluate("global_metrics") + metrics_run_2 = pop_trips.weekday_run.evaluate("global_metrics") # Compare results between runs comparison = ( diff --git a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py new file mode 100644 index 00000000..cd61109f --- /dev/null +++ b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py @@ -0,0 +1,77 @@ +from types import SimpleNamespace +from unittest.mock import patch + +import polars as pl +import pandas as pd +from pydantic import BaseModel + +from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator +from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset + + +class _FakeModeParameters(BaseModel): + name: str + congestion: bool + + +def _make_mode(*, name: str, congestion: bool): + return SimpleNamespace( + inputs={ + "parameters": _FakeModeParameters(name=name, congestion=congestion), + "generalized_cost": name, + } + ) + + +def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): + # Use a minimal mode stub with congestion enabled so the test only exercises + # the aggregator decision logic, not the real routing/cost stack. + aggregator = TravelCostsAggregator(modes=[_make_mode(name="car", congestion=True)]) + od_flows_by_mode = pl.DataFrame( + {"from": [1], "to": [2], "mode": ["car"], "flow_volume": [10.0]} + ) + + # Mock the expensive side effects and the final cost lookup: this test is a + # regression guard for "did we trigger congestion recomputation at all?". + with patch.object(aggregator, "recompute_congested_costs") as recompute_mock: + with patch.object(aggregator, "get", return_value="costs") as get_mock: + result = aggregator.get_costs_for_next_iteration( + iteration=1, + cost_update_interval=1, + od_flows_by_mode=od_flows_by_mode, + run_key="run-key", + is_weekday=True, + ) + + # If congestion is enabled and the update interval matches, the aggregator + # must rebuild congested costs before returning the next iteration cost view. + recompute_mock.assert_called_once_with( + od_flows_by_mode, + run_key="run-key", + is_weekday=True, + iteration=1, + ) + get_mock.assert_called_once_with(congestion=True) + assert result == "costs" + + +def test_vehicle_od_flow_snapshot_hash_differs_between_weekday_and_weekend(): + flows = pd.DataFrame({"from": [1], "to": [2], "vehicle_volume": [10.0]}) + + weekday_asset = VehicleODFlowsAsset( + flows, + run_key="run-key", + is_weekday=True, + iteration=1, + mode_name="car", + ) + weekend_asset = VehicleODFlowsAsset( + flows, + run_key="run-key", + is_weekday=False, + iteration=1, + mode_name="car", + ) + + assert weekday_asset.inputs_hash != weekend_asset.inputs_hash + assert weekday_asset.cache_path != weekend_asset.cache_path diff --git a/tests/back/unit/test_901_quickstart_drift_guard.py b/tests/back/unit/test_901_quickstart_drift_guard.py index 6fe19ce5..ea523678 100644 --- a/tests/back/unit/test_901_quickstart_drift_guard.py +++ b/tests/back/unit/test_901_quickstart_drift_guard.py @@ -7,7 +7,7 @@ "mobility.Population(", "mobility.PopulationTrips(", 'population_trips.get()["weekday_flows"].collect()', - 'population_trips.evaluate("global_metrics")', + 'population_trips.weekday_run.evaluate("global_metrics")', ] From 0c64628b478696363ca465e85d94e51b05c09bfc Mon Sep 17 00:00:00 2001 From: FlxPo Date: Thu, 26 Mar 2026 15:21:00 +0100 Subject: [PATCH 02/24] refactor --- .gitignore | 42 +- docs/source/trips.rst | 45 +- .../Hauts-Doubs/radiation-JU-NE-25-39.py | 4 +- .../old_examples/Millau/Millau_example.py | 2 +- examples/old_examples/Millau/pa.py | 2 +- .../mobility_survey/mobility_survey.py | 4 +- .../old_examples/study_area/study_area.py | 233 - .../old_examples/switzerland/switzerland.py | 21 - examples/old_examples/tests/tests.py | 32 - .../old_examples/trip_localizer/example.py | 54 - .../trip_localizer_detailed_steps.py | 29 - examples/quickstart-fr-ci.py | 32 +- examples/quickstart-fr.py | 32 +- .../beam_search.py | 0 .../chain_model.py | 0 .../chained_modes.py | 0 .../chained_modes_2.py | 0 .../chained_modes_3.py | 0 .../chained_modes_fun.py | 0 .../dependency_graph.py | 2 +- .../duckdb_buildings.py | 0 .../hash_stability/Dockerfile | 0 .../hash_stability/hash_stability.py | 0 {mobility/levers => experiments}/levers.py | 0 .../marsaglia sampling.py | 0 .../households_expenses_distribution.py | 4 +- .../parsers/insee_lau_ids_to_local_lau_ids.py | 7 +- .../parsers/job_active_population.py | 0 .../parsers/permanent_db_facilities.py | 0 .../parsers/student_population.py | 0 .../parsers/students_distribution.py | 4 +- .../parsers/swiss_vot_extraction.py | 0 .../parsers/work_home_flows.py | 0 .../prepare_trip_chains.py | 2 +- .../test_iterative_routing.R | 0 .../transport_zones.py | 0 mobility/.vscode/settings.json | 4 - mobility/README.md | 2 +- mobility/__init__.py | 93 +- mobility/activities/__init__.py | 18 + .../motive.py => activities/activity.py} | 23 +- mobility/{motives => activities}/home.py | 16 +- mobility/activities/leisure/__init__.py | 10 + .../leisure}/leisure.py | 18 +- .../leisure_facilities_distribution.py | 10 +- .../leisure}/leisures_frequentation.py | 0 mobility/{motives => activities}/other.py | 20 +- mobility/activities/shopping/__init__.py | 4 + .../shopping/shop.py} | 19 +- .../shopping}/shops_turnover_distribution.py | 6 +- mobility/activities/studies/__init__.py | 9 + .../studies}/school_students_flows.py | 6 +- .../studies}/schools_capacity_distribution.py | 12 +- .../studies/study.py} | 17 +- mobility/activities/work/__init__.py | 9 + .../jobs_active_population_distribution.py | 6 +- .../work}/jobs_active_population_flows.py | 8 +- mobility/{motives => activities/work}/work.py | 19 +- .../choice_models/destination_choice_model.py | 237 - .../destination_sequence_sampler.py | 539 - .../leisure_destination_choice_model.py | 277 - .../choice_models/population_trips_run.py | 847 - mobility/choice_models/produits_A38G.csv | 63 - .../shopping_destination_choice_model.py | 273 - .../studies_destination_choice_model.py | 158 - .../top_k_mode_sequence_search.py | 202 - .../transport_mode_choice_model.py | 103 - mobility/choice_models/utilities.py | 85 - .../work_destination_choice_model.py | 604 - mobility/concat_costs.py | 116 - mobility/{set_params.py => config.py} | 8 +- .../data/CH/CH-2016-superficie-communes.csv | 2174 - .../CH-2021-emplois-communes-par-secteur.csv | 8657 ---- mobility/data/CH/CH-2021-emplois-communes.csv | 2165 - .../data/CH/CH-2022-population-communes.xlsx | Bin 102399 -> 0 bytes .../data/CH/CH-2023-repertoire-localites.csv | 5737 --- mobility/data/README.md | 52 - mobility/data/__init__.py | 0 mobility/data/gtfs/gtfs_route_types.xlsx | Bin 12507 -> 0 bytes .../routing_tests/standard_routing_tests.csv | 2 - .../data/insee/esane/equipments_features.xlsx | Bin 15208 -> 0 bytes .../insee/esane/equipments_insee_to_naf.xlsx | Bin 10763 -> 0 bytes mobility/data/insee/esane/shops_turnover.xlsx | Bin 10852 -> 0 bytes mobility/data/insee/schools/schools.parquet | Bin 202838 -> 0 bytes .../insee/territories/departements-france.csv | 102 - .../territories/donneesCommunesFrance.csv | 34887 ---------------- mobility/data/surveys/entd-2008/.gitkeep | 0 mobility/experiments/iterative.py | 169 - .../ademe_base_carbone.py | 0 mobility/{ => impacts}/carbon_computation.py | 3 +- .../default_gwp.py | 0 mobility/localized_trips.py | 412 - mobility/motives/__init__.py | 7 - mobility/parsers/__init__.py | 10 - mobility/parsers/urban_units.py | 46 - mobility/population/__init__.py | 10 + .../census_localized_individuals.py | 6 +- .../city_legal_population.py | 6 +- mobility/{ => population}/population.py | 10 +- mobility/r_utils/get_aon.R | 64 - mobility/r_utils/plot_flows.R | 39 - mobility/r_utils/plot_graph_around_vertex.R | 31 - mobility/r_utils/plumber_functions.R | 413 - mobility/r_utils/routing_plumber.R | 69 - mobility/radiation_model.py | 502 - mobility/radiation_model_selection.py | 333 - mobility/runtime/__init__.py | 1 + mobility/runtime/assets/__init__.py | 9 + mobility/{ => runtime/assets}/asset.py | 0 mobility/{ => runtime/assets}/file_asset.py | 2 +- .../{ => runtime/assets}/in_memory_asset.py | 4 +- mobility/runtime/io/__init__.py | 4 + .../{parsers => runtime/io}/download_file.py | 0 .../{parsers => runtime/io}/patch_openpyxl.py | 0 mobility/runtime/r_integration/__init__.py | 3 + .../r_integration}/install_packages.R | 0 .../r_integration/r_script_runner.py} | 13 +- mobility/runtime/resources/__init__.py | 1 + .../resources}/ademe/Base_Carbone_V22.0.csv | 0 .../resources}/ademe/mapping.csv | 0 .../resources}/bfs/je-f-21.03.01.xlsx | Bin .../resources}/gtfs/gtfs_route_types.csv | 0 .../insee_RP2021_mobpro_border_cities.csv | 0 .../resources/osmdata_0.2.5.005.zip | Bin .../resources}/surveys/entd_mode.xlsx | Bin mobility/spatial/__init__.py | 9 + .../{parsers => spatial}/admin_boundaries.py | 4 +- .../{parsers => spatial}/local_admin_units.py | 6 +- .../local_admin_units_categories.py | 4 +- mobility/{parsers => spatial}/osm/__init__.py | 0 .../osm/geofabrik_extract.py | 6 +- .../osm/geofabrik_regions.py | 2 +- .../osm/osm_country_border.py | 4 +- mobility/{parsers => spatial}/osm/osm_data.py | 8 +- .../prepare_transport_zones.R | 0 mobility/{ => spatial}/study_area.py | 4 +- mobility/{ => spatial}/transport_zones.py | 10 +- .../mobility_survey => surveys}/__init__.py | 0 .../mobility_survey => surveys}/aggregator.py | 2 +- .../france/__init__.py | 0 .../mobility_survey => surveys}/france/emp.py | 6 +- .../france/entd.py | 6 +- .../mobility_survey.py | 2 +- mobility/transport/__init__.py | 1 + mobility/transport/costs/__init__.py | 19 + .../costs}/od_flows_asset.py | 4 +- .../transport/costs/parameters/__init__.py | 9 + .../parameters}/cost_of_time_parameters.py | 0 .../generalized_cost_parameters.py | 2 +- .../parameters}/path_routing_parameters.py | 0 mobility/transport/costs/path/__init__.py | 9 + .../costs/path}/path_generalized_cost.py | 10 +- .../costs/path}/path_travel_costs.py | 32 +- .../costs/path}/path_travel_costs_snapshot.py | 12 +- .../costs/path}/prepare_dodgr_costs.R | 2 +- .../costs/transport_costs_aggregator.py} | 16 +- mobility/transport/graphs/__init__.py | 24 + .../transport/graphs/congested/__init__.py | 4 + .../graphs/congested}/congested_path_graph.py | 10 +- .../congested_path_graph_snapshot.py | 12 +- .../congested}/duplicate_cpprouting_graph.R | 0 .../congested}/initialize_travel_costs.R | 0 .../graphs/congested}/load_path_graph.R | 6 +- .../transport/graphs/contracted/__init__.py | 4 + .../graphs/contracted}/contract_path_graph.R | 2 +- .../contracted}/contracted_path_graph.py | 10 +- .../contracted_path_graph_snapshot.py | 8 +- mobility/transport/graphs/core/__init__.py | 4 + .../graphs/core}/cpprouting_io.R | 0 .../core}/get_buildings_nearest_vertex_id.R | 0 .../graphs/core}/get_path_pair.R | 2 +- .../graphs/core}/graph_gpkg_exporter.py | 0 .../graphs/core}/path_graph.py | 14 +- .../graphs/core}/tz_pairs_to_vertex_pairs.R | 0 .../transport/graphs/modified/__init__.py | 17 + .../graphs/modified}/concatenate_graphs.R | 0 .../graphs/modified}/modified_path_graph.py | 12 +- .../graphs/modified/modifiers/__init__.py | 15 + .../apply_border_crossing_speed_modifier.R | 0 .../apply_limited_speed_zones_modifier.R | 0 .../modifiers}/apply_new_road_modifier.R | 0 .../apply_road_lane_number_modifier.R | 0 .../modified/modifiers}/speed_modifier.py | 8 +- .../graphs/modified}/modify_path_graph.R | 10 +- .../transport/graphs/simplified/__init__.py | 3 + .../create_graph_from_travel_costs.R | 0 .../graphs/simplified}/prepare_path_graph.R | 2 +- .../simplified}/simplified_path_graph.py | 14 +- mobility/transport/modes/__init__.py | 15 + .../modes/bicycle.py} | 29 +- .../car_mode.py => transport/modes/car.py} | 31 +- .../modes}/carpool/__init__.py | 2 +- .../modes/carpool/carpool.py} | 23 +- .../modes}/carpool/detailed/__init__.py | 0 .../detailed/compute_carpool_travel_costs.R | 12 +- .../detailed_carpool_generalized_cost.py | 12 +- .../detailed/detailed_carpool_travel_costs.py | 20 +- .../detailed_carpool_travel_costs_snapshot.py | 8 +- .../carpool/detailed/prepare_carpool_graph.R | 2 +- .../modes}/carpool/simple/__init__.py | 0 .../simple/simple_carpool_parameters.py | 0 .../simple/simple_carpool_travel_costs.py | 8 +- mobility/transport/modes/choice/__init__.py | 11 + .../compute_subtour_mode_probabilities.py | 2 +- ...e_subtour_mode_probs_parallel_utilities.py | 0 mobility/transport/modes/core/__init__.py | 14 + .../modes/core}/defaults.py | 0 .../modes/core}/modal_transfer.py | 0 .../modes/core}/mode_registry.py | 2 +- .../modes/core}/osm_capacity_parameters.py | 0 .../modes/core}/transport_mode.py | 2 +- .../modes/public_transport/__init__.py | 6 + ...intermodal_public_transport_travel_costs.R | 2 +- .../modes}/public_transport/gtfs/__init__.py | 0 .../modes}/public_transport/gtfs/gtfs_data.py | 4 +- .../public_transport/gtfs/gtfs_router.py | 14 +- .../public_transport/gtfs}/gtfs_stops.py | 4 +- .../gtfs/prepare_gtfs_router.R | 2 +- .../intermodal_transport_graph.py | 18 +- ...repare_intermodal_public_transport_graph.R | 10 +- .../prepare_public_transport_graph.R | 2 +- .../public_transport/public_transport.py} | 31 +- .../public_transport_generalized_cost.py | 9 +- .../public_transport_graph.py | 16 +- .../public_transport_travel_costs.py | 18 +- .../modes}/public_transport/routing_tests.R | 0 .../save_intermodal_public_transport_paths.R | 2 +- .../walk_mode.py => transport/modes/walk.py} | 27 +- mobility/transport_costs/__init__.py | 0 mobility/transport_graphs/__init__.py | 4 - mobility/transport_modes/__init__.py | 7 - mobility/transport_modes/bicycle/__init__.py | 1 - mobility/transport_modes/car/__init__.py | 1 - .../public_transport/__init__.py | 2 - .../prepare_public_transport_costs.R | 65 - mobility/transport_modes/walk/__init__.py | 1 - mobility/trips/__init__.py | 1 + mobility/trips/group_day_trips/__init__.py | 9 + .../trips/group_day_trips/core/__init__.py | 12 + .../group_day_trips/core/group_day_trips.py} | 166 +- .../group_day_trips/core/parameters.py} | 2 +- .../group_day_trips/core/results.py} | 101 +- mobility/trips/group_day_trips/core/run.py | 481 + .../group_day_trips/evaluation/__init__.py | 11 + .../evaluation/car_traffic_evaluation.py | 0 .../public_transport_network_evaluation.py | 0 .../evaluation/routing_evaluation.py | 4 +- .../evaluation/travel_costs_evaluation.py | 0 .../group_day_trips/iterations/__init__.py | 19 + .../iterations/iteration_assets.py | 216 + .../group_day_trips/iterations/iterations.py | 298 + .../trips/group_day_trips/plans/__init__.py | 11 + .../plans/destination_sequences.py | 397 + .../group_day_trips/plans/mode_sequences.py | 230 + .../plans/plan_initializer.py} | 145 +- .../group_day_trips/plans/plan_updater.py} | 546 +- .../group_day_trips/plans/sequence_index.py} | 15 +- .../group_day_trips/transitions/__init__.py | 10 + .../transitions}/congestion_state.py | 2 +- .../transitions}/transition_metrics.py | 18 +- .../transitions}/transition_schema.py | 8 +- .../trips/individual_year_trips/__init__.py | 19 + .../individual_year_trips.py} | 14 +- .../individual_year_trips}/safe_sample.py | 0 .../individual_year_trips}/sample_travels.py | 0 mobility/ui/assets/dashExtensions_default.js | 29 - mobility/ui/ui.py | 343 - .../test_003_car_costs_can_be_computed.py | 2 +- ..._public_transport_costs_can_be_computed.py | 4 +- ...st_005_mobility_surveys_can_be_prepared.py | 2 +- .../test_006_trips_can_be_sampled.py | 2 +- .../test_007_trips_can_be_localized.py | 51 - ...tion_segment_day_plans_can_be_computed.py} | 35 +- ...ment_day_plans_results_can_be_computed.py} | 25 +- ...ent_day_plans_results_are_reproducible.py} | 27 +- .../test_901_ensure_quickstart_works.py | 4 +- ..._001_travel_costs_aggregator_congestion.py | 6 +- .../back/unit/costs/travel_costs/conftest.py | 6 +- .../test_001_routing_parameters.py | 4 +- tests/back/unit/domain/asset/conftest.py | 12 +- tests/back/unit/domain/population/conftest.py | 36 +- .../test_033_algorithmic_method_edge_cases.py | 4 +- tests/back/unit/domain/set_params/conftest.py | 24 +- ...est_025_set_env_variable_sets_and_skips.py | 2 +- ...ta_folder_path_provided_and_default_yes.py | 4 +- ...ta_folder_path_provided_and_default_yes.py | 2 +- ...t_028_install_and_set_params_end_to_end.py | 2 +- .../unit/domain/transport_zones/conftest.py | 28 +- .../test_041_init_builds_inputs_and_cache.py | 2 +- .../test_042_get_cached_asset_reads_file.py | 2 +- ...et_returns_in_memory_value_when_present.py | 2 +- tests/back/unit/domain/trips/conftest.py | 62 +- .../test_036_init_builds_inputs_and_cache.py | 6 +- ...test_037_get_cached_asset_reads_parquet.py | 4 +- ...eate_and_get_asset_delegates_and_writes.py | 4 +- ...est_038_get_population_trips_happy_path.py | 6 +- ...est_039_get_individual_trips_edge_cases.py | 6 +- .../test_040_filter_population_is_applied.py | 8 +- .../ademe_base_carbone/conftest.py | 52 +- ...issions_factor_builds_url_and_throttles.py | 2 +- ...s_factor_uses_proxies_and_returns_float.py | 2 +- ...t_emissions_factor_empty_results_raises.py | 2 +- ...get_emissions_factor_missing_key_raises.py | 2 +- .../unit/test_901_quickstart_drift_guard.py | 4 +- 304 files changed, 3249 insertions(+), 61450 deletions(-) delete mode 100644 examples/old_examples/study_area/study_area.py delete mode 100644 examples/old_examples/switzerland/switzerland.py delete mode 100644 examples/old_examples/tests/tests.py delete mode 100644 examples/old_examples/trip_localizer/example.py delete mode 100644 examples/old_examples/trip_localizer_detailed_steps/trip_localizer_detailed_steps.py rename {mobility/experiments => experiments}/beam_search.py (100%) rename {mobility/experiments => experiments}/chain_model.py (100%) rename {mobility/experiments => experiments}/chained_modes.py (100%) rename {mobility/experiments => experiments}/chained_modes_2.py (100%) rename {mobility/experiments => experiments}/chained_modes_3.py (100%) rename {mobility/experiments => experiments}/chained_modes_fun.py (100%) rename {mobility/experiments => experiments}/dependency_graph.py (98%) rename {mobility/experiments => experiments}/duckdb_buildings.py (100%) rename {mobility/experiments => experiments}/hash_stability/Dockerfile (100%) rename {mobility/experiments => experiments}/hash_stability/hash_stability.py (100%) rename {mobility/levers => experiments}/levers.py (100%) rename {mobility/experiments => experiments}/marsaglia sampling.py (100%) rename {mobility => experiments}/parsers/households_expenses_distribution.py (98%) rename {mobility => experiments}/parsers/insee_lau_ids_to_local_lau_ids.py (81%) rename {mobility => experiments}/parsers/job_active_population.py (100%) rename {mobility => experiments}/parsers/permanent_db_facilities.py (100%) rename {mobility => experiments}/parsers/student_population.py (100%) rename {mobility => experiments}/parsers/students_distribution.py (99%) rename {mobility => experiments}/parsers/swiss_vot_extraction.py (100%) rename {mobility => experiments}/parsers/work_home_flows.py (100%) rename {mobility/experiments => experiments}/prepare_trip_chains.py (99%) rename {mobility/experiments => experiments}/test_iterative_routing.R (100%) rename {mobility/experiments => experiments}/transport_zones.py (100%) delete mode 100644 mobility/.vscode/settings.json create mode 100644 mobility/activities/__init__.py rename mobility/{motives/motive.py => activities/activity.py} (92%) rename mobility/{motives => activities}/home.py (82%) create mode 100644 mobility/activities/leisure/__init__.py rename mobility/{motives => activities/leisure}/leisure.py (91%) rename mobility/{parsers => activities/leisure}/leisure_facilities_distribution.py (94%) rename mobility/{parsers => activities/leisure}/leisures_frequentation.py (100%) rename mobility/{motives => activities}/other.py (80%) create mode 100644 mobility/activities/shopping/__init__.py rename mobility/{motives/shopping.py => activities/shopping/shop.py} (85%) rename mobility/{parsers => activities/shopping}/shops_turnover_distribution.py (99%) create mode 100644 mobility/activities/studies/__init__.py rename mobility/{parsers => activities/studies}/school_students_flows.py (94%) rename mobility/{parsers => activities/studies}/schools_capacity_distribution.py (97%) rename mobility/{motives/studies.py => activities/studies/study.py} (92%) create mode 100644 mobility/activities/work/__init__.py rename mobility/{parsers => activities/work}/jobs_active_population_distribution.py (98%) rename mobility/{parsers => activities/work}/jobs_active_population_flows.py (96%) rename mobility/{motives => activities/work}/work.py (87%) delete mode 100644 mobility/choice_models/destination_choice_model.py delete mode 100644 mobility/choice_models/destination_sequence_sampler.py delete mode 100644 mobility/choice_models/leisure_destination_choice_model.py delete mode 100644 mobility/choice_models/population_trips_run.py delete mode 100644 mobility/choice_models/produits_A38G.csv delete mode 100644 mobility/choice_models/shopping_destination_choice_model.py delete mode 100644 mobility/choice_models/studies_destination_choice_model.py delete mode 100644 mobility/choice_models/top_k_mode_sequence_search.py delete mode 100644 mobility/choice_models/transport_mode_choice_model.py delete mode 100644 mobility/choice_models/utilities.py delete mode 100644 mobility/choice_models/work_destination_choice_model.py delete mode 100644 mobility/concat_costs.py rename mobility/{set_params.py => config.py} (94%) delete mode 100644 mobility/data/CH/CH-2016-superficie-communes.csv delete mode 100644 mobility/data/CH/CH-2021-emplois-communes-par-secteur.csv delete mode 100644 mobility/data/CH/CH-2021-emplois-communes.csv delete mode 100644 mobility/data/CH/CH-2022-population-communes.xlsx delete mode 100644 mobility/data/CH/CH-2023-repertoire-localites.csv delete mode 100644 mobility/data/README.md delete mode 100644 mobility/data/__init__.py delete mode 100644 mobility/data/gtfs/gtfs_route_types.xlsx delete mode 100644 mobility/data/gtfs/routing_tests/standard_routing_tests.csv delete mode 100644 mobility/data/insee/esane/equipments_features.xlsx delete mode 100644 mobility/data/insee/esane/equipments_insee_to_naf.xlsx delete mode 100644 mobility/data/insee/esane/shops_turnover.xlsx delete mode 100644 mobility/data/insee/schools/schools.parquet delete mode 100644 mobility/data/insee/territories/departements-france.csv delete mode 100644 mobility/data/insee/territories/donneesCommunesFrance.csv delete mode 100644 mobility/data/surveys/entd-2008/.gitkeep delete mode 100644 mobility/experiments/iterative.py rename mobility/{parsers => impacts}/ademe_base_carbone.py (100%) rename mobility/{ => impacts}/carbon_computation.py (97%) rename mobility/{transport_modes => impacts}/default_gwp.py (100%) delete mode 100644 mobility/localized_trips.py delete mode 100644 mobility/motives/__init__.py delete mode 100644 mobility/parsers/__init__.py delete mode 100644 mobility/parsers/urban_units.py create mode 100644 mobility/population/__init__.py rename mobility/{parsers => population}/census_localized_individuals.py (97%) rename mobility/{parsers => population}/city_legal_population.py (96%) rename mobility/{ => population}/population.py (97%) delete mode 100644 mobility/r_utils/get_aon.R delete mode 100644 mobility/r_utils/plot_flows.R delete mode 100644 mobility/r_utils/plot_graph_around_vertex.R delete mode 100644 mobility/r_utils/plumber_functions.R delete mode 100644 mobility/r_utils/routing_plumber.R delete mode 100644 mobility/radiation_model.py delete mode 100644 mobility/radiation_model_selection.py create mode 100644 mobility/runtime/__init__.py create mode 100644 mobility/runtime/assets/__init__.py rename mobility/{ => runtime/assets}/asset.py (100%) rename mobility/{ => runtime/assets}/file_asset.py (99%) rename mobility/{ => runtime/assets}/in_memory_asset.py (80%) create mode 100644 mobility/runtime/io/__init__.py rename mobility/{parsers => runtime/io}/download_file.py (100%) rename mobility/{parsers => runtime/io}/patch_openpyxl.py (100%) create mode 100644 mobility/runtime/r_integration/__init__.py rename mobility/{r_utils => runtime/r_integration}/install_packages.R (100%) rename mobility/{r_utils/r_script.py => runtime/r_integration/r_script_runner.py} (92%) create mode 100644 mobility/runtime/resources/__init__.py rename mobility/{data => runtime/resources}/ademe/Base_Carbone_V22.0.csv (100%) rename mobility/{data => runtime/resources}/ademe/mapping.csv (100%) rename mobility/{data => runtime/resources}/bfs/je-f-21.03.01.xlsx (100%) rename mobility/{data => runtime/resources}/gtfs/gtfs_route_types.csv (100%) rename mobility/{data => runtime/resources}/insee/insee_RP2021_mobpro_border_cities.csv (100%) rename mobility/{ => runtime}/resources/osmdata_0.2.5.005.zip (100%) rename mobility/{data => runtime/resources}/surveys/entd_mode.xlsx (100%) create mode 100644 mobility/spatial/__init__.py rename mobility/{parsers => spatial}/admin_boundaries.py (98%) rename mobility/{parsers => spatial}/local_admin_units.py (96%) rename mobility/{parsers => spatial}/local_admin_units_categories.py (97%) rename mobility/{parsers => spatial}/osm/__init__.py (100%) rename mobility/{parsers => spatial}/osm/geofabrik_extract.py (77%) rename mobility/{parsers => spatial}/osm/geofabrik_regions.py (98%) rename mobility/{parsers => spatial}/osm/osm_country_border.py (92%) rename mobility/{parsers => spatial}/osm/osm_data.py (98%) rename mobility/{r_utils => spatial}/prepare_transport_zones.R (100%) rename mobility/{ => spatial}/study_area.py (98%) rename mobility/{ => spatial}/transport_zones.py (96%) rename mobility/{parsers/mobility_survey => surveys}/__init__.py (100%) rename mobility/{parsers/mobility_survey => surveys}/aggregator.py (96%) rename mobility/{parsers/mobility_survey => surveys}/france/__init__.py (100%) rename mobility/{parsers/mobility_survey => surveys}/france/emp.py (99%) rename mobility/{parsers/mobility_survey => surveys}/france/entd.py (99%) rename mobility/{parsers/mobility_survey => surveys}/mobility_survey.py (99%) create mode 100644 mobility/transport/__init__.py create mode 100644 mobility/transport/costs/__init__.py rename mobility/{transport_costs => transport/costs}/od_flows_asset.py (93%) create mode 100644 mobility/transport/costs/parameters/__init__.py rename mobility/{ => transport/costs/parameters}/cost_of_time_parameters.py (100%) rename mobility/{ => transport/costs/parameters}/generalized_cost_parameters.py (82%) rename mobility/{ => transport/costs/parameters}/path_routing_parameters.py (100%) create mode 100644 mobility/transport/costs/path/__init__.py rename mobility/{transport_costs => transport/costs/path}/path_generalized_cost.py (90%) rename mobility/{transport_costs => transport/costs/path}/path_travel_costs.py (88%) rename mobility/{transport_costs => transport/costs/path}/path_travel_costs_snapshot.py (77%) rename mobility/{r_utils => transport/costs/path}/prepare_dodgr_costs.R (98%) rename mobility/{choice_models/travel_costs_aggregator.py => transport/costs/transport_costs_aggregator.py} (97%) create mode 100644 mobility/transport/graphs/__init__.py create mode 100644 mobility/transport/graphs/congested/__init__.py rename mobility/{transport_graphs => transport/graphs/congested}/congested_path_graph.py (88%) rename mobility/{transport_graphs => transport/graphs/congested}/congested_path_graph_snapshot.py (82%) rename mobility/{r_utils => transport/graphs/congested}/duplicate_cpprouting_graph.R (100%) rename mobility/{r_utils => transport/graphs/congested}/initialize_travel_costs.R (100%) rename mobility/{transport_graphs => transport/graphs/congested}/load_path_graph.R (93%) create mode 100644 mobility/transport/graphs/contracted/__init__.py rename mobility/{transport_graphs => transport/graphs/contracted}/contract_path_graph.R (94%) rename mobility/{transport_graphs => transport/graphs/contracted}/contracted_path_graph.py (81%) rename mobility/{transport_graphs => transport/graphs/contracted}/contracted_path_graph_snapshot.py (76%) create mode 100644 mobility/transport/graphs/core/__init__.py rename mobility/{r_utils => transport/graphs/core}/cpprouting_io.R (100%) rename mobility/{r_utils => transport/graphs/core}/get_buildings_nearest_vertex_id.R (100%) rename mobility/{transport_graphs => transport/graphs/core}/get_path_pair.R (92%) rename mobility/{transport_graphs => transport/graphs/core}/graph_gpkg_exporter.py (100%) rename mobility/{transport_graphs => transport/graphs/core}/path_graph.py (61%) rename mobility/{r_utils => transport/graphs/core}/tz_pairs_to_vertex_pairs.R (100%) create mode 100644 mobility/transport/graphs/modified/__init__.py rename mobility/{r_utils => transport/graphs/modified}/concatenate_graphs.R (100%) rename mobility/{transport_graphs => transport/graphs/modified}/modified_path_graph.py (78%) create mode 100644 mobility/transport/graphs/modified/modifiers/__init__.py rename mobility/{transport_graphs/graph_modifiers => transport/graphs/modified/modifiers}/apply_border_crossing_speed_modifier.R (100%) rename mobility/{transport_graphs/graph_modifiers => transport/graphs/modified/modifiers}/apply_limited_speed_zones_modifier.R (100%) rename mobility/{transport_graphs/graph_modifiers => transport/graphs/modified/modifiers}/apply_new_road_modifier.R (100%) rename mobility/{transport_graphs/graph_modifiers => transport/graphs/modified/modifiers}/apply_road_lane_number_modifier.R (100%) rename mobility/{transport_graphs => transport/graphs/modified/modifiers}/speed_modifier.py (96%) rename mobility/{transport_graphs => transport/graphs/modified}/modify_path_graph.R (79%) create mode 100644 mobility/transport/graphs/simplified/__init__.py rename mobility/{r_utils => transport/graphs/simplified}/create_graph_from_travel_costs.R (100%) rename mobility/{transport_graphs => transport/graphs/simplified}/prepare_path_graph.R (99%) rename mobility/{transport_graphs => transport/graphs/simplified}/simplified_path_graph.py (84%) create mode 100644 mobility/transport/modes/__init__.py rename mobility/{transport_modes/bicycle/bicycle_mode.py => transport/modes/bicycle.py} (65%) rename mobility/{transport_modes/car/car_mode.py => transport/modes/car.py} (77%) rename mobility/{transport_modes => transport/modes}/carpool/__init__.py (61%) rename mobility/{transport_modes/carpool/carpool_mode.py => transport/modes/carpool/carpool.py} (81%) rename mobility/{transport_modes => transport/modes}/carpool/detailed/__init__.py (100%) rename mobility/{transport_modes => transport/modes}/carpool/detailed/compute_carpool_travel_costs.R (89%) rename mobility/{transport_modes => transport/modes}/carpool/detailed/detailed_carpool_generalized_cost.py (93%) rename mobility/{transport_modes => transport/modes}/carpool/detailed/detailed_carpool_travel_costs.py (88%) rename mobility/{transport_modes => transport/modes}/carpool/detailed/detailed_carpool_travel_costs_snapshot.py (87%) rename mobility/{transport_modes => transport/modes}/carpool/detailed/prepare_carpool_graph.R (95%) rename mobility/{transport_modes => transport/modes}/carpool/simple/__init__.py (100%) rename mobility/{transport_modes => transport/modes}/carpool/simple/simple_carpool_parameters.py (100%) rename mobility/{transport_modes => transport/modes}/carpool/simple/simple_carpool_travel_costs.py (96%) create mode 100644 mobility/transport/modes/choice/__init__.py rename mobility/{transport_modes => transport/modes/choice}/compute_subtour_mode_probabilities.py (96%) rename mobility/{transport_modes => transport/modes/choice}/compute_subtour_mode_probs_parallel_utilities.py (100%) create mode 100644 mobility/transport/modes/core/__init__.py rename mobility/{transport_modes => transport/modes/core}/defaults.py (100%) rename mobility/{transport_modes => transport/modes/core}/modal_transfer.py (100%) rename mobility/{transport_modes => transport/modes/core}/mode_registry.py (96%) rename mobility/{transport_modes => transport/modes/core}/osm_capacity_parameters.py (100%) rename mobility/{transport_modes => transport/modes/core}/transport_mode.py (98%) create mode 100644 mobility/transport/modes/public_transport/__init__.py rename mobility/{transport_modes => transport/modes}/public_transport/compute_intermodal_public_transport_travel_costs.R (99%) rename mobility/{transport_modes => transport/modes}/public_transport/gtfs/__init__.py (100%) rename mobility/{transport_modes => transport/modes}/public_transport/gtfs/gtfs_data.py (95%) rename mobility/{transport_modes => transport/modes}/public_transport/gtfs/gtfs_router.py (96%) rename mobility/{parsers => transport/modes/public_transport/gtfs}/gtfs_stops.py (96%) rename mobility/{transport_modes => transport/modes}/public_transport/gtfs/prepare_gtfs_router.R (99%) rename mobility/{transport_modes => transport/modes}/public_transport/intermodal_transport_graph.py (90%) rename mobility/{transport_modes => transport/modes}/public_transport/prepare_intermodal_public_transport_graph.R (97%) rename mobility/{transport_modes => transport/modes}/public_transport/prepare_public_transport_graph.R (99%) rename mobility/{transport_modes/public_transport/public_transport_mode.py => transport/modes/public_transport/public_transport.py} (84%) rename mobility/{transport_modes => transport/modes}/public_transport/public_transport_generalized_cost.py (95%) rename mobility/{transport_modes => transport/modes}/public_transport/public_transport_graph.py (89%) rename mobility/{transport_modes => transport/modes}/public_transport/public_transport_travel_costs.py (89%) rename mobility/{transport_modes => transport/modes}/public_transport/routing_tests.R (100%) rename mobility/{transport_modes => transport/modes}/public_transport/save_intermodal_public_transport_paths.R (98%) rename mobility/{transport_modes/walk/walk_mode.py => transport/modes/walk.py} (68%) delete mode 100644 mobility/transport_costs/__init__.py delete mode 100644 mobility/transport_graphs/__init__.py delete mode 100644 mobility/transport_modes/__init__.py delete mode 100644 mobility/transport_modes/bicycle/__init__.py delete mode 100644 mobility/transport_modes/car/__init__.py delete mode 100644 mobility/transport_modes/public_transport/__init__.py delete mode 100644 mobility/transport_modes/public_transport/prepare_public_transport_costs.R delete mode 100644 mobility/transport_modes/walk/__init__.py create mode 100644 mobility/trips/__init__.py create mode 100644 mobility/trips/group_day_trips/__init__.py create mode 100644 mobility/trips/group_day_trips/core/__init__.py rename mobility/{choice_models/population_trips.py => trips/group_day_trips/core/group_day_trips.py} (53%) rename mobility/{choice_models/population_trips_parameters.py => trips/group_day_trips/core/parameters.py} (99%) rename mobility/{choice_models/population_trips_run_results.py => trips/group_day_trips/core/results.py} (89%) create mode 100644 mobility/trips/group_day_trips/core/run.py create mode 100644 mobility/trips/group_day_trips/evaluation/__init__.py rename mobility/{choice_models => trips/group_day_trips}/evaluation/car_traffic_evaluation.py (100%) rename mobility/{choice_models => trips/group_day_trips}/evaluation/public_transport_network_evaluation.py (100%) rename mobility/{choice_models => trips/group_day_trips}/evaluation/routing_evaluation.py (98%) rename mobility/{choice_models => trips/group_day_trips}/evaluation/travel_costs_evaluation.py (100%) create mode 100644 mobility/trips/group_day_trips/iterations/__init__.py create mode 100644 mobility/trips/group_day_trips/iterations/iteration_assets.py create mode 100644 mobility/trips/group_day_trips/iterations/iterations.py create mode 100644 mobility/trips/group_day_trips/plans/__init__.py create mode 100644 mobility/trips/group_day_trips/plans/destination_sequences.py create mode 100644 mobility/trips/group_day_trips/plans/mode_sequences.py rename mobility/{choice_models/state_initializer.py => trips/group_day_trips/plans/plan_initializer.py} (72%) rename mobility/{choice_models/state_updater.py => trips/group_day_trips/plans/plan_updater.py} (56%) rename mobility/{choice_models/add_index.py => trips/group_day_trips/plans/sequence_index.py} (85%) create mode 100644 mobility/trips/group_day_trips/transitions/__init__.py rename mobility/{choice_models => trips/group_day_trips/transitions}/congestion_state.py (92%) rename mobility/{choice_models => trips/group_day_trips/transitions}/transition_metrics.py (98%) rename mobility/{choice_models => trips/group_day_trips/transitions}/transition_schema.py (84%) create mode 100644 mobility/trips/individual_year_trips/__init__.py rename mobility/{trips.py => trips/individual_year_trips/individual_year_trips.py} (98%) rename mobility/{ => trips/individual_year_trips}/safe_sample.py (100%) rename mobility/{ => trips/individual_year_trips}/sample_travels.py (100%) delete mode 100644 mobility/ui/assets/dashExtensions_default.js delete mode 100644 mobility/ui/ui.py delete mode 100644 tests/back/integration/test_007_trips_can_be_localized.py rename tests/back/integration/{test_008_population_trips_can_be_computed.py => test_008_population_segment_day_plans_can_be_computed.py} (82%) rename tests/back/integration/{test_009_population_trips_results_can_be_computed.py => test_009_population_segment_day_plans_results_can_be_computed.py} (83%) rename tests/back/integration/{test_010_population_trips_results_are_reproducible.py => test_010_population_segment_day_plans_results_are_reproducible.py} (65%) rename tests/back/unit/{parsers => impacts}/ademe_base_carbone/conftest.py (86%) rename tests/back/unit/{parsers => impacts}/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py (95%) rename tests/back/unit/{parsers => impacts}/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py (93%) rename tests/back/unit/{parsers => impacts}/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py (88%) rename tests/back/unit/{parsers => impacts}/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py (88%) diff --git a/.gitignore b/.gitignore index e79e6cdb..272069ca 100644 --- a/.gitignore +++ b/.gitignore @@ -101,6 +101,14 @@ ipython_config.py # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control #poetry.lock +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ @@ -151,6 +159,15 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ +# Poetry local configuration file +poetry.toml + +# ruff +.ruff_cache/ + +# LSP config files +pyrightconfig.json + # History files .Rhistory .Rapp.history @@ -198,29 +215,16 @@ po/*~ # RStudio Connect folder rsconnect/ -# Input data files -mobility/data/surveys/emp-2019/* -!mobility/data/surveys/emp-2019/.gitkeep - -mobility/data/surveys/entd-2008/* -!mobility/data/surveys/entd-2008/.gitkeep - -mobility/data/insee/work/* -mobility/data/insee/facilities/* -mobility/data/insee/esane/* -mobility/data/insee/work_home_flows/* - -mobility/data/ign/admin-express/* -mobility/data/insee/territories/UU2020_au_01-01-2023.xlsx -.Rproj.user - +# R package: bookdown caching files +/*_files/ **/.env .DS_Store certs/ -nngeo-master -front/gtfsrouter-main -.vscode/ \ No newline at end of file +.vscode/ + +# Local scratch file created while refreshing ignore rules +.gitignore-new diff --git a/docs/source/trips.rst b/docs/source/trips.rst index a1bf1e15..47b8f561 100644 --- a/docs/source/trips.rst +++ b/docs/source/trips.rst @@ -3,59 +3,42 @@ Trips ================ ---------------- -PopulationTrips +GroupDayTrips ---------------- -Trips for a given population can be generated using the class ``population_trips``. +Group-level day plans for a given population can be generated using +the class ``GroupDayTrips``. - .. automodule:: mobility.choice_models.population_trips + .. automodule:: mobility.trips.group_day_trips :members: -Use ``PopulationTripsParameters`` to change the parameters. +Use ``Parameters`` to change the model configuration. - .. automodule:: mobility.choice_models.population_trips_parameters + .. automodule:: mobility.trips.group_day_trips.core.parameters :members: -``population_trips`` uses different other classes : -# ``StateInitializer``: initialises the data -# ``DestinationSequenceSampler`` samples destinations sequences -# ``TopKModeSequenceSearch`` finds the k best modal chains for each destination sequence -# ``StateUpdater`` updates population state distributions over motive/destination/mode sequence - - .. automodule:: mobility.choice_models.state_initializer - :members: - - .. automodule:: mobility.choice_models.destination_sequence_sampler - :members: - - .. automodule:: mobility.choice_models.top_k_mode_sequence_search - :members: - - .. automodule:: mobility.choice_models.state_updater - :members: - - ---------------- Helpers ---------------- -``TopKModeSequenceSearch`` uses the function ``add_index`` to ensure a stable integer index exists for a categorical or string column. - +``GroupDayTrips`` produces results through ``RunResults`` and stores +transition events that can be analyzed with the evaluation helpers. - .. automodule:: mobility.choice_models.add_index + .. automodule:: mobility.trips.group_day_trips.core.results :members: ---------------- -Trips +IndividualYearTrips ---------------- -Besides population_trips, trips can be sampled using the class ``Trips``. Use the .get() method to access a dataframe with those trips. +Individual trips can be sampled using the class ``IndividualYearTrips``. +Use ``.get()`` to access the generated dataframe. - .. automodule:: mobility.trips + .. automodule:: mobility.trips.individual_year_trips :members: The trip generation uses the ``safe_sample`` module to ensure we do not use non-representative data (from a group below the minimal sample size). - .. automodule:: mobility.safe_sample + .. automodule:: mobility.trips.individual_year_trips.safe_sample :members: diff --git a/examples/old_examples/Hauts-Doubs/radiation-JU-NE-25-39.py b/examples/old_examples/Hauts-Doubs/radiation-JU-NE-25-39.py index 84c230f0..c319483d 100644 --- a/examples/old_examples/Hauts-Doubs/radiation-JU-NE-25-39.py +++ b/examples/old_examples/Hauts-Doubs/radiation-JU-NE-25-39.py @@ -1,5 +1,5 @@ -from mobility.radiation_departments import run_model_for_territory -from mobility.radiation_FR_CH import get_franco_swiss_data_for_model +from mobility.runtime.r_integrationadiation_departments import run_model_for_territory +from mobility.runtime.r_integrationadiation_FR_CH import get_franco_swiss_data_for_model terr = ["25", "39", "NE", "VD"] # terr =["25","39"] diff --git a/examples/old_examples/Millau/Millau_example.py b/examples/old_examples/Millau/Millau_example.py index f94c408a..5206c032 100644 --- a/examples/old_examples/Millau/Millau_example.py +++ b/examples/old_examples/Millau/Millau_example.py @@ -18,7 +18,7 @@ (communes_surfaces_csv) """ -from mobility.radiation_departments import * +from mobility.runtime.r_integrationadiation_departments import * import time diff --git a/examples/old_examples/Millau/pa.py b/examples/old_examples/Millau/pa.py index fb8550d1..88c97875 100644 --- a/examples/old_examples/Millau/pa.py +++ b/examples/old_examples/Millau/pa.py @@ -1,4 +1,4 @@ -from mobility.radiation_departments import * +from mobility.runtime.r_integrationadiation_departments import * dep =["64"] diff --git a/examples/old_examples/mobility_survey/mobility_survey.py b/examples/old_examples/mobility_survey/mobility_survey.py index 6c71c0b4..21edbaba 100644 --- a/examples/old_examples/mobility_survey/mobility_survey.py +++ b/examples/old_examples/mobility_survey/mobility_survey.py @@ -2,7 +2,7 @@ import dotenv import mobility -from mobility.parsers import MobilitySurvey +from mobility.surveys import MobilitySurvey dotenv.load_dotenv() @@ -12,4 +12,4 @@ ) ms_2019 = MobilitySurvey(source="EMP-2019") -ms_2008 = MobilitySurvey(source="ENTD-2008") \ No newline at end of file +ms_2008 = MobilitySurvey(source="ENTD-2008") diff --git a/examples/old_examples/study_area/study_area.py b/examples/old_examples/study_area/study_area.py deleted file mode 100644 index d67474cb..00000000 --- a/examples/old_examples/study_area/study_area.py +++ /dev/null @@ -1,233 +0,0 @@ -import os -import dotenv -import mobility -import pandas as pd - -# Mobility can set up env variables from a .env file located next to the -# running script, containing for example : -# MOBILITY_PACKAGE_DATA_FOLDER=D:/data/mobility/data -# MOBILITY_PROJECT_DATA_FOLDER=D:/data/mobility/projects/gtfs_download_dates -# MOBILITY_GTFS_DOWNLOAD_DATE="2024-09-02" - -dotenv.load_dotenv() - -mobility.set_params( - package_data_folder_path=os.environ["MOBILITY_PACKAGE_DATA_FOLDER"], - project_data_folder_path=os.environ["MOBILITY_PROJECT_DATA_FOLDER"], - debug=True -) - -transport_zones = mobility.TransportZones("ch-6621", radius=20.0, level_of_detail=1) - -walk = mobility.WalkMode(transport_zones) -bicycle = mobility.BicycleMode(transport_zones) -car = mobility.CarMode(transport_zones) - -carpool = mobility.CarpoolMode( - car, - modal_shift=mobility.ModalShift( - max_travel_time=20.0/60.0, - average_speed=50.0, - shift_time=10.0 - ) -) - -walk_pt = mobility.PublicTransportMode( - transport_zones, - first_leg_mode=walk, - last_leg_mode=walk, - first_modal_shift=mobility.ModalShift( - max_travel_time=20.0/60.0, - average_speed=5.0, - shift_time=10.0 - ), - last_modal_shift=mobility.ModalShift( - max_travel_time=20.0/60.0, - average_speed=5.0, - shift_time=2.0 - ) -) - -car_pt = mobility.PublicTransportMode( - transport_zones, - first_leg_mode=car, - last_leg_mode=walk, - first_modal_shift=mobility.ModalShift( - max_travel_time=20.0/60.0, - average_speed=50.0, - shift_time=10.0 - ), - last_modal_shift=mobility.ModalShift( - max_travel_time=20.0/60.0, - average_speed=5.0, - shift_time=2.0 - ) -) - -from mobility.choice_models.work_destination_choice_model import WorkDestinationChoiceModelParameters -import numpy as np - -min_ssr = None - -for selection_lambda in np.arange(0.99985, 0.99999, 0.00001): - for fr_utility in np.arange(120.0, 140.0, 5.0): - for ch_utility in np.arange(120.0, 140.0, 5.0): - - parameters = WorkDestinationChoiceModelParameters( - model={ - "type": "radiation", - "lambda": selection_lambda - }, - utility={ - "fr": fr_utility, - "ch": ch_utility - } - ) - - work_dest_cm_2024 = mobility.WorkDestinationChoiceModel( - transport_zones, - modes=[ - walk, - bicycle, - car, - walk_pt, - car_pt, - carpool - ], - parameters=parameters - ) - - work_dest_cm_2024.get() - comparison = work_dest_cm_2024.get_comparison() - ssi = work_dest_cm_2024.compute_ssi(comparison, 200) - - ssr = np.log(1 + comparison["flow_volume"]) - np.log(1 + comparison["ref_flow_volume"]) - ssr = ssr*ssr - ssr = ssr.sum() - - if min_ssr is None: - min_ssr = ssr - best_parameters = [selection_lambda, fr_utility, ch_utility] - elif ssr < min_ssr: - min_ssr = ssr - best_parameters = [selection_lambda, fr_utility, ch_utility] - - print("-----------------") - print("lambda : " + str(selection_lambda)) - print("utility_fr : " + str(fr_utility)) - print("utility_ch : " + str(ch_utility)) - print(ssr) - - print("-----------------") - print("-----------------") - print("-----------------") - - -# best_parameters = [0.99996, 130.0, 135.0] - -parameters = WorkDestinationChoiceModelParameters( - model={ - "type": "radiation", - "lambda": best_parameters[0] - }, - utility={ - "fr": best_parameters[1], - "ch": best_parameters[2] - } -) - -work_dest_cm_2024 = mobility.WorkDestinationChoiceModel( - transport_zones, - modes=[ - walk, - bicycle, - car, - walk_pt, - car_pt, - carpool - ], - parameters=parameters -) - -work_dest_cm_2024.get() -comparison = work_dest_cm_2024.get_comparison() -ssi = work_dest_cm_2024.compute_ssi(comparison, 400) - -ssi - -work_dest_cm_2024.plot_model_fit(comparison) - -comparison["country_from"] = comparison["local_admin_unit_id_from"].str[0:2] - -x = comparison.groupby(["local_admin_unit_id_to", "country_from"])["flow_volume"].sum() -x /= x.groupby("local_admin_unit_id_to").sum() - -comparison[comparison["local_admin_unit_id_from"] == "fr-74012"].flow_volume.sum() -comparison[comparison["local_admin_unit_id_from"] == "fr-74012"].ref_flow_volume.sum() - - -comparison[comparison["local_admin_unit_id_to"] == "fr-74012"].flow_volume.sum() -comparison[comparison["local_admin_unit_id_to"] == "fr-74012"].ref_flow_volume.sum() - - -jobs, active_population = mobility.parsers.JobsActivePopulationDistribution().get() -jobs.loc["fr-74012"] -active_population.loc["fr-74012"] - - -ref_flows = mobility.parsers.JobsActivePopulationFlows().get() -f = ref_flows[ref_flows["local_admin_unit_id_from"] == "fr-74012"] -ref_flows[ref_flows["local_admin_unit_id_to"] == "fr-74012"].ref_flow_volume.sum() - - -sources, sinks = work_dest_cm_2024.prepare_sources_and_sinks(transport_zones.get()) - -sources.sum() -sinks.sum() - -tz = transport_zones.get().drop(columns="geometry") - - -sources = pd.merge(sources.reset_index(), tz, left_on="from", right_on="transport_zone_id") -sources[sources.local_admin_unit_id.str[0:2] == "ch"].source_volume.sum() - -sinks = pd.merge(sinks.reset_index(), tz, left_on="to", right_on="transport_zone_id") -sinks[sinks.local_admin_unit_id.str[0:2] == "ch"].sink_volume.sum() - - -sources.loc[38] -sinks.loc[38] - -x = comparison[comparison["local_admin_unit_id_from"] == "fr-74012"] -x = comparison[comparison["local_admin_unit_id_from"] == "fr-74243"] -x = comparison[comparison["local_admin_unit_id_from"] == "ch-6621"] -x = comparison[comparison["local_admin_unit_id_to"] == "ch-6621"] -x = comparison[comparison["local_admin_unit_id_from"] == "ch-6640"] -x = comparison[comparison["local_admin_unit_id_to"] == "ch-6640"] - -from mobility.concat_costs import concat_generalized_cost, concat_travel_costs - -gc = concat_generalized_cost( - [ - walk, - bicycle, - car, - walk_pt, - car_pt, - carpool - ]) - -gc_annemasse = gc[gc["from"] == 38] - - -tc = concat_travel_costs( - [ - walk, - bicycle, - car, - walk_pt, - car_pt, - carpool - ]) - -tc_annemasse = tc[tc["from"] == 38] diff --git a/examples/old_examples/switzerland/switzerland.py b/examples/old_examples/switzerland/switzerland.py deleted file mode 100644 index 04995c9b..00000000 --- a/examples/old_examples/switzerland/switzerland.py +++ /dev/null @@ -1,21 +0,0 @@ -import os -import dotenv -import mobility -import pandas as pd - -dotenv.load_dotenv() - -mobility.set_params( - package_data_folder_path=os.environ["MOBILITY_PACKAGE_DATA_FOLDER"], - project_data_folder_path=os.environ["MOBILITY_PROJECT_DATA_FOLDER"] -) - -transport_zones = mobility.TransportZones("fr-74298", radius = 30) - -travel_costs = mobility.MultimodalTravelCosts(transport_zones) -trans_mode_cm = mobility.TransportModeChoiceModel(travel_costs) -work_dest_cm = mobility.WorkDestinationChoiceModel(transport_zones, travel_costs) - -costs = travel_costs.get() -mode_cm = trans_mode_cm.get() -work_cm = work_dest_cm.get() diff --git a/examples/old_examples/tests/tests.py b/examples/old_examples/tests/tests.py deleted file mode 100644 index 507d5a24..00000000 --- a/examples/old_examples/tests/tests.py +++ /dev/null @@ -1,32 +0,0 @@ -import os -import dotenv -import mobility -import pandas as pd - -dotenv.load_dotenv() - -mobility.set_params( - package_data_folder_path=os.environ["MOBILITY_PACKAGE_DATA_FOLDER"], - project_data_folder_path=os.environ["MOBILITY_PROJECT_DATA_FOLDER"] -) - -transport_zones = mobility.TransportZones("fr-12202", radius = 10.0) - -population = mobility.Population( - transport_zones=transport_zones, - sample_size=100 -) - -travel_costs_car = mobility.TravelCosts(transport_zones, "car") -travel_costs_pt = mobility.PublicTransportTravelCosts(transport_zones) - -trips = mobility.Trips(population) -loc_trips = mobility.LocalizedTrips(trips) - -transport_zones.get() -population.get() -travel_costs_car.get() -travel_costs_pt.get() - -trips.get() -loc_trips.get() diff --git a/examples/old_examples/trip_localizer/example.py b/examples/old_examples/trip_localizer/example.py deleted file mode 100644 index 9d9aad99..00000000 --- a/examples/old_examples/trip_localizer/example.py +++ /dev/null @@ -1,54 +0,0 @@ -import os -import dotenv -import mobility -import pandas as pd - -dotenv.load_dotenv() - -mobility.set_params( - package_data_folder_path=os.environ["MOBILITY_PACKAGE_DATA_FOLDER"], - project_data_folder_path="D:/data/mobility/projects/lyon" -) - -# Generate localized and non-localized trips for individuals sampled -# from the population of each transport zone around Lyon -# (takes ~ 30 min for now, reduce the radius and the sample size if you want faster results) -transport_zones = mobility.TransportZones("69387", method="radius", radius=30.0) -population = mobility.Population(transport_zones, sample_size=10000) -trips = mobility.Trips(population) -loc_trips = mobility.LocalizedTrips(trips) - -# Load the dataframes in memory -transport_zones_df = transport_zones.get() -population_df = population.get() -trips_df = trips.get() -loc_trips_df = loc_trips.get() - -# Compute the localized and non-localized total travelled distance by each individual -trips_df = trips_df.groupby("individual_id", as_index=False)["distance"].sum() -loc_trips_df = loc_trips_df.groupby("individual_id", as_index=False)["distance"].sum() - -# Compare the two total distances -comparison = pd.merge(trips_df, loc_trips_df, on="individual_id", suffixes=["", "_localized"]) -comparison["variation"] = comparison["distance_localized"]/comparison["distance"] - 1.0 -comparison["variation"].describe() -comparison["variation"].hist(bins=30) - -# Plot the average distance by transport zone -trips_df = pd.merge(trips_df, population_df, on="individual_id") -distance_by_tz = trips_df.groupby("transport_zone_id", as_index=False)["distance"].mean() - -loc_trips_df = pd.merge(loc_trips_df, population_df, on="individual_id") -loc_distance_by_tz = loc_trips_df.groupby("transport_zone_id", as_index=False)["distance"].mean() - -distance_map = pd.merge(transport_zones_df, distance_by_tz, on="transport_zone_id") -distance_map.plot("distance", legend=True) - -loc_distance_map = pd.merge(transport_zones_df, loc_distance_by_tz, on="transport_zone_id") -loc_distance_map.plot("distance", legend=True) - -comparison = pd.merge(comparison, population_df, on="individual_id") -comparison = comparison.groupby("transport_zone_id")["distance_localized"].sum()/comparison.groupby("transport_zone_id")["distance"].sum() -comparison = comparison.reset_index() -comparison_map = pd.merge(transport_zones_df, comparison, on="transport_zone_id") -comparison_map.plot(0, legend=True) diff --git a/examples/old_examples/trip_localizer_detailed_steps/trip_localizer_detailed_steps.py b/examples/old_examples/trip_localizer_detailed_steps/trip_localizer_detailed_steps.py deleted file mode 100644 index 53bcb827..00000000 --- a/examples/old_examples/trip_localizer_detailed_steps/trip_localizer_detailed_steps.py +++ /dev/null @@ -1,29 +0,0 @@ -import os -import dotenv -import mobility -import pandas as pd - -dotenv.load_dotenv() - -mobility.set_params( - package_data_folder_path=os.environ["MOBILITY_PACKAGE_DATA_FOLDER"], - project_data_folder_path=os.environ["MOBILITY_PROJECT_DATA_FOLDER"] -) - -# transport_zones = mobility.TransportZones("69387", method="radius", radius=30.0) -transport_zones = mobility.TransportZones("fr-69387", radius=30.0) - -travel_costs = mobility.MultimodalTravelCosts(transport_zones) -trans_mode_cm = mobility.TransportModeChoiceModel(travel_costs, cost_of_time=20.0) -work_dest_cm = mobility.WorkDestinationChoiceModel(transport_zones, travel_costs) - -population = mobility.Population(transport_zones, 100) - -trips = mobility.Trips(population) -loc_trips = mobility.LocalizedTrips(trips, cost_of_time=20.0, work_alpha=0.2, work_beta=0.8) - -trips_df = trips.get() -loc_trips_df = loc_trips.get() - -trips_df.groupby("individual_id")["distance"].sum().mean() -loc_trips_df.groupby("individual_id")["distance"].sum().mean() diff --git a/examples/quickstart-fr-ci.py b/examples/quickstart-fr-ci.py index c694d6b9..b3e52194 100644 --- a/examples/quickstart-fr-ci.py +++ b/examples/quickstart-fr-ci.py @@ -1,5 +1,5 @@ import mobility -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters +from mobility.trips.group_day_trips import Parameters def run_quickstart_ci(): # In CI/integration tests, test setup configures Mobility paths in conftest.py. @@ -14,33 +14,33 @@ def run_quickstart_ci(): population = mobility.Population(transport_zones, sample_size=100) # Simulating trips for this population for car, walk, bicycle - population_trips = mobility.PopulationTrips( - population, - [ - mobility.CarMode(transport_zones), - mobility.WalkMode(transport_zones), - mobility.BicycleMode(transport_zones), + population_trips = mobility.GroupDayTrips( + population=population, + modes=[ + mobility.Car(transport_zones), + mobility.Walk(transport_zones), + mobility.Bicycle(transport_zones), ], - [ - mobility.HomeMotive(), - mobility.WorkMotive(), - mobility.OtherMotive(population=population), + activities=[ + mobility.Home(), + mobility.Work(), + mobility.Other(population=population), ], - [survey], - parameters=PopulationTripsParameters( + surveys=[survey], + parameters=Parameters( n_iterations=1, mode_sequence_search_parallel=False, ), ) - # You can get weekday trips to inspect them - weekday_flows = population_trips.get()["weekday_flows"].collect() + # You can get weekday plan steps to inspect them + weekday_plan_steps = population_trips.get()["weekday_plan_steps"].collect() # You can compute global metrics for this population global_metrics = population_trips.weekday_run.evaluate("global_metrics") return { - "weekday_flows": weekday_flows, + "weekday_plan_steps": weekday_plan_steps, "global_metrics": global_metrics, } diff --git a/examples/quickstart-fr.py b/examples/quickstart-fr.py index c2ab4fab..faed0497 100644 --- a/examples/quickstart-fr.py +++ b/examples/quickstart-fr.py @@ -1,6 +1,7 @@ import os import dotenv import mobility +from mobility.trips.group_day_trips import Parameters dotenv.load_dotenv() @@ -19,24 +20,27 @@ population = mobility.Population(transport_zones, sample_size=1000) # Simulating trips for this population for car, walk, bicycle -population_trips = mobility.PopulationTrips( - population, - [ - mobility.CarMode(transport_zones), - mobility.WalkMode(transport_zones), - mobility.BicycleMode(transport_zones), +population_trips = mobility.GroupDayTrips( + population=population, + modes=[ + mobility.Car(transport_zones), + mobility.Walk(transport_zones), + mobility.Bicycle(transport_zones), ], - [ - mobility.HomeMotive(), - mobility.WorkMotive(), - mobility.OtherMotive(population=population), + activities=[ + mobility.Home(), + mobility.Work(), + mobility.Other(population=population), ], - [survey], - n_iterations=1, + surveys=[survey], + parameters=Parameters( + n_iterations=1, + mode_sequence_search_parallel=False, + ), ) -# You can get weekday trips to inspect them -weekday_flows = population_trips.get()["weekday_flows"].collect() +# You can get weekday plan steps to inspect them +weekday_plan_steps = population_trips.get()["weekday_plan_steps"].collect() # You can compute global metrics for weekday trips global_metrics = population_trips.weekday_run.evaluate("global_metrics") diff --git a/mobility/experiments/beam_search.py b/experiments/beam_search.py similarity index 100% rename from mobility/experiments/beam_search.py rename to experiments/beam_search.py diff --git a/mobility/experiments/chain_model.py b/experiments/chain_model.py similarity index 100% rename from mobility/experiments/chain_model.py rename to experiments/chain_model.py diff --git a/mobility/experiments/chained_modes.py b/experiments/chained_modes.py similarity index 100% rename from mobility/experiments/chained_modes.py rename to experiments/chained_modes.py diff --git a/mobility/experiments/chained_modes_2.py b/experiments/chained_modes_2.py similarity index 100% rename from mobility/experiments/chained_modes_2.py rename to experiments/chained_modes_2.py diff --git a/mobility/experiments/chained_modes_3.py b/experiments/chained_modes_3.py similarity index 100% rename from mobility/experiments/chained_modes_3.py rename to experiments/chained_modes_3.py diff --git a/mobility/experiments/chained_modes_fun.py b/experiments/chained_modes_fun.py similarity index 100% rename from mobility/experiments/chained_modes_fun.py rename to experiments/chained_modes_fun.py diff --git a/mobility/experiments/dependency_graph.py b/experiments/dependency_graph.py similarity index 98% rename from mobility/experiments/dependency_graph.py rename to experiments/dependency_graph.py index d6a32f77..0d088938 100644 --- a/mobility/experiments/dependency_graph.py +++ b/experiments/dependency_graph.py @@ -22,7 +22,7 @@ df = multi_modal_mode_2024.travel_costs.get() -from mobility.asset import Asset +from mobility.assets.asset import Asset def build_dependency_graph(asset): diff --git a/mobility/experiments/duckdb_buildings.py b/experiments/duckdb_buildings.py similarity index 100% rename from mobility/experiments/duckdb_buildings.py rename to experiments/duckdb_buildings.py diff --git a/mobility/experiments/hash_stability/Dockerfile b/experiments/hash_stability/Dockerfile similarity index 100% rename from mobility/experiments/hash_stability/Dockerfile rename to experiments/hash_stability/Dockerfile diff --git a/mobility/experiments/hash_stability/hash_stability.py b/experiments/hash_stability/hash_stability.py similarity index 100% rename from mobility/experiments/hash_stability/hash_stability.py rename to experiments/hash_stability/hash_stability.py diff --git a/mobility/levers/levers.py b/experiments/levers.py similarity index 100% rename from mobility/levers/levers.py rename to experiments/levers.py diff --git a/mobility/experiments/marsaglia sampling.py b/experiments/marsaglia sampling.py similarity index 100% rename from mobility/experiments/marsaglia sampling.py rename to experiments/marsaglia sampling.py diff --git a/mobility/parsers/households_expenses_distribution.py b/experiments/parsers/households_expenses_distribution.py similarity index 98% rename from mobility/parsers/households_expenses_distribution.py rename to experiments/parsers/households_expenses_distribution.py index 5dabbc17..c334659e 100644 --- a/mobility/parsers/households_expenses_distribution.py +++ b/experiments/parsers/households_expenses_distribution.py @@ -5,8 +5,8 @@ import pandas as pd import py7zr -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.assets.file_asset import FileAsset +from mobility.io.download_file import download_file class HouseholdsExpensesDistribution(FileAsset): """ diff --git a/mobility/parsers/insee_lau_ids_to_local_lau_ids.py b/experiments/parsers/insee_lau_ids_to_local_lau_ids.py similarity index 81% rename from mobility/parsers/insee_lau_ids_to_local_lau_ids.py rename to experiments/parsers/insee_lau_ids_to_local_lau_ids.py index 3e67c70e..2a89e3dd 100644 --- a/mobility/parsers/insee_lau_ids_to_local_lau_ids.py +++ b/experiments/parsers/insee_lau_ids_to_local_lau_ids.py @@ -1,13 +1,16 @@ import pandas as pd from unidecode import unidecode +from importlib import resources -insee_cities = pd.read_csv("D:/dev/mobility_oss/mobility/data/insee/insee_RP2021_mobpro_border_cities.csv", header=None, names=["insee_id", "insee_name"]) +resources_path = resources.files("mobility.resources") + +insee_cities = pd.read_csv(resources_path / "insee/insee_RP2021_mobpro_border_cities.csv", header=None, names=["insee_id", "insee_name"]) insee_cities = insee_cities[insee_cities["insee_id"].str[0:2] == "SU"] insee_cities["insee_name_clean"] = insee_cities["insee_name"].str.lower() insee_cities["insee_name_clean"] = insee_cities["insee_name_clean"].str.replace("-", " ") insee_cities['insee_name_clean_wo_paren'] = insee_cities['insee_name_clean'].str.replace(r'\s*\(.*?\)', '', regex=True) -bfs_cities = pd.read_excel("D:/dev/mobility_oss/mobility/data/bfs/je-f-21.03.01.xlsx", skiprows=9, usecols=[0, 1], header=None, names=["bfs_id", "bfs_name"], nrows=2172) +bfs_cities = pd.read_excel(resources_path / "bfs/je-f-21.03.01.xlsx", skiprows=9, usecols=[0, 1], header=None, names=["bfs_id", "bfs_name"], nrows=2172) bfs_cities["bfs_name_clean"] = bfs_cities["bfs_name"].apply(lambda x: unidecode(x)) bfs_cities["bfs_name_clean"] = bfs_cities["bfs_name_clean"].str.lower() bfs_cities["bfs_name_clean"] = bfs_cities["bfs_name_clean"].str.replace("-", " ") diff --git a/mobility/parsers/job_active_population.py b/experiments/parsers/job_active_population.py similarity index 100% rename from mobility/parsers/job_active_population.py rename to experiments/parsers/job_active_population.py diff --git a/mobility/parsers/permanent_db_facilities.py b/experiments/parsers/permanent_db_facilities.py similarity index 100% rename from mobility/parsers/permanent_db_facilities.py rename to experiments/parsers/permanent_db_facilities.py diff --git a/mobility/parsers/student_population.py b/experiments/parsers/student_population.py similarity index 100% rename from mobility/parsers/student_population.py rename to experiments/parsers/student_population.py diff --git a/mobility/parsers/students_distribution.py b/experiments/parsers/students_distribution.py similarity index 99% rename from mobility/parsers/students_distribution.py rename to experiments/parsers/students_distribution.py index b1b04a20..83ff5c9e 100644 --- a/mobility/parsers/students_distribution.py +++ b/experiments/parsers/students_distribution.py @@ -5,8 +5,8 @@ import pandas as pd from pyaxis import pyaxis -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.assets.file_asset import FileAsset +from mobility.io.download_file import download_file class StudentsDistribution(FileAsset): diff --git a/mobility/parsers/swiss_vot_extraction.py b/experiments/parsers/swiss_vot_extraction.py similarity index 100% rename from mobility/parsers/swiss_vot_extraction.py rename to experiments/parsers/swiss_vot_extraction.py diff --git a/mobility/parsers/work_home_flows.py b/experiments/parsers/work_home_flows.py similarity index 100% rename from mobility/parsers/work_home_flows.py rename to experiments/parsers/work_home_flows.py diff --git a/mobility/experiments/prepare_trip_chains.py b/experiments/prepare_trip_chains.py similarity index 99% rename from mobility/experiments/prepare_trip_chains.py rename to experiments/prepare_trip_chains.py index c0feceff..7f017a08 100644 --- a/mobility/experiments/prepare_trip_chains.py +++ b/experiments/prepare_trip_chains.py @@ -4,7 +4,7 @@ import pandas as pd import polars as pl -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey +from mobility.surveys.france import EMPMobilitySurvey dotenv.load_dotenv() diff --git a/mobility/experiments/test_iterative_routing.R b/experiments/test_iterative_routing.R similarity index 100% rename from mobility/experiments/test_iterative_routing.R rename to experiments/test_iterative_routing.R diff --git a/mobility/experiments/transport_zones.py b/experiments/transport_zones.py similarity index 100% rename from mobility/experiments/transport_zones.py rename to experiments/transport_zones.py diff --git a/mobility/.vscode/settings.json b/mobility/.vscode/settings.json deleted file mode 100644 index 4b5a2944..00000000 --- a/mobility/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "python-envs.defaultEnvManager": "ms-python.python:conda", - "python-envs.defaultPackageManager": "ms-python.python:conda" -} \ No newline at end of file diff --git a/mobility/README.md b/mobility/README.md index e50eb792..14724294 100644 --- a/mobility/README.md +++ b/mobility/README.md @@ -40,7 +40,7 @@ Ils utilisent un lien permanent du fournisseur, ou, à défaut, les liens perman Pour les données plus légères (en dessous de 50 Mo), nous pouvons les stocker directement dans le package, en indiquant dans la documentation le moment où il faudra les mettre à jour. -Les données sont décrites dans [mobility/data](https://github.com/mobility-team/mobility/tree/main/mobility/data). +Les ressources statiques embarquées sont décrites dans [mobility/resources](https://github.com/mobility-team/mobility/tree/main/mobility/resources). [^1]: Nous autorisons 127 caractères au lieu des 79 prévus à la base dans PEP8. diff --git a/mobility/__init__.py b/mobility/__init__.py index 7ebe037d..b151d208 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -1,56 +1,57 @@ -from .set_params import set_params +from .config import set_params +from .runtime.io import patch_openpyxl -from .study_area import StudyArea -from .transport_zones import TransportZones +patch_openpyxl() -from .transport_costs.path_travel_costs import PathTravelCosts -from .transport_graphs.path_graph import PathGraph - -from .population import Population - - -from .trips import Trips - - -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey - -from mobility.transport_modes.walk import WalkMode -from mobility.transport_modes.bicycle import BicycleMode -from mobility.transport_modes.car import CarMode -from mobility.transport_modes.carpool import CarpoolMode -from mobility.transport_modes.public_transport import PublicTransportMode -from mobility.transport_modes.modal_transfer import IntermodalTransfer -from mobility.transport_modes.mode_registry import ModeRegistry - -from .path_routing_parameters import PathRoutingParameters - -from mobility.transport_modes.carpool import DetailedCarpoolRoutingParameters -from mobility.transport_modes.public_transport import PublicTransportRoutingParameters - -from .generalized_cost_parameters import GeneralizedCostParameters -from .transport_modes.carpool.detailed.detailed_carpool_generalized_cost import DetailedCarpoolGeneralizedCostParameters - -from .cost_of_time_parameters import CostOfTimeParameters - -from .choice_models.transport_mode_choice_model import TransportModeChoiceModel -from .parsers import LocalAdminUnits - - -from .motives.home import HomeMotive -from .motives.leisure import LeisureMotive -from .motives.shopping import ShoppingMotive -from .motives.studies import StudiesMotive -from .motives.work import WorkMotive -from .motives.other import OtherMotive +from .spatial.study_area import StudyArea +from .spatial.transport_zones import TransportZones +from .spatial.local_admin_units import LocalAdminUnits +from .transport.costs.path import PathTravelCosts +from .transport.graphs.core import PathGraph +from .transport.costs.parameters import ( + CostOfTimeParameters, + GeneralizedCostParameters, + PathRoutingParameters, +) -from mobility.choice_models.population_trips import PopulationTrips -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters +from .population import Population +from .surveys.france import EMPMobilitySurvey +from .activities import ( + Activity, + ActivityParameters, + Home, + Leisure, + Other, + Shop, + Study, + Work, +) +from .trips.individual_year_trips import IndividualYearTrips +from .trips.group_day_trips import GroupDayTrips + +from .transport.modes.bicycle import Bicycle, BicycleMode, BicycleParameters +from .transport.modes.car import Car, CarMode, CarParameters +from .transport.modes.walk import Walk, WalkMode, WalkParameters +from .transport.modes.carpool import ( + Carpool, + CarpoolMode, + CarpoolParameters, + DetailedCarpoolRoutingParameters, + DetailedCarpoolGeneralizedCostParameters, +) +from .transport.modes.public_transport import ( + PublicTransport, + PublicTransportMode, + PublicTransportParameters, + PublicTransportRoutingParameters, +) +from .transport.modes.core import IntermodalTransfer, ModeRegistry -from mobility.transport_graphs.speed_modifier import ( +from .transport.graphs.modified.modifiers import ( BorderCrossingSpeedModifier, LimitedSpeedZonesModifier, + NewRoadModifier, RoadLaneNumberModifier, - NewRoadModifier ) diff --git a/mobility/activities/__init__.py b/mobility/activities/__init__.py new file mode 100644 index 00000000..9203e7a9 --- /dev/null +++ b/mobility/activities/__init__.py @@ -0,0 +1,18 @@ +from .activity import Activity, ActivityParameters +from .home import Home +from .leisure import Leisure +from .other import Other +from .shopping import Shop +from .studies import Study +from .work import Work + +__all__ = [ + "Activity", + "ActivityParameters", + "Home", + "Leisure", + "Other", + "Shop", + "Study", + "Work", +] diff --git a/mobility/motives/motive.py b/mobility/activities/activity.py similarity index 92% rename from mobility/motives/motive.py rename to mobility/activities/activity.py index 473f4355..0c05142a 100644 --- a/mobility/motives/motive.py +++ b/mobility/activities/activity.py @@ -5,10 +5,11 @@ from typing import Annotated, List, Dict -from mobility.in_memory_asset import InMemoryAsset +from mobility.runtime.assets.in_memory_asset import InMemoryAsset from pydantic import BaseModel, ConfigDict, Field -class Motive(InMemoryAsset): + +class Activity(InMemoryAsset): def __init__( self, @@ -26,12 +27,12 @@ def __init__( country_utilities: Dict = None, sink_saturation_coeff: float = None, extra_inputs: dict | None = None, - parameters: "MotiveParameters" | None = None, + parameters: "ActivityParameters" | None = None, ): parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=MotiveParameters, + parameters_cls=ActivityParameters, explicit_args={ "value_of_time": value_of_time, "saturation_fun_ref_level": saturation_fun_ref_level, @@ -43,7 +44,7 @@ def __init__( "sink_saturation_coeff": sink_saturation_coeff, }, required_fields=["value_of_time", "saturation_fun_ref_level", "saturation_fun_beta"], - owner_name=f"Motive({name})", + owner_name=f"Activity({name})", ) self.name = name @@ -102,8 +103,8 @@ def enforce_opportunities_schema(self, opportunities): -class MotiveParameters(BaseModel): - """Common parameters for motives.""" +class ActivityParameters(BaseModel): + """Common parameters for activities.""" model_config = ConfigDict(extra="forbid") @@ -151,8 +152,8 @@ class MotiveParameters(BaseModel): list[str] | None, Field( default=None, - title="Survey motive IDs", - description="List of survey-specific IDs mapped to this motive.", + title="Survey activity IDs", + description="List of survey-specific IDs mapped to this activity.", ), ] @@ -172,7 +173,7 @@ class MotiveParameters(BaseModel): Field( default=None, title="Country utility offsets", - description="Optional country-level utility offsets used for this motive.", + description="Optional country-level utility offsets used for this activity.", ), ] @@ -184,4 +185,4 @@ class MotiveParameters(BaseModel): title="Sink saturation coefficient", description="Coefficient scaling sink saturation in activity utility.", ), - ] \ No newline at end of file + ] diff --git a/mobility/motives/home.py b/mobility/activities/home.py similarity index 82% rename from mobility/motives/home.py rename to mobility/activities/home.py index 54fcdd9f..fa20a21b 100644 --- a/mobility/motives/home.py +++ b/mobility/activities/home.py @@ -3,9 +3,11 @@ from typing import Annotated, List from pydantic import Field -from mobility.motives.motive import Motive, MotiveParameters -class HomeMotive(Motive): +from mobility.activities.activity import Activity, ActivityParameters + + +class Home(Activity): def __init__( self, @@ -14,12 +16,12 @@ def __init__( saturation_fun_ref_level: float = None, saturation_fun_beta: float = None, survey_ids: List[str] = None, - parameters: "HomeMotiveParameters" | None = None + parameters: "HomeParameters" | None = None ): parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=HomeMotiveParameters, + parameters_cls=HomeParameters, explicit_args={ "value_of_time": value_of_time, "value_of_time_stay_home": value_of_time_stay_home, @@ -28,7 +30,7 @@ def __init__( "survey_ids": survey_ids, "value_of_time_v2": value_of_time_stay_home, }, - owner_name="HomeMotive", + owner_name="Home", ) super().__init__( @@ -42,8 +44,8 @@ def get_opportunities(self, transport_zones): return None -class HomeMotiveParameters(MotiveParameters): - """Parameters specific to the home motive.""" +class HomeParameters(ActivityParameters): + """Parameters specific to the home activity.""" value_of_time: Annotated[ float, diff --git a/mobility/activities/leisure/__init__.py b/mobility/activities/leisure/__init__.py new file mode 100644 index 00000000..f459e145 --- /dev/null +++ b/mobility/activities/leisure/__init__.py @@ -0,0 +1,10 @@ +from .leisure import Leisure +from .leisures_frequentation import LEISURE_FREQUENCY, LEISURE_MAPPING +from .leisure_facilities_distribution import LeisureFacilitiesDistribution + +__all__ = [ + "LEISURE_FREQUENCY", + "LEISURE_MAPPING", + "LeisureFacilitiesDistribution", + "Leisure", +] diff --git a/mobility/motives/leisure.py b/mobility/activities/leisure/leisure.py similarity index 91% rename from mobility/motives/leisure.py rename to mobility/activities/leisure/leisure.py index b2b4ae68..80d91a5c 100644 --- a/mobility/motives/leisure.py +++ b/mobility/activities/leisure/leisure.py @@ -7,16 +7,14 @@ import numpy as np import os -from mobility.motives.motive import Motive -from mobility.parsers.leisure_facilities_distribution import LeisureFacilitiesDistribution - from typing import Annotated, List from pydantic import Field -from mobility.motives.motive import Motive, MotiveParameters +from mobility.activities.activity import Activity, ActivityParameters +from mobility.activities.leisure.leisure_facilities_distribution import LeisureFacilitiesDistribution -class LeisureMotive(Motive): +class Leisure(Activity): def __init__( self, @@ -26,12 +24,12 @@ def __init__( survey_ids: List[str] = None, radiation_lambda: float = None, opportunities: pd.DataFrame = None, - parameters: "LeisureMotiveParameters" | None = None + parameters: "LeisureParameters" | None = None ): parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=LeisureMotiveParameters, + parameters_cls=LeisureParameters, explicit_args={ "value_of_time": value_of_time, "saturation_fun_ref_level": saturation_fun_ref_level, @@ -39,7 +37,7 @@ def __init__( "survey_ids": survey_ids, "radiation_lambda": radiation_lambda, }, - owner_name="LeisureMotive", + owner_name="Leisure", ) super().__init__( @@ -154,8 +152,8 @@ def plot_opportunities_map( -class LeisureMotiveParameters(MotiveParameters): - """Parameters specific to the leisure motive.""" +class LeisureParameters(ActivityParameters): + """Parameters specific to the leisure activity.""" value_of_time: Annotated[float, Field(default=10.0, ge=0.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] diff --git a/mobility/parsers/leisure_facilities_distribution.py b/mobility/activities/leisure/leisure_facilities_distribution.py similarity index 94% rename from mobility/parsers/leisure_facilities_distribution.py rename to mobility/activities/leisure/leisure_facilities_distribution.py index 92e6f4b7..72a303c4 100644 --- a/mobility/parsers/leisure_facilities_distribution.py +++ b/mobility/activities/leisure/leisure_facilities_distribution.py @@ -7,11 +7,11 @@ import geopandas as gpd from shapely.geometry import shape, Polygon, MultiPolygon -from mobility.file_asset import FileAsset -from mobility.parsers.local_admin_units import LocalAdminUnits -from mobility.study_area import StudyArea -from mobility.parsers.osm import OSMData -from mobility.parsers.leisures_frequentation import LEISURE_MAPPING, LEISURE_FREQUENCY +from mobility.runtime.assets.file_asset import FileAsset +from mobility.spatial.local_admin_units import LocalAdminUnits +from mobility.spatial.study_area import StudyArea +from mobility.spatial.osm import OSMData +from mobility.activities.leisure.leisures_frequentation import LEISURE_MAPPING, LEISURE_FREQUENCY class LeisureFacilitiesDistribution(FileAsset): diff --git a/mobility/parsers/leisures_frequentation.py b/mobility/activities/leisure/leisures_frequentation.py similarity index 100% rename from mobility/parsers/leisures_frequentation.py rename to mobility/activities/leisure/leisures_frequentation.py diff --git a/mobility/motives/other.py b/mobility/activities/other.py similarity index 80% rename from mobility/motives/other.py rename to mobility/activities/other.py index 0cbb7d68..d57dfec6 100644 --- a/mobility/motives/other.py +++ b/mobility/activities/other.py @@ -5,11 +5,12 @@ from typing import Annotated from pydantic import Field -from mobility.motives.motive import Motive, MotiveParameters + +from mobility.activities.activity import Activity, ActivityParameters from mobility.population import Population -class OtherMotive(Motive): +class Other(Activity): def __init__( self, @@ -19,22 +20,25 @@ def __init__( radiation_lambda: float = None, opportunities: pd.DataFrame = None, population: Population = None, - parameters: "OtherMotiveParameters" | None = None + parameters: "OtherParameters" | None = None ): if population is None and opportunities is None: - raise ValueError("Please provide an opportunities proxy dataframe, or a Population instance if you want to use residents as proxy for the 'other' motive.") + raise ValueError( + "Please provide an opportunities proxy dataframe, or a Population " + "instance if you want to use residents as proxy for the 'other' activity." + ) parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=OtherMotiveParameters, + parameters_cls=OtherParameters, explicit_args={ "value_of_time": value_of_time, "saturation_fun_ref_level": saturation_fun_ref_level, "saturation_fun_beta": saturation_fun_beta, "radiation_lambda": radiation_lambda, }, - owner_name="OtherMotive", + owner_name="Other", ) super().__init__( @@ -71,8 +75,8 @@ def get_opportunities(self, transport_zones): -class OtherMotiveParameters(MotiveParameters): - """Parameters specific to the other motive.""" +class OtherParameters(ActivityParameters): + """Parameters specific to the other activity.""" value_of_time: Annotated[ float, diff --git a/mobility/activities/shopping/__init__.py b/mobility/activities/shopping/__init__.py new file mode 100644 index 00000000..a6573b6d --- /dev/null +++ b/mobility/activities/shopping/__init__.py @@ -0,0 +1,4 @@ +from .shop import Shop +from .shops_turnover_distribution import ShopsTurnoverDistribution + +__all__ = ["Shop", "ShopsTurnoverDistribution"] diff --git a/mobility/motives/shopping.py b/mobility/activities/shopping/shop.py similarity index 85% rename from mobility/motives/shopping.py rename to mobility/activities/shopping/shop.py index c9884d07..246bc9ed 100644 --- a/mobility/motives/shopping.py +++ b/mobility/activities/shopping/shop.py @@ -6,11 +6,12 @@ from typing import Annotated, List from pydantic import Field -from mobility.motives.motive import Motive, MotiveParameters -from mobility.parsers.shops_turnover_distribution import ShopsTurnoverDistribution +from mobility.activities.activity import Activity, ActivityParameters +from mobility.activities.shopping.shops_turnover_distribution import ShopsTurnoverDistribution -class ShoppingMotive(Motive): + +class Shop(Activity): def __init__( self, @@ -20,12 +21,12 @@ def __init__( survey_ids: List[str] = None, radiation_lambda: float = None, opportunities: pd.DataFrame = None, - parameters: "ShoppingMotiveParameters" | None = None + parameters: "ShopParameters" | None = None ): parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=ShoppingMotiveParameters, + parameters_cls=ShopParameters, explicit_args={ "value_of_time": value_of_time, "saturation_fun_ref_level": saturation_fun_ref_level, @@ -33,7 +34,7 @@ def __init__( "survey_ids": survey_ids, "radiation_lambda": radiation_lambda, }, - owner_name="ShoppingMotive", + owner_name="Shop", ) super().__init__( @@ -76,11 +77,11 @@ def get_opportunities(self, transport_zones): return opportunities -class ShoppingMotiveParameters(MotiveParameters): - """Parameters specific to the shopping motive.""" +class ShopParameters(ActivityParameters): + """Parameters specific to the shopping activity.""" value_of_time: Annotated[float, Field(default=10.0, ge=0.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[list[str], Field(default_factory=lambda: ["2.20", "2.21"])] - radiation_lambda: Annotated[float, Field(default=0.99986, ge=0.0, le=1.0)] \ No newline at end of file + radiation_lambda: Annotated[float, Field(default=0.99986, ge=0.0, le=1.0)] diff --git a/mobility/parsers/shops_turnover_distribution.py b/mobility/activities/shopping/shops_turnover_distribution.py similarity index 99% rename from mobility/parsers/shops_turnover_distribution.py rename to mobility/activities/shopping/shops_turnover_distribution.py index 0a0b743e..4c14cd5b 100644 --- a/mobility/parsers/shops_turnover_distribution.py +++ b/mobility/activities/shopping/shops_turnover_distribution.py @@ -6,9 +6,9 @@ import pyarrow.parquet as pq import geopandas as gpd -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file -from mobility.parsers.local_admin_units import LocalAdminUnits +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file +from mobility.spatial.local_admin_units import LocalAdminUnits class ShopsTurnoverDistribution(FileAsset): diff --git a/mobility/activities/studies/__init__.py b/mobility/activities/studies/__init__.py new file mode 100644 index 00000000..6cff7237 --- /dev/null +++ b/mobility/activities/studies/__init__.py @@ -0,0 +1,9 @@ +from .study import Study +from .schools_capacity_distribution import SchoolsCapacityDistribution +from .school_students_flows import SchoolStudentsFlows + +__all__ = [ + "SchoolStudentsFlows", + "SchoolsCapacityDistribution", + "Study", +] diff --git a/mobility/parsers/school_students_flows.py b/mobility/activities/studies/school_students_flows.py similarity index 94% rename from mobility/parsers/school_students_flows.py rename to mobility/activities/studies/school_students_flows.py index d2d9020b..c712bb20 100644 --- a/mobility/parsers/school_students_flows.py +++ b/mobility/activities/studies/school_students_flows.py @@ -4,9 +4,9 @@ import zipfile import pandas as pd -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file -from mobility.parsers.local_admin_units import LocalAdminUnits +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file +from mobility.spatial.local_admin_units import LocalAdminUnits class SchoolStudentsFlows(FileAsset): diff --git a/mobility/parsers/schools_capacity_distribution.py b/mobility/activities/studies/schools_capacity_distribution.py similarity index 97% rename from mobility/parsers/schools_capacity_distribution.py rename to mobility/activities/studies/schools_capacity_distribution.py index dceef9de..3919aa23 100644 --- a/mobility/parsers/schools_capacity_distribution.py +++ b/mobility/activities/studies/schools_capacity_distribution.py @@ -7,11 +7,11 @@ import geopandas as gpd import requests -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file -from mobility.parsers.local_admin_units import LocalAdminUnits -from mobility.study_area import StudyArea -from mobility.parsers.osm import OSMData +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file +from mobility.spatial.local_admin_units import LocalAdminUnits +from mobility.spatial.study_area import StudyArea +from mobility.spatial.osm import OSMData class SchoolsCapacityDistribution(FileAsset): @@ -301,4 +301,4 @@ def prepare_swiss_schools_capacity_distribution(self): - \ No newline at end of file + diff --git a/mobility/motives/studies.py b/mobility/activities/studies/study.py similarity index 92% rename from mobility/motives/studies.py rename to mobility/activities/studies/study.py index 068a4608..27e43c51 100644 --- a/mobility/motives/studies.py +++ b/mobility/activities/studies/study.py @@ -8,11 +8,12 @@ import os from pydantic import Field -from mobility.motives.motive import Motive, MotiveParameters -from mobility.parsers.schools_capacity_distribution import SchoolsCapacityDistribution +from mobility.activities.activity import Activity, ActivityParameters +from mobility.activities.studies.schools_capacity_distribution import SchoolsCapacityDistribution -class StudiesMotive(Motive): + +class Study(Activity): def __init__( self, @@ -22,12 +23,12 @@ def __init__( survey_ids: List[str] = None, radiation_lambda: float = None, opportunities: pd.DataFrame = None, - parameters: "StudiesMotiveParameters" | None = None + parameters: "StudyParameters" | None = None ): parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=StudiesMotiveParameters, + parameters_cls=StudyParameters, explicit_args={ "value_of_time": value_of_time, "saturation_fun_ref_level": saturation_fun_ref_level, @@ -35,7 +36,7 @@ def __init__( "survey_ids": survey_ids, "radiation_lambda": radiation_lambda, }, - owner_name="StudiesMotive", + owner_name="Study", ) super().__init__( @@ -154,8 +155,8 @@ def plot_opportunities_map( return ax -class StudiesMotiveParameters(MotiveParameters): - """Parameters specific to the studies motive.""" +class StudyParameters(ActivityParameters): + """Parameters specific to the studies activity.""" value_of_time: Annotated[float, Field(default=10.0, ge=0.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] diff --git a/mobility/activities/work/__init__.py b/mobility/activities/work/__init__.py new file mode 100644 index 00000000..2c99f3ca --- /dev/null +++ b/mobility/activities/work/__init__.py @@ -0,0 +1,9 @@ +from .work import Work +from .jobs_active_population_distribution import JobsActivePopulationDistribution +from .jobs_active_population_flows import JobsActivePopulationFlows + +__all__ = [ + "JobsActivePopulationDistribution", + "JobsActivePopulationFlows", + "Work", +] diff --git a/mobility/parsers/jobs_active_population_distribution.py b/mobility/activities/work/jobs_active_population_distribution.py similarity index 98% rename from mobility/parsers/jobs_active_population_distribution.py rename to mobility/activities/work/jobs_active_population_distribution.py index 7b4df625..2b0121fc 100644 --- a/mobility/parsers/jobs_active_population_distribution.py +++ b/mobility/activities/work/jobs_active_population_distribution.py @@ -7,8 +7,8 @@ import pandas as pd import numpy as np -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file class JobsActivePopulationDistribution(FileAsset): """ @@ -276,4 +276,4 @@ def prepare_swiss_jobs_active_population_distribution(self): jobs.set_index("local_admin_unit_id", inplace=True) act.set_index("local_admin_unit_id", inplace=True) - return jobs, act \ No newline at end of file + return jobs, act diff --git a/mobility/parsers/jobs_active_population_flows.py b/mobility/activities/work/jobs_active_population_flows.py similarity index 96% rename from mobility/parsers/jobs_active_population_flows.py rename to mobility/activities/work/jobs_active_population_flows.py index 27cf235b..341e8cfe 100644 --- a/mobility/parsers/jobs_active_population_flows.py +++ b/mobility/activities/work/jobs_active_population_flows.py @@ -6,10 +6,10 @@ import pandas as pd import numpy as np -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file -from mobility.parsers.local_admin_units import LocalAdminUnits -from mobility.parsers.jobs_active_population_distribution import JobsActivePopulationDistribution +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file +from mobility.spatial.local_admin_units import LocalAdminUnits +from mobility.activities.work.jobs_active_population_distribution import JobsActivePopulationDistribution class JobsActivePopulationFlows(FileAsset): """Class managing home-work flows data in France and Switzerland. diff --git a/mobility/motives/work.py b/mobility/activities/work/work.py similarity index 87% rename from mobility/motives/work.py rename to mobility/activities/work/work.py index d9d87617..6551266a 100644 --- a/mobility/motives/work.py +++ b/mobility/activities/work/work.py @@ -6,11 +6,12 @@ from typing import Annotated, List, Dict from pydantic import Field -from mobility.motives.motive import Motive, MotiveParameters -from mobility.parsers import JobsActivePopulationDistribution +from mobility.activities.activity import Activity, ActivityParameters +from mobility.activities.work.jobs_active_population_distribution import JobsActivePopulationDistribution -class WorkMotive(Motive): + +class Work(Activity): def __init__( self, @@ -22,12 +23,12 @@ def __init__( opportunities: pd.DataFrame = None, utilities: pd.DataFrame = None, country_utilities: Dict = None, - parameters: "WorkMotiveParameters" | None = None + parameters: "WorkParameters" | None = None ): parameters = self.prepare_parameters( parameters=parameters, - parameters_cls=WorkMotiveParameters, + parameters_cls=WorkParameters, explicit_args={ "value_of_time": value_of_time, "saturation_fun_ref_level": saturation_fun_ref_level, @@ -36,7 +37,7 @@ def __init__( "radiation_lambda": radiation_lambda, "country_utilities": country_utilities, }, - owner_name="WorkMotive", + owner_name="Work", ) super().__init__( @@ -82,8 +83,8 @@ def get_opportunities(self, transport_zones): return opportunities -class WorkMotiveParameters(MotiveParameters): - """Parameters specific to the work motive.""" +class WorkParameters(ActivityParameters): + """Parameters specific to the work activity.""" value_of_time: Annotated[ float, @@ -113,4 +114,4 @@ class WorkMotiveParameters(MotiveParameters): country_utilities: Annotated[ dict[str, float], Field(default_factory=lambda: {"fr": 0.0, "ch": 5.0}), - ] \ No newline at end of file + ] diff --git a/mobility/choice_models/destination_choice_model.py b/mobility/choice_models/destination_choice_model.py deleted file mode 100644 index 61db4635..00000000 --- a/mobility/choice_models/destination_choice_model.py +++ /dev/null @@ -1,237 +0,0 @@ -import os -import pathlib -import logging -import pandas as pd -import geopandas as gpd -import numpy as np -import seaborn as sns - -from abc import abstractmethod - -from mobility.file_asset import FileAsset -from mobility import radiation_model_selection -from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator - -class DestinationChoiceModel(FileAsset): - """ - A generic class for destination choice models, with a subclass for every motive. - - Currently implemented : - - WorkDestinationChoiceModel, for home-work flows. - """ - - def __init__( - self, - motive: str, - transport_zones: gpd.GeoDataFrame, - modes, - sources_sinks, - parameters, - ssi_min_flow_volume: float, - n_possible_destinations: int = 1 - ): - """Retrieves destination choice model if it already exists for these transport zones, travel costs, motive and other parameters. - Otherwise, creates it and saves it. - - Parameters - ---------- - motive : str - Currently implemented: "work". - transport_zones : gpd.GeoDataFrame - Transport zones generated by TransportZones class. - travel_costs : TravelCosts - Travel costs generated by TravelCosts class. - model_parameters : dict - Depend on the motive, check the specific class (such as WorkDestinationChoiceModel) for details. - utility_parameters : dict - Depend on the motive, check the specific class (such as WorkDestinationChoiceModel) for details. - ssi_min_flow_volume : float - Minimum reference volume to consider for similarity index. - """ - - costs = TravelCostsAggregator(modes) - - inputs = { - "sources_sinks": sources_sinks, - "motive": motive, - "transport_zones": transport_zones, - "costs": costs, - "parameters": parameters, - "ssi_min_flow_volume": ssi_min_flow_volume - } - - self.n_possible_destinations = n_possible_destinations - - data_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - od_flows_filename = motive + "_od_flows.parquet" - dest_cm_filename = motive + "_destination_choice_model.parquet" - - cache_path = { - "od_flows": data_folder / od_flows_filename, - "destination_choice_model": data_folder / dest_cm_filename - } - - super().__init__(inputs, cache_path) - - - def get_cached_asset(self) -> pd.DataFrame: - - logging.info("Destination choice model already prepared. Reusing the file : " + str(self.cache_path)) - asset = pd.read_parquet(self.cache_path["destination_choice_model"]) - - return asset - - - def create_and_get_asset(self) -> pd.DataFrame: - - logging.info("Creating destination choice model...") - - transport_zones = self.inputs["transport_zones"] - - study_area = transport_zones.study_area.get() - transport_zones = pd.merge( - transport_zones.get(), - study_area[["local_admin_unit_id", "country"]], - on="local_admin_unit_id" - ) - transport_zones["country"] = transport_zones["country"].astype(str) - - sources, sinks = self.prepare_sources_and_sinks(transport_zones) - utilities = self.prepare_utilities(transport_zones, sinks) - - flows = self.compute_flows( - transport_zones, - sources, - sinks, - self.costs, - utilities - ) - - choice_model = flows[["from", "to", "flow_volume"]].set_index(["from", "to"])["flow_volume"] - choice_model = choice_model/choice_model.groupby("from").sum() - choice_model.name = "prob" - choice_model = choice_model.reset_index() - - flows.to_parquet(self.cache_path["od_flows"]) - choice_model.to_parquet(self.cache_path["destination_choice_model"]) - # utility_by_od_and_mode.to_parquet(self.cache_path["utility_by_od_and_mode"]) - - return choice_model - - - @abstractmethod - def prepare_reference_flows(self): - pass - - - @abstractmethod - def prepare_sources_and_sinks(self): - pass - - @abstractmethod - def prepare_utilities(self): - pass - - - # def compute_flows( - # self, - # transport_zones, - # sources: pd.DataFrame, - # sinks: pd.DataFrame, - # costs, - # utilities - # ): - - # parameters = self.inputs["parameters"] - - # flows, _, _ = radiation_model_selection.radiation_model_selection( - # sources=sources, - # sinks=sinks, - # costs=costs, - # utilities=utilities, - # selection_lambda=parameters.model["lambda"] - # ) - - # flows = flows.to_frame().reset_index() - - # flows = pd.merge(flows, transport_zones[["transport_zone_id", "local_admin_unit_id"]], left_on="from", right_on="transport_zone_id") - # flows = pd.merge(flows, transport_zones[["transport_zone_id", "local_admin_unit_id"]], left_on="to", right_on="transport_zone_id", suffixes=["_from", "_to"]) - - # flows = flows[["from", "to", "local_admin_unit_id_from", "local_admin_unit_id_to", "flow_volume"]] - - # return flows - - - def get_comparison(self): - - flows = pd.read_parquet(self.cache_path["od_flows"]) - flows = flows.groupby(["local_admin_unit_id_from", "local_admin_unit_id_to"], as_index=False)["flow_volume"].sum() - - lau_ids = flows["local_admin_unit_id_from"].unique() - - ref_flows = self.reference_flows.get() - ref_flows = ref_flows[ref_flows["local_admin_unit_id_from"].isin(lau_ids) & ref_flows["local_admin_unit_id_to"].isin(lau_ids)] - ref_flows = ref_flows.groupby(["local_admin_unit_id_from", "local_admin_unit_id_to"], as_index=False)["ref_flow_volume"].sum() - - od_pairs = pd.concat([ - ref_flows[["local_admin_unit_id_from", "local_admin_unit_id_to"]], - flows[["local_admin_unit_id_from", "local_admin_unit_id_to"]] - ]).drop_duplicates() - - comparison = pd.merge( - od_pairs, - flows, - on=["local_admin_unit_id_from", "local_admin_unit_id_to"], - how="left" - ) - - comparison = pd.merge( - comparison, - ref_flows, - on=["local_admin_unit_id_from", "local_admin_unit_id_to"], - how="left" - ) - - - comparison.fillna(0.0, inplace=True) - - return comparison - - - def compute_ssi(self, comparison, min_flow_volume): - - comparison = comparison[comparison["ref_flow_volume"] > min_flow_volume] - - num = 2*np.minimum(comparison["ref_flow_volume"], comparison["flow_volume"]) - den = comparison["ref_flow_volume"] + comparison["flow_volume"] - ssi = np.sum(num/den)/num.shape[0] - - return ssi - - - def compute_total_OD_distance_error(self, comparison, travel_costs, min_flow_volume): - - comparison = comparison[comparison["ref_flow_volume"] > min_flow_volume] - - travel_costs = travel_costs[travel_costs["mode"] == "car"] - - comparison = pd.merge(comparison, travel_costs, on=["from", "to"]) - - comparison["mod_distance"] = comparison["flow_volume"]*comparison["distance"] - comparison["ref_distance"] = comparison["ref_flow_volume"]*comparison["distance"] - - error = comparison["mod_distance"].sum()/comparison["ref_distance"].sum() - 1.0 - - return error - - - def plot_model_fit(self, comparison): - - comparison = comparison.copy() - comparison["log_ref_flow_volume"] = np.log10(comparison["ref_flow_volume"]) - comparison["log_flow_volume"] = np.log10(comparison["flow_volume"]) - - sns.set_theme() - sns.scatterplot(data=comparison, x="log_ref_flow_volume", y="log_flow_volume", size=5, linewidth=0, alpha=0.5) - - diff --git a/mobility/choice_models/destination_sequence_sampler.py b/mobility/choice_models/destination_sequence_sampler.py deleted file mode 100644 index d8a183a4..00000000 --- a/mobility/choice_models/destination_sequence_sampler.py +++ /dev/null @@ -1,539 +0,0 @@ -import logging - -import polars as pl - -from scipy.stats import norm - -from mobility.choice_models.add_index import add_index - -class DestinationSequenceSampler: - """Samples destination sequences for trip chains. - - Orchestrates: (1) utility assembly with uncertain costs, (2) radiation-based - destination probabilities, and (3) spatialization of anchor and non-anchor - steps into per-iteration destination sequences. - """ - - def sample( - self, - motives, - transport_zones, - remaining_sinks, - iteration, - chains, - demand_groups, - costs, - tmp_folders, - parameters, - seed, - ) -> pl.DataFrame: - """Compute destination sequences for one iteration. - - Builds utilities with cost uncertainty, derives destination probabilities, - spatializes anchor motives, then sequentially samples non-anchor steps. - Returns the per-step chains with a `dest_seq_id` and the iteration tag. - - Args: - motives: Iterable of Motive objects. - transport_zones: Transport zone container used by motives. - remaining_sinks (pl.DataFrame): Current sink state per (motive, to), - including capacity and saturation utility penalty. - iteration (int): Iteration index (>=1). - chains (pl.DataFrame): Chain steps with - ["demand_group_id","motive_seq_id","motive","is_anchor","seq_step_index"]. - demand_groups (pl.DataFrame): ["demand_group_id","home_zone_id"] (merged for origins). - costs (pl.DataFrame): OD costs with ["from","to","cost"]. - tmp_folders (dict[str, pathlib.Path]): Must include "sequences-index". - parameters: Model parameters (alpha, dest_prob_cutoff, cost_uncertainty_sd, …). - seed (int): 64-bit seed for reproducible exponential races. - - Returns: - pl.DataFrame: Spatialized chains with columns including - ["demand_group_id","motive_seq_id","dest_seq_id","seq_step_index","from","to","iteration"]. - """ - - utilities = self.get_utilities( - motives, - transport_zones, - remaining_sinks, - costs, - parameters.cost_uncertainty_sd - ) - - dest_prob = self.get_destination_probability( - utilities, - motives, - parameters.dest_prob_cutoff - ) - - chains = ( - chains - .filter(pl.col("motive_seq_id") != 0) - .join(demand_groups.select(["demand_group_id", "home_zone_id"]), on="demand_group_id") - .select(["demand_group_id", "home_zone_id", "motive_seq_id", "motive", "is_anchor", "seq_step_index"]) - ) - - chains = self.spatialize_anchor_motives(chains, dest_prob, seed) - chains = self.spatialize_other_motives(chains, dest_prob, costs, parameters.alpha, seed) - - dest_sequences = ( - chains - .group_by(["demand_group_id", "motive_seq_id"]) - .agg( - to=pl.col("to").sort_by("seq_step_index").cast(pl.Utf8()) - ) - .with_columns( - to=pl.col("to").list.join("-") - ) - .sort(["demand_group_id", "motive_seq_id"]) - ) - - dest_sequences = add_index( - dest_sequences, - col="to", - index_col_name="dest_seq_id", - tmp_folders=tmp_folders - ) - - chains = ( - chains - .join( - dest_sequences.select(["demand_group_id", "motive_seq_id", "dest_seq_id"]), - on=["demand_group_id", "motive_seq_id"] - ) - .drop(["home_zone_id", "motive"]) - .with_columns(iteration=pl.lit(iteration).cast(pl.UInt32)) - ) - - return chains - - - def get_utilities(self, motives, transport_zones, sinks, costs, cost_uncertainty_sd): - - """Assemble per-(from,to,motive) utility with cost uncertainty. - - Gathers motive utilities, joins sink availability, and expands costs with a - small discrete Gaussian around 0 to model uncertainty. Buckets - (cost - utility) into integer `cost_bin`s and returns: - (1) aggregated availability by bin, and (2) bin→destination disaggregation. - - Args: - motives: Iterable of Motive objects exposing `get_utilities(transport_zones)`. - transport_zones: Zone container passed to motives. - sinks (pl.DataFrame): ["to","motive","sink_capacity", …]. - costs (pl.DataFrame): ["from","to","cost"]. - cost_uncertainty_sd (float): Std-dev for the discrete Gaussian over deltas. - - Returns: - tuple[pl.LazyFrame, pl.LazyFrame]: - - costs_bin: ["from","motive","cost_bin","effective_sink"]. - - cost_bin_to_dest: ["motive","from","cost_bin","to","p_to"]. - """ - - utilities = [(m.name, m.get_utilities(transport_zones)) for m in motives] - utilities = [u for u in utilities if u[1] is not None] - utilities = [u[1].with_columns(motive=pl.lit(u[0])) for u in utilities] - - motive_values = sinks.schema["motive"].categories - - utilities = ( - - pl.concat(utilities) - .with_columns( - motive=pl.col("motive").cast(pl.Enum(motive_values)) - ) - - ) - - def offset_costs(costs, delta, prob): - return ( - costs - .with_columns([ - (pl.col("cost") + delta).alias("cost"), - pl.lit(prob).alias("prob") - ]) - ) - - x = [-2.0, -1.0, 0.0, 1.0, 2.0] - p = norm.pdf(x, loc=0.0, scale=cost_uncertainty_sd) - p /= p.sum() - - costs = pl.concat([offset_costs(costs, x[i], p[i]) for i in range(len(p))]) - - costs = ( - costs.lazy() - .join(sinks.lazy(), on="to") - .join(utilities.lazy(), on=["motive", "to"], how="left") - .with_columns( - utility=pl.col("utility").fill_null(0.0), - effective_sink=( - pl.col("sink_capacity") - * pl.col("k_saturation_utility").fill_null(1.0) - * pl.col("prob")) - .clip(0.0) - ) - .drop("prob") - .filter(pl.col("effective_sink") > 0.0) - .with_columns( - cost_bin=(pl.col("cost") - pl.col("utility")).floor() - ) - ) - - cost_bin_to_dest = ( - costs - .with_columns(p_to=pl.col("effective_sink")/pl.col("effective_sink").sum().over(["from", "motive", "cost_bin"])) - .select(["motive", "from", "cost_bin", "to", "p_to"]) - ) - - costs_bin = ( - costs - .group_by(["from", "motive", "cost_bin"]) - .agg(pl.col("effective_sink").sum()) - .sort(["from", "motive", "cost_bin"]) - ) - - return costs_bin, cost_bin_to_dest - - - def get_destination_probability(self, utilities, motives, dest_prob_cutoff): - - """Compute P(destination | from, motive) via a radiation-style model. - - Applies a cumulative-opportunity radiation formulation per (from, motive), - trims the tail to `dest_prob_cutoff`, and expands cost bins back to - destinations using `p_to`. - - Args: - utilities (tuple): Output of `get_utilities` → (costs_bin, cost_bin_to_dest). - motives: Iterable of motives (uses `radiation_lambda` per motive). - dest_prob_cutoff (float): Keep top cumulative probability mass (e.g., 0.99). - - Returns: - pl.DataFrame: ["motive","from","to","p_ij"] normalized per (from, motive). - """ - - # Compute the probability of choosing a destination, given a trip motive, an - # origin and the costs to get to destinations - logging.info("Computing the probability of choosing a destination based on current location, potential destinations, and motive (with radiation models)...") - - costs_bin = utilities[0] - cost_bin_to_dest = utilities[1] - - motives_lambda = {motive.name: motive.inputs["parameters"].radiation_lambda for motive in motives} - - prob = ( - - # Apply the radiation model for each motive and origin - costs_bin - .with_columns( - s_ij=pl.col("effective_sink").cum_sum().over(["from", "motive"]), - selection_lambda=pl.col("motive").cast(pl.Utf8).replace_strict(motives_lambda) - ) - .with_columns( - p_a = (1 - pl.col("selection_lambda")**(1+pl.col('s_ij'))) / (1+pl.col('s_ij')) / (1-pl.col("selection_lambda")) - ) - .with_columns( - p_a_lag=( - pl.col('p_a') - .shift(fill_value=1.0) - .over(["from", "motive"]) - .alias('p_a_lag') - ) - ) - .with_columns( - p_ij=pl.col('p_a_lag') - pl.col('p_a') - ) - .with_columns( - p_ij=pl.col('p_ij') / pl.col('p_ij').sum().over(["from", "motive"]) - ) - .filter(pl.col("p_ij") > 0.0) - - # Rounding to avoid floating point instability when sorting - .with_columns(p_ij=pl.col("p_ij").round(9)) - - # Keep only the first 99 % of the distribution - .sort(["from", "motive", "p_ij", "cost_bin"], descending=[False, False, True, False]) - .with_columns( - p_ij_cum=pl.col("p_ij").cum_sum().over(["from", "motive"]), - p_count=pl.col("p_ij").cum_count().over(["from", "motive"]) - ) - .filter((pl.col("p_ij_cum") < dest_prob_cutoff) | (pl.col("p_count") == 1)) - .with_columns(p_ij=pl.col("p_ij")/pl.col("p_ij").sum().over(["from", "motive"])) - - # Disaggregate bins -> destinations - .join(cost_bin_to_dest, on=["motive", "from", "cost_bin"]) - .with_columns(p_ij=pl.col("p_ij")*pl.col("p_to")) - .group_by(["motive", "from", "to"]) - .agg(pl.col("p_ij").sum()) - - # Rounding to avoid floating point instability when sorting - .with_columns(p_ij=pl.col("p_ij").round(9)) - - # Keep only the first 99 % of the distribution - # (or the destination that has a 100% probability, which can happen) - .sort(["from", "motive", "p_ij", "to"], descending=[False, False, True, False]) - .with_columns( - p_ij_cum=pl.col("p_ij").cum_sum().over(["from", "motive"]), - p_count=pl.col("p_ij").cum_count().over(["from", "motive"]) - ) - .filter((pl.col("p_ij_cum") < dest_prob_cutoff) | (pl.col("p_count") == 1)) - .with_columns(p_ij=pl.col("p_ij")/pl.col("p_ij").sum().over(["from", "motive"])) - - .select(["motive", "from", "to", "p_ij"]) - - .collect(engine="streaming") - ) - - return prob - - - def spatialize_anchor_motives(self, chains, dest_prob, seed): - """Samples destinations for anchor motives and fills `anchor_to`. - - Uses an exponential race (log(noise)/p_ij) per - ["demand_group_id","motive_seq_id","motive"] to select one destination - among candidates in `dest_prob`. 'home' anchors are fixed to - `home_zone_id`, and `anchor_to` is backward-filled along the chain. - - Args: - chains (pl.DataFrame): Chain steps with - ["demand_group_id","home_zone_id","motive_seq_id","motive", - "is_anchor","seq_step_index"]. - dest_prob (pl.DataFrame): Destination probabilities with - ["motive","from","to","p_ij"]. - seed (int): 64-bit RNG seed for reproducibility. - - Returns: - pl.DataFrame: Same rows as `chains` with an added `anchor_to` column. - """ - - logging.info("Spatializing anchor motives...") - - spatialized_anchors = ( - - chains - .filter((pl.col("is_anchor")) & (pl.col("motive") != "home")) - .select(["demand_group_id", "home_zone_id", "motive_seq_id", "motive"]) - .unique() - - .join( - dest_prob, - left_on=["home_zone_id", "motive"], - right_on=["from", "motive"] - ) - - .with_columns( - noise=( - pl.struct(["demand_group_id", "motive_seq_id", "motive", "to"]) - .hash(seed=seed) - .cast(pl.Float64) - .truediv(pl.lit(18446744073709551616.0)) - .log() - .neg() - ) - ) - - .with_columns( - sample_score=( - pl.col("noise")/pl.col("p_ij").clip(1e-18) # Make sure p_ij is > 0 - + pl.col("to").cast(pl.Float64)*1e-18 # Add a very small noise to beark ties - ) - ) - - .with_columns( - min_score=( - pl.col("sample_score").min() - .over(["demand_group_id", "motive_seq_id", "motive"]) - ) - ) - .filter(pl.col("sample_score") == pl.col("min_score")) - - .select(["demand_group_id", "motive_seq_id", "motive", "to"]) - - ) - - chains = ( - - chains - .join( - spatialized_anchors.rename({"to": "anchor_to"}), - on=["demand_group_id", "motive_seq_id", "motive"], - how="left" - ) - .with_columns( - anchor_to=pl.when( - pl.col("motive") == "home" - ).then( - pl.col("home_zone_id") - ).otherwise( - pl.col("anchor_to") - ) - ) - .sort(["demand_group_id", "motive_seq_id", "seq_step_index"]) - .with_columns( - anchor_to=pl.col("anchor_to").backward_fill().over(["demand_group_id","motive_seq_id"]) - ) - - ) - - return chains - - - def spatialize_other_motives(self, chains, dest_prob, costs, alpha, seed): - """Spatializes non-anchor motives sequentially between anchors. - - Iterates step by step from the home zone, sampling destinations - based on `dest_prob` and a penalty toward the next anchor. At each - iteration, the chosen `to` becomes the `from` for the following step, - until all steps are spatialized. - - Args: - chains (pl.DataFrame): Chains with `anchor_to` already set. - Must include ["demand_group_id","home_zone_id","motive_seq_id", - "motive","is_anchor","seq_step_index","anchor_to"]. - dest_prob (pl.DataFrame): Destination probabilities with - ["motive","from","to","p_ij"]. - costs (pl.DataFrame): OD costs with ["from","to","cost"], used to - discourage drifting away from anchors. - alpha (float): Penalty coefficient applied to anchor distance. - seed (int): 64-bit RNG seed for reproducibility. - - Returns: - pl.DataFrame: Sampled chain steps with - ["demand_group_id","home_zone_id","motive_seq_id","motive", - "anchor_to","from","to","seq_step_index"]. - """ - - logging.info("Spatializing other motives...") - - chains_step = ( - chains - .filter(pl.col("seq_step_index") == 1) - .with_columns(pl.col("home_zone_id").alias("from")) - ) - - seq_step_index = 1 - spatialized_chains = [] - - while chains_step.height > 0: - - logging.info(f"Spatializing step {seq_step_index}...") - - spatialized_step = ( - self.spatialize_trip_chains_step(seq_step_index, chains_step, dest_prob, costs, alpha, seed) - .with_columns( - seq_step_index=pl.lit(seq_step_index).cast(pl.UInt32) - ) - ) - - spatialized_chains.append(spatialized_step) - - # Create the next steps in the chains, using the latest locations as - # origins for the next trip - seq_step_index += 1 - - chains_step = ( - chains - .filter(pl.col("seq_step_index") == seq_step_index) - .join( - ( - spatialized_step - .select(["demand_group_id", "home_zone_id", "motive_seq_id", "to"]) - .rename({"to": "from"}) - ), - on=["demand_group_id", "home_zone_id", "motive_seq_id"] - ) - ) - - return pl.concat(spatialized_chains) - - - def spatialize_trip_chains_step(self, seq_step_index, chains_step, dest_prob, costs, alpha, seed): - """Samples destinations for one non-anchor step via exponential race. - - Adjusts probabilities with a penalty toward the anchor distance, - then samples a single `to` per group using the log(noise)/p_ij trick. - Anchor motives are passed through unchanged. - - Args: - seq_step_index (int): Step index (>=1). - chains_step (pl.DataFrame): Rows for this step, must include - ["demand_group_id","home_zone_id","motive_seq_id","motive", - "is_anchor","anchor_to","from"]. - dest_prob (pl.DataFrame): Destination probabilities with - ["motive","from","to","p_ij"]. - costs (pl.DataFrame): OD costs with ["from","to","cost"]. - alpha (float): Penalty coefficient for anchor distance. - seed (int): 64-bit RNG seed for reproducibility. - - Returns: - pl.DataFrame: Sampled rows with - ["demand_group_id","home_zone_id","motive_seq_id","motive", - "anchor_to","from","to"]. - """ - - # Tweak the destination probabilities so that the sampling takes into - # account the cost of travel to the next anchor (so we avoid drifting - # away too far). - - # Use the exponential sort trick to sample destinations based on their probabilities - # (because polars cannot do weighted sampling like pandas) - # https://timvieira.github.io/blog/post/2019/09/16/algorithms-for-sampling-without-replacement/ - - steps = ( - - chains_step - .filter(pl.col("is_anchor").not_()) - - .join(dest_prob, on=["from", "motive"]) - - .join( - costs, - left_on=["to", "anchor_to"], - right_on=["from", "to"] - ) - - .with_columns( - p_ij=( - (pl.col("p_ij").clip(1e-18).log() # Make sure p_ij > 0 - - alpha*pl.col("cost")).exp() - ), - noise=( - pl.struct(["demand_group_id", "motive_seq_id", "to"]) - .hash(seed=seed) - .cast(pl.Float64) - .truediv(pl.lit(18446744073709551616.0)) - .log() - .neg() - ) - ) - - .with_columns( - sample_score=( - pl.col("noise")/pl.col("p_ij").clip(1e-18) - + pl.col("to").cast(pl.Float64)*1e-18 - ) - ) - - .with_columns( - min_score=pl.col("sample_score").min().over(["demand_group_id", "motive_seq_id"]) - ) - .filter(pl.col("sample_score") == pl.col("min_score")) - - .select(["demand_group_id", "home_zone_id", "motive_seq_id", "motive", "anchor_to", "from", "to"]) - - ) - - # Add the steps that end up at anchor destinations - steps_anchor = ( - chains_step - .filter(pl.col("is_anchor")) - .with_columns( - to=pl.col("anchor_to") - ) - .select(["demand_group_id", "home_zone_id", "motive_seq_id", "motive", "anchor_to", "from", "to"]) - ) - - steps = pl.concat([steps, steps_anchor]) - - return steps diff --git a/mobility/choice_models/leisure_destination_choice_model.py b/mobility/choice_models/leisure_destination_choice_model.py deleted file mode 100644 index 074769c5..00000000 --- a/mobility/choice_models/leisure_destination_choice_model.py +++ /dev/null @@ -1,277 +0,0 @@ -import logging -import pandas as pd -import geopandas as gpd -import numpy as np -import pathlib -import os -import polars as pl -import mobility -import matplotlib.pyplot as plt - - -from importlib import resources - -from mobility.choice_models.destination_choice_model import DestinationChoiceModel -from mobility.choice_models.utilities import Utilities -from mobility.parsers.shops_turnover_distribution import ShopsTurnoverDistribution -from mobility.parsers.households_expenses_distribution import HouseholdsExpensesDistribution -from mobility.r_utils.r_script import RScript -from mobility.choice_models.utilities import Utilities - - -from mobility.radiation_model import radiation_model -from mobility.radiation_model_selection import apply_radiation_model - -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_zones import TransportZones - -from dataclasses import dataclass, field -from typing import Dict, Union, List - - -@dataclass -class LeisureDestinationChoiceModelParameters: - - model: Dict[str, Union[str, float]] = field( - default_factory=lambda: { - "type": "radiation_selection", - "lambda": 0.99986, - #"end_of_contract_rate": 0.00, # à supprimer ? - #"job_change_utility_constant": -5.0, # à supprimer ? - #"max_iterations": 10, - #"tolerance": 0.01, - #"cost_update": False, - #"n_iter_cost_update": 3 - } - ) - - utility: Dict[str, float] = field( - default_factory=lambda: { - "fr": 40.0, - "ch": 40.0 - } - ) - - motive_ids: List[str] = field( - default_factory=lambda: ["7.71", "7.72", "7.73", "7.74", - "7.75", "7.76", "7.77", "7.78"] - ) - - - - -class LeisureDestinationChoiceModel(DestinationChoiceModel): - - def __init__( - self, - transport_zones: TransportZones, - modes: List[TransportMode], - parameters: LeisureDestinationChoiceModelParameters = LeisureDestinationChoiceModelParameters(), - leisure_sources_and_sinks: pd.DataFrame = None, - jobs: pd.DataFrame = None, - reference_flows: pd.DataFrame = None, - ssi_min_flow_volume: float = 200.0 - ): - """ - - """ - - - if leisure_sources_and_sinks is None: - self.leisure_sources_and_sinks = None - self.leisure_facilities = None - #self.leisure_sources_and_sinks = LeisureFacilitiesDistribution() - else: - self.leisure_sources_and_sinks = None - self.leisure_sources_and_sinks = leisure_sources_and_sinks - self.jobs = jobs - self.reference_flows = reference_flows - - - if "type" not in parameters.model.keys(): - raise ValueError("The model_parameters should be a dict that specifies the type of radiation model : radiation_universal or radiation_selection") - - if parameters.model["type"] == "radiation_selection": - if "lambda" not in parameters.model.keys(): - raise ValueError("Lambda parameter missing in model_parameters. It should be a dict with keys fr and ch.") - - if parameters.model["type"] == "radiation_universal": - if "alpha" not in parameters.model.keys(): - raise ValueError("Alpha parameter missing in model_parameters.") - if "beta" not in parameters.model.keys(): - raise ValueError("Beta parameter missing in model_parameters.") - - super().__init__( - "leisure", - transport_zones, - modes, - self.leisure_sources_and_sinks, - parameters, - ssi_min_flow_volume - ) - - - def prepare_sources_and_sinks(self, transport_zones): - - - sources = self.prepare_sources(transport_zones) - sinks = self.prepare_sinks(transport_zones) - - return sources, sinks - - def prepare_utilities(self, transport_zones, sinks): - utilities = Utilities(transport_zones, sinks, self.inputs["parameters"].utility) - return utilities - - - def prepare_sources( - self, - transport_zones - ) -> pd.DataFrame: - """ - Même code que work_destination_choice_model pour l'instant : on se base sur les domiciles - """ - - transport_zones_df = transport_zones.drop(columns="geometry") - - hh_expenses = HouseholdsExpensesDistribution() - all_expenses = hh_expenses.get() - all_expenses = all_expenses["hobbies"] - transport_zones_df = transport_zones_df.merge(all_expenses, on="local_admin_unit_id") - zones_per_communes = transport_zones_df[["local_admin_unit_id"]] - - # Compter le nombre de tz par communes - zones_per_communes = zones_per_communes.value_counts() - - # Diviser le montant total par nombre de tz - transport_zones_df = transport_zones_df.merge(zones_per_communes, on="local_admin_unit_id") - - - transport_zones_df["expenses"] = transport_zones_df["expenses"].truediv(transport_zones_df["count"]) - #When debug=True, plot a map of the sources - if os.environ.get("MOBILITY_DEBUG") == "1": - print("Plotting sources for leisure") - transport_zones_df.plot(column="expenses", legend=True) - plt.title("Leisure sources") - plt.show() - sources_expenses = transport_zones_df[["transport_zone_id", "expenses"]].rename(columns = {"transport_zone_id": "from", "expenses": "source_volume"}) - - return sources_expenses - - - def prepare_sinks( - self, - transport_zones - ) -> pd.DataFrame: - """ - """ - - # easy solution : use a file from Overpass with leisure facilities - # - leisure_facilities = gpd.read_file("D:/data/mobility/projects/grand-geneve/leisures_grand_geneve_20250506.geojson") - #Convert them in EPSG:3035 (used by TransportZones) - leisure_facilities = leisure_facilities.to_crs(epsg=3035) - - #Find which stops are in the transport zone - leisure_facilities = transport_zones.sjoin(leisure_facilities, how="left") - lsd = leisure_facilities.dissolve(by="transport_zone_id", aggfunc='count') - - #When debug=True, plot a map of the sinks - if os.environ.get("MOBILITY_DEBUG") == "1": - print("Plotting sinks for leisure") - lsd.plot(column="id", legend=True) - plt.title("Leisure sinks") - plt.show() - leisure_facilities = leisure_facilities.groupby("transport_zone_id").count() - leisure_facilities = leisure_facilities.reset_index().rename(columns={"id": "sink_volume", "transport_zone_id": "to"}) - return leisure_facilities - - - def compute_flows( - self, - transport_zones, - sources, - sinks, - costs, - utilities - ): - - params = self.inputs["parameters"] - if params.model["type"] == "radiation_universal": - # NOT TESTED - flows, source_rest_volume, sink_rest_volume = radiation_model( - sources, - sinks, - costs, - params.model["alpha"], - params.model["beta"], - ) - return flows - - if params.model["type"] == "radiation_selection": - # NOT TESTED - selection_lambda = params.model["lambda"] - polar_sources = pl.from_pandas(sources).with_columns(pl.col("from").cast(pl.Int64)) - polar_sinks = pl.from_pandas(sinks).with_columns(pl.col("to").cast(pl.Int64)) - costs = costs.get() - utilities = utilities.get() - utilities = pl.from_pandas(utilities) - flows = apply_radiation_model(polar_sources, polar_sinks, costs, utilities, selection_lambda) - return flows.to_pandas() - - - def prepare_reference_flows(self, transport_zones: gpd.GeoDataFrame): - - # Pas de flux de référence connus - pass - """admin_ids = transport_zones["local_admin_unit_id"].values - - if self.active_population is None: - ref_flows = self.reference_flows.get() - else: - ref_flows = self.reference_flows - - ref_flows = ref_flows[(ref_flows["local_admin_unit_id_from"].isin(admin_ids)) & (ref_flows["local_admin_unit_id_to"].isin(admin_ids))].copy() - ref_flows.rename({"flow_volume": "ref_flow_volume"}, axis=1, inplace=True) - - return ref_flows""" - - - def compute_utility_by_od_and_mode( - self, - transport_zones: gpd.GeoDataFrame, - travel_costs: pd.DataFrame - ): - - params = self.inputs["parameters"] - - travel_costs = pd.merge( - travel_costs, - transport_zones[["transport_zone_id", "country"]].rename({"transport_zone_id": "to"}, axis=1).set_index("to"), - left_index=True, - right_index=True - ) - - travel_costs["utility"] = travel_costs["country"].map(params.utility) - travel_costs["net_utility"] = travel_costs["utility"] - 2*travel_costs["cost"] - - return travel_costs - - - - def plot_flows(self): - - output_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / "leisure-flows.svg" - - logging.info(f"Plotting flows (svg path: {output_path})") - - script = RScript(resources.files('mobility.r_utils').joinpath('plot_flows.R')) - script.run( - args=[ - str(self.inputs["transport_zones"].cache_path), - str(self.cache_path["od_flows"]), - output_path - ] - ) - - return None diff --git a/mobility/choice_models/population_trips_run.py b/mobility/choice_models/population_trips_run.py deleted file mode 100644 index ab268cfc..00000000 --- a/mobility/choice_models/population_trips_run.py +++ /dev/null @@ -1,847 +0,0 @@ -import json -import logging -import os -import pathlib -import pickle -import random -import re -import shutil -from dataclasses import dataclass -from typing import Any, List - -import pandas as pd -import polars as pl - -from mobility.choice_models.congestion_state import CongestionState -from mobility.choice_models.destination_sequence_sampler import DestinationSequenceSampler -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters -from mobility.choice_models.population_trips_run_results import PopulationTripsRunResults -from mobility.choice_models.state_initializer import StateInitializer -from mobility.choice_models.state_updater import StateUpdater -from mobility.choice_models.top_k_mode_sequence_search import ModeSequenceSearcher -from mobility.choice_models.transition_schema import TRANSITION_EVENT_SCHEMA -from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator -from mobility.file_asset import FileAsset -from mobility.motives import Motive -from mobility.parsers.mobility_survey import MobilitySurvey -from mobility.population import Population -from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset -from mobility.transport_modes.transport_mode import TransportMode - - -@dataclass(frozen=True) -class _ResumePlan: - run_key: str - is_weekday: bool - resume_from_iteration: int | None - start_iteration: int - - -@dataclass(frozen=True) -class _ResumeState: - current_states: pl.DataFrame - remaining_sinks: pl.DataFrame - congestion_state: CongestionState | None - start_iteration: int - restored: bool - - -@dataclass(frozen=True) -class _RunContext: - population: Population - costs_aggregator: TravelCostsAggregator - motives: List[Motive] - modes: List[TransportMode] - surveys: List[MobilitySurvey] - parameters: PopulationTripsParameters - is_weekday: bool - run_key: str - tmp_folders: dict[str, pathlib.Path] - resume_plan: _ResumePlan - - -@dataclass -class _RunState: - chains_by_motive: pl.DataFrame - chains: pl.DataFrame - demand_groups: pl.DataFrame - motive_dur: pl.DataFrame - home_night_dur: pl.DataFrame - stay_home_state: pl.DataFrame - sinks: pl.DataFrame - current_states: pl.DataFrame - remaining_sinks: pl.DataFrame - costs: pl.DataFrame - congestion_state: CongestionState | None - start_iteration: int - current_states_steps: pl.DataFrame | None = None - - -class PopulationTripsRun(FileAsset): - """Single day-type PopulationTrips asset.""" - - def __init__( - self, - *, - population: Population, - costs_aggregator: TravelCostsAggregator, - motives: List[Motive], - modes: List[TransportMode], - surveys: List[MobilitySurvey], - parameters: PopulationTripsParameters, - is_weekday: bool, - enabled: bool = True, - ) -> None: - """Initialize a single weekday or weekend PopulationTrips run.""" - inputs = { - "version": 1, - "population": population, - "costs_aggregator": costs_aggregator, - "motives": motives, - "modes": modes, - "surveys": surveys, - "parameters": parameters, - "is_weekday": is_weekday, - "enabled": enabled, - } - - self.rng = random.Random(parameters.seed) if parameters.seed is not None else random.Random() - self.state_initializer = StateInitializer() - self.destination_sequence_sampler = DestinationSequenceSampler() - self.mode_sequence_searcher = ModeSequenceSearcher() - self.state_updater = StateUpdater() - - project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - period = "weekday" if is_weekday else "weekend" - - cache_path = { - "flows": project_folder / "population_trips" / period / "flows.parquet", - "sinks": project_folder / "population_trips" / period / "sinks.parquet", - "costs": project_folder / "population_trips" / period / "costs.parquet", - "chains": project_folder / "population_trips" / period / "chains.parquet", - "transitions": project_folder / "population_trips" / period / "transitions.parquet", - "demand_groups": project_folder / "population_trips" / period / "demand_groups.parquet", - } - super().__init__(inputs, cache_path) - - - def create_and_get_asset(self) -> dict[str, pl.LazyFrame]: - """Run the simulation for this day type and materialize cached outputs.""" - if not self.inputs["enabled"]: - self._write_empty_outputs() - return self.get_cached_asset() - - ctx = self._build_run_context() - state = self._build_run_state(ctx) - for iteration in range(state.start_iteration, ctx.parameters.n_iterations + 1): - self._run_iteration(ctx, state, iteration) - self._save_iteration_state(ctx, state, iteration) - - self._materialize_current_states_steps_if_missing(ctx, state) - - final_costs = self._build_final_costs(ctx, state) - final_flows = self._build_final_flows(ctx, state, final_costs) - transitions = self._build_transitions(ctx) - - self._write_outputs( - flows=final_flows, - sinks=state.sinks, - costs=final_costs, - chains=state.chains, - transitions=transitions, - demand_groups=state.demand_groups, - ) - - return self.get_cached_asset() - - - def _write_empty_outputs(self) -> None: - """Write empty outputs for a disabled day type.""" - for path in self.cache_path.values(): - path.parent.mkdir(parents=True, exist_ok=True) - pl.DataFrame().write_parquet(self.cache_path["flows"]) - pl.DataFrame().write_parquet(self.cache_path["sinks"]) - pl.DataFrame().write_parquet(self.cache_path["costs"]) - pl.DataFrame().write_parquet(self.cache_path["chains"]) - self._empty_transition_events().write_parquet(self.cache_path["transitions"]) - pl.DataFrame().write_parquet(self.cache_path["demand_groups"]) - - - def _build_run_context(self) -> _RunContext: - """Assemble immutable run-level context for this execution.""" - parameters = self.inputs["parameters"] - is_weekday = self.inputs["is_weekday"] - run_key = self.inputs_hash - resume_plan = self._build_resume_plan( - run_key=run_key, - is_weekday=is_weekday, - n_iterations=parameters.n_iterations, - ) - self._log_resume_plan(resume_plan) - tmp_folders = self._prepare_tmp_folders( - run_key=run_key, - base_folder=self.cache_path["flows"].parent, - resume=(resume_plan.resume_from_iteration is not None), - ) - return _RunContext( - population=self.inputs["population"], - costs_aggregator=self.inputs["costs_aggregator"], - motives=self.inputs["motives"], - modes=self.inputs["modes"], - surveys=self.inputs["surveys"], - parameters=parameters, - is_weekday=is_weekday, - run_key=run_key, - tmp_folders=tmp_folders, - resume_plan=resume_plan, - ) - - - def _build_resume_plan( - self, - *, - run_key: str, - is_weekday: bool, - n_iterations: int, - ) -> _ResumePlan: - """Decide whether this run resumes from a saved iteration or starts fresh.""" - latest_saved_iteration = self._find_latest_saved_iteration( - run_key=run_key, - is_weekday=is_weekday, - ) - if latest_saved_iteration is None: - return _ResumePlan( - run_key=run_key, - is_weekday=is_weekday, - resume_from_iteration=None, - start_iteration=1, - ) - - last_completed_iteration = min(int(latest_saved_iteration), int(n_iterations)) - return _ResumePlan( - run_key=run_key, - is_weekday=is_weekday, - resume_from_iteration=last_completed_iteration, - start_iteration=last_completed_iteration + 1, - ) - - - def _find_latest_saved_iteration(self, *, run_key: str, is_weekday: bool) -> int | None: - """Return the latest completed iteration whose saved state is available.""" - iteration_state_folder = self._get_tmp_folder_paths( - run_key=run_key, - base_folder=self.cache_path["flows"].parent, - )["iteration-state"] - if not iteration_state_folder.exists(): - return None - - completion_files = list(iteration_state_folder.glob("iteration_state_*.json")) - if not completion_files: - return None - - latest_iteration = None - iteration_pattern = re.compile(r"iteration_state_(\d+)\.json$") - for path in completion_files: - match = iteration_pattern.search(path.name) - if match is None: - continue - iteration = int(match.group(1)) - if latest_iteration is None or iteration > latest_iteration: - latest_iteration = iteration - - return latest_iteration - - - def _log_resume_plan(self, resume_plan: _ResumePlan) -> None: - """Log whether this run starts fresh or resumes from a saved iteration.""" - if resume_plan.resume_from_iteration is None: - logging.info( - "No saved iteration found for run_key=%s is_weekday=%s. Starting from scratch.", - resume_plan.run_key, - str(resume_plan.is_weekday), - ) - return - - logging.info( - "Latest saved iteration found for run_key=%s is_weekday=%s: iteration=%s", - resume_plan.run_key, - str(resume_plan.is_weekday), - str(resume_plan.resume_from_iteration), - ) - - - def _prepare_tmp_folders( - self, - *, - run_key: str, - base_folder: pathlib.Path, - resume: bool = False, - ) -> dict[str, pathlib.Path]: - """Create per-run temp folders next to the cache path.""" - def ensure_dir(path: pathlib.Path) -> pathlib.Path: - if resume is False: - shutil.rmtree(path, ignore_errors=True) - os.makedirs(path, exist_ok=True) - return path - - return { - name: ensure_dir(path) - for name, path in self._get_tmp_folder_paths(run_key=run_key, base_folder=base_folder).items() - } - - - def _get_tmp_folder_paths( - self, - *, - run_key: str, - base_folder: pathlib.Path, - ) -> dict[str, pathlib.Path]: - """Return the per-run temp folder paths without creating them.""" - folder_names = [ - "destination-sequences", - "modes", - "flows", - "sequences-index", - "transitions", - "iteration-state", - ] - return {name: base_folder / f"{run_key}-{name}" for name in folder_names} - - - def _build_run_state(self, ctx: _RunContext) -> _RunState: - """Build the initial mutable state, then apply resume restoration.""" - chains_by_motive, chains, demand_groups = self.state_initializer.get_chains( - ctx.population, - ctx.surveys, - ctx.motives, - ctx.modes, - ctx.is_weekday, - ) - motive_dur, home_night_dur = self.state_initializer.get_mean_activity_durations( - chains_by_motive, - demand_groups, - ) - stay_home_state, current_states = self.state_initializer.get_stay_home_state( - demand_groups, - home_night_dur, - ctx.motives, - ctx.parameters.min_activity_time_constant, - ) - sinks = self.state_initializer.get_sinks( - chains_by_motive, - ctx.motives, - ctx.population.transport_zones, - ) - state = _RunState( - chains_by_motive=chains_by_motive, - chains=chains, - demand_groups=demand_groups, - motive_dur=motive_dur, - home_night_dur=home_night_dur, - stay_home_state=stay_home_state, - sinks=sinks, - current_states=current_states, - remaining_sinks=sinks.clone(), - costs=self.state_initializer.get_current_costs( - ctx.costs_aggregator, - congestion=False, - ), - congestion_state=None, - start_iteration=1, - ) - self._apply_resume_state(ctx, state) - return state - - - def _apply_resume_state(self, ctx: _RunContext, state: _RunState) -> None: - """Apply either the restored iteration state or the fresh start state.""" - resume_state = self._restore_resume_state(ctx, state) - state.current_states = resume_state.current_states - state.remaining_sinks = resume_state.remaining_sinks - state.congestion_state = resume_state.congestion_state - state.start_iteration = resume_state.start_iteration - if not resume_state.restored: - return - - logging.info( - "Resuming PopulationTrips from saved iteration: run_key=%s is_weekday=%s iteration=%s", - ctx.run_key, - str(ctx.is_weekday), - str(ctx.resume_plan.resume_from_iteration), - ) - state.costs = ctx.costs_aggregator.get( - congestion=(state.congestion_state is not None), - congestion_state=state.congestion_state, - ) - - - def _restore_resume_state(self, ctx: _RunContext, state: _RunState) -> _ResumeState: - """Restore the latest saved iteration state, or return a fresh start state.""" - fresh_state = self._build_fresh_resume_state( - stay_home_state=state.stay_home_state, - sinks=state.sinks, - ) - if ctx.resume_plan.resume_from_iteration is None: - return fresh_state - - saved_state = self._load_saved_iteration_state( - ctx=ctx, - iteration=ctx.resume_plan.resume_from_iteration, - ) - if saved_state is None: - return fresh_state - - try: - self.rng.setstate(saved_state["rng_state"]) - except Exception: - logging.exception("Failed to restore RNG state from saved iteration; restarting from scratch.") - return fresh_state - - self._prune_iteration_artifacts( - tmp_folders=ctx.tmp_folders, - keep_up_to_iteration=ctx.resume_plan.resume_from_iteration, - ) - congestion_state = self._load_congestion_state( - ctx=ctx, - last_completed_iteration=ctx.resume_plan.resume_from_iteration, - ) - return _ResumeState( - current_states=saved_state["current_states"], - remaining_sinks=saved_state["remaining_sinks"], - congestion_state=congestion_state, - start_iteration=ctx.resume_plan.start_iteration, - restored=True, - ) - - - def _build_fresh_resume_state( - self, - *, - stay_home_state: pl.DataFrame, - sinks: pl.DataFrame, - ) -> _ResumeState: - """Build the clean initial state used when no saved iteration can be restored.""" - current_states = ( - stay_home_state - .select(["demand_group_id", "iteration", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) - .clone() - ) - return _ResumeState( - current_states=current_states, - remaining_sinks=sinks.clone(), - congestion_state=None, - start_iteration=1, - restored=False, - ) - - - def _load_saved_iteration_state( - self, - *, - ctx: _RunContext, - iteration: int, - ) -> dict[str, object] | None: - """Load the saved run state for one completed iteration.""" - try: - paths = self._get_iteration_state_paths(ctx=ctx, iteration=iteration) - with open(paths["rng_state"], "rb") as file: - rng_state = pickle.load(file) - return { - "current_states": pl.read_parquet(paths["current_states"]), - "remaining_sinks": pl.read_parquet(paths["remaining_sinks"]), - "rng_state": rng_state, - } - except Exception: - logging.exception( - "Failed to load saved iteration state (run_key=%s, is_weekday=%s, iteration=%s).", - ctx.run_key, - str(ctx.is_weekday), - str(iteration), - ) - return None - - - def _load_congestion_state( - self, - *, - ctx: _RunContext, - last_completed_iteration: int, - ) -> CongestionState | None: - """Load the congestion state active after the last completed iteration.""" - if ctx.parameters.n_iter_per_cost_update <= 0 or last_completed_iteration < 1: - return None - - last_update_iteration = ( - 1 + ((last_completed_iteration - 1) // ctx.parameters.n_iter_per_cost_update) * ctx.parameters.n_iter_per_cost_update - ) - if last_update_iteration < 1: - return None - - try: - flow_assets_by_mode = {} - empty_flows = pd.DataFrame({"from": [], "to": [], "vehicle_volume": []}) - - for mode in ctx.costs_aggregator.iter_congestion_enabled_modes(): - mode_name = mode.inputs["parameters"].name - flow_asset = VehicleODFlowsAsset( - vehicle_od_flows=empty_flows, - run_key=ctx.run_key, - is_weekday=ctx.is_weekday, - iteration=last_update_iteration, - mode_name=mode_name, - ) - flow_asset.get() - flow_assets_by_mode[mode_name] = flow_asset - - if not flow_assets_by_mode: - return None - - return CongestionState( - run_key=ctx.run_key, - is_weekday=ctx.is_weekday, - iteration=last_update_iteration, - flow_assets_by_mode=flow_assets_by_mode, - ) - except Exception: - logging.exception("Failed to load congestion state on resume; falling back to free-flow costs until next update.") - return None - - - def _run_iteration(self, ctx: _RunContext, state: _RunState, iteration: int) -> None: - """Execute one simulation iteration and update the mutable run state.""" - logging.info("Iteration %s", str(iteration)) - seed = self.rng.getrandbits(64) - - self._sample_and_write_destination_sequences(ctx, state, iteration, seed) - self._search_and_write_mode_sequences(ctx, state, iteration) - transition_events = self._update_iteration_state(ctx, state, iteration) - self._write_transition_events(ctx, iteration, transition_events) - - - def _sample_and_write_destination_sequences( - self, - ctx: _RunContext, - state: _RunState, - iteration: int, - seed: int, - ) -> None: - """Run destination sampling and persist destination sequences for one iteration.""" - ( - self.destination_sequence_sampler.sample( - ctx.motives, - ctx.population.transport_zones, - state.remaining_sinks, - iteration, - state.chains_by_motive, - state.demand_groups, - state.costs, - ctx.tmp_folders, - ctx.parameters, - seed, - ) - .write_parquet(ctx.tmp_folders["destination-sequences"] / f"destination_sequences_{iteration}.parquet") - ) - - - def _search_and_write_mode_sequences(self, ctx: _RunContext, state: _RunState, iteration: int) -> None: - """Run mode-sequence search and persist the results for one iteration.""" - ( - self.mode_sequence_searcher.search( - iteration, - ctx.costs_aggregator, - ctx.tmp_folders, - ctx.parameters, - congestion_state=state.congestion_state, - ) - .write_parquet(ctx.tmp_folders["modes"] / f"mode_sequences_{iteration}.parquet") - ) - - - def _update_iteration_state(self, ctx: _RunContext, state: _RunState, iteration: int) -> pl.DataFrame: - """Advance the simulation state by one iteration and return transition events.""" - state.current_states, state.current_states_steps, transition_events = self.state_updater.get_new_states( - state.current_states, - state.demand_groups, - state.chains_by_motive, - ctx.costs_aggregator, - state.congestion_state, - state.remaining_sinks, - state.motive_dur, - iteration, - ctx.tmp_folders, - state.home_night_dur, - state.stay_home_state, - ctx.parameters, - ctx.motives, - ) - state.costs, state.congestion_state = self.state_updater.get_new_costs( - state.costs, - iteration, - ctx.parameters.n_iter_per_cost_update, - state.current_states_steps, - ctx.costs_aggregator, - congestion_state=state.congestion_state, - run_key=ctx.run_key, - is_weekday=ctx.is_weekday, - ) - state.remaining_sinks = self.state_updater.get_new_sinks( - state.current_states_steps, - state.sinks, - ctx.motives, - ) - return transition_events - - - def _write_transition_events(self, ctx: _RunContext, iteration: int, transition_events: pl.DataFrame) -> None: - """Persist transition events produced for one iteration.""" - transition_events.write_parquet( - ctx.tmp_folders["transitions"] / f"transition_events_{iteration}.parquet" - ) - - - def _save_iteration_state(self, ctx: _RunContext, state: _RunState, iteration: int) -> None: - """Save the run state after one completed iteration.""" - try: - paths = self._get_iteration_state_paths(ctx=ctx, iteration=iteration) - self._write_dataframe_file(paths["current_states"], state.current_states) - self._write_dataframe_file(paths["remaining_sinks"], state.remaining_sinks) - self._write_pickle_file(paths["rng_state"], self.rng.getstate()) - self._write_json_file( - paths["completion"], - { - "run_key": ctx.run_key, - "is_weekday": ctx.is_weekday, - "iteration": iteration, - }, - ) - except Exception: - logging.exception("Failed to save iteration state for iteration %s.", str(iteration)) - - - def _get_iteration_state_paths(self, *, ctx: _RunContext, iteration: int) -> dict[str, pathlib.Path]: - """Return the file paths used to save the run state after one iteration.""" - folder = ctx.tmp_folders["iteration-state"] - return { - "current_states": folder / f"current_states_{iteration}.parquet", - "remaining_sinks": folder / f"remaining_sinks_{iteration}.parquet", - "rng_state": folder / f"rng_state_{iteration}.pkl", - "completion": folder / f"iteration_state_{iteration}.json", - } - - - def _write_dataframe_file(self, final_path: pathlib.Path, dataframe: pl.DataFrame) -> None: - """Write a dataframe through a temporary file, then replace the target.""" - temp_path = pathlib.Path(str(final_path) + ".tmp") - dataframe.write_parquet(temp_path) - os.replace(temp_path, final_path) - - - def _write_pickle_file(self, final_path: pathlib.Path, value: Any) -> None: - """Write a Python object through a temporary file, then replace the target.""" - temp_path = pathlib.Path(str(final_path) + ".tmp") - with open(temp_path, "wb") as file: - file.write(pickle.dumps(value, protocol=pickle.HIGHEST_PROTOCOL)) - os.replace(temp_path, final_path) - - - def _write_json_file(self, final_path: pathlib.Path, value: dict[str, Any]) -> None: - """Write JSON through a temporary file, then replace the target.""" - temp_path = pathlib.Path(str(final_path) + ".tmp") - with open(temp_path, "w", encoding="utf-8") as file: - json.dump(value, file, sort_keys=True) - os.replace(temp_path, final_path) - - - def _prune_iteration_artifacts( - self, - *, - tmp_folders: dict[str, pathlib.Path], - keep_up_to_iteration: int, - ) -> None: - """Delete per-iteration artifacts beyond the last completed iteration.""" - try: - self._prune_iteration_files( - tmp_folders["destination-sequences"], - "destination_sequences_*.parquet", - keep_up_to_iteration, - ) - self._prune_iteration_files( - tmp_folders["modes"], - "mode_sequences_*.parquet", - keep_up_to_iteration, - ) - self._prune_iteration_files( - tmp_folders["transitions"], - "transition_events_*.parquet", - keep_up_to_iteration, - ) - self._prune_iteration_files( - tmp_folders["iteration-state"], - "current_states_*.parquet", - keep_up_to_iteration, - ) - self._prune_iteration_files( - tmp_folders["iteration-state"], - "remaining_sinks_*.parquet", - keep_up_to_iteration, - ) - self._prune_iteration_files( - tmp_folders["iteration-state"], - "rng_state_*.pkl", - keep_up_to_iteration, - ) - self._prune_iteration_files( - tmp_folders["iteration-state"], - "iteration_state_*.json", - keep_up_to_iteration, - ) - except Exception: - logging.exception("Failed to prune iteration artifacts on resume. Continuing anyway.") - - - def _prune_iteration_files( - self, - folder: pathlib.Path, - pattern: str, - keep_up_to_iteration: int, - ) -> None: - """Delete files matching one iteration pattern beyond the keep boundary.""" - for path in folder.glob(pattern): - match = re.search(r"(\d+)(?=\.[^.]+$)", path.name) - if match is None: - continue - iteration = int(match.group(1)) - if iteration > keep_up_to_iteration: - path.unlink(missing_ok=True) - - - def _materialize_current_states_steps_if_missing(self, ctx: _RunContext, state: _RunState) -> None: - """Materialize per-step state rows when no iteration produced them.""" - if state.current_states_steps is not None: - return - - possible_states_steps = self.state_updater.get_possible_states_steps( - state.current_states, - state.demand_groups, - state.chains_by_motive, - ctx.costs_aggregator, - state.congestion_state, - state.remaining_sinks, - state.motive_dur, - ctx.parameters.n_iterations, - ctx.motives, - ctx.parameters.min_activity_time_constant, - ctx.tmp_folders, - ) - state.current_states_steps = self.state_updater.get_current_states_steps( - state.current_states, - possible_states_steps, - ) - - - def _build_final_costs(self, ctx: _RunContext, state: _RunState) -> pl.DataFrame: - """Compute the final OD costs to attach to the written outputs.""" - return ctx.costs_aggregator.get_costs_by_od_and_mode( - ["cost", "distance", "time", "ghg_emissions"], - congestion=(state.congestion_state is not None), - congestion_state=state.congestion_state, - ) - - - def _build_final_flows(self, ctx: _RunContext, state: _RunState, costs: pl.DataFrame) -> pl.DataFrame: - """Join final per-step states with demand-group attributes and costs.""" - return ( - state.current_states_steps - .join( - state.demand_groups.select(["demand_group_id", "home_zone_id", "csp", "n_cars"]), - on=["demand_group_id"], - ) - .drop("demand_group_id") - .join( - costs, - on=["from", "to", "mode"], - how="left", - ) - .with_columns( - is_weekday=pl.lit(ctx.is_weekday), - ) - ) - - - def _build_transitions(self, ctx: _RunContext) -> pl.DataFrame: - """Combine persisted per-iteration transition events into the final table.""" - transition_paths = sorted(ctx.tmp_folders["transitions"].glob("transition_events_*.parquet")) - if not transition_paths: - return self._empty_transition_events() - - return pl.concat([pl.read_parquet(path) for path in transition_paths], how="vertical") - - - def _empty_transition_events(self) -> pl.DataFrame: - """Return an empty transition-events frame with the expected schema.""" - return pl.DataFrame(schema=TRANSITION_EVENT_SCHEMA) - - - def _write_outputs( - self, - *, - flows: pl.DataFrame, - sinks: pl.DataFrame, - costs: pl.DataFrame, - chains: pl.DataFrame, - transitions: pl.DataFrame, - demand_groups: pl.DataFrame, - ) -> None: - """Write the final run artifacts to their parquet cache paths.""" - flows.write_parquet(self.cache_path["flows"]) - sinks.write_parquet(self.cache_path["sinks"]) - costs.write_parquet(self.cache_path["costs"]) - chains.write_parquet(self.cache_path["chains"]) - transitions.write_parquet(self.cache_path["transitions"]) - demand_groups.write_parquet(self.cache_path["demand_groups"]) - - - def get_cached_asset(self) -> dict[str, pl.LazyFrame]: - """Return lazy readers for this run's cached parquet outputs.""" - return {key: pl.scan_parquet(path) for key, path in self.cache_path.items()} - - - def results(self) -> PopulationTripsRunResults: - """Return the analysis helper bound to this run's cached outputs.""" - self.get() - cached = self.get_cached_asset() - - return PopulationTripsRunResults( - inputs_hash=self.inputs_hash, - is_weekday=self.inputs["is_weekday"], - transport_zones=self.inputs["population"].inputs["transport_zones"], - demand_groups=cached["demand_groups"], - states_steps=cached["flows"], - sinks=cached["sinks"], - costs=cached["costs"], - chains=cached["chains"], - transitions=cached["transitions"], - surveys=self.inputs["surveys"], - modes=self.inputs["modes"], - ) - - - def evaluate(self, metric, **kwargs) -> object: - """Evaluate this run using a named run-level metric.""" - results = self.results() - - if metric not in results.metrics_methods: - available = ", ".join(results.metrics_methods.keys()) - raise ValueError(f"Unknown evaluation metric: {metric}. Available metrics are: {available}") - - return results.metrics_methods[metric](**kwargs) - - - def remove(self, remove_checkpoints: bool = True) -> None: - """Remove cached outputs for this run and its saved iteration state.""" - super().remove() - for path in self._get_tmp_folder_paths( - run_key=self.inputs_hash, - base_folder=self.cache_path["flows"].parent, - ).values(): - shutil.rmtree(path, ignore_errors=True) diff --git a/mobility/choice_models/produits_A38G.csv b/mobility/choice_models/produits_A38G.csv deleted file mode 100644 index ef3d7386..00000000 --- a/mobility/choice_models/produits_A38G.csv +++ /dev/null @@ -1,63 +0,0 @@ -expense_id,expense_label,nad_id,naf_label -138G_A01Z,Produits de l'agriculture et de la chasse et services annexes,011,Culture et production animale -138G_A02Z,Produits sylvicoles et services annexes,021,Sylviculture et exploitation forestière -138G_A03Z,Produits de la pêche et de l'aquaculture ; services de soutien à la pêche,031,Pêche et aquaculture -138G_B08Z,Autres produits des industries extractives,089,Autres industries extractives -138G_D35A,"Électricité, transport et distribution d'électricité",351,Production et distribution d'électricité -138G_D35B,"Gaz manufacturé ; distribution de combustibles gazeux, de vapeur et d'air conditionné",352,Production et distribution de gaz -138G_E36Z,Eau naturelle ; traitement et distribution d'eau,360,"Captage, traitement et distribution d'eau" -138G_E37Z,Collecte et traitement des eaux usées ; boues d'épuration,370,Collecte et traitement des eaux usées -138G_E38Z,"Collecte, traitement et élimination des déchets ; récupération de matériaux",381,Collecte et traitement des déchets -138G_C10A,Viande et produits à base de viande,101,Transformation et conservation de la viande -138G_C10B,Préparations et conserves à base de poisson et de produits de la pêche,102,Transformation et conservation du poisson -138G_C10C,Produits à base de fruits et légumes,103,Transformation et conservation de fruits et légumes -138G_C10D,Huiles et graisses végétales et animales,104,Fabrication d'huiles et graisses -138G_C10E,Produits laitiers,105,Fabrication de produits laitiers -138G_C10F,Produits du travail des grains et produits amylacés,106,Meunerie et amidonnerie -138G_C10G,Produits de boulangerie-pâtisserie et pâtes alimentaires,107,"Boulangerie, pâtisserie, biscuiterie" -138G_C10H,Autres produits alimentaires,108,Autres industries alimentaires -138G_C10K,Aliments pour animaux,109,Fabrication d'aliments pour animaux -138G_C11Z,Boissons,110,Fabrication de boissons -138G_C12Z,Produits à base de tabac,120,Fabrication de tabac -138G_C13Z,Produits de l'industrie textile,131,Industrie textile -138G_C14Z,Articles d'habillement,141,Fabrication de vêtements -138G_C15Z,Cuir et articles en cuir,151,Industrie du cuir et de la chaussure -138G_C16Z,"Bois, articles en bois et en liège, à l'exclusion des meubles ; articles de vannerie et de sparterie",161,Travail du bois -138G_C17B,Articles en papier ou en carton,171,Industrie du papier et du carton -138G_C20A,Produits chimiques de base,201,Fabrication de produits chimiques de base -138G_C20B,"Savons, produits d'entretien et parfums",202,Fabrication de savons et produits d'entretien -138G_C20C,Autres produits chimiques et fibres synthétiques,203,Autres fabrications chimiques -138G_C21Z,Produits pharmaceutiques de base et préparations pharmaceutiques,211,Fabrication de produits pharmaceutiques -138G_C22A,Produits en caoutchouc,221,Fabrication de produits en caoutchouc -138G_C22B,Produits en plastique,222,Fabrication de produits en plastique -138G_C23A,Verre et articles en verre,231,Fabrication de verre et d'articles en verre -138G_C23B,Autres produits minéraux non métalliques hors verre,239,Autres produits minéraux non métalliques -138G_C24B,Métaux précieux et autres métaux non ferreux communs,244,Métallurgie des métaux non ferreux -138G_C25C,Armes et munitions,252,Fabrication d'armes et de munitions -138G_C25E,"Coutellerie, outillage et quincaillerie",257,Fabrication d'outillage -138G_C26A,Composants et cartes électroniques,261,Fabrication de composants électroniques -138G_C26B,Ordinateurs et équipements périphériques,262,Fabrication d'ordinateurs -138G_C27A,Appareils ménagers,275,Fabrication d'appareils ménagers -138G_C28B,Machines agricoles et forestières,283,Fabrication de machines agricoles -138G_C29A,"Véhicules automobiles, carrosseries et remorques",291,Construction automobile -138G_C30E,Matériels de transport n.c.a.,309,Fabrication d'autres matériels de transport -138G_F43Z,Travaux de construction spécialisés,439,Travaux de construction spécialisés -138G_G45Z,Commerce et réparation d'automobiles et de motocycles,451,Commerce et réparation automobile -138G_H49A,Transport ferroviaire,491,Transport ferroviaire -138G_H49B,Autres transports terrestres de voyageurs,492,Autres transports terrestres -138G_H50Z,Transport par eau,501,Transport maritime et fluvial -138G_H51Z,Transports aériens,511,Transports aériens -138G_I55Z,Services d'hébergement,551,Hôtels et hébergements -138G_I56Z,Services de restauration et de débits de boissons,561,Restauration traditionnelle -138G_J58Z,Édition,581,Édition -138G_J61Z,Services de télécommunications,611,Télécommunications -138G_K64H,Autres services bancaires,641,Activités bancaires -138G_K65Z,Services d'assurance,651,Assurances -138G_L68A,Transactions sur biens immobiliers,681,Transactions immobilières -138G_M69Z,Services juridiques et comptables,691,Activités juridiques -138G_N77Z,Location et location-bail,771,Location de véhicules -138G_O84Z,Services d'administration publique,841,Administration publique -138G_P85M,Services de l'enseignement,851,Enseignement primaire et secondaire -138G_Q86M,Services de santé humaine,861,Activités hospitalières -138G_R92Z,Jeux de hasard et d'argent,920,Jeux d'argent -138G_S95Z,Services de réparation d'ordinateurs et de biens personnels,951,Réparation d'ordinateurs diff --git a/mobility/choice_models/shopping_destination_choice_model.py b/mobility/choice_models/shopping_destination_choice_model.py deleted file mode 100644 index e07fdb11..00000000 --- a/mobility/choice_models/shopping_destination_choice_model.py +++ /dev/null @@ -1,273 +0,0 @@ -import logging -import pandas as pd -import geopandas as gpd -import numpy as np -import pathlib -import os -import polars as pl -import matplotlib.pyplot as plt - - -from importlib import resources -import mobility -from mobility.choice_models.destination_choice_model import DestinationChoiceModel -from mobility.choice_models.utilities import Utilities -from mobility.parsers.shops_turnover_distribution import ShopsTurnoverDistribution -from mobility.parsers.households_expenses_distribution import HouseholdsExpensesDistribution -from mobility.r_utils.r_script import RScript - -from mobility.radiation_model import radiation_model -from mobility.radiation_model_selection import apply_radiation_model - -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_zones import TransportZones - -from dataclasses import dataclass, field -from typing import Dict, Union, List - - -@dataclass -class ShoppingDestinationChoiceModelParameters: - - model: Dict[str, Union[str, float]] = field( - default_factory=lambda: { - "type": "radiation_selection", - "lambda": 0.99986, - #"end_of_contract_rate": 0.00, # à supprimer ? - #"job_change_utility_constant": -5.0, # à supprimer ? - #"max_iterations": 10, - #"tolerance": 0.01, - #"cost_update": False, - #"n_iter_cost_update": 3 - } - ) - - utility: Dict[str, float] = field( - default_factory=lambda: { - "fr": 70.0, - "ch": 50.0 - } - ) - - motive_ids: List[str] = field( - default_factory=lambda: ["2.20", "2.21"] - ) - - - -class ShoppingDestinationChoiceModel(DestinationChoiceModel): - - def __init__( - self, - transport_zones: TransportZones, - modes: List[TransportMode], - parameters: ShoppingDestinationChoiceModelParameters = ShoppingDestinationChoiceModelParameters(), - shopping_sources_and_sinks: pd.DataFrame = None, - jobs: pd.DataFrame = None, - reference_flows: pd.DataFrame = None, - ssi_min_flow_volume: float = 200.0 - ): - """ - - """ - - - if shopping_sources_and_sinks is None: - self.shopping_sources_and_sinks = None - self.shopping_facilities = None - #self.shopping_sources_and_sinks = ShoppingFacilitiesDistribution() - else: - self.shopping_sources_and_sinks = None - self.shopping_sources_and_sinks = shopping_sources_and_sinks - self.jobs = jobs - self.reference_flows = reference_flows - - - if "type" not in parameters.model.keys(): - raise ValueError("The model_parameters should be a dict that specifies the type of radiation model : radiation_universal or radiation_selection") - - if parameters.model["type"] == "radiation_selection": - if "lambda" not in parameters.model.keys(): - raise ValueError("Lambda parameter missing in model_parameters. It should be a dict with keys fr and ch.") - - if parameters.model["type"] == "radiation_universal": - if "alpha" not in parameters.model.keys(): - raise ValueError("Alpha parameter missing in model_parameters.") - if "beta" not in parameters.model.keys(): - raise ValueError("Beta parameter missing in model_parameters.") - - super().__init__( - "shopping", - transport_zones, - modes, - self.shopping_sources_and_sinks, - parameters, - ssi_min_flow_volume - ) - - - def prepare_sources_and_sinks(self, transport_zones: TransportZones): - - - sources = self.prepare_sources(transport_zones) - sinks = self.prepare_sinks(transport_zones) - - return sources, sinks - - def prepare_utilities(self, transport_zones, sinks): - utilities = Utilities(transport_zones, sinks, self.inputs["parameters"].utility) - return utilities - - - def prepare_sources( - self, - transport_zones: TransportZones - ) -> pd.DataFrame: - """ - Même code que work_destination_choice_model pour l'instant : on se base sur les domiciles - """ - - hh_expenses = HouseholdsExpensesDistribution() - all_expenses = hh_expenses.get() - all_expenses = all_expenses["shops"] - transport_zones_df = transport_zones.drop(columns="geometry") - transport_zones_expenses = transport_zones_df.merge(all_expenses, on="local_admin_unit_id") - zones_per_communes = transport_zones_expenses[["local_admin_unit_id"]] - - # Compter le nombre de tz par communes - zones_per_communes = zones_per_communes.value_counts() - - # Diviser le montant total par nombre de tz - transport_zones_expenses = transport_zones_expenses.merge(zones_per_communes, on="local_admin_unit_id") - transport_zones_expenses["expenses"] = transport_zones_expenses["expenses"].truediv(transport_zones_expenses["count"]) - sources_expenses = transport_zones_expenses[["transport_zone_id", "expenses"]].rename(columns = {"transport_zone_id": "from", "expenses": "source_volume"}) - - #When debug=True, plot a map of the sources - if os.environ.get("MOBILITY_DEBUG") == "1": - print("Plotting sources for shopping") - transport_zones_expenses.plot(column="expenses", legend=True) - plt.title("Shopping sources") - plt.show() - - sources_expenses = transport_zones_expenses[["transport_zone_id", "expenses"]].rename(columns = {"transport_zone_id": "from", "expenses": "source_volume"}) - - return sources_expenses - - - def prepare_sinks( - self, - transport_zones: TransportZones - ) -> pd.DataFrame: - """ - """ - - #Get all shops turnover in FR and CH, they are in EPSG:4326 - shops_turnover = ShopsTurnoverDistribution() - all_shops = shops_turnover.get() - all_shops = gpd.GeoDataFrame(all_shops, geometry=gpd.points_from_xy(all_shops["lon"],all_shops["lat"], crs="EPSG:4326")) - #Convert them in EPSG:3035 (used by TransportZones) - all_shops = all_shops.to_crs(epsg=3035) - - # Find which stops are in the transport zone - all_shops = transport_zones.sjoin(all_shops, how="left") - asd = all_shops.dissolve(by="transport_zone_id", aggfunc='sum') - all_shops = all_shops.groupby(["transport_zone_id", "country"]).sum("turnover") - #When debug=True, plot a map of the sinks - if os.environ.get("MOBILITY_DEBUG") == "1": - print("Plotting sinks for shopping") - asd.plot(column="turnover", legend=True) - plt.title("Shopping sinks") - plt.show() - all_shops = all_shops.reset_index()[["transport_zone_id", "turnover", "country"]].rename(columns={"turnover": "sink_volume", "transport_zone_id": "to"}) - - return all_shops - - - def compute_flows( - self, - transport_zones, - sources, - sinks, - costs, - utilities - ): - - params = self.inputs["parameters"] - if params.model["type"] == "radiation_universal": - # NOT TESTED - flows, source_rest_volume, sink_rest_volume = radiation_model( - sources, - sinks, - costs, - params.model["alpha"], - params.model["beta"], - ) - return flows - - if params.model["type"] == "radiation_selection": - # NOT TESTED - selection_lambda = params.model["lambda"] - polar_sources = pl.from_pandas(sources).with_columns(pl.col("from").cast(pl.Int64)) - polar_sinks = pl.from_pandas(sinks).with_columns(pl.col("to").cast(pl.Int64)) - costs = costs.get() - utilities = utilities.get() - utilities = pl.from_pandas(utilities) - flows = apply_radiation_model(polar_sources, polar_sinks, costs, utilities, selection_lambda) - return flows.to_pandas() - - - def prepare_reference_flows(self, transport_zones: gpd.GeoDataFrame): - - # Pas de flux de référence connus - pass - """admin_ids = transport_zones["local_admin_unit_id"].values - - if self.active_population is None: - ref_flows = self.reference_flows.get() - else: - ref_flows = self.reference_flows - - ref_flows = ref_flows[(ref_flows["local_admin_unit_id_from"].isin(admin_ids)) & (ref_flows["local_admin_unit_id_to"].isin(admin_ids))].copy() - ref_flows.rename({"flow_volume": "ref_flow_volume"}, axis=1, inplace=True) - - return ref_flows""" - - - def compute_utility_by_od_and_mode( - self, - transport_zones: gpd.GeoDataFrame, - travel_costs: pd.DataFrame - ): - - params = self.inputs["parameters"] - - travel_costs = pd.merge( - travel_costs, - transport_zones[["transport_zone_id", "country"]].rename({"transport_zone_id": "to"}, axis=1).set_index("to"), - left_index=True, - right_index=True - ) - - travel_costs["utility"] = travel_costs["country"].map(params.utility) - travel_costs["net_utility"] = travel_costs["utility"] - 2*travel_costs["cost"] - - return travel_costs - - - - def plot_flows(self): - - output_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / "shopping-flows.svg" - - logging.info(f"Plotting flows (svg path: {output_path})") - - script = RScript(resources.files('mobility.r_utils').joinpath('plot_flows.R')) - script.run( - args=[ - str(self.inputs["transport_zones"].cache_path), - str(self.cache_path["od_flows"]), - output_path - ] - ) - - return None diff --git a/mobility/choice_models/studies_destination_choice_model.py b/mobility/choice_models/studies_destination_choice_model.py deleted file mode 100644 index 7bb4e3c6..00000000 --- a/mobility/choice_models/studies_destination_choice_model.py +++ /dev/null @@ -1,158 +0,0 @@ -import logging -import pandas as pd -import geopandas as gpd -import numpy as np -import pathlib -import os -import polars as pl -import matplotlib.pyplot as plt - - -from importlib import resources -import mobility -from mobility.choice_models.destination_choice_model import DestinationChoiceModel -from mobility.choice_models.utilities import Utilities -from mobility.parsers.students_distribution import StudentsDistribution -from mobility.parsers.schools_capacity_distribution import SchoolsCapacityDistribution - - -from mobility.r_utils.r_script import RScript - -from mobility.radiation_model import radiation_model -from mobility.radiation_model_selection import apply_radiation_model - -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_zones import TransportZones - -from dataclasses import dataclass, field -from typing import Dict, Union, List - - -@dataclass -class StudiesDestinationChoiceModelParameters: - - model: Dict[str, Union[str, float]] = field( - default_factory=lambda: { - "type": "radiation_selection", - "lambda": 0.99986, - #"end_of_contract_rate": 0.00, # à supprimer ? - #"job_change_utility_constant": -5.0, # à supprimer ? - #"max_iterations": 10, - #"tolerance": 0.01, - #"cost_update": False, - #"n_iter_cost_update": 3 - } - ) - - utility: Dict[str, float] = field( - default_factory=lambda: { - "fr": 70.0, - "ch": 50.0 - } - ) - - motive_ids: List[str] = field( - default_factory=lambda: ["1.11"] - ) - - - -# class StudiesDestinationChoiceModel(DestinationChoiceModel): - -# def __init__( -# self, -# transport_zones: TransportZones, -# modes: List[TransportMode], -# parameters: StudiesDestinationChoiceModelParameters = StudiesDestinationChoiceModelParameters(), -# students_distribution: pd.DataFrame = None, -# school_capacities: pd.DataFrame = None, -# reference_flows: pd.DataFrame = None, -# ssi_min_flow_volume: float = 200.0 -# ): -# """ - -# """ - - -# if students_distribution is None: -# self.students_distribution = StudentsDistribution() -# self.school_capacities = SchoolsCapacityDistribution() -# self.reference_flows = None # SchoolStudentsFlows() : class does not exist ? -# else: -# self.students_distribution = students_distribution -# self.school_capacities = school_capacities -# self.reference_flows = reference_flows - - - -# if "type" not in parameters.model.keys(): -# raise ValueError("The model_parameters should be a dict that specifies the type of radiation model : radiation_universal or radiation_selection") - -# if parameters.model["type"] == "radiation_selection": -# if "lambda" not in parameters.model.keys(): -# raise ValueError("Lambda parameter missing in model_parameters. It should be a dict with keys fr and ch.") - -# if parameters.model["type"] == "radiation_universal": -# if "alpha" not in parameters.model.keys(): -# raise ValueError("Alpha parameter missing in model_parameters.") -# if "beta" not in parameters.model.keys(): -# raise ValueError("Beta parameter missing in model_parameters.") - -# super().__init__( -# "studies", -# transport_zones, -# modes, -# self.studies_sources_and_sinks, -# parameters, -# ssi_min_flow_volume -# ) - - -# def prepare_sources_and_sinks(self, transport_zones: TransportZones): - - -# transport_zones = transport_zones.get() -# sources = self.prepare_sources(transport_zones) -# sinks = self.prepare_sinks(transport_zones) - -# return sources, sinks - -# def prepare_utilities(self, transport_zones, sinks): -# utilities = Utilities(transport_zones, sinks, self.inputs["parameters"].utility) -# return utilities - - -# def prepare_sources( -# self, -# transport_zones: pd.DataFrame -# ) -> pd.DataFrame: - -# transport_zones_df = transport_zones.drop(columns="geometry") - -# # récupérer où sont les étudiants par ages, et pas zones de transport - - -# tz_lau_ids = set(transport_zones["local_admin_unit_id"].unique()) - -# students_distribution = students_distribution.get() -# students_distribution = students_distribution[students_distribution["local_admin_unit_id"].isin(tz_lau_ids)] - -# return students_distribution - - -# def prepare_sinks( -# self, -# transport_zones: pd.DataFrame -# ) -> pd.DataFrame: -# """ -# """ - -# tz_lau_ids = set(transport_zones["local_admin_unit_id"].unique()) - -# # missing swiss school capacities -# school_capacities = self.school_capacities.get() -# school_capacities = school_capacities[school_capacities["local_admin_unit_id"].isin(tz_lau_ids)] - - -# return school_capacities - diff --git a/mobility/choice_models/top_k_mode_sequence_search.py b/mobility/choice_models/top_k_mode_sequence_search.py deleted file mode 100644 index 55d91e16..00000000 --- a/mobility/choice_models/top_k_mode_sequence_search.py +++ /dev/null @@ -1,202 +0,0 @@ -import os -import subprocess -import pickle -import json -import shutil -import logging - -import polars as pl - -from importlib import resources -from collections import defaultdict -from rich.spinner import Spinner -from rich.live import Live - -from mobility.transport_modes.compute_subtour_mode_probabilities import compute_subtour_mode_probabilities_serial, modes_list_to_dict -from mobility.choice_models.add_index import add_index - -class ModeSequenceSearcher: - """Finds top-k mode sequences for spatialized trip chains. - - Prepares per-iteration inputs (costs, allowed leg modes, location chains), - invokes an external probability computation, and aggregates chunked results - into per-chain mode sequences with a compact index. - """ - - def search(self, iteration, costs_aggregator, tmp_folders, parameters, congestion_state=None) -> pl.DataFrame: - """Compute top-k mode sequences for all spatialized chains of an iteration. - - Builds temporary artifacts (mode props, OD costs, allowed leg modes, - unique location chains), runs the external scorer, then assembles and - indexes the resulting sequences. - - Args: - iteration (int): Iteration number (>=1). - costs_aggregator (TravelCostsAggregator): Provides per-mode OD costs. - tmp_folders (dict[str, pathlib.Path]): Workspace; must include - "destination-sequences", "modes", and a parent folder for temp files. - parameters (PopulationTripsParameters): Provides k for top-k and other - tuning values. - - Returns: - pl.DataFrame: Per-step results with columns - ["demand_group_id","motive_seq_id","dest_seq_id","mode_seq_id", - "seq_step_index","mode","iteration"]. - - Notes: - - Spawns a subprocess running `compute_subtour_mode_probabilities.py`. - - Uses on-disk intermediates (pickle/parquet/json) under the parent of - "destination-sequences". - - Assigns stable small integers to `mode_seq_id` via `add_index`. - """ - - parent_folder_path = tmp_folders["destination-sequences"].parent - - chains_path = tmp_folders["destination-sequences"] / f"destination_sequences_{iteration}.parquet" - - tmp_path = parent_folder_path / "tmp_results" - shutil.rmtree(tmp_path, ignore_errors=True) - os.makedirs(tmp_path) - - # Prepare a list of location chains - spat_chains = ( - pl.scan_parquet(chains_path) - .group_by(["demand_group_id", "motive_seq_id", "dest_seq_id"]) - .agg( - locations=pl.col("from").sort_by("seq_step_index") - ) - .collect() - .sort(["demand_group_id", "motive_seq_id", "dest_seq_id"]) - ) - - unique_location_chains = ( - spat_chains - .group_by(["dest_seq_id"]) - .agg( - pl.col("locations").first() - ) - .sort("dest_seq_id") - ) - - modes = modes_list_to_dict(costs_aggregator.modes) - - mode_id = {n: i for i, n in enumerate(modes)} - id_to_mode = {i: n for i, n in enumerate(modes)} - - costs = ( - costs_aggregator.get_costs_by_od_and_mode( - ["cost"], - congestion=(congestion_state is not None), - detail_distances=False, - congestion_state=congestion_state, - ) - # Cast costs to ints to avoid float comparison instabilities later - .with_columns( - mode_id=pl.col("mode").replace_strict(mode_id, return_dtype=pl.UInt8()), - cost=pl.col("cost").mul(1e6).cast(pl.Int64) - ) - .sort(["from", "to", "mode_id"]) - ) - - costs = {(row["from"], row["to"], row["mode_id"]): row["cost"] for row in costs.to_dicts()} - - is_return_mode = {mode_id[k]: v["is_return_mode"] for k, v in modes.items()} - - leg_modes = defaultdict(list) - for (from_, to_, mode) in costs.keys(): - if not is_return_mode[mode]: - leg_modes[(from_, to_)].append(mode) - - - if parameters.mode_sequence_search_parallel is False: - - logging.info("Finding probable mode sequences for the spatialized trip chains...") - - compute_subtour_mode_probabilities_serial( - parameters.k_mode_sequences, - unique_location_chains, - costs, - leg_modes, - modes, - tmp_path - ) - - else: - - costs_path = parent_folder_path / "tmp-costs.pkl" - leg_modes_path = parent_folder_path / "tmp-leg-modes.pkl" - modes_path = parent_folder_path / "modes-props.json" - location_chains_path = parent_folder_path / "tmp-location-chains.parquet" - - with open(modes_path, "w") as f: - f.write(json.dumps(modes)) - - with open(costs_path, "wb") as f: - pickle.dump(costs, f, protocol=pickle.HIGHEST_PROTOCOL) - - with open(leg_modes_path, "wb") as f: - pickle.dump(leg_modes, f, protocol=pickle.HIGHEST_PROTOCOL) - - unique_location_chains.write_parquet(location_chains_path) - - # Launch the mode sequence probability calculation - with Live(Spinner("dots", text="Finding probable mode sequences for the spatialized trip chains..."), refresh_per_second=10): - - process = subprocess.Popen( - [ - "python", - "-u", - str(resources.files('mobility') / "transport_modes" / "compute_subtour_mode_probabilities.py"), - "--k_sequences", str(parameters.k_mode_sequences), - "--location_chains_path", str(location_chains_path), - "--costs_path", str(costs_path), - "--leg_modes_path", str(leg_modes_path), - "--modes_path", str(modes_path), - "--tmp_path", str(tmp_path) - ] - ) - - process.wait() - - - # Agregate all mode sequences chunks - all_results = ( - spat_chains.select(["demand_group_id", "motive_seq_id", "dest_seq_id"]) - .join(pl.read_parquet(tmp_path), on="dest_seq_id") - .with_columns( - mode=pl.col("mode_index").replace_strict(id_to_mode) - ) - ) - - mode_sequences = ( - all_results - .group_by(["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_index"]) - .agg( - mode_index=pl.col("mode_index").sort_by("seq_step_index").cast(pl.Utf8()) - ) - .with_columns( - mode_index=pl.col("mode_index").list.join("-") - ) - .sort(["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_index", "mode_index"]) - ) - - mode_sequences = add_index( - mode_sequences, - col="mode_index", - index_col_name="mode_seq_id", - tmp_folders=tmp_folders - ) - - all_results = ( - all_results - .join( - mode_sequences.select(["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_index", "mode_seq_id"]), - on=["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_index"] - ) - .drop("mode_seq_index") - .select(["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id", "seq_step_index", "mode"]) - .with_columns(iteration=pl.lit(iteration, dtype=pl.UInt32())) - ) - - return all_results - diff --git a/mobility/choice_models/transport_mode_choice_model.py b/mobility/choice_models/transport_mode_choice_model.py deleted file mode 100644 index bc9778ab..00000000 --- a/mobility/choice_models/transport_mode_choice_model.py +++ /dev/null @@ -1,103 +0,0 @@ -import os -import pathlib -import logging -import pandas as pd -import polars as pl - -from mobility.file_asset import FileAsset -from mobility.parsers import JobsActivePopulationFlows -from mobility.choice_models.destination_choice_model import DestinationChoiceModel - -class TransportModeChoiceModel(FileAsset): - - def __init__(self, destination_choice_model: DestinationChoiceModel, logit_factor=1): - - inputs = { - "destination_choice_model": destination_choice_model, - "logit_factor": logit_factor - } - - file_name = "modal_choice_model.parquet" - cache_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / file_name - - super().__init__(inputs, cache_path) - - - def get_cached_asset(self) -> pd.DataFrame: - - logging.info("Modal choice model already prepared. Reusing the file : " + str(self.cache_path)) - prob = pd.read_parquet(self.cache_path) - - return prob - - def create_and_get_asset(self) -> pd.DataFrame: - - logging.info("Computing mode probabilities by OD...") - - costs = [] - for mode in self.inputs["destination_choice_model"].costs.modes: - - if mode.inputs["parameters"].congestion: - print(f"Getting congested costs for mode {mode.inputs['parameters'].name}") - gc = mode.inputs["generalized_cost"].get(congestion=True) - else: - print(f"Getting costs for mode {mode.inputs['parameters'].name}") - gc = mode.inputs["generalized_cost"].get() - - costs.append( - pl.DataFrame(gc) - .with_columns(pl.lit(mode.inputs["parameters"].name).alias("mode")) - ) - - costs = pl.concat(costs) - - prob = ( - costs - .with_columns(pl.col("cost").truediv(self.logit_factor).neg().exp().alias("exp_u")) - .with_columns((pl.col("exp_u")/pl.col("exp_u").sum().over(["from", "to"])).alias("prob")) - .select(["from", "to", "mode", "prob"]) - ) - - prob.write_parquet(self.cache_path) - - prob = prob.to_pandas() - return prob - - - def get_comparison_by_origin(self, flows): - - flows = flows.groupby(["local_admin_unit_id_from", "mode"], as_index=False)["flow_volume"].sum() - - lau_ids = flows["local_admin_unit_id_from"].unique() - - ref_flows = JobsActivePopulationFlows().get() - ref_flows = ref_flows[ref_flows["local_admin_unit_id_from"].isin(lau_ids) & ref_flows["local_admin_unit_id_to"].isin(lau_ids)] - ref_flows = ref_flows.groupby(["local_admin_unit_id_from", "mode"], as_index=False)["ref_flow_volume"].sum() - od_pairs = pd.concat([ - ref_flows[["local_admin_unit_id_from", "mode"]], - flows[["local_admin_unit_id_from", "mode"]] - ]).drop_duplicates() - - - # Remove all flows originating from switzerland as there is no reference data - od_pairs = od_pairs[od_pairs["local_admin_unit_id_from"].str[0:2] != "ch"] - - comparison = pd.merge( - od_pairs, - flows, - on=["local_admin_unit_id_from", "mode"], - how="left" - ) - - comparison = pd.merge( - comparison, - ref_flows, - on=["local_admin_unit_id_from", "mode"], - how="left" - ) - - - comparison.fillna(0.0, inplace=True) - - return comparison - diff --git a/mobility/choice_models/utilities.py b/mobility/choice_models/utilities.py deleted file mode 100644 index ec3d264d..00000000 --- a/mobility/choice_models/utilities.py +++ /dev/null @@ -1,85 +0,0 @@ -import pandas as pd - -class Utilities: - """ - A class to manage different utilities for each country. Can be used for different motives : utility to go to work, to study, etc. - - Parameters - ---------- - transport_zones : gpd.GeoDataFrame - Transport zones generated by TransportZones class. - sinks : pd.DataFrame - Sinks of the model. - utility_by_country : Dict[str, float] - Dictionary containing one utility value for each country. - - Attributes - ---------- - sinks: pd.DataFrame - Sinks of the model. - utilities: pd.DataFrame - Utilities for each transport zone. - """ - - def __init__(self, transport_zones, sinks, utility_by_country): - - # Assurer que country est bien string pour la jointure - transport_zones = transport_zones.drop(columns="geometry") - transport_zones = transport_zones[["transport_zone_id", "country"]].rename(columns={"transport_zone_id": "to"}) - - utility_by_country_df = pd.DataFrame({ - "country": list(utility_by_country.keys()), - "base_utility": list(utility_by_country.values()) - }) - sinks_df = sinks.reset_index() - sinks_df["to"] = sinks_df["to"].astype(int) - sinks_df["country"] = sinks_df["country"].astype(str) - - utilities_df = sinks_df.merge(transport_zones, on=["to", "country"], how="left") - utilities_df = pd.merge(utilities_df, utility_by_country_df, on="country", how="left") - - - utilities_df["utility"] = utilities_df["base_utility"] - utilities_df = utilities_df[["to", "base_utility", "utility"]] - - self.sinks = sinks_df - self.utilities = utilities_df - - def get(self, congestion: bool = False): - """ - Returns a DataFrame with utility values per transport zone. - If congestion=True, returns utility as-is. - If congestion=False, returns base_utility as utility. - """ - if congestion: - return self.utilities[["to", "utility"]] - else: - df = self.utilities.copy() - df["utility"] = df["base_utility"] - return df[["to", "utility"]] - - def update(self, flows: pd.DataFrame): - """ - Updates the utilities based on congestion level from flows. - - Parameters - ---------- - flows : pd.DataFrame - DataFrame with columns ['to', 'flow_volume'] - """ - # Calculer l’occupation par zone - sink_occupation = flows.groupby("to", as_index=False)["flow_volume"].sum() - sink_occupation = sink_occupation.rename(columns={"flow_volume": "sink_occupation"}) - - # Joindre avec les sinks d'origine (contenant sink_volume) - sink_data = self.sinks.merge(sink_occupation, on="to", how="left") - sink_data["sink_occupation"] = sink_data["sink_occupation"].fillna(0.0) - - # Calcul du facteur d'ajustement (k_utility) — exemple non-linéaire - sink_data["k_utility"] = 1.0 / (1.0 + 0.5 * ((sink_data["sink_occupation"] / sink_data["sink_volume"]).pow(8))) - - # Mise à jour des utilités - updated_utilities = self.utilities.merge(sink_data[["to", "k_utility"]], on="to", how="left") - updated_utilities["utility"] = updated_utilities["base_utility"] * updated_utilities["k_utility"] - - self.utilities = updated_utilities[["to", "base_utility", "utility"]] diff --git a/mobility/choice_models/work_destination_choice_model.py b/mobility/choice_models/work_destination_choice_model.py deleted file mode 100644 index a96261da..00000000 --- a/mobility/choice_models/work_destination_choice_model.py +++ /dev/null @@ -1,604 +0,0 @@ -"""Module providing an home-work destination choice model.""" - -import logging -import pandas as pd -import geopandas as gpd -import pathlib -import os -import polars as pl - -from importlib import resources - -from mobility.choice_models.destination_choice_model import DestinationChoiceModel -from mobility.choice_models.utilities import Utilities -from mobility.parsers.jobs_active_population_distribution import JobsActivePopulationDistribution -from mobility.parsers.jobs_active_population_flows import JobsActivePopulationFlows -from mobility.r_utils.r_script import RScript - -from mobility.radiation_model_selection import apply_radiation_model - -from mobility.transport_modes.transport_mode import TransportMode - -from dataclasses import dataclass, field -from typing import Dict, Union, List - -@dataclass -class WorkDestinationChoiceModelParameters: - """Parameters for that home-work destination choice model. - - Attributes - ---------- - model: dict - Dictionary that contains: - - type: "radiation_selection", "radiation_selection_improved" (default) or "radiation_universal" - Choice between three models: - - "type" = "radiation_selection", based on Simini et al. 2014. DOI 10.1371/journal.pone.0060069 - Its parameter "lambda" should range between 0 and 1. - - "type" = "radiation_selection_improved", based on the same idea with improvements made by the Mobility team - Its parameter "lambda" should range between 0 and 1. - - "type" = "radiation_universal", based on Liu & Yan 2020. DOI 10.1038/s41598-020-61613-y - The two parameters "alpha" and "beta" should also range between 0 and 1, with alpha+beta<=1 - - lambda: float, used in the radiation_selection model - - end_of_contract_rate: float - - job_change_utility_constant: float - - max_iterations: float - - tolerance: float - - cost_update: boolean. - - n_iter_cost_update: int - - utility: dict - Base value for utility of going to work, in euros. - Default is 120 for both "fr" (France) and "ch" (Switerland) - - """ - - model: Dict[str, Union[str, float]] = field( - default_factory=lambda: { - "type": "radiation", - "lambda": 0.99986, - "end_of_contract_rate": 0.00, - "job_change_utility_constant": -5.0, - "max_iterations": 10, - "tolerance": 0.01, - "cost_update": False, - "n_iter_cost_update": 3 - } - ) - - utility: Dict[str, float] = field( - default_factory=lambda: { - "fr": 120.0, - "ch": 120.0 - } - ) - - motive_ids: List[str] = field( - default_factory=lambda: ["9.91"] - ) - - - - -class WorkDestinationChoiceModel(DestinationChoiceModel): - """Home-work destination choice model. - - This model will infer what will be the flows between homes and workplaces, inferring it from location of the population - and location of the work opportunities. - - Parameters - ---------- - transport_zones : gpd.GeoDataFrame - Transport zones generated by TransportZones class. - modes: list of TransportMode - List of transport modes that have been first defined using the TransportMode class. - parameters: WorkDestinationChoiceModelParameters - Parameters for the model. - active_population : pd.DataFrame, optional - DataFrame containing the active population data on the territory. - If not provided, population, jobs and reference flows will be retrieved thanks to parsers. - jobs : pd.DataFrame, optional - DataFrame containing the job data on the territory. Should be provided if active_population is also provided - reference_flows : pd.DataFrame, optional - Reference home-work flows to compare the model flows with. Should be provided if active_population is also provided - ssi_min_flow_volume : float, optional - Minimum reference volume to consider for similarity index. The default is 200 per INSEE recommendation. - """ - - def __init__( - self, - transport_zones: gpd.GeoDataFrame, - modes: List[TransportMode], - parameters: WorkDestinationChoiceModelParameters = WorkDestinationChoiceModelParameters(), - active_population: pd.DataFrame = None, - jobs: pd.DataFrame = None, - reference_flows: pd.DataFrame = None, - ssi_min_flow_volume: float = 200.0, - n_possible_destinations: int = 1 - ): - - - if active_population is None: - self.active_population = None - self.jobs = None - self.jobs_active_population = JobsActivePopulationDistribution() - self.reference_flows = JobsActivePopulationFlows() - else: - self.jobs_active_population = None - self.active_population = active_population - self.jobs = jobs - self.reference_flows = reference_flows - - - if "type" not in parameters.model.keys(): - raise ValueError("The model_parameters should be a dict that specifies the type of radiation model : radiation_universal or radiation_selection") - - if parameters.model["type"] == "radiation_selection": - if "lambda" not in parameters.model.keys(): - raise ValueError("Lambda parameter missing in model_parameters. It should be a dict with keys fr and ch.") - - if parameters.model["type"] == "radiation_universal": - if "alpha" not in parameters.model.keys(): - raise ValueError("Alpha parameter missing in model_parameters.") - if "beta" not in parameters.model.keys(): - raise ValueError("Beta parameter missing in model_parameters.") - - super().__init__( - "work", - transport_zones, - modes, - self.jobs_active_population, - parameters, - ssi_min_flow_volume, - n_possible_destinations - ) - - - def prepare_sources_and_sinks(self, transport_zones: gpd.GeoDataFrame): - """ - Prepare sources (homes) and sinks (work places) of the model. - - Parameters - ---------- - transport_zones : gpd.GeoDataFrame - Transport zones generated by TransportZones class. - - Returns - ------- - sources : pd.DataFrame - DataFrame with the number of potential workers in every transport zone. - sinks : pd.DataFrame - DataFrame with the number of potential jobs in every transport zone. - - """ - if self.active_population is None: - - jobs, active_population = self.jobs_active_population.get() - reference_flows = self.reference_flows.get() - - else: - - active_population = self.active_population - jobs = self.jobs - reference_flows = self.reference_flows - - sources = self.prepare_sources(transport_zones, active_population, reference_flows) - sinks = self.prepare_sinks(transport_zones, jobs, reference_flows) - - return sources, sinks - - def prepare_utilities(self, transport_zones, sinks): - """ - Prepare utilities using the Utilities class. - - Parameters - ---------- - transport_zones : gpd.GeoDataFrame - Transport zones generated by TransportZones class. - sinks : pd.DataFrame - DataFrame with the number of potential jobs in every transport zone. - - Returns - ------- - utilities: pl.DataFrame - Utilities for each transport zone. - - """ - utilities = Utilities(transport_zones, sinks, self.inputs["parameters"].utility) - return utilities - - - def prepare_sources( - self, - transport_zones: gpd.GeoDataFrame, - active_population: pd.DataFrame, - reference_flows: pd.DataFrame - ) -> pd.DataFrame: - - tz_lau_ids = set(transport_zones["local_admin_unit_id"].unique()) - - # Check if all admin units ids are in the source dataset and print warning if some are not - missing_ids = tz_lau_ids.difference(set(active_population.index.get_level_values(0))) - - if len(missing_ids) > 0: - logging.info("No active population data available for the following admin units : " + ", ".join(missing_ids) + "") - tz_lau_ids = list(tz_lau_ids.difference(missing_ids)) - else: - tz_lau_ids = list(tz_lau_ids) - - # Filter the active population dataframe - active_population = active_population.loc[tz_lau_ids, "active_pop"].reset_index() - - # Remove the part of the active population that works outside of the transport zones - act_pop_ext = reference_flows.loc[ - (reference_flows["local_admin_unit_id_from"].isin(tz_lau_ids)) & - (~reference_flows["local_admin_unit_id_to"].isin(tz_lau_ids)) - ] - - act_pop_ext = act_pop_ext.groupby("local_admin_unit_id_from", as_index=False)["ref_flow_volume"].sum() - - active_population = pd.merge( - active_population, - act_pop_ext, - left_on="local_admin_unit_id", - right_on="local_admin_unit_id_from", - how = "left" - ) - - active_population["ref_flow_volume"] = active_population["ref_flow_volume"].fillna(0.0) - active_population["active_pop"] -= active_population["ref_flow_volume"] - - # There are errors in the reference data that can lead to negative values - active_population = active_population[active_population["active_pop"] > 0.0] - - - - # Disaggregate the active population at transport zone level - active_population = pd.merge( - transport_zones[["transport_zone_id", "local_admin_unit_id", "weight"]], - active_population[["local_admin_unit_id", "active_pop"]], - on="local_admin_unit_id" - ) - - active_population["active_pop"] *= active_population["weight"] - - active_population = active_population[["transport_zone_id", "active_pop"]] - active_population.columns = ["from", "source_volume"] - active_population.set_index("from", inplace=True) - - logging.info("Total active population count : " + str(round(active_population["source_volume"].sum()))) - - return active_population - - - def prepare_sinks( - self, - transport_zones: gpd.GeoDataFrame, - jobs: pd.DataFrame, - reference_flows: pd.DataFrame - ) -> pd.DataFrame: - - tz_lau_ids = set(transport_zones["local_admin_unit_id"].unique()) - - # Check if all admin units ids are in the source dataset and print warning if some are not - missing_ids = tz_lau_ids.difference(set(jobs.index.get_level_values(0))) - - if len(missing_ids) > 0: - logging.info("No active population data available for the following admin units : " + ", ".join(missing_ids) + "") - tz_lau_ids = list(tz_lau_ids.difference(missing_ids)) - else: - tz_lau_ids = list(tz_lau_ids) - - # Filter the jobs dataframe - jobs = jobs.loc[tz_lau_ids, "n_jobs_total"].reset_index() - - # Remove the part of the jobs that are occupied by people living outside of the transport zones - jobs_ext = reference_flows.loc[ - (~reference_flows["local_admin_unit_id_from"].isin(tz_lau_ids)) & - (reference_flows["local_admin_unit_id_to"].isin(tz_lau_ids)) - ] - - jobs_ext = jobs_ext.groupby("local_admin_unit_id_to", as_index=False)["ref_flow_volume"].sum() - - jobs = pd.merge( - jobs, - jobs_ext, - left_on="local_admin_unit_id", - right_on="local_admin_unit_id_to", - how = "left" - ) - - jobs["ref_flow_volume"] = jobs["ref_flow_volume"].fillna(0.0) - jobs["n_jobs_total"] -= jobs["ref_flow_volume"] - - # There are errors in the reference data that lead to negative values - jobs = jobs[jobs["n_jobs_total"] > 0.0] - - # Disaggregate the jobs counts at transport zone level - jobs = pd.merge( - transport_zones[["transport_zone_id", "local_admin_unit_id", "country", "weight"]], - jobs[["local_admin_unit_id", "n_jobs_total"]], - on="local_admin_unit_id" - ) - - jobs["n_jobs_total"] *= jobs["weight"] - - - jobs = jobs[["transport_zone_id", "country", "n_jobs_total"]] - jobs.columns = ["to", "country", "sink_volume"] - jobs.set_index("to", inplace=True) - - logging.info("Total job count : " + str(round(jobs["sink_volume"].sum()))) - - return jobs - - - def compute_flows( - self, - transport_zones, - sources, - sinks, - costs, - utilities - ): - - params = self.inputs["parameters"] - selection_lambda = params.model["lambda"] - end_of_contract_rate = params.model["end_of_contract_rate"] - job_change_utility_constant = params.model["job_change_utility_constant"] - max_iterations = params.model["max_iterations"] - tolerance = params.model["tolerance"] - cost_update = params.model["cost_update"] - n_iter_cost_update = params.model["n_iter_cost_update"] - - # Convert input DataFrames to Polars DataFrames - sources = pl.DataFrame(sources.reset_index()).with_columns([ - pl.col("from").cast(pl.Int64) - ]) - - sinks = pl.DataFrame(sinks.reset_index()).with_columns([ - pl.col("to").cast(pl.Int64) - ]) - - base_sources = sources.clone() - base_sinks = sinks.clone() - - # Compute the flows given costs and utilities before any congestion effect - costs_values = costs.get(congestion=False) - utilities_values = utilities.get(congestion=False) - utilities_values = pl.from_pandas(utilities_values) - - - - i = 0 - d_flows = None - previous_od_flows = None - - while (d_flows is None or d_flows > tolerance) and i < max_iterations: - - job_seekers_flows = apply_radiation_model( - sources, - sinks, - costs_values, - utilities_values, - selection_lambda=selection_lambda - ) - - if previous_od_flows is None: - od_flows = job_seekers_flows - else: - od_flows = ( - previous_od_flows - .join(job_seekers_flows, on=["from", "to"], how="full", coalesce=True) - .with_columns((pl.col("flow_volume").fill_null(0.0) + pl.col("flow_volume_right").fill_null(0.0)).alias("flow_volume")) - .select(["from", "to", "flow_volume"]) - ) - - # Update the costs of flows every n iterations - if cost_update is True and i > 0 and i % n_iter_cost_update == 0: - costs.update(od_flows) - costs_values = costs.get(congestion=True) - - od_flows = ( - - # Compute the number of persons in each OD flow that could not find a - # job because too many people chose the same destiation - od_flows - .join(base_sinks, on="to") - .with_columns((1.0 - pl.col("sink_volume").first().over("to")/pl.col("flow_volume").sum().over("to")).clip(0.0, 1.0).alias("p_jobless")) - .with_columns((pl.col("flow_volume")*pl.col("p_jobless").clip(0.0, 1.0)).alias("jobless")) - .with_columns((pl.col("flow_volume") - pl.col("jobless")).alias("flow_volume")) - - # Compute the number of persons losing their jobs - .with_columns((end_of_contract_rate*pl.col("flow_volume")).alias("laid_off")) - .with_columns((pl.col("flow_volume") - pl.col("laid_off")).alias("flow_volume")) - - # Compute the number of persons switching jobs after comparing their - # utility to the average utility of persons living in the same place - # (adding X € to the no switch decision to account for transition costs) - .join(utilities_values, on="to") - .join(costs_values, on=["from", "to"]) - .with_columns((pl.col("utility") - 2*pl.col("cost")).alias("net_utility")) - .with_columns(((pl.col("flow_volume")*pl.col("net_utility")).sum().over("from")/pl.col("flow_volume").sum().over("from")).alias("average_utility")) - .with_columns((pl.col("average_utility").exp()/((pl.col("net_utility") + job_change_utility_constant).exp() + pl.col("average_utility").exp())).alias("p_change")) - .with_columns((pl.col("p_change")*pl.col("flow_volume")).alias("switchers")) - .with_columns((pl.col("flow_volume") - pl.col("switchers")).alias("flow_volume")) - - # Agregate job seekers - .with_columns((pl.col("jobless") + pl.col("laid_off") + pl.col("switchers")).alias("job_seekers")) - .select(["from", "to", "flow_volume", "job_seekers"]) - - ) - - sources = ( - od_flows - .group_by("from") - .agg(pl.col("job_seekers").sum().alias("source_volume")) - .select(["from", "source_volume"]) - ) - - sinks = ( - od_flows - .group_by("to") - .agg(pl.col("flow_volume").sum()) - .join(base_sinks, on="to", how="full", coalesce=True) - .with_columns((pl.col("sink_volume").fill_null(0.0) - pl.col("flow_volume").fill_null(0.0)).alias("sink_volume")) - .select(["to", "sink_volume"]) - ) - - od_flows = od_flows.select(["from", "to", "flow_volume"]).filter(pl.col("flow_volume") > 0.0) - - if previous_od_flows is None: - d_flows = tolerance + 1.0 - else: - d_flows = ( - previous_od_flows - .join(od_flows, on=["from", "to"], how="full", coalesce=True) - .with_columns((pl.col("flow_volume").fill_null(0.0) - pl.col("flow_volume_right").fill_null(0.0)).alias("d_flow")) - .select(pl.col("d_flow").abs().sum()/pl.col("flow_volume").sum()) - .item() - ) - - previous_od_flows = od_flows.clone() - - logging.info("Iteration n°" + str(i) + " - Convergence : " + str(d_flows)) - - i += 1 - - - # After convergence all jobless persons are assigned to the remaining opportunities with the radiation model - job_seekers_flows = apply_radiation_model( - sources, - sinks, - costs_values, - utilities_values, - selection_lambda=selection_lambda - ) - - od_flows = ( - od_flows - .join(job_seekers_flows, on=["from", "to"], how="full", coalesce=True) - .with_columns((pl.col("flow_volume").fill_null(0.0) + pl.col("flow_volume_right").fill_null(0.0)).alias("flow_volume")) - .select(["from", "to", "flow_volume"]) - .filter(pl.col("flow_volume") > 0.0) - ) - - # Last step, we need to reassign remaining jobless persons to the remaining opportunites - od_flows = ( - - # Compute the number of persons in each OD flow that could not find a - # job because too many people chose the same destiation - od_flows - .join(base_sinks, on="to") - .with_columns((1.0 - pl.col("sink_volume").first().over("to")/pl.col("flow_volume").sum().over("to")).alias("p_jobless")) - .with_columns((pl.col("flow_volume")*pl.col("p_jobless").clip(0.0, 1.0)).alias("job_seekers")) - .with_columns((pl.col("flow_volume") - pl.col("job_seekers")).alias("flow_volume")) - .select(["from", "to", "flow_volume", "job_seekers"]) - - ) - - sources = ( - od_flows - .group_by("from") - .agg(pl.col("job_seekers").sum().alias("source_volume")) - .filter(pl.col("source_volume") > 0.1) - .select(["from", "source_volume"]) - ) - - sinks = ( - od_flows - .group_by("to") - .agg(pl.col("flow_volume").sum()) - .join(base_sinks, on="to", how="full", coalesce=True) - .with_columns((pl.col("sink_volume").fill_null(0.0) - pl.col("flow_volume").fill_null(0.0)).alias("sink_volume")) - .filter(pl.col("sink_volume") > 0.1) - .select(["to", "sink_volume"]) - ) - - od_flows = od_flows.select(["from", "to", "flow_volume"]).filter(pl.col("flow_volume") > 0.0) - - job_seekers_flows = apply_radiation_model( - sources, - sinks, - costs_values, - utilities_values, - selection_lambda=selection_lambda - ) - - od_flows = ( - od_flows - .join(job_seekers_flows, on=["from", "to"], how="full", coalesce=True) - .with_columns((pl.col("flow_volume").fill_null(0.0) + pl.col("flow_volume_right").fill_null(0.0)).alias("flow_volume")) - .select(["from", "to", "flow_volume"]) - .filter(pl.col("flow_volume") > 0.1) - ) - - od_flows = od_flows.to_pandas().set_index(["from", "to"])["flow_volume"] - - od_flows = od_flows.to_frame().reset_index() - - od_flows = pd.merge(od_flows, transport_zones[["transport_zone_id", "local_admin_unit_id"]], left_on="from", right_on="transport_zone_id") - od_flows = pd.merge(od_flows, transport_zones[["transport_zone_id", "local_admin_unit_id"]], left_on="to", right_on="transport_zone_id", suffixes=["_from", "_to"]) - - od_flows = od_flows[["from", "to", "local_admin_unit_id_from", "local_admin_unit_id_to", "flow_volume"]] - - - return od_flows - - - - def prepare_reference_flows(self, transport_zones: gpd.GeoDataFrame): - - admin_ids = transport_zones["local_admin_unit_id"].values - - if self.active_population is None: - ref_flows = self.reference_flows.get() - else: - ref_flows = self.reference_flows - - ref_flows = ref_flows[(ref_flows["local_admin_unit_id_from"].isin(admin_ids)) & (ref_flows["local_admin_unit_id_to"].isin(admin_ids))].copy() - ref_flows.rename({"flow_volume": "ref_flow_volume"}, axis=1, inplace=True) - - return ref_flows - - - def compute_utility_by_od_and_mode( - self, - transport_zones: gpd.GeoDataFrame, - travel_costs: pd.DataFrame - ): - - params = self.inputs["parameters"] - - travel_costs = pd.merge( - travel_costs, - transport_zones[["transport_zone_id", "country"]].rename({"transport_zone_id": "to"}, axis=1).set_index("to"), - left_index=True, - right_index=True - ) - - travel_costs["utility"] = travel_costs["country"].map(params.utility) - travel_costs["net_utility"] = travel_costs["utility"] - 2*travel_costs["cost"] - - return travel_costs - - - - def plot_flows(self): - - output_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / "flows.svg" - - logging.info(f"Plotting flows (svg path: {output_path})") - - script = RScript(resources.files('mobility.r_utils').joinpath('plot_flows.R')) - script.run( - args=[ - str(self.inputs["transport_zones"].cache_path), - str(self.cache_path["od_flows"]), - output_path - ] - ) - - return None - - - diff --git a/mobility/concat_costs.py b/mobility/concat_costs.py deleted file mode 100644 index b979619a..00000000 --- a/mobility/concat_costs.py +++ /dev/null @@ -1,116 +0,0 @@ -import pandas as pd -import numpy as np - -def concat_travel_costs(modes, year): - - mode_names = [mode.inputs["parameters"].name for mode in modes] - - def get_travel_costs(mode): - if mode.inputs["parameters"].congestion: - return mode.inputs["travel_costs"].get(congestion=mode.inputs["parameters"].congestion) - else: - return mode.inputs["travel_costs"].get() - - costs = {m.inputs["parameters"].name: get_travel_costs(m) for m in modes} - costs = [tc.assign(mode=m) for m, tc in costs.items()] - costs = pd.concat(costs) - - # Compute GHG emissions - ef = { - "car_ice": 0.2176, - "car_electric": 0.1034, - "public_transport": 0.030, - "bicycle": 0.0, - "walk": 0.0 - } - - if year == 2024: - ef["car_average"] = 0.02*ef["car_electric"] + 0.98*ef["car_ice"] - else: - ef["car_average"] = 0.9*ef["car_electric"] + 0.1*ef["car_ice"] - - ef["carpool"] = ef["car_average"]/2 - - costs["ghg_emissions"] = 0.0 - - if "car" in mode_names: - costs["ghg_emissions"] = np.where( - costs["mode"] == "car", - costs["distance"]*ef["car_average"], - costs["ghg_emissions"] - ) - - if "carpool" in mode_names: - costs["ghg_emissions"] = np.where( - costs["mode"] == "carpool", - costs["car_distance"]*ef["car_average"] + costs["carpooling_distance"]*ef["carpool"], - costs["ghg_emissions"] - ) - - if "walk/public_transport/walk" in mode_names: - costs["ghg_emissions"] = np.where( - costs["mode"] == "walk/public_transport/walk", - costs["mid_distance"]*ef["public_transport"], - costs["ghg_emissions"] - ) - - if "car/public_transport/walk" in mode_names: - costs["ghg_emissions"] = np.where( - costs["mode"] == "car/public_transport/walk", - costs["start_distance"]*ef["car_average"] + costs["mid_distance"]*ef["public_transport"], - costs["ghg_emissions"] - ) - - if "bicycle/public_transport/walk" in mode_names: - costs["ghg_emissions"] = np.where( - costs["mode"] == "bicycle/public_transport/walk", - costs["mid_distance"]*ef["public_transport"], - costs["ghg_emissions"] - ) - - # Sum travel times and distances for modes that have multiple legs - if "carpool" in mode_names: - - costs["time"] = np.where( - costs["mode"] == "carpool", - costs["car_time"] + costs["carpooling_time"], - costs["time"] - ) - - costs["distance"] = np.where( - costs["mode"] == "carpool", - costs["car_distance"] + costs["carpooling_distance"], - costs["distance"] - ) - - if "car/public_transport/walk" in mode_names or "bicycle/public_transport/walk" in mode_names or "walk/public_transport/walk" in mode_names : - costs["time"] = np.where( - costs["mode"].str.contains("public_transport"), - costs["start_real_time"] + costs["mid_real_time"] + costs["last_real_time"], - costs["time"] - ) - - costs["distance"] = np.where( - costs["mode"].str.contains("public_transport"), - costs["start_distance"] + costs["mid_distance"] + costs["last_distance"], - costs["distance"] - ) - - costs = costs[["from", "to", "mode", "distance", "time", "ghg_emissions"]] - - return costs - - -def concat_generalized_cost(modes): - - def get_gen_costs(mode): - if mode.inputs["parameters"].congestion: - return mode.inputs["generalized_cost"].get(congestion=mode.inputs["parameters"].congestion) - else: - return mode.inputs["generalized_cost"].get() - - costs = {m.inputs["parameters"].name: get_gen_costs(m) for m in modes} - costs = [gc.assign(mode=m) for m, gc in costs.items()] - costs = pd.concat(costs) - - return costs diff --git a/mobility/set_params.py b/mobility/config.py similarity index 94% rename from mobility/set_params.py rename to mobility/config.py index d973923e..e37389f3 100644 --- a/mobility/set_params.py +++ b/mobility/config.py @@ -6,7 +6,7 @@ import json from importlib import resources -from mobility.r_utils.r_script import RScript +from mobility.runtime.r_integration.r_script_runner import RScriptRunner def set_params( @@ -32,7 +32,7 @@ def set_params( path_to_pem_file (str, optional): The file path to the PEM file for SSL certification. http_proxy_url (str, optional): The URL for the HTTP proxy. https_proxy_url (str, optional): The URL for the HTTPS proxy. - r_packages (boolean, optional): whether to install R packages or not by running RScript (does not work for github actions so is handled by a separate r-lib github action) + r_packages (boolean, optional): whether to install R packages or not by running RScriptRunner (does not work for github actions so is handled by a separate r-lib github action) r_packages_force_reinstall (bool, optional) r_packages_download_method (str, optional): set this parameter to "wininet" to be able to install packages on some proxies. See the installation.md page for details. debug (bool, optional): set debug to True to see the R logs, including error messages @@ -180,7 +180,7 @@ def install_r_packages(r_packages, r_packages_force_reinstall, r_packages_downlo packages.append( { "source": "local", - "path": str(resources.files('mobility.resources').joinpath('osmdata_0.2.5.005.zip')) + "path": str(resources.files('mobility.runtime.resources').joinpath('osmdata_0.2.5.005.zip')) } ) else: @@ -193,5 +193,5 @@ def install_r_packages(r_packages, r_packages_force_reinstall, r_packages_downlo r_packages_download_method ] - script = RScript(resources.files('mobility.r_utils').joinpath('install_packages.R')) + script = RScriptRunner(resources.files('mobility.runtime.r_integration').joinpath('install_packages.R')) script.run(args) diff --git a/mobility/data/CH/CH-2016-superficie-communes.csv b/mobility/data/CH/CH-2016-superficie-communes.csv deleted file mode 100644 index e8a3c03b..00000000 --- a/mobility/data/CH/CH-2016-superficie-communes.csv +++ /dev/null @@ -1,2174 +0,0 @@ -PERIOD_REF;PERIOD_COMP;CODE_REGION;REGION;INDICATORS;UNIT_MES;VALUE;STATUS;SURFACE;DIST;distance_interne -2016;;CH;Schweiz;Ind_04_01;UM_11;41290.76;A;41290,76;58,56311227;58.5631122743798 -2016;;1;Aeugst am Albis;Ind_04_01;UM_11;7.91;A;7,91;0,810561463;0.810561463474781 -2016;;2;Affoltern am Albis;Ind_04_01;UM_11;10.59;A;10,59;0,937876579;0.937876578795155 -2016;;3;Bonstetten;Ind_04_01;UM_11;7.43;A;7,43;0,785583073;0.785583073454018 -2016;;4;Hausen am Albis;Ind_04_01;UM_11;13.6;A;13,6;1,062838223;1.06283822313935 -2016;;5;Hedingen;Ind_04_01;UM_11;6.53;A;6,53;0,736468712;0.736468712063343 -2016;;6;Kappel am Albis;Ind_04_01;UM_11;7.92;A;7,92;0,811073667;0.811073666662374 -2016;;7;Knonau;Ind_04_01;UM_11;6.47;A;6,47;0,733077434;0.733077433666884 -2016;;8;Maschwanden;Ind_04_01;UM_11;4.69;A;4,69;0,62414304;0.624143039870445 -2016;;9;Mettmenstetten;Ind_04_01;UM_11;13.03;A;13,03;1,040327116;1.04032711569399 -2016;;10;Obfelden;Ind_04_01;UM_11;7.54;A;7,54;0,791376926;0.791376925875351 -2016;;11;Ottenbach;Ind_04_01;UM_11;5.02;A;5,02;0,645727926;0.645727926258499 -2016;;12;Rifferswil;Ind_04_01;UM_11;6.51;A;6,51;0,735340024;0.735340023718757 -2016;;13;Stallikon;Ind_04_01;UM_11;12.02;A;12,02;0,999194292;0.999194291761362 -2016;;14;Wettswil am Albis;Ind_04_01;UM_11;3.77;A;3,77;0,559587991;0.559587990761025 -2016;;21;Adlikon;Ind_04_01;UM_11;6.58;A;6,58;0,739282894;0.739282893933091 -2016;;22;Benken (ZH);Ind_04_01;UM_11;5.66;A;5,66;0,68565544;0.685655440033349 -2016;;23;Berg am Irchel;Ind_04_01;UM_11;7.01;A;7,01;0,763056541;0.763056540907132 -2016;;24;Buch am Irchel;Ind_04_01;UM_11;10.21;A;10,21;0,920895989;0.92089598929916 -2016;;25;Dachsen;Ind_04_01;UM_11;2.7;A;2,7;0,473564995;0.473564994850405 -2016;;26;Dorf;Ind_04_01;UM_11;5.56;A;5,56;0,679571421;0.679571420543591 -2016;;27;Feuerthalen;Ind_04_01;UM_11;2.48;A;2,48;0,453861716;0.453861716084033 -2016;;28;Flaach;Ind_04_01;UM_11;10.17;A;10,17;0,919090309;0.919090309151501 -2016;;29;Flurlingen;Ind_04_01;UM_11;2.41;A;2,41;0,447410562;0.447410561506274 -2016;;30;Andelfingen;Ind_04_01;UM_11;6.74;A;6,74;0,74821715;0.748217150422517 -2016;;31;Henggart;Ind_04_01;UM_11;3.03;A;3,03;0,501671033;0.501671032529331 -2016;;32;Humlikon;Ind_04_01;UM_11;3.68;A;3,68;0,552868211;0.552868211474524 -2016;;33;Kleinandelfingen;Ind_04_01;UM_11;10.29;A;10,29;0,924496769;0.924496769366682 -2016;;34;Laufen-Uhwiesen;Ind_04_01;UM_11;6.28;A;6,28;0,72223334;0.722233339564861 -2016;;35;Marthalen;Ind_04_01;UM_11;14.13;A;14,13;1,083350009;1.08335000934729 -2016;;37;Ossingen;Ind_04_01;UM_11;13.09;A;13,09;1,042719592;1.04271959209789 -2016;;38;Rheinau;Ind_04_01;UM_11;8.93;A;8,93;0,861238508;0.861238508029472 -2016;;39;Thalheim an der Thur;Ind_04_01;UM_11;6.44;A;6,44;0,731375898;0.731375897677328 -2016;;40;Trüllikon;Ind_04_01;UM_11;9.56;A;9,56;0,891100437;0.891100436947085 -2016;;41;Truttikon;Ind_04_01;UM_11;4.41;A;4,41;0,605225204;0.605225203623564 -2016;;43;Volken;Ind_04_01;UM_11;3.2;A;3,2;0,515552266;0.515552265523216 -2016;;51;Bachenbülach;Ind_04_01;UM_11;4.31;A;4,31;0,598323892;0.598323892447472 -2016;;52;Bassersdorf;Ind_04_01;UM_11;9.03;A;9,03;0,866047247;0.866047247291117 -2016;;53;Bülach;Ind_04_01;UM_11;16.09;A;16,09;1,156047643;1.15604764286578 -2016;;54;Dietlikon;Ind_04_01;UM_11;4.25;A;4,25;0,594144629;0.59414462900617 -2016;;55;Eglisau;Ind_04_01;UM_11;9.06;A;9,06;0,867484671;0.867484671097322 -2016;;56;Embrach;Ind_04_01;UM_11;12.7;A;12,7;1,027068881;1.02706888138858 -2016;;57;Freienstein-Teufen;Ind_04_01;UM_11;8.4;A;8,4;0,835290137;0.83529013733317 -2016;;58;Glattfelden;Ind_04_01;UM_11;12.3;A;12,3;1,010765166;1.0107651655088 -2016;;59;Hochfelden;Ind_04_01;UM_11;6.17;A;6,17;0,715880104;0.715880103975904 -2016;;60;Höri;Ind_04_01;UM_11;4.79;A;4,79;0,630761921;0.630761921049782 -2016;;61;Hüntwangen;Ind_04_01;UM_11;4.91;A;4,91;0,638614032;0.63861403150858 -2016;;62;Kloten;Ind_04_01;UM_11;19.27;A;19,27;1,265139944;1.26513994391771 -2016;;63;Lufingen;Ind_04_01;UM_11;5.18;A;5,18;0,655937696;0.655937696488323 -2016;;64;Nürensdorf;Ind_04_01;UM_11;10.04;A;10,04;0,913197191;0.913197190917823 -2016;;65;Oberembrach;Ind_04_01;UM_11;10.26;A;10,26;0,923148123;0.923148122741483 -2016;;66;Opfikon;Ind_04_01;UM_11;5.59;A;5,59;0,68140233;0.681402330248394 -2016;;67;Rafz;Ind_04_01;UM_11;10.68;A;10,68;0,941853458;0.9418534584517 -2016;;68;Rorbas;Ind_04_01;UM_11;4.44;A;4,44;0,607280304;0.607280303607397 -2016;;69;Wallisellen;Ind_04_01;UM_11;6.42;A;6,42;0,730239338;0.730239337709069 -2016;;70;Wasterkingen;Ind_04_01;UM_11;3.96;A;3,96;0,57351569;0.573515689738802 -2016;;71;Wil (ZH);Ind_04_01;UM_11;8.95;A;8,95;0,862202401;0.862202401457087 -2016;;72;Winkel;Ind_04_01;UM_11;8.11;A;8,11;0,820744796;0.820744795734802 -2016;;81;Bachs;Ind_04_01;UM_11;9.13;A;9,13;0,870829433;0.870829432993748 -2016;;82;Boppelsen;Ind_04_01;UM_11;3.96;A;3,96;0,57351569;0.573515689738802 -2016;;83;Buchs (ZH);Ind_04_01;UM_11;5.84;A;5,84;0,696472758;0.696472758072539 -2016;;84;Dällikon;Ind_04_01;UM_11;4.51;A;4,51;0,612048702;0.612048702252424 -2016;;85;Dänikon;Ind_04_01;UM_11;2.87;A;2,87;0,488245961;0.488245960510417 -2016;;86;Dielsdorf;Ind_04_01;UM_11;5.87;A;5,87;0,698259352;0.698259352093101 -2016;;87;Hüttikon;Ind_04_01;UM_11;1.59;A;1,59;0,363409497;0.363409497069478 -2016;;88;Neerach;Ind_04_01;UM_11;6.04;A;6,04;0,708298268;0.708298267958176 -2016;;89;Niederglatt;Ind_04_01;UM_11;3.6;A;3,6;0,546825755;0.54682575451133 -2016;;90;Niederhasli;Ind_04_01;UM_11;11.3;A;11,3;0,968806251;0.968806250769014 -2016;;91;Niederweningen;Ind_04_01;UM_11;6.85;A;6,85;0,75429807;0.754298069530111 -2016;;92;Oberglatt;Ind_04_01;UM_11;8.25;A;8,25;0,827798595;0.827798594637929 -2016;;93;Oberweningen;Ind_04_01;UM_11;4.94;A;4,94;0,64056202;0.640562019860645 -2016;;94;Otelfingen;Ind_04_01;UM_11;7.15;A;7,15;0,770638552;0.770638552227908 -2016;;95;Regensberg;Ind_04_01;UM_11;2.37;A;2,37;0,443682075;0.443682075157745 -2016;;96;Regensdorf;Ind_04_01;UM_11;14.62;A;14,62;1,101974124;1.10197412411021 -2016;;97;Rümlang;Ind_04_01;UM_11;12.41;A;12,41;1,015274787;1.0152747870978 -2016;;98;Schleinikon;Ind_04_01;UM_11;5.68;A;5,68;0,686865777;0.686865777144897 -2016;;99;Schöfflisdorf;Ind_04_01;UM_11;4.01;A;4,01;0,577125012;0.577125012272402 -2016;;100;Stadel;Ind_04_01;UM_11;12.89;A;12,89;1,034723158;1.03472315818745 -2016;;101;Steinmaur;Ind_04_01;UM_11;9.39;A;9,39;0,883141934;0.883141933734442 -2016;;102;Weiach;Ind_04_01;UM_11;9.58;A;9,58;0,892032063;0.892032063377109 -2016;;111;Bäretswil;Ind_04_01;UM_11;22.19;A;22,19;1,357614168;1.35761416796699 -2016;;112;Bubikon;Ind_04_01;UM_11;11.61;A;11,61;0,982005274;0.982005274270437 -2016;;113;Dürnten;Ind_04_01;UM_11;10.22;A;10,22;0,921346856;0.921346856395596 -2016;;114;Fischenthal;Ind_04_01;UM_11;30.24;A;30,24;1,584851605;1.5848516046286 -2016;;115;Gossau (ZH);Ind_04_01;UM_11;18.26;A;18,26;1,231538795;1.23153879465343 -2016;;116;Grüningen;Ind_04_01;UM_11;8.78;A;8,78;0,853974629;0.853974629290176 -2016;;117;Hinwil;Ind_04_01;UM_11;22.28;A;22,28;1,360364543;1.36036454276404 -2016;;118;Rüti (ZH);Ind_04_01;UM_11;10.06;A;10,06;0,914106297;0.914106297355916 -2016;;119;Seegräben;Ind_04_01;UM_11;3.77;A;3,77;0,559587991;0.559587990761025 -2016;;120;Wald (ZH);Ind_04_01;UM_11;25.27;A;25,27;1,448772959;1.44877295921672 -2016;;121;Wetzikon (ZH);Ind_04_01;UM_11;16.81;A;16,81;1,181630159;1.18163015945553 -2016;;131;Adliswil;Ind_04_01;UM_11;7.77;A;7,77;0,80335633;0.803356329726487 -2016;;135;Kilchberg (ZH);Ind_04_01;UM_11;2.58;A;2,58;0,462921726;0.462921725731721 -2016;;136;Langnau am Albis;Ind_04_01;UM_11;8.67;A;8,67;0,848608269;0.848608268850141 -2016;;137;Oberrieden;Ind_04_01;UM_11;2.79;A;2,79;0,481393046;0.481393045745975 -2016;;138;Richterswil;Ind_04_01;UM_11;7.53;A;7,53;0,790851966;0.790851965999423 -2016;;139;Rüschlikon;Ind_04_01;UM_11;2.93;A;2,93;0,493323178;0.493323178100679 -2016;;141;Thalwil;Ind_04_01;UM_11;5.5;A;5,5;0,675894722;0.675894722218645 -2016;;151;Erlenbach (ZH);Ind_04_01;UM_11;2.89;A;2,89;0,489944212;0.489944212457171 -2016;;152;Herrliberg;Ind_04_01;UM_11;8.99;A;8,99;0,864126963;0.864126962783505 -2016;;153;Hombrechtikon;Ind_04_01;UM_11;12.18;A;12,18;1,005822519;1.00582251894298 -2016;;154;Küsnacht (ZH);Ind_04_01;UM_11;12.36;A;12,36;1,013227447;1.01322744727067 -2016;;155;Männedorf;Ind_04_01;UM_11;4.77;A;4,77;0,629443713;0.62944371287739 -2016;;156;Meilen;Ind_04_01;UM_11;11.94;A;11,94;0,995863635;0.995863634854862 -2016;;157;Oetwil am See;Ind_04_01;UM_11;6.11;A;6,11;0,712390822;0.712390821931288 -2016;;158;Stäfa;Ind_04_01;UM_11;8.59;A;8,59;0,844684048;0.844684047735412 -2016;;159;Uetikon am See;Ind_04_01;UM_11;3.46;A;3,46;0,536087598;0.53608759754178 -2016;;160;Zumikon;Ind_04_01;UM_11;5.48;A;5,48;0,674664704;0.674664703506476 -2016;;161;Zollikon;Ind_04_01;UM_11;7.85;A;7,85;0,807481421;0.807481421441859 -2016;;172;Fehraltorf;Ind_04_01;UM_11;9.47;A;9,47;0,886896008;0.886896007760979 -2016;;173;Hittnau;Ind_04_01;UM_11;12.95;A;12,95;1,037128562;1.03712856203367 -2016;;176;Lindau;Ind_04_01;UM_11;11.99;A;11,99;0,997946598;0.99794659809039 -2016;;177;Pfäffikon;Ind_04_01;UM_11;19.51;A;19,51;1,272993966;1.27299396623965 -2016;;178;Russikon;Ind_04_01;UM_11;14.23;A;14,23;1,087176761;1.08717676096413 -2016;;180;Weisslingen;Ind_04_01;UM_11;12.81;A;12,81;1,031507228;1.03150722761755 -2016;;181;Wila;Ind_04_01;UM_11;9.19;A;9,19;0,87368618;0.873686180195628 -2016;;182;Wildberg;Ind_04_01;UM_11;10.56;A;10,56;0,9365472;0.936547199560277 -2016;;191;Dübendorf;Ind_04_01;UM_11;13.62;A;13,62;1,063619435;1.06361943472821 -2016;;192;Egg;Ind_04_01;UM_11;14.53;A;14,53;1,098577039;1.09857703874764 -2016;;193;Fällanden;Ind_04_01;UM_11;6.38;A;6,38;0,727960894;0.72796089428396 -2016;;194;Greifensee;Ind_04_01;UM_11;2.27;A;2,27;0,434220816;0.434220815931931 -2016;;195;Maur;Ind_04_01;UM_11;14.77;A;14,77;1,10761278;1.10761278001385 -2016;;196;Mönchaltorf;Ind_04_01;UM_11;7.59;A;7,59;0,793996519;0.793996519023709 -2016;;197;Schwerzenbach;Ind_04_01;UM_11;2.62;A;2,62;0,466496464;0.466496463958207 -2016;;198;Uster;Ind_04_01;UM_11;28.49;A;28,49;1,538310255;1.53831025453555 -2016;;199;Volketswil;Ind_04_01;UM_11;14.04;A;14,04;1,079894339;1.07989433863126 -2016;;200;Wangen-Brüttisellen;Ind_04_01;UM_11;7.92;A;7,92;0,811073667;0.811073666662374 -2016;;211;Altikon;Ind_04_01;UM_11;7.7;A;7,7;0,79972942;0.799729420324292 -2016;;213;Brütten;Ind_04_01;UM_11;6.6;A;6,6;0,740405572;0.74040557171568 -2016;;214;Dägerlen;Ind_04_01;UM_11;7.95;A;7,95;0,812608339;0.812608339116364 -2016;;215;Dättlikon;Ind_04_01;UM_11;2.88;A;2,88;0,489095824;0.489095823573979 -2016;;216;Dinhard;Ind_04_01;UM_11;7.07;A;7,07;0,76631516;0.766315160177438 -2016;;218;Ellikon an der Thur;Ind_04_01;UM_11;5.02;A;5,02;0,645727926;0.645727926258499 -2016;;219;Elsau;Ind_04_01;UM_11;8.07;A;8,07;0,818718262;0.818718262282383 -2016;;220;Hagenbuch;Ind_04_01;UM_11;8.13;A;8,13;0,821756188;0.821756188349866 -2016;;221;Hettlingen;Ind_04_01;UM_11;5.9;A;5,9;0,700041387;0.700041386514958 -2016;;223;Neftenbach;Ind_04_01;UM_11;15.07;A;15,07;1,11880484;1.11880484041368 -2016;;224;Pfungen;Ind_04_01;UM_11;4.99;A;4,99;0,643795569;0.643795569029327 -2016;;225;Rickenbach (ZH);Ind_04_01;UM_11;6.02;A;6,02;0,707124616;0.707124616335066 -2016;;226;Schlatt (ZH);Ind_04_01;UM_11;8.97;A;8,97;0,863165219;0.863165218509126 -2016;;227;Seuzach;Ind_04_01;UM_11;7.56;A;7,56;0,792425802;0.792425802314299 -2016;;228;Turbenthal;Ind_04_01;UM_11;25.22;A;25,22;1,447338956;1.44733895613424 -2016;;230;Winterthur;Ind_04_01;UM_11;68.07;A;68,07;2,37780144;2.37780144032454 -2016;;231;Zell (ZH);Ind_04_01;UM_11;12.97;A;12,97;1,037929125;1.0379291245319 -2016;;241;Aesch (ZH);Ind_04_01;UM_11;5.24;A;5,24;0,659725626;0.659725626128789 -2016;;242;Birmensdorf (ZH);Ind_04_01;UM_11;11.42;A;11,42;0,97393677;0.973936769879001 -2016;;243;Dietikon;Ind_04_01;UM_11;9.34;A;9,34;0,880787512;0.880787512233436 -2016;;244;Geroldswil;Ind_04_01;UM_11;1.93;A;1,93;0,400383678;0.400383678206844 -2016;;245;Oberengstringen;Ind_04_01;UM_11;2.15;A;2,15;0,422587786;0.422587785904139 -2016;;246;Oetwil an der Limmat;Ind_04_01;UM_11;2.77;A;2,77;0,479664519;0.479664519353942 -2016;;247;Schlieren;Ind_04_01;UM_11;6.59;A;6,59;0,739844446;0.739844445775498 -2016;;248;Uitikon;Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;249;Unterengstringen;Ind_04_01;UM_11;3.34;A;3,34;0,526709248;0.526709248110272 -2016;;250;Urdorf;Ind_04_01;UM_11;7.58;A;7,58;0,793473292;0.793473292265718 -2016;;251;Weiningen (ZH);Ind_04_01;UM_11;5.38;A;5,38;0,668480662;0.668480661896655 -2016;;261;Zürich;Ind_04_01;UM_11;87.93;A;87,93;2,702503388;2.70250338789592 -2016;;292;Stammheim;Ind_04_01;UM_11;23.96;A;23,96;1,410720955;1.41072095465929 -2016;;293;Wädenswil;Ind_04_01;UM_11;35.64;A;35,64;1,720547069;1.72054706921641 -2016;;294;Elgg;Ind_04_01;UM_11;24.39;A;24,39;1,42332347;1.42332346965611 -2016;;295;Horgen;Ind_04_01;UM_11;30.83;A;30,83;1,600237608;1.60023760828735 -2016;;296;Illnau-Effretikon;Ind_04_01;UM_11;32.91;A;32,91;1,653338015;1.6533380153475 -2016;;297;Bauma;Ind_04_01;UM_11;29.53;A;29,53;1,566135861;1.56613586071491 -2016;;298;Wiesendangen;Ind_04_01;UM_11;19.17;A;19,17;1,261853007;1.26185300683892 -2016;;301;Aarberg;Ind_04_01;UM_11;7.93;A;7,93;0,811585547;0.811585546591311 -2016;;302;Bargen (BE);Ind_04_01;UM_11;7.86;A;7,86;0,807995577;0.807995577126839 -2016;;303;Grossaffoltern;Ind_04_01;UM_11;15.08;A;15,08;1,119175982;1.11917598152205 -2016;;304;Kallnach;Ind_04_01;UM_11;17.98;A;17,98;1,22206007;1.2220600703807 -2016;;305;Kappelen;Ind_04_01;UM_11;10.97;A;10,97;0,954555148;0.954555148222318 -2016;;306;Lyss;Ind_04_01;UM_11;14.83;A;14,83;1,109860221;1.109860221175 -2016;;307;Meikirch;Ind_04_01;UM_11;10.23;A;10,23;0,921797503;0.921797502965167 -2016;;309;Radelfingen;Ind_04_01;UM_11;14.71;A;14,71;1,105360769;1.10536076932076 -2016;;310;Rapperswil (BE);Ind_04_01;UM_11;22.58;A;22,58;1,369492566;1.36949256649778 -2016;;311;Schüpfen;Ind_04_01;UM_11;19.84;A;19,84;1,283714789;1.28371478865593 -2016;;312;Seedorf (BE);Ind_04_01;UM_11;20.87;A;20,87;1,316615413;1.31661541345192 -2016;;321;Aarwangen;Ind_04_01;UM_11;9.9;A;9,9;0,906807927;0.906807926708537 -2016;;322;Auswil;Ind_04_01;UM_11;4.62;A;4,62;0,619467745;0.619467745277619 -2016;;323;Bannwil;Ind_04_01;UM_11;4.78;A;4,78;0,630103162;0.630103161683579 -2016;;324;Bleienbach;Ind_04_01;UM_11;5.69;A;5,69;0,687470147;0.687470146621388 -2016;;325;Busswil bei Melchnau;Ind_04_01;UM_11;2.86;A;2,86;0,487394616;0.487394615554963 -2016;;326;Gondiswil;Ind_04_01;UM_11;9.4;A;9,4;0,883612065;0.883612065220354 -2016;;329;Langenthal;Ind_04_01;UM_11;21.14;A;21,14;1,325104723;1.32510472317245 -2016;;331;Lotzwil;Ind_04_01;UM_11;6.22;A;6,22;0,7187749;0.718774899869491 -2016;;332;Madiswil;Ind_04_01;UM_11;23.17;A;23,17;1,387269146;1.38726914619192 -2016;;333;Melchnau;Ind_04_01;UM_11;10.28;A;10,28;0,924047439;0.92404743919707 -2016;;335;Oeschenbach;Ind_04_01;UM_11;3.92;A;3,92;0,570611794;0.570611794169642 -2016;;336;Reisiswil;Ind_04_01;UM_11;2.01;A;2,01;0,408597532;0.408597532098022 -2016;;337;Roggwil (BE);Ind_04_01;UM_11;7.84;A;7,84;0,806966938;0.806966938164752 -2016;;338;Rohrbach;Ind_04_01;UM_11;4.08;A;4,08;0,58214047;0.582140469792132 -2016;;339;Rohrbachgraben;Ind_04_01;UM_11;6.46;A;6,46;0,732510694;0.732510694166888 -2016;;340;Rütschelen;Ind_04_01;UM_11;3.98;A;3,98;0,574962138;0.574962137659614 -2016;;341;Schwarzhäusern;Ind_04_01;UM_11;3.79;A;3,79;0,561070346;0.561070345651505 -2016;;342;Thunstetten;Ind_04_01;UM_11;9.66;A;9,66;0,89574888;0.895748879739727 -2016;;344;Ursenbach;Ind_04_01;UM_11;9.17;A;9,17;0,87273497;0.872734970136575 -2016;;345;Wynau;Ind_04_01;UM_11;5.07;A;5,07;0,648935735;0.648935735003049 -2016;;351;Bern;Ind_04_01;UM_11;51.62;A;51,62;2,070650066;2.07065006615175 -2016;;352;Bolligen;Ind_04_01;UM_11;16.57;A;16,57;1,17316464;1.17316464034186 -2016;;353;Bremgarten bei Bern;Ind_04_01;UM_11;1.9;A;1,9;0,397259701;0.397259700606712 -2016;;354;Kirchlindach;Ind_04_01;UM_11;11.96;A;11,96;0,996697343;0.996697342522732 -2016;;355;Köniz;Ind_04_01;UM_11;51.01;A;51,01;2,058379141;2.05837914117038 -2016;;356;Muri bei Bern;Ind_04_01;UM_11;7.63;A;7,63;0,796085987;0.796085987160209 -2016;;357;Oberbalm;Ind_04_01;UM_11;12.39;A;12,39;1,014456347;1.01445634699131 -2016;;358;Stettlen;Ind_04_01;UM_11;3.5;A;3,5;0,539177465;0.539177465190446 -2016;;359;Vechigen;Ind_04_01;UM_11;24.82;A;24,82;1,435815373;1.43581537344917 -2016;;360;Wohlen bei Bern;Ind_04_01;UM_11;36.32;A;36,32;1,736883264;1.73688326372772 -2016;;361;Zollikofen;Ind_04_01;UM_11;5.39;A;5,39;0,669101638;0.669101638028603 -2016;;362;Ittigen;Ind_04_01;UM_11;4.2;A;4,2;0,59063932;0.590639320366527 -2016;;363;Ostermundigen;Ind_04_01;UM_11;5.96;A;5,96;0,703591915;0.703591915054742 -2016;;371;Biel/Bienne;Ind_04_01;UM_11;21.19;A;21,19;1,326670856;1.32667085623669 -2016;;372;Evilard;Ind_04_01;UM_11;3.7;A;3,7;0,554368535;0.554368535023929 -2016;;381;Arch;Ind_04_01;UM_11;6.38;A;6,38;0,727960894;0.72796089428396 -2016;;382;Büetigen;Ind_04_01;UM_11;3.61;A;3,61;0,547584708;0.547584708040368 -2016;;383;Büren an der Aare;Ind_04_01;UM_11;12.6;A;12,6;1,023017312;1.02301731182278 -2016;;385;Diessbach bei Büren;Ind_04_01;UM_11;6.33;A;6,33;0,725102772;0.725102772159131 -2016;;386;Dotzigen;Ind_04_01;UM_11;4.23;A;4,23;0,592744993;0.592744993071507 -2016;;387;Lengnau (BE);Ind_04_01;UM_11;7.41;A;7,41;0,784525049;0.784525048632561 -2016;;388;Leuzigen;Ind_04_01;UM_11;10.28;A;10,28;0,924047439;0.92404743919707 -2016;;389;Meienried;Ind_04_01;UM_11;0.65;A;0,65;0,232356266;0.232356266065698 -2016;;390;Meinisberg;Ind_04_01;UM_11;4.39;A;4,39;0,603851251;0.603851251332351 -2016;;391;Oberwil bei Büren;Ind_04_01;UM_11;6.74;A;6,74;0,74821715;0.748217150422517 -2016;;392;Pieterlen;Ind_04_01;UM_11;8.35;A;8,35;0,832800444;0.832800444351599 -2016;;393;Rüti bei Büren;Ind_04_01;UM_11;6.5;A;6,5;0,734775029;0.734775029379695 -2016;;394;Wengi;Ind_04_01;UM_11;7.08;A;7,08;0,766856917;0.766856917162871 -2016;;401;Aefligen;Ind_04_01;UM_11;2.04;A;2,04;0,411635474;0.411635473793139 -2016;;402;Alchenstorf;Ind_04_01;UM_11;6.57;A;6,57;0,738720915;0.738720915217186 -2016;;403;Bäriswil;Ind_04_01;UM_11;2.73;A;2,73;0,476188644;0.476188643707482 -2016;;404;Burgdorf;Ind_04_01;UM_11;15.56;A;15,56;1,136848274;1.13684827412842 -2016;;405;Ersigen;Ind_04_01;UM_11;15.46;A;15,46;1,133189274;1.13318927437612 -2016;;406;Hasle bei Burgdorf;Ind_04_01;UM_11;21.89;A;21,89;1,348405736;1.34840573589021 -2016;;407;Heimiswil;Ind_04_01;UM_11;23.36;A;23,36;1,392945516;1.39294551614508 -2016;;408;Hellsau;Ind_04_01;UM_11;1.48;A;1,48;0,350613447;0.350613446761288 -2016;;409;Hindelbank;Ind_04_01;UM_11;9.7;A;9,7;0,897601516;0.897601516423659 -2016;;410;Höchstetten;Ind_04_01;UM_11;2.64;A;2,64;0,4682736;0.468273599780139 -2016;;411;Kernenried;Ind_04_01;UM_11;3.33;A;3,33;0,52592017;0.525920170141932 -2016;;412;Kirchberg (BE);Ind_04_01;UM_11;9.05;A;9,05;0,867005795;0.867005794620809 -2016;;413;Koppigen;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;414;Krauchthal;Ind_04_01;UM_11;19.43;A;19,43;1,270381354;1.27038135401163 -2016;;415;Lyssach;Ind_04_01;UM_11;6.05;A;6,05;0,708884365;0.708884365094422 -2016;;418;Oberburg;Ind_04_01;UM_11;14.14;A;14,14;1,083733293;1.08373329257504 -2016;;420;Rüdtligen-Alchenflüh;Ind_04_01;UM_11;2.72;A;2,72;0,475315703;0.475315703204936 -2016;;421;Rumendingen;Ind_04_01;UM_11;2.44;A;2,44;0,450186662;0.45018666194776 -2016;;422;Rüti bei Lyssach;Ind_04_01;UM_11;1.29;A;1,29;0,327335091;0.327335091423479 -2016;;423;Willadingen;Ind_04_01;UM_11;2.17;A;2,17;0,424548761;0.42454876063993 -2016;;424;Wynigen;Ind_04_01;UM_11;28.32;A;28,32;1,533713834;1.53371383432574 -2016;;431;Corgémont;Ind_04_01;UM_11;17.66;A;17,66;1,211136409;1.2111364092332 -2016;;432;Cormoret;Ind_04_01;UM_11;13.48;A;13,48;1,058138842;1.05813884172767 -2016;;433;Cortébert;Ind_04_01;UM_11;14.76;A;14,76;1,107237763;1.10723776297922 -2016;;434;Courtelary;Ind_04_01;UM_11;22.21;A;22,21;1,358225844;1.35822584367631 -2016;;435;La Ferrière;Ind_04_01;UM_11;14.15;A;14,15;1,08411644;1.08411644029519 -2016;;437;Mont-Tramelan;Ind_04_01;UM_11;4.64;A;4,64;0,620807137;0.620807136560844 -2016;;438;Orvin;Ind_04_01;UM_11;21.59;A;21,59;1,339133984;1.33913398437145 -2016;;441;Renan (BE);Ind_04_01;UM_11;12.63;A;12,63;1,024234466;1.02423446550944 -2016;;442;Romont (BE);Ind_04_01;UM_11;7.02;A;7,02;0,76360061;0.763600609811128 -2016;;443;Saint-Imier;Ind_04_01;UM_11;20.87;A;20,87;1,316615413;1.31661541345192 -2016;;444;Sonceboz-Sombeval;Ind_04_01;UM_11;14.96;A;14,96;1,114714133;1.11471413260199 -2016;;445;Sonvilier;Ind_04_01;UM_11;23.78;A;23,78;1,40541193;1.40541192951568 -2016;;446;Tramelan;Ind_04_01;UM_11;24.83;A;24,83;1,43610459;1.43610458996403 -2016;;448;Villeret;Ind_04_01;UM_11;16.24;A;16,24;1,161423804;1.16142380413743 -2016;;449;Sauge;Ind_04_01;UM_11;13.46;A;13,46;1,057353581;1.05735358088354 -2016;;450;Péry-La Heutte;Ind_04_01;UM_11;23.78;A;23,78;1,40541193;1.40541192951568 -2016;;491;Brüttelen;Ind_04_01;UM_11;6.61;A;6,61;0,740966273;0.74096627272123 -2016;;492;Erlach;Ind_04_01;UM_11;3.49;A;3,49;0,538406661;0.538406660700279 -2016;;493;Finsterhennen;Ind_04_01;UM_11;3.57;A;3,57;0,544542547;0.544542547234445 -2016;;494;Gals;Ind_04_01;UM_11;7.84;A;7,84;0,806966938;0.806966938164752 -2016;;495;Gampelen;Ind_04_01;UM_11;10.6;A;10,6;0,938319287;0.938319286669135 -2016;;496;Ins;Ind_04_01;UM_11;23.87;A;23,87;1,408068944;1.40806894425305 -2016;;497;Lüscherz;Ind_04_01;UM_11;5.42;A;5,42;0,670961118;0.670961118143866 -2016;;498;Müntschemier;Ind_04_01;UM_11;4.87;A;4,87;0,636007433;0.63600743274632 -2016;;499;Siselen;Ind_04_01;UM_11;5.51;A;5,51;0,676508893;0.676508892924394 -2016;;500;Treiten;Ind_04_01;UM_11;4.74;A;4,74;0,627461208;0.627461208069922 -2016;;501;Tschugg;Ind_04_01;UM_11;3.29;A;3,29;0,522751948;0.522751947515304 -2016;;502;Vinelz;Ind_04_01;UM_11;4.56;A;4,56;0,615432082;0.615432081827655 -2016;;533;Bätterkinden;Ind_04_01;UM_11;10.19;A;10,19;0,919993592;0.919993592228631 -2016;;535;Deisswil bei Münchenbuchsee;Ind_04_01;UM_11;2.16;A;2,16;0,423569408;0.423569408099937 -2016;;536;Diemerswil;Ind_04_01;UM_11;2.86;A;2,86;0,487394616;0.487394615554963 -2016;;538;Fraubrunnen;Ind_04_01;UM_11;31.91;A;31,91;1,628025161;1.62802516095922 -2016;;540;Jegenstorf;Ind_04_01;UM_11;13.49;A;13,49;1,058531254;1.05853125369804 -2016;;541;Iffwil;Ind_04_01;UM_11;5.06;A;5,06;0,648295443;0.648295443051375 -2016;;543;Mattstetten;Ind_04_01;UM_11;3.79;A;3,79;0,561070346;0.561070345651505 -2016;;544;Moosseedorf;Ind_04_01;UM_11;6.38;A;6,38;0,727960894;0.72796089428396 -2016;;546;Münchenbuchsee;Ind_04_01;UM_11;8.81;A;8,81;0,85543234;0.855432339533409 -2016;;551;Urtenen-Schönbühl;Ind_04_01;UM_11;7.19;A;7,19;0,772791178;0.772791178075295 -2016;;552;Utzenstorf;Ind_04_01;UM_11;16.94;A;16,94;1,186190423;1.18619042341898 -2016;;553;Wiggiswil;Ind_04_01;UM_11;1.44;A;1,44;0,345842973;0.34584297349918 -2016;;554;Wiler bei Utzenstorf;Ind_04_01;UM_11;3.82;A;3,82;0,563286564;0.563286563675902 -2016;;556;Zielebach;Ind_04_01;UM_11;1.91;A;1,91;0,398303749;0.398303748926499 -2016;;557;Zuzwil (BE);Ind_04_01;UM_11;3.47;A;3,47;0,536861732;0.536861731659919 -2016;;561;Adelboden;Ind_04_01;UM_11;87.61;A;87,61;2,697581351;2.69758135145918 -2016;;562;Aeschi bei Spiez;Ind_04_01;UM_11;30.99;A;30,99;1,604384651;1.60438465147904 -2016;;563;Frutigen;Ind_04_01;UM_11;72.28;A;72,28;2,450229602;2.45022960210982 -2016;;564;Kandergrund;Ind_04_01;UM_11;32.09;A;32,09;1,632610439;1.63261043883902 -2016;;565;Kandersteg;Ind_04_01;UM_11;134.33;A;134,33;3,340290342;3.34029034211664 -2016;;566;Krattigen;Ind_04_01;UM_11;6;A;6;0,705949013;0.705949013499896 -2016;;567;Reichenbach im Kandertal;Ind_04_01;UM_11;125.77;A;125,77;3,232110804;3.23211080397738 -2016;;571;Beatenberg;Ind_04_01;UM_11;29.17;A;29,17;1,556560212;1.55656021201801 -2016;;572;Bönigen;Ind_04_01;UM_11;15.1;A;15,1;1,119917895;1.11991789475005 -2016;;573;Brienz (BE);Ind_04_01;UM_11;48;A;48;1,996725338;1.99672533847092 -2016;;574;Brienzwiler;Ind_04_01;UM_11;17.64;A;17,64;1,210450407;1.21045040724713 -2016;;575;Därligen;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;576;Grindelwald;Ind_04_01;UM_11;171.28;A;171,28;3,771820683;3.77182068270346 -2016;;577;Gsteigwiler;Ind_04_01;UM_11;7.02;A;7,02;0,76360061;0.763600609811128 -2016;;578;Gündlischwand;Ind_04_01;UM_11;16.84;A;16,84;1,182684089;1.18268408875033 -2016;;579;Habkern;Ind_04_01;UM_11;51.03;A;51,03;2,058782626;2.05878262625534 -2016;;580;Hofstetten bei Brienz;Ind_04_01;UM_11;8.77;A;8,77;0,853488173;0.853488172611973 -2016;;581;Interlaken;Ind_04_01;UM_11;4.27;A;4,27;0,595540976;0.595540975536039 -2016;;582;Iseltwald;Ind_04_01;UM_11;21.91;A;21,91;1,349021587;1.34902158690925 -2016;;584;Lauterbrunnen;Ind_04_01;UM_11;164.47;A;164,47;3,696077395;3.69607739522643 -2016;;585;Leissigen;Ind_04_01;UM_11;10.38;A;10,38;0,928530956;0.9285309562499 -2016;;586;Lütschental;Ind_04_01;UM_11;12.28;A;12,28;1,009943071;1.00994307089087 -2016;;587;Matten bei Interlaken;Ind_04_01;UM_11;5.91;A;5,91;0,700634391;0.700634390760655 -2016;;588;Niederried bei Interlaken;Ind_04_01;UM_11;4.28;A;4,28;0,596237922;0.596237922498382 -2016;;589;Oberried am Brienzersee;Ind_04_01;UM_11;20.2;A;20,2;1,295309036;1.29530903617385 -2016;;590;Ringgenberg (BE);Ind_04_01;UM_11;8.73;A;8,73;0,851539567;0.85153956693594 -2016;;591;Saxeten;Ind_04_01;UM_11;19.42;A;19,42;1,2700544;1.27005439959777 -2016;;592;Schwanden bei Brienz;Ind_04_01;UM_11;7.06;A;7,06;0,76577302;0.765773019918437 -2016;;593;Unterseen;Ind_04_01;UM_11;13.99;A;13,99;1,077969735;1.07796973482283 -2016;;594;Wilderswil;Ind_04_01;UM_11;13.19;A;13,19;1,0466949;1.04669490042346 -2016;;602;Arni (BE);Ind_04_01;UM_11;10.43;A;10,43;0,930764616;0.930764615855265 -2016;;603;Biglen;Ind_04_01;UM_11;3.59;A;3,59;0,546065746;0.546065746146118 -2016;;605;Bowil;Ind_04_01;UM_11;14.69;A;14,69;1,104609079;1.10460907880926 -2016;;606;Brenzikofen;Ind_04_01;UM_11;2.19;A;2,19;0,426500719;0.426500719256649 -2016;;607;Freimettigen;Ind_04_01;UM_11;2.96;A;2,96;0,495842292;0.495842291560191 -2016;;608;Grosshöchstetten;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;609;Häutligen;Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;610;Herbligen;Ind_04_01;UM_11;2.76;A;2,76;0,478797916;0.478797916081805 -2016;;611;Kiesen;Ind_04_01;UM_11;4.69;A;4,69;0,62414304;0.624143039870445 -2016;;612;Konolfingen;Ind_04_01;UM_11;12.77;A;12,77;1,029895497;1.02989549658991 -2016;;613;Landiswil;Ind_04_01;UM_11;10.26;A;10,26;0,923148123;0.923148122741483 -2016;;614;Linden;Ind_04_01;UM_11;13.23;A;13,23;1,048280803;1.04828080269723 -2016;;615;Mirchel;Ind_04_01;UM_11;2.34;A;2,34;0,440865018;0.440865017627817 -2016;;616;Münsingen;Ind_04_01;UM_11;15.77;A;15,77;1,144494097;1.14449409728793 -2016;;617;Niederhünigen;Ind_04_01;UM_11;5.42;A;5,42;0,670961118;0.670961118143866 -2016;;619;Oberdiessbach;Ind_04_01;UM_11;16.47;A;16,47;1,169619257;1.16961925707503 -2016;;620;Oberthal;Ind_04_01;UM_11;10.54;A;10,54;0,935659897;0.935659897419281 -2016;;622;Oppligen;Ind_04_01;UM_11;3.4;A;3,4;0,531419112;0.531419111569675 -2016;;623;Rubigen;Ind_04_01;UM_11;6.92;A;6,92;0,758142351;0.758142351063595 -2016;;626;Walkringen;Ind_04_01;UM_11;17.21;A;17,21;1,195606165;1.19560616469039 -2016;;627;Worb;Ind_04_01;UM_11;21.08;A;21,08;1,323222917;1.32322291669897 -2016;;628;Zäziwil;Ind_04_01;UM_11;5.41;A;5,41;0,670341865;0.670341864557255 -2016;;629;Oberhünigen;Ind_04_01;UM_11;6.01;A;6,01;0,706537059;0.706537059427349 -2016;;630;Allmendingen;Ind_04_01;UM_11;3.81;A;3,81;0,562548794;0.562548794448124 -2016;;632;Wichtrach;Ind_04_01;UM_11;11.6;A;11,6;0,98158227;0.981582269609729 -2016;;661;Clavaleyres;Ind_04_01;UM_11;1;A;1;0,288202478;0.288202477915983 -2016;;662;Ferenbalm;Ind_04_01;UM_11;9.17;A;9,17;0,87273497;0.872734970136575 -2016;;663;Frauenkappelen;Ind_04_01;UM_11;9.29;A;9,29;0,87842678;0.878426780268292 -2016;;665;Gurbrü;Ind_04_01;UM_11;1.86;A;1,86;0,393055776;0.393055775933973 -2016;;666;Kriechenwil;Ind_04_01;UM_11;4.74;A;4,74;0,627461208;0.627461208069922 -2016;;667;Laupen;Ind_04_01;UM_11;4.13;A;4,13;0,585696645;0.585696645016556 -2016;;668;Mühleberg;Ind_04_01;UM_11;26.26;A;26,26;1,476879531;1.47687953095428 -2016;;669;Münchenwiler;Ind_04_01;UM_11;2.48;A;2,48;0,453861716;0.453861716084033 -2016;;670;Neuenegg;Ind_04_01;UM_11;21.83;A;21,83;1,346556493;1.34655649286801 -2016;;671;Wileroltigen;Ind_04_01;UM_11;4.15;A;4,15;0,587113084;0.587113083953328 -2016;;681;Belprahon;Ind_04_01;UM_11;3.82;A;3,82;0,563286564;0.563286563675902 -2016;;683;Champoz;Ind_04_01;UM_11;7.17;A;7,17;0,771715616;0.771715615719589 -2016;;687;Corcelles (BE);Ind_04_01;UM_11;6.79;A;6,79;0,750987309;0.750987308548045 -2016;;690;Court;Ind_04_01;UM_11;24.61;A;24,61;1,429728312;1.42972831205611 -2016;;691;Crémines;Ind_04_01;UM_11;9.48;A;9,48;0,88736415;0.88736415031549 -2016;;692;Eschert;Ind_04_01;UM_11;6.58;A;6,58;0,739282894;0.739282893933091 -2016;;694;Grandval;Ind_04_01;UM_11;8.25;A;8,25;0,827798595;0.827798594637929 -2016;;696;Loveresse;Ind_04_01;UM_11;4.69;A;4,69;0,62414304;0.624143039870445 -2016;;700;Moutier;Ind_04_01;UM_11;19.61;A;19,61;1,276252211;1.27625221054079 -2016;;701;Perrefitte;Ind_04_01;UM_11;8.57;A;8,57;0,843700141;0.843700140531659 -2016;;703;Reconvilier;Ind_04_01;UM_11;8.25;A;8,25;0,827798595;0.827798594637929 -2016;;704;Roches (BE);Ind_04_01;UM_11;9.06;A;9,06;0,867484671;0.867484671097322 -2016;;706;Saicourt;Ind_04_01;UM_11;13.77;A;13,77;1,069460332;1.06946033221111 -2016;;707;Saules (BE);Ind_04_01;UM_11;4.28;A;4,28;0,596237922;0.596237922498382 -2016;;708;Schelten;Ind_04_01;UM_11;5.56;A;5,56;0,679571421;0.679571420543591 -2016;;709;Seehof;Ind_04_01;UM_11;8.42;A;8,42;0,836283939;0.836283939156794 -2016;;711;Sorvilier;Ind_04_01;UM_11;6.9;A;6,9;0,757045977;0.757045976880333 -2016;;713;Tavannes;Ind_04_01;UM_11;14.78;A;14,78;1,10798767;1.10798767011766 -2016;;715;Rebévelier;Ind_04_01;UM_11;3.55;A;3,55;0,543015076;0.543015075649876 -2016;;716;Petit-Val;Ind_04_01;UM_11;23.9;A;23,9;1,408953502;1.40895350236202 -2016;;717;Valbirse;Ind_04_01;UM_11;18.68;A;18,68;1,245621645;1.24562164536938 -2016;;723;La Neuveville;Ind_04_01;UM_11;6.78;A;6,78;0,750434095;0.750434094986007 -2016;;724;Nods;Ind_04_01;UM_11;26.61;A;26,61;1,486689067;1.48668906730649 -2016;;726;Plateau de Diesse;Ind_04_01;UM_11;25.55;A;25,55;1,456777291;1.45677729062308 -2016;;731;Aegerten;Ind_04_01;UM_11;2.16;A;2,16;0,423569408;0.423569408099937 -2016;;732;Bellmund;Ind_04_01;UM_11;3.79;A;3,79;0,561070346;0.561070345651505 -2016;;733;Brügg;Ind_04_01;UM_11;5;A;5;0,644440332;0.64444033190402 -2016;;734;Bühl;Ind_04_01;UM_11;2.97;A;2,97;0,496679157;0.496679156782757 -2016;;735;Epsach;Ind_04_01;UM_11;3.41;A;3,41;0,532200036;0.532200036475264 -2016;;736;Hagneck;Ind_04_01;UM_11;1.84;A;1,84;0,390936861;0.390936861436114 -2016;;737;Hermrigen;Ind_04_01;UM_11;3.42;A;3,42;0,532979817;0.532979817166693 -2016;;738;Jens;Ind_04_01;UM_11;4.58;A;4,58;0,616780237;0.616780236963102 -2016;;739;Ipsach;Ind_04_01;UM_11;1.9;A;1,9;0,397259701;0.397259700606712 -2016;;740;Ligerz;Ind_04_01;UM_11;1.79;A;1,79;0,385588636;0.385588636004322 -2016;;741;Merzligen;Ind_04_01;UM_11;2.3;A;2,3;0,437080699;0.437080698540783 -2016;;742;Mörigen;Ind_04_01;UM_11;2.16;A;2,16;0,423569408;0.423569408099937 -2016;;743;Nidau;Ind_04_01;UM_11;1.52;A;1,52;0,355319878;0.355319878111129 -2016;;744;Orpund;Ind_04_01;UM_11;3.97;A;3,97;0,574239369;0.574239369130455 -2016;;745;Port;Ind_04_01;UM_11;2.46;A;2,46;0,452027924;0.452027923873299 -2016;;746;Safnern;Ind_04_01;UM_11;5.62;A;5,62;0,683228334;0.68322833351395 -2016;;747;Scheuren;Ind_04_01;UM_11;2.11;A;2,11;0,418638281;0.418638280696218 -2016;;748;Schwadernau;Ind_04_01;UM_11;4.15;A;4,15;0,587113084;0.587113083953328 -2016;;749;Studen (BE);Ind_04_01;UM_11;2.73;A;2,73;0,476188644;0.476188643707482 -2016;;750;Sutz-Lattrigen;Ind_04_01;UM_11;3.57;A;3,57;0,544542547;0.544542547234445 -2016;;751;Täuffelen;Ind_04_01;UM_11;4.37;A;4,37;0,602474166;0.602474165728381 -2016;;754;Walperswil;Ind_04_01;UM_11;6.96;A;6,96;0,760330357;0.760330356626192 -2016;;755;Worben;Ind_04_01;UM_11;2.76;A;2,76;0,478797916;0.478797916081805 -2016;;756;Twann-Tüscherz;Ind_04_01;UM_11;12.33;A;12,33;1,011997055;1.01199705525971 -2016;;761;Därstetten;Ind_04_01;UM_11;32.84;A;32,84;1,651578744;1.65157874357047 -2016;;762;Diemtigen;Ind_04_01;UM_11;129.94;A;129,94;3,285255429;3.28525542932388 -2016;;763;Erlenbach im Simmental;Ind_04_01;UM_11;36.69;A;36,69;1,745707856;1.74570785616607 -2016;;766;Oberwil im Simmental;Ind_04_01;UM_11;46.06;A;46,06;1,955958686;1.9559586858711 -2016;;767;Reutigen;Ind_04_01;UM_11;11.29;A;11,29;0,968377481;0.968377480555152 -2016;;768;Spiez;Ind_04_01;UM_11;16.69;A;16,69;1,177405008;1.177405008288 -2016;;769;Wimmis;Ind_04_01;UM_11;22.35;A;22,35;1,362499885;1.3624998847666 -2016;;770;Stocken-Höfen;Ind_04_01;UM_11;14.22;A;14,22;1,086794692;1.08679469215565 -2016;;782;Guttannen;Ind_04_01;UM_11;200.85;A;200,85;4,084450419;4.08445041877336 -2016;;783;Hasliberg;Ind_04_01;UM_11;41.74;A;41,74;1,861975374;1.86197537413316 -2016;;784;Innertkirchen;Ind_04_01;UM_11;236.61;A;236,61;4,4331687;4.43316869981285 -2016;;785;Meiringen;Ind_04_01;UM_11;40.63;A;40,63;1,837050612;1.83705061228344 -2016;;786;Schattenhalb;Ind_04_01;UM_11;31.54;A;31,54;1,618559074;1.61855907444054 -2016;;791;Boltigen;Ind_04_01;UM_11;77.07;A;77,07;2,530115749;2.53011574915095 -2016;;792;Lenk;Ind_04_01;UM_11;123.09;A;123,09;3,197489274;3.1974892741345 -2016;;793;St. Stephan;Ind_04_01;UM_11;60.89;A;60,89;2,248902864;2.24890286392748 -2016;;794;Zweisimmen;Ind_04_01;UM_11;73;A;73;2,462403051;2.46240305072395 -2016;;841;Gsteig;Ind_04_01;UM_11;62.43;A;62,43;2,27716436;2.27716435957698 -2016;;842;Lauenen;Ind_04_01;UM_11;58.47;A;58,47;2,203759804;2.20375980409642 -2016;;843;Saanen;Ind_04_01;UM_11;120.06;A;120,06;3,157889142;3.15788914202607 -2016;;852;Guggisberg;Ind_04_01;UM_11;54.91;A;54,91;2,13561731;2.13561731007343 -2016;;853;Rüschegg;Ind_04_01;UM_11;57.3;A;57,3;2,18159948;2.18159948025917 -2016;;855;Schwarzenburg;Ind_04_01;UM_11;44.8;A;44,8;1,929019943;1.92901994256298 -2016;;861;Belp;Ind_04_01;UM_11;23.26;A;23,26;1,389960843;1.38996084265744 -2016;;863;Burgistein;Ind_04_01;UM_11;7.52;A;7,52;0,790326657;0.790326657428676 -2016;;866;Gerzensee;Ind_04_01;UM_11;7.81;A;7,81;0,805421517;0.805421516500949 -2016;;867;Gurzelen;Ind_04_01;UM_11;4.52;A;4,52;0,612726873;0.612726872767667 -2016;;868;Jaberg;Ind_04_01;UM_11;1.31;A;1,31;0,329862813;0.329862813064394 -2016;;869;Kaufdorf;Ind_04_01;UM_11;2.06;A;2,06;0,413648373;0.413648373199315 -2016;;870;Kehrsatz;Ind_04_01;UM_11;4.44;A;4,44;0,607280304;0.607280303607397 -2016;;872;Kirchdorf (BE);Ind_04_01;UM_11;14.62;A;14,62;1,101974124;1.10197412411021 -2016;;877;Niedermuhlern;Ind_04_01;UM_11;7.26;A;7,26;0,776543915;0.776543914849885 -2016;;879;Riggisberg;Ind_04_01;UM_11;34.5;A;34,5;1,692806266;1.69280626639716 -2016;;880;Rüeggisberg;Ind_04_01;UM_11;35.81;A;35,81;1,724645625;1.72464562475781 -2016;;883;Seftigen;Ind_04_01;UM_11;3.89;A;3,89;0,568424137;0.568424137064209 -2016;;884;Toffen;Ind_04_01;UM_11;4.88;A;4,88;0,636660083;0.636660082925994 -2016;;885;Uttigen;Ind_04_01;UM_11;3.81;A;3,81;0,562548794;0.562548794448124 -2016;;886;Wattenwil;Ind_04_01;UM_11;14.54;A;14,54;1,098955011;1.09895501124764 -2016;;888;Wald (BE);Ind_04_01;UM_11;13.3;A;13,3;1,051050374;1.05105037371333 -2016;;889;Thurnen;Ind_04_01;UM_11;5.95;A;5,95;0,703001406;0.703001405580124 -2016;;901;Eggiwil;Ind_04_01;UM_11;60.3;A;60,3;2,237980853;2.23798085271028 -2016;;902;Langnau im Emmental;Ind_04_01;UM_11;48.36;A;48,36;2,004199071;2.00419907141768 -2016;;903;Lauperswil;Ind_04_01;UM_11;21.19;A;21,19;1,326670856;1.32667085623669 -2016;;904;Röthenbach im Emmental;Ind_04_01;UM_11;36.8;A;36,8;1,748322794;1.74832279416313 -2016;;905;Rüderswil;Ind_04_01;UM_11;17.21;A;17,21;1,195606165;1.19560616469039 -2016;;906;Schangnau;Ind_04_01;UM_11;36.48;A;36,48;1,740704794;1.74070479368036 -2016;;907;Signau;Ind_04_01;UM_11;22.13;A;22,13;1,355777485;1.35577748504984 -2016;;908;Trub;Ind_04_01;UM_11;61.99;A;61,99;2,269125564;2.2691255642837 -2016;;909;Trubschachen;Ind_04_01;UM_11;15.65;A;15,65;1,140131334;1.14013133389697 -2016;;921;Amsoldingen;Ind_04_01;UM_11;4.71;A;4,71;0,62547242;0.625472419523242 -2016;;922;Blumenstein;Ind_04_01;UM_11;15.52;A;15,52;1,135386089;1.13538608924792 -2016;;923;Buchholterberg;Ind_04_01;UM_11;15.33;A;15,33;1,128414837;1.12841483714327 -2016;;924;Eriz;Ind_04_01;UM_11;21.78;A;21,78;1,345013515;1.34501351482844 -2016;;925;Fahrni;Ind_04_01;UM_11;6.68;A;6,68;0,744879362;0.744879362104882 -2016;;927;Heiligenschwendi;Ind_04_01;UM_11;5.55;A;5,55;0,67896002;0.678960020131425 -2016;;928;Heimberg;Ind_04_01;UM_11;5.44;A;5,44;0,672197914;0.672197913881325 -2016;;929;Hilterfingen;Ind_04_01;UM_11;2.81;A;2,81;0,483115388;0.483115387726498 -2016;;931;Homberg;Ind_04_01;UM_11;6.51;A;6,51;0,735340024;0.735340023718757 -2016;;932;Horrenbach-Buchen;Ind_04_01;UM_11;20.4;A;20,4;1,301705663;1.30170566290887 -2016;;934;Oberhofen am Thunersee;Ind_04_01;UM_11;2.71;A;2,71;0,474441157;0.474441156552036 -2016;;935;Oberlangenegg;Ind_04_01;UM_11;9.16;A;9,16;0,872258976;0.87225897611691 -2016;;936;Pohlern;Ind_04_01;UM_11;9.87;A;9,87;0,905432933;0.905432932852085 -2016;;938;Sigriswil;Ind_04_01;UM_11;55.41;A;55,41;2,145318538;2.14531853793877 -2016;;939;Steffisburg;Ind_04_01;UM_11;14.81;A;14,81;1,10911158;1.10911158013118 -2016;;940;Teuffenthal (BE);Ind_04_01;UM_11;4.53;A;4,53;0,613404294;0.613404293508298 -2016;;941;Thierachern;Ind_04_01;UM_11;7.53;A;7,53;0,790851966;0.790851965999423 -2016;;942;Thun;Ind_04_01;UM_11;21.57;A;21,57;1,338513584;1.33851358406742 -2016;;943;Uebeschi;Ind_04_01;UM_11;4.42;A;4,42;0,605911011;0.605911011439761 -2016;;944;Uetendorf;Ind_04_01;UM_11;10.17;A;10,17;0,919090309;0.919090309151501 -2016;;945;Unterlangenegg;Ind_04_01;UM_11;6.8;A;6,8;0,751540115;0.751540114886096 -2016;;946;Wachseldorn;Ind_04_01;UM_11;3.51;A;3,51;0,539947169;0.539947169315632 -2016;;947;Zwieselberg;Ind_04_01;UM_11;2.46;A;2,46;0,452027924;0.452027923873299 -2016;;948;Forst-Längenbühl;Ind_04_01;UM_11;4.5;A;4,5;0,611369779;0.611369779467473 -2016;;951;Affoltern im Emmental;Ind_04_01;UM_11;11.51;A;11,51;0,977766993;0.977766992625168 -2016;;952;Dürrenroth;Ind_04_01;UM_11;14.13;A;14,13;1,083350009;1.08335000934729 -2016;;953;Eriswil;Ind_04_01;UM_11;11.34;A;11,34;0,970519437;0.970519437342802 -2016;;954;Huttwil;Ind_04_01;UM_11;17.24;A;17,24;1,196647785;1.19664778489494 -2016;;955;Lützelflüh;Ind_04_01;UM_11;26.87;A;26,87;1,493934455;1.49393445525587 -2016;;956;Rüegsau;Ind_04_01;UM_11;15.06;A;15,06;1,118433576;1.11843357614581 -2016;;957;Sumiswald;Ind_04_01;UM_11;59.34;A;59,34;2,220094605;2.22009460509051 -2016;;958;Trachselwald;Ind_04_01;UM_11;15.96;A;15,96;1,151367998;1.15136799751406 -2016;;959;Walterswil (BE);Ind_04_01;UM_11;7.87;A;7,87;0,808509406;0.808509405844671 -2016;;960;Wyssachen;Ind_04_01;UM_11;11.69;A;11,69;0,985382774;0.985382774436974 -2016;;971;Attiswil;Ind_04_01;UM_11;7.65;A;7,65;0,797128667;0.797128667354513 -2016;;972;Berken;Ind_04_01;UM_11;1.39;A;1,39;0,33978571;0.339785710271796 -2016;;973;Bettenhausen;Ind_04_01;UM_11;3.94;A;3,94;0,572065585;0.572065584536455 -2016;;975;Farnern;Ind_04_01;UM_11;3.68;A;3,68;0,552868211;0.552868211474524 -2016;;976;Graben;Ind_04_01;UM_11;3.16;A;3,16;0,512319931;0.512319931053872 -2016;;977;Heimenhausen;Ind_04_01;UM_11;5.84;A;5,84;0,696472758;0.696472758072539 -2016;;979;Herzogenbuchsee;Ind_04_01;UM_11;9.82;A;9,82;0,903136624;0.903136624481192 -2016;;980;Inkwil;Ind_04_01;UM_11;3.38;A;3,38;0,529853809;0.52985380887181 -2016;;981;Niederbipp;Ind_04_01;UM_11;19.77;A;19,77;1,28144817;1.2814481697808 -2016;;982;Niederönz;Ind_04_01;UM_11;2.79;A;2,79;0,481393046;0.481393045745975 -2016;;983;Oberbipp;Ind_04_01;UM_11;8.45;A;8,45;0,837772431;0.837772431475226 -2016;;985;Ochlenberg;Ind_04_01;UM_11;12.12;A;12,12;1,003342065;1.00334206505866 -2016;;987;Rumisberg;Ind_04_01;UM_11;5.14;A;5,14;0,65340021;0.653400210394312 -2016;;988;Seeberg;Ind_04_01;UM_11;16.8;A;16,8;1,181278641;1.18127864073305 -2016;;989;Thörigen;Ind_04_01;UM_11;4.55;A;4,55;0,614756896;0.614756895577392 -2016;;990;Walliswil bei Niederbipp;Ind_04_01;UM_11;1.47;A;1,47;0,349426934;0.349426934232411 -2016;;991;Walliswil bei Wangen;Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;992;Wangen an der Aare;Ind_04_01;UM_11;5.22;A;5,22;0,658465404;0.658465404106764 -2016;;993;Wangenried;Ind_04_01;UM_11;2.91;A;2,91;0,491636598;0.491636598196082 -2016;;995;Wiedlisbach;Ind_04_01;UM_11;7.5;A;7,5;0,789274991;0.789274991417342 -2016;;1001;Doppleschwand;Ind_04_01;UM_11;6.95;A;6,95;0,759783946;0.759783945950783 -2016;;1002;Entlebuch;Ind_04_01;UM_11;56.9;A;56,9;2,173971487;2.1739714866935 -2016;;1004;Flühli;Ind_04_01;UM_11;108.17;A;108,17;2,997444326;2.99744432600735 -2016;;1005;Hasle (LU);Ind_04_01;UM_11;40.31;A;40,31;1,829802049;1.82980204892287 -2016;;1007;Romoos;Ind_04_01;UM_11;37.39;A;37,39;1,762282153;1.76228215302595 -2016;;1008;Schüpfheim;Ind_04_01;UM_11;38.38;A;38,38;1,78546029;1.78546029036434 -2016;;1009;Werthenstein;Ind_04_01;UM_11;15.8;A;15,8;1,145582192;1.14558219206446 -2016;;1010;Escholzmatt-Marbach;Ind_04_01;UM_11;106.4;A;106,4;2,972819386;2.97281938648541 -2016;;1021;Aesch (LU);Ind_04_01;UM_11;4.61;A;4,61;0,618796962;0.618796962465531 -2016;;1023;Ballwil;Ind_04_01;UM_11;8.77;A;8,77;0,853488173;0.853488172611973 -2016;;1024;Emmen;Ind_04_01;UM_11;20.37;A;20,37;1,300748174;1.30074817424462 -2016;;1025;Ermensee;Ind_04_01;UM_11;5.69;A;5,69;0,687470147;0.687470146621388 -2016;;1026;Eschenbach (LU);Ind_04_01;UM_11;13.21;A;13,21;1,047488152;1.04748815169338 -2016;;1030;Hitzkirch;Ind_04_01;UM_11;27.59;A;27,59;1,513817637;1.51381763689026 -2016;;1031;Hochdorf;Ind_04_01;UM_11;9.64;A;9,64;0,894821123;0.894821123012548 -2016;;1032;Hohenrain;Ind_04_01;UM_11;23.22;A;23,22;1,388765177;1.38876517719516 -2016;;1033;Inwil;Ind_04_01;UM_11;10.32;A;10,32;0,925843451;0.925843451463442 -2016;;1037;Rain;Ind_04_01;UM_11;9.42;A;9,42;0,884551579;0.884551578580083 -2016;;1039;Römerswil;Ind_04_01;UM_11;16.6;A;16,6;1,174226168;1.17422616790666 -2016;;1040;Rothenburg;Ind_04_01;UM_11;15.49;A;15,49;1,134288214;1.13428821364298 -2016;;1041;Schongau;Ind_04_01;UM_11;12.43;A;12,43;1,016092568;1.01609256796909 -2016;;1051;Adligenswil;Ind_04_01;UM_11;6.99;A;6,99;0,761967238;0.761967237652394 -2016;;1052;Buchrain;Ind_04_01;UM_11;4.8;A;4,8;0,631419993;0.631419993133873 -2016;;1053;Dierikon;Ind_04_01;UM_11;2.78;A;2,78;0,48052956;0.480529559766948 -2016;;1054;Ebikon;Ind_04_01;UM_11;9.68;A;9,68;0,896675677;0.896675676552294 -2016;;1055;Gisikon;Ind_04_01;UM_11;1.08;A;1,08;0,299508801;0.299508800770638 -2016;;1056;Greppen;Ind_04_01;UM_11;3.32;A;3,32;0,525129906;0.525129906479673 -2016;;1057;Honau;Ind_04_01;UM_11;1.25;A;1,25;0,322220166;0.32222016595201 -2016;;1058;Horw;Ind_04_01;UM_11;12.86;A;12,86;1,033518357;1.03351835689604 -2016;;1059;Kriens;Ind_04_01;UM_11;27.3;A;27,3;1,50584071;1.50584071002205 -2016;;1061;Luzern;Ind_04_01;UM_11;29.1;A;29,1;1,554691431;1.55469143139665 -2016;;1062;Malters;Ind_04_01;UM_11;28.57;A;28,57;1,54046853;1.54046853024377 -2016;;1063;Meggen;Ind_04_01;UM_11;7.27;A;7,27;0,777078541;0.777078540672148 -2016;;1064;Meierskappel;Ind_04_01;UM_11;6.8;A;6,8;0,751540115;0.751540114886096 -2016;;1065;Root;Ind_04_01;UM_11;8.65;A;8,65;0,847628917;0.847628916799854 -2016;;1066;Schwarzenberg;Ind_04_01;UM_11;39.3;A;39,3;1,806733036;1.80673303597479 -2016;;1067;Udligenswil;Ind_04_01;UM_11;6.22;A;6,22;0,7187749;0.718774899869491 -2016;;1068;Vitznau;Ind_04_01;UM_11;8.92;A;8,92;0,860756157;0.860756156544966 -2016;;1069;Weggis;Ind_04_01;UM_11;11.79;A;11,79;0,989588439;0.989588439193183 -2016;;1081;Beromünster;Ind_04_01;UM_11;42.13;A;42,13;1,870653884;1.87065388420903 -2016;;1082;Büron;Ind_04_01;UM_11;5.37;A;5,37;0,667859108;0.667859108380668 -2016;;1083;Buttisholz;Ind_04_01;UM_11;16.71;A;16,71;1,178110252;1.17811025244126 -2016;;1084;Eich;Ind_04_01;UM_11;5.94;A;5,94;0,7024104;0.702410399670208 -2016;;1085;Geuensee;Ind_04_01;UM_11;6.47;A;6,47;0,733077434;0.733077433666884 -2016;;1086;Grosswangen;Ind_04_01;UM_11;19.7;A;19,7;1,279177535;1.27917753461167 -2016;;1088;Hildisrieden;Ind_04_01;UM_11;7.04;A;7,04;0,764687586;0.764687586318403 -2016;;1089;Knutwil;Ind_04_01;UM_11;9.74;A;9,74;0,899450337;0.89945033715994 -2016;;1091;Mauensee;Ind_04_01;UM_11;7.22;A;7,22;0,774401721;0.7744017206588 -2016;;1093;Neuenkirch;Ind_04_01;UM_11;25.48;A;25,48;1,454780337;1.4547803365786 -2016;;1094;Nottwil;Ind_04_01;UM_11;10.33;A;10,33;0,92629191;0.926291910415128 -2016;;1095;Oberkirch;Ind_04_01;UM_11;9.1;A;9,1;0,869397539;0.869397539287929 -2016;;1097;Rickenbach (LU);Ind_04_01;UM_11;11.85;A;11,85;0,99210328;0.992103280450889 -2016;;1098;Ruswil;Ind_04_01;UM_11;45.25;A;45,25;1,938683894;1.93868389365835 -2016;;1099;Schenkon;Ind_04_01;UM_11;6.74;A;6,74;0,74821715;0.748217150422517 -2016;;1100;Schlierbach;Ind_04_01;UM_11;7.17;A;7,17;0,771715616;0.771715615719589 -2016;;1102;Sempach;Ind_04_01;UM_11;8.91;A;8,91;0,860273535;0.860273534608204 -2016;;1103;Sursee;Ind_04_01;UM_11;5.83;A;5,83;0,695876207;0.695876207420832 -2016;;1104;Triengen;Ind_04_01;UM_11;22.09;A;22,09;1,354551646;1.35455164620512 -2016;;1107;Wolhusen;Ind_04_01;UM_11;14.29;A;14,29;1,08946636;1.08946636004839 -2016;;1121;Alberswil;Ind_04_01;UM_11;3.54;A;3,54;0,542249726;0.542249726325676 -2016;;1122;Altbüron;Ind_04_01;UM_11;6.75;A;6,75;0,748772002;0.748772001926595 -2016;;1123;Altishofen;Ind_04_01;UM_11;14.32;A;14,32;1,090609357;1.09060935706851 -2016;;1125;Dagmersellen;Ind_04_01;UM_11;23.87;A;23,87;1,408068944;1.40806894425305 -2016;;1127;Egolzwil;Ind_04_01;UM_11;4.18;A;4,18;0,589231358;0.589231358124714 -2016;;1128;Ettiswil;Ind_04_01;UM_11;12.58;A;12,58;1,022205071;1.02220507087549 -2016;;1129;Fischbach;Ind_04_01;UM_11;8.05;A;8,05;0,817703112;0.817703112155718 -2016;;1131;Grossdietwil;Ind_04_01;UM_11;10.2;A;10,2;0,920444901;0.920444901351791 -2016;;1132;Hergiswil bei Willisau;Ind_04_01;UM_11;31.34;A;31,34;1,613419147;1.6134191469666 -2016;;1135;Luthern;Ind_04_01;UM_11;37.76;A;37,76;1,77098019;1.77098019021564 -2016;;1136;Menznau;Ind_04_01;UM_11;30.34;A;30,34;1,587469898;1.58746989751665 -2016;;1137;Nebikon;Ind_04_01;UM_11;3.73;A;3,73;0,556611438;0.55661143778482 -2016;;1139;Pfaffnau;Ind_04_01;UM_11;17.68;A;17,68;1,211822023;1.21182202287952 -2016;;1140;Reiden;Ind_04_01;UM_11;27.03;A;27,03;1,498375742;1.49837574177005 -2016;;1142;Roggliswil;Ind_04_01;UM_11;6.21;A;6,21;0,718196874;0.718196874122707 -2016;;1143;Schötz;Ind_04_01;UM_11;15.27;A;15,27;1,126204424;1.12620442397837 -2016;;1145;Ufhusen;Ind_04_01;UM_11;12.21;A;12,21;1,007060455;1.00706045481942 -2016;;1146;Wauwil;Ind_04_01;UM_11;2.96;A;2,96;0,495842292;0.495842291560191 -2016;;1147;Wikon;Ind_04_01;UM_11;8.28;A;8,28;0,829302317;0.829302317211785 -2016;;1150;Zell (LU);Ind_04_01;UM_11;13.91;A;13,91;1,074883201;1.07488320097202 -2016;;1151;Willisau;Ind_04_01;UM_11;47.22;A;47,22;1,980435497;1.98043549656024 -2016;;1201;Altdorf (UR);Ind_04_01;UM_11;10.21;A;10,21;0,920895989;0.92089598929916 -2016;;1202;Andermatt;Ind_04_01;UM_11;62.26;A;62,26;2,27406183;2.27406183005665 -2016;;1203;Attinghausen;Ind_04_01;UM_11;46.89;A;46,89;1,973503163;1.97350316328716 -2016;;1205;Bürglen (UR);Ind_04_01;UM_11;53.06;A;53,06;2,099333003;2.09933300330676 -2016;;1206;Erstfeld;Ind_04_01;UM_11;59.09;A;59,09;2,215413029;2.21541302886906 -2016;;1207;Flüelen;Ind_04_01;UM_11;12.38;A;12,38;1,014046879;1.01404687922609 -2016;;1208;Göschenen;Ind_04_01;UM_11;104.15;A;104,15;2,941218897;2.94121889716499 -2016;;1209;Gurtnellen;Ind_04_01;UM_11;83.31;A;83,31;2,630548284;2.63054828394188 -2016;;1210;Hospental;Ind_04_01;UM_11;35.16;A;35,16;1,708921618;1.70892161804345 -2016;;1211;Isenthal;Ind_04_01;UM_11;60.97;A;60,97;2,250379733;2.25037973347686 -2016;;1212;Realp;Ind_04_01;UM_11;77.88;A;77,88;2,543376662;2.54337666211789 -2016;;1213;Schattdorf;Ind_04_01;UM_11;16.33;A;16,33;1,164637589;1.16463758867812 -2016;;1214;Seedorf (UR);Ind_04_01;UM_11;19.28;A;19,28;1,265468168;1.26546816806227 -2016;;1215;Seelisberg;Ind_04_01;UM_11;13.29;A;13,29;1,050655168;1.05065516769308 -2016;;1216;Silenen;Ind_04_01;UM_11;144.78;A;144,78;3,467783666;3.46778366584933 -2016;;1217;Sisikon;Ind_04_01;UM_11;16.46;A;16,46;1,169264127;1.1692641274913 -2016;;1218;Spiringen;Ind_04_01;UM_11;64.68;A;64,68;2,317836065;2.3178360649862 -2016;;1219;Unterschächen;Ind_04_01;UM_11;80.28;A;80,28;2,58226847;2.5822684696349 -2016;;1220;Wassen;Ind_04_01;UM_11;96.88;A;96,88;2,836708928;2.83670892808326 -2016;;1301;Einsiedeln;Ind_04_01;UM_11;98.93;A;98,93;2,866564479;2.86656447906461 -2016;;1311;Gersau;Ind_04_01;UM_11;14.35;A;14,35;1,091751157;1.09175115744097 -2016;;1321;Feusisberg;Ind_04_01;UM_11;17.5;A;17,5;1,205637464;1.20563746410186 -2016;;1322;Freienbach;Ind_04_01;UM_11;13.8;A;13,8;1,070624688;1.07062468784416 -2016;;1323;Wollerau;Ind_04_01;UM_11;6.3;A;6,3;0,723382478;0.723382478461118 -2016;;1331;Küssnacht (SZ);Ind_04_01;UM_11;29.37;A;29,37;1,561887265;1.56188726459144 -2016;;1341;Altendorf;Ind_04_01;UM_11;20.41;A;20,41;1,302024669;1.30202466932535 -2016;;1342;Galgenen;Ind_04_01;UM_11;13.27;A;13,27;1,049864309;1.04986430934413 -2016;;1343;Innerthal;Ind_04_01;UM_11;50.14;A;50,14;2,04075033;2.04075032951226 -2016;;1344;Lachen;Ind_04_01;UM_11;2.43;A;2,43;0,449263201;0.449263201155957 -2016;;1345;Reichenburg;Ind_04_01;UM_11;11.55;A;11,55;0,979464506;0.979464506043145 -2016;;1346;Schübelbach;Ind_04_01;UM_11;29.01;A;29,01;1,552285408;1.55228540762105 -2016;;1347;Tuggen;Ind_04_01;UM_11;13.5;A;13,5;1,05892352;1.05892352024984 -2016;;1348;Vorderthal;Ind_04_01;UM_11;27.97;A;27,97;1,524206971;1.52420697141341 -2016;;1349;Wangen (SZ);Ind_04_01;UM_11;8.46;A;8,46;0,838268008;0.838268008230471 -2016;;1361;Alpthal;Ind_04_01;UM_11;22.88;A;22,88;1,378560151;1.3785601510909 -2016;;1362;Arth;Ind_04_01;UM_11;42.02;A;42,02;1,868210181;1.8682101811616 -2016;;1363;Illgau;Ind_04_01;UM_11;10.96;A;10,96;0,954119974;0.954119973753282 -2016;;1364;Ingenbohl;Ind_04_01;UM_11;13.4;A;13,4;1,054994291;1.05499429141139 -2016;;1365;Lauerz;Ind_04_01;UM_11;9.19;A;9,19;0,87368618;0.873686180195628 -2016;;1366;Morschach;Ind_04_01;UM_11;20.84;A;20,84;1,315668776;1.31566877552477 -2016;;1367;Muotathal;Ind_04_01;UM_11;172.14;A;172,14;3,781278016;3.78127801638385 -2016;;1368;Oberiberg;Ind_04_01;UM_11;33.17;A;33,17;1,659856128;1.65985612832715 -2016;;1369;Riemenstalden;Ind_04_01;UM_11;11.2;A;11,2;0,964509971;0.964509971281491 -2016;;1370;Rothenthurm;Ind_04_01;UM_11;22.75;A;22,75;1,374638208;1.37463820814779 -2016;;1371;Sattel;Ind_04_01;UM_11;17.39;A;17,39;1,201842345;1.20184234462575 -2016;;1372;Schwyz;Ind_04_01;UM_11;53.18;A;53,18;2,101705579;2.1017055785638 -2016;;1373;Steinen;Ind_04_01;UM_11;11.85;A;11,85;0,99210328;0.992103280450889 -2016;;1374;Steinerberg;Ind_04_01;UM_11;6.92;A;6,92;0,758142351;0.758142351063595 -2016;;1375;Unteriberg;Ind_04_01;UM_11;46.43;A;46,43;1,96379908;1.96379908037891 -2016;;1401;Alpnach;Ind_04_01;UM_11;53.78;A;53,78;2,113528505;2.11352850464155 -2016;;1402;Engelberg;Ind_04_01;UM_11;74.87;A;74,87;2,493742616;2.4937426158071 -2016;;1403;Giswil;Ind_04_01;UM_11;85.91;A;85,91;2,671280968;2.67128096831269 -2016;;1404;Kerns;Ind_04_01;UM_11;92.58;A;92,58;2,773041051;2.77304105073772 -2016;;1405;Lungern;Ind_04_01;UM_11;46.47;A;46,47;1,964644816;1.96464481645618 -2016;;1406;Sachseln;Ind_04_01;UM_11;53.89;A;53,89;2,115688874;2.11568887444322 -2016;;1407;Sarnen;Ind_04_01;UM_11;73.12;A;73,12;2,464426113;2.46442611258846 -2016;;1501;Beckenried;Ind_04_01;UM_11;24.25;A;24,25;1,419232612;1.4192326115599 -2016;;1502;Buochs;Ind_04_01;UM_11;9.96;A;9,96;0,909551679;0.909551678596687 -2016;;1503;Dallenwil;Ind_04_01;UM_11;15.47;A;15,47;1,133555706;1.13355570584063 -2016;;1504;Emmetten;Ind_04_01;UM_11;24.92;A;24,92;1,438704922;1.43870492230362 -2016;;1505;Ennetbürgen;Ind_04_01;UM_11;9.32;A;9,32;0,87984398;0.87984397954457 -2016;;1506;Ennetmoos;Ind_04_01;UM_11;14.07;A;14,07;1,081047456;1.0810474562461 -2016;;1507;Hergiswil (NW);Ind_04_01;UM_11;14.3;A;14,3;1,089847492;1.08984749224827 -2016;;1508;Oberdorf (NW);Ind_04_01;UM_11;16.2;A;16,2;1,159992597;1.15999259742724 -2016;;1509;Stans;Ind_04_01;UM_11;11.08;A;11,08;0,959329039;0.959329038707884 -2016;;1510;Stansstad;Ind_04_01;UM_11;9.07;A;9,07;0,867963283;0.867963283366064 -2016;;1511;Wolfenschiessen;Ind_04_01;UM_11;92.7;A;92,7;2,774837644;2.77483764376761 -2016;;1630;Glarus Nord;Ind_04_01;UM_11;146.99;A;146,99;3,494150488;3.49415048760402 -2016;;1631;Glarus Süd;Ind_04_01;UM_11;430.03;A;430,03;5,976502253;5.9765022529169 -2016;;1632;Glarus;Ind_04_01;UM_11;103.68;A;103,68;2,934574941;2.93457494144387 -2016;;1701;Baar;Ind_04_01;UM_11;24.85;A;24,85;1,436682848;1.4366828483285 -2016;;1702;Cham;Ind_04_01;UM_11;17.73;A;17,73;1,213534362;1.21353436232752 -2016;;1703;Hünenberg;Ind_04_01;UM_11;18.41;A;18,41;1,236586796;1.23658679556995 -2016;;1704;Menzingen;Ind_04_01;UM_11;27.51;A;27,51;1,51162131;1.51162130981866 -2016;;1705;Neuheim;Ind_04_01;UM_11;7.93;A;7,93;0,811585547;0.811585546591311 -2016;;1706;Oberägeri;Ind_04_01;UM_11;30.04;A;30,04;1,579601999;1.57960199893469 -2016;;1707;Risch;Ind_04_01;UM_11;14.86;A;14,86;1,110982237;1.11098223684941 -2016;;1708;Steinhausen;Ind_04_01;UM_11;5.04;A;5,04;0,647012958;0.647012958228535 -2016;;1709;Unterägeri;Ind_04_01;UM_11;25.62;A;25,62;1,458771511;1.45877151098262 -2016;;1710;Walchwil;Ind_04_01;UM_11;13.54;A;13,54;1,060491135;1.06049113549779 -2016;;1711;Zug;Ind_04_01;UM_11;21.63;A;21,63;1,340373924;1.3403739235115 -2016;;2008;Châtillon (FR);Ind_04_01;UM_11;1.3;A;1,3;0,328601383;0.328601382772481 -2016;;2011;Cugy (FR);Ind_04_01;UM_11;9.88;A;9,88;0,905891496;0.905891496028027 -2016;;2016;Fétigny;Ind_04_01;UM_11;4.1;A;4,1;0,58356554;0.583565540394001 -2016;;2022;Gletterens;Ind_04_01;UM_11;2.58;A;2,58;0,462921726;0.462921725731721 -2016;;2025;Lully (FR);Ind_04_01;UM_11;5.5;A;5,5;0,675894722;0.675894722218645 -2016;;2027;Ménières;Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;2029;Montagny (FR);Ind_04_01;UM_11;17.54;A;17,54;1,207014549;1.20701454903288 -2016;;2035;Nuvilly;Ind_04_01;UM_11;3.98;A;3,98;0,574962138;0.574962137659614 -2016;;2038;Prévondavaux;Ind_04_01;UM_11;1.82;A;1,82;0,388806399;0.388806399463771 -2016;;2041;Saint-Aubin (FR);Ind_04_01;UM_11;7.89;A;7,89;0,809536085;0.809536084868884 -2016;;2043;Sévaz;Ind_04_01;UM_11;2.5;A;2,5;0,455688129;0.455688128759442 -2016;;2044;Surpierre;Ind_04_01;UM_11;14.8;A;14,8;1,10873707;1.10873707004786 -2016;;2045;Vallon;Ind_04_01;UM_11;3.51;A;3,51;0,539947169;0.539947169315632 -2016;;2050;Les Montets;Ind_04_01;UM_11;10.28;A;10,28;0,924047439;0.92404743919707 -2016;;2051;Delley-Portalban;Ind_04_01;UM_11;6.91;A;6,91;0,757594362;0.757594362303117 -2016;;2053;Belmont-Broye;Ind_04_01;UM_11;25.79;A;25,79;1,463603305;1.46360330515532 -2016;;2054;Estavayer;Ind_04_01;UM_11;40.12;A;40,12;1,825484596;1.82548459628388 -2016;;2055;Cheyres-Châbles;Ind_04_01;UM_11;9.73;A;9,73;0,898988488;0.898988488432616 -2016;;2061;Auboranges;Ind_04_01;UM_11;1.93;A;1,93;0,400383678;0.400383678206844 -2016;;2063;Billens-Hennens;Ind_04_01;UM_11;4.89;A;4,89;0,637312065;0.637312064748584 -2016;;2066;Chapelle (Glâne);Ind_04_01;UM_11;2.02;A;2,02;0,409612683;0.409612682810681 -2016;;2067;Le Châtelard;Ind_04_01;UM_11;7.49;A;7,49;0,788748633;0.788748632578261 -2016;;2068;Châtonnaye;Ind_04_01;UM_11;6.31;A;6,31;0,723956364;0.723956363897244 -2016;;2072;Ecublens (FR);Ind_04_01;UM_11;4.88;A;4,88;0,636660083;0.636660082925994 -2016;;2079;Grangettes;Ind_04_01;UM_11;3.31;A;3,31;0,524338452;0.524338451762391 -2016;;2086;Massonnens;Ind_04_01;UM_11;4.29;A;4,29;0,596934056;0.596934055744816 -2016;;2087;Mézières (FR);Ind_04_01;UM_11;8.93;A;8,93;0,861238508;0.861238508029472 -2016;;2089;Montet (Glâne);Ind_04_01;UM_11;2.2;A;2,2;0,427473356;0.427473356139547 -2016;;2096;Romont (FR);Ind_04_01;UM_11;10.89;A;10,89;0,951068177;0.951068177122744 -2016;;2097;Rue;Ind_04_01;UM_11;11.2;A;11,2;0,964509971;0.964509971281491 -2016;;2099;Siviriez;Ind_04_01;UM_11;20.28;A;20,28;1,29787147;1.2978714700061 -2016;;2102;Ursy;Ind_04_01;UM_11;14.93;A;14,93;1,113595877;1.1135958770462 -2016;;2113;Vuisternens-devant-Romont;Ind_04_01;UM_11;24.01;A;24,01;1,412192142;1.41219214178832 -2016;;2114;Villorsonnens;Ind_04_01;UM_11;15.48;A;15,48;1,133922019;1.13392201889134 -2016;;2115;Torny;Ind_04_01;UM_11;10.17;A;10,17;0,919090309;0.919090309151501 -2016;;2117;Villaz;Ind_04_01;UM_11;15.44;A;15,44;1,132456056;1.13245605574589 -2016;;2121;Haut-Intyamon;Ind_04_01;UM_11;60.27;A;60,27;2,237424072;2.2374240717954 -2016;;2122;Pont-en-Ogoz;Ind_04_01;UM_11;10.16;A;10,16;0,918638335;0.918638334543814 -2016;;2123;Botterens;Ind_04_01;UM_11;4.27;A;4,27;0,595540976;0.595540975536039 -2016;;2124;Broc;Ind_04_01;UM_11;10.03;A;10,03;0,912742298;0.912742298141942 -2016;;2125;Bulle;Ind_04_01;UM_11;23.86;A;23,86;1,407773968;1.4077739680386 -2016;;2128;Châtel-sur-Montsalvens;Ind_04_01;UM_11;2.03;A;2,03;0,410625324;0.410625323868527 -2016;;2129;Corbières;Ind_04_01;UM_11;9.63;A;9,63;0,894356884;0.894356883747572 -2016;;2130;Crésuz;Ind_04_01;UM_11;1.79;A;1,79;0,385588636;0.385588636004322 -2016;;2131;Echarlens;Ind_04_01;UM_11;4.65;A;4,65;0,62147575;0.621475749718076 -2016;;2134;Grandvillard;Ind_04_01;UM_11;24.32;A;24,32;1,421279512;1.42127951244451 -2016;;2135;Gruyères;Ind_04_01;UM_11;28.44;A;28,44;1,536959793;1.53695979316162 -2016;;2137;Hauteville;Ind_04_01;UM_11;10.55;A;10,55;0,936103654;0.936103653620382 -2016;;2138;Jaun;Ind_04_01;UM_11;55.21;A;55,21;2,141443321;2.14144332065277 -2016;;2140;Marsens;Ind_04_01;UM_11;7.85;A;7,85;0,807481421;0.807481421441859 -2016;;2143;Morlon;Ind_04_01;UM_11;2.63;A;2,63;0,467385877;0.467385876517766 -2016;;2145;Le Pâquier (FR);Ind_04_01;UM_11;4.49;A;4,49;0,610690102;0.610690101903853 -2016;;2147;Pont-la-Ville;Ind_04_01;UM_11;4.36;A;4,36;0,601784441;0.601784441214077 -2016;;2148;Riaz;Ind_04_01;UM_11;7.76;A;7,76;0,802839203;0.802839202972078 -2016;;2149;La Roche;Ind_04_01;UM_11;24.06;A;24,06;1,413661798;1.41366179786486 -2016;;2152;Sâles;Ind_04_01;UM_11;18.82;A;18,82;1,250280679;1.25028067927626 -2016;;2153;Sorens;Ind_04_01;UM_11;8.71;A;8,71;0,85056359;0.850563590034225 -2016;;2155;Vaulruz;Ind_04_01;UM_11;10.1;A;10,1;0,915921803;0.915921803210742 -2016;;2160;Vuadens;Ind_04_01;UM_11;10.45;A;10,45;0,93165658;0.931656580234228 -2016;;2162;Bas-Intyamon;Ind_04_01;UM_11;33.34;A;33,34;1,664104168;1.66410416751845 -2016;;2163;Val-de-Charmey;Ind_04_01;UM_11;112.07;A;112,07;3,051001326;3.05100132641623 -2016;;2173;Autigny;Ind_04_01;UM_11;6.22;A;6,22;0,7187749;0.718774899869491 -2016;;2174;Avry;Ind_04_01;UM_11;5.83;A;5,83;0,695876207;0.695876207420832 -2016;;2175;Belfaux;Ind_04_01;UM_11;8.88;A;8,88;0,858824042;0.858824041523632 -2016;;2177;Chénens;Ind_04_01;UM_11;3.94;A;3,94;0,572065585;0.572065584536455 -2016;;2183;Corminboeuf;Ind_04_01;UM_11;7.23;A;7,23;0,774937824;0.774937824371787 -2016;;2186;Cottens (FR);Ind_04_01;UM_11;4.97;A;4,97;0,642504102;0.642504102194107 -2016;;2194;Ferpicloz;Ind_04_01;UM_11;1.02;A;1,02;0,291070235;0.291070234896066 -2016;;2196;Fribourg;Ind_04_01;UM_11;9.28;A;9,28;0,877953872;0.877953872142352 -2016;;2197;Givisiez;Ind_04_01;UM_11;3.46;A;3,46;0,536087598;0.53608759754178 -2016;;2198;Granges-Paccot;Ind_04_01;UM_11;3.99;A;3,99;0,575683999;0.575683998757028 -2016;;2200;Grolley;Ind_04_01;UM_11;5.34;A;5,34;0,665990967;0.665990967355199 -2016;;2206;Marly;Ind_04_01;UM_11;7.72;A;7,72;0,800767356;0.800767356413688 -2016;;2208;Matran;Ind_04_01;UM_11;2.91;A;2,91;0,491636598;0.491636598196082 -2016;;2211;Neyruz (FR);Ind_04_01;UM_11;5.53;A;5,53;0,677735565;0.677735564635151 -2016;;2216;Pierrafortscha;Ind_04_01;UM_11;5.06;A;5,06;0,648295443;0.648295443051375 -2016;;2217;Ponthaux;Ind_04_01;UM_11;5.91;A;5,91;0,700634391;0.700634390760655 -2016;;2220;Le Mouret;Ind_04_01;UM_11;18.56;A;18,56;1,241614273;1.24161427312169 -2016;;2226;Treyvaux;Ind_04_01;UM_11;11.4;A;11,4;0,973083562;0.973083561857256 -2016;;2228;Villars-sur-Glâne;Ind_04_01;UM_11;5.48;A;5,48;0,674664704;0.674664703506476 -2016;;2230;Villarsel-sur-Marly;Ind_04_01;UM_11;1.39;A;1,39;0,33978571;0.339785710271796 -2016;;2233;Hauterive (FR);Ind_04_01;UM_11;11.97;A;11,97;0,997113935;0.997113934951591 -2016;;2234;La Brillaz;Ind_04_01;UM_11;10.31;A;10,31;0,925394775;0.925394775182446 -2016;;2235;La Sonnaz;Ind_04_01;UM_11;6.96;A;6,96;0,760330357;0.760330356626192 -2016;;2236;Gibloux;Ind_04_01;UM_11;36.06;A;36,06;1,73065528;1.73065527996348 -2016;;2237;Prez;Ind_04_01;UM_11;16.04;A;16,04;1,154250025;1.1542500245448 -2016;;2238;Bois-d'Amont;Ind_04_01;UM_11;12.28;A;12,28;1,009943071;1.00994307089087 -2016;;2250;Courgevaux;Ind_04_01;UM_11;3.38;A;3,38;0,529853809;0.52985380887181 -2016;;2254;Courtepin;Ind_04_01;UM_11;21.88;A;21,88;1,348097705;1.34809770487856 -2016;;2257;Cressier (FR);Ind_04_01;UM_11;4.17;A;4,17;0,588526114;0.588526113876628 -2016;;2258;Fräschels;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;2259;Galmiz;Ind_04_01;UM_11;9.04;A;9,04;0,866526653;0.866526653498489 -2016;;2260;Gempenach;Ind_04_01;UM_11;1.67;A;1,67;0,372439681;0.372439681052441 -2016;;2261;Greng;Ind_04_01;UM_11;0.96;A;0,96;0,282379605;0.282379605399958 -2016;;2262;Gurmels;Ind_04_01;UM_11;17.34;A;17,34;1,200113323;1.20011332294982 -2016;;2265;Kerzers;Ind_04_01;UM_11;12.28;A;12,28;1,009943071;1.00994307089087 -2016;;2266;Kleinbösingen;Ind_04_01;UM_11;3.02;A;3,02;0,500842508;0.500842508375913 -2016;;2271;Meyriez;Ind_04_01;UM_11;0.34;A;0,34;0,168049478;0.168049478470331 -2016;;2272;Misery-Courtion;Ind_04_01;UM_11;11.38;A;11,38;0,972229605;0.972229605078587 -2016;;2274;Muntelier;Ind_04_01;UM_11;1.1;A;1,1;0,302269309;0.302269308902846 -2016;;2275;Murten;Ind_04_01;UM_11;24.7;A;24,7;1,43234022;1.43234022021297 -2016;;2276;Ried bei Kerzers;Ind_04_01;UM_11;7.55;A;7,55;0,791901538;0.791901537749922 -2016;;2278;Ulmiz;Ind_04_01;UM_11;2.84;A;2,84;0,485687449;0.485687448784125 -2016;;2284;Mont-Vully;Ind_04_01;UM_11;17.51;A;17,51;1,205981883;1.20598188275311 -2016;;2292;Brünisried;Ind_04_01;UM_11;3.25;A;3,25;0,519564406;0.519564405920927 -2016;;2293;Düdingen;Ind_04_01;UM_11;30.76;A;30,76;1,598419894;1.59841989358173 -2016;;2294;Giffers;Ind_04_01;UM_11;5.22;A;5,22;0,658465404;0.658465404106764 -2016;;2295;Bösingen;Ind_04_01;UM_11;14.33;A;14,33;1,09099009;1.0909900899679 -2016;;2296;Heitenried;Ind_04_01;UM_11;9.13;A;9,13;0,870829433;0.870829432993748 -2016;;2299;Plaffeien;Ind_04_01;UM_11;66.53;A;66,53;2,350750148;2.35075014845538 -2016;;2300;Plasselb;Ind_04_01;UM_11;18.16;A;18,16;1,228161934;1.2281619339113 -2016;;2301;Rechthalten;Ind_04_01;UM_11;7.31;A;7,31;0,779213376;0.779213375850435 -2016;;2303;St. Silvester;Ind_04_01;UM_11;7.04;A;7,04;0,764687586;0.764687586318403 -2016;;2304;St. Ursen;Ind_04_01;UM_11;15.72;A;15,72;1,142678304;1.14267830351025 -2016;;2305;Schmitten (FR);Ind_04_01;UM_11;13.5;A;13,5;1,05892352;1.05892352024984 -2016;;2306;Tafers;Ind_04_01;UM_11;41.35;A;41,35;1,853256224;1.85325622439271 -2016;;2307;Tentlingen;Ind_04_01;UM_11;3.61;A;3,61;0,547584708;0.547584708040368 -2016;;2308;Ueberstorf;Ind_04_01;UM_11;16.11;A;16,11;1,156765908;1.15676590801297 -2016;;2309;Wünnewil-Flamatt;Ind_04_01;UM_11;13.27;A;13,27;1,049864309;1.04986430934413 -2016;;2321;Attalens;Ind_04_01;UM_11;9.74;A;9,74;0,899450337;0.89945033715994 -2016;;2323;Bossonnens;Ind_04_01;UM_11;4.12;A;4,12;0,584987139;0.584987139432039 -2016;;2325;Châtel-Saint-Denis;Ind_04_01;UM_11;47.93;A;47,93;1,995268862;1.99526886171073 -2016;;2328;Granges (Veveyse);Ind_04_01;UM_11;4.46;A;4,46;0,608646515;0.608646515241014 -2016;;2333;Remaufens;Ind_04_01;UM_11;5.91;A;5,91;0,700634391;0.700634390760655 -2016;;2335;Saint-Martin (FR);Ind_04_01;UM_11;9.78;A;9,78;0,901295365;0.901295365431447 -2016;;2336;Semsales;Ind_04_01;UM_11;29.36;A;29,36;1,561621344;1.56162134354336 -2016;;2337;Le Flon;Ind_04_01;UM_11;9.57;A;9,57;0,891566372;0.891566371847915 -2016;;2338;La Verrerie;Ind_04_01;UM_11;13.43;A;13,43;1,056174595;1.05617459492214 -2016;;2401;Egerkingen;Ind_04_01;UM_11;6.95;A;6,95;0,759783946;0.759783945950783 -2016;;2402;Härkingen;Ind_04_01;UM_11;5.51;A;5,51;0,676508893;0.676508892924394 -2016;;2403;Kestenholz;Ind_04_01;UM_11;8.59;A;8,59;0,844684048;0.844684047735412 -2016;;2404;Neuendorf;Ind_04_01;UM_11;7.14;A;7,14;0,770099456;0.770099455588145 -2016;;2405;Niederbuchsiten;Ind_04_01;UM_11;5.49;A;5,49;0,675279993;0.67527999292164 -2016;;2406;Oberbuchsiten;Ind_04_01;UM_11;9.39;A;9,39;0,883141934;0.883141933734442 -2016;;2407;Oensingen;Ind_04_01;UM_11;12.1;A;12,1;1,002513883;1.00251388327077 -2016;;2408;Wolfwil;Ind_04_01;UM_11;6.88;A;6,88;0,755948013;0.755948012594225 -2016;;2421;Aedermannsdorf;Ind_04_01;UM_11;12.92;A;12,92;1,035926558;1.03592655827414 -2016;;2422;Balsthal;Ind_04_01;UM_11;15.71;A;15,71;1,142314798;1.14231479839416 -2016;;2424;Herbetswil;Ind_04_01;UM_11;16.3;A;16,3;1,163567313;1.16356731344331 -2016;;2425;Holderbank (SO);Ind_04_01;UM_11;7.75;A;7,75;0,802321743;0.802321742909958 -2016;;2426;Laupersdorf;Ind_04_01;UM_11;15.5;A;15,5;1,13465429;1.13465429021008 -2016;;2427;Matzendorf;Ind_04_01;UM_11;11.27;A;11,27;0,96751937;0.967519370080417 -2016;;2428;Mümliswil-Ramiswil;Ind_04_01;UM_11;35.48;A;35,48;1,716680666;1.71668066642135 -2016;;2430;Welschenrohr-Gänsbrunnen;Ind_04_01;UM_11;24.46;A;24,46;1,425364496;1.42536449585826 -2016;;2445;Biezwil;Ind_04_01;UM_11;4.15;A;4,15;0,587113084;0.587113083953328 -2016;;2455;Lüterkofen-Ichertswil;Ind_04_01;UM_11;4.43;A;4,43;0,606596044;0.60659604389307 -2016;;2456;Lüterswil-Gächliwil;Ind_04_01;UM_11;3.06;A;3,06;0,504148435;0.504148435410994 -2016;;2457;Messen;Ind_04_01;UM_11;11.89;A;11,89;0,993776306;0.993776305721007 -2016;;2461;Schnottwil;Ind_04_01;UM_11;7.17;A;7,17;0,771715616;0.771715615719589 -2016;;2463;Unterramsern;Ind_04_01;UM_11;1.58;A;1,58;0,362264897;0.362264897385217 -2016;;2464;Lüsslingen-Nennigkofen;Ind_04_01;UM_11;7.81;A;7,81;0,805421517;0.805421516500949 -2016;;2465;Buchegg;Ind_04_01;UM_11;22.59;A;22,59;1,369795786;1.36979578637673 -2016;;2471;Bättwil;Ind_04_01;UM_11;1.67;A;1,67;0,372439681;0.372439681052441 -2016;;2472;Büren (SO);Ind_04_01;UM_11;6.23;A;6,23;0,719352461;0.71935246115181 -2016;;2473;Dornach;Ind_04_01;UM_11;5.79;A;5,79;0,693484873;0.693484873175561 -2016;;2474;Gempen;Ind_04_01;UM_11;5.99;A;5,99;0,705360477;0.705360477329647 -2016;;2475;Hochwald;Ind_04_01;UM_11;8.35;A;8,35;0,832800444;0.832800444351599 -2016;;2476;Hofstetten-Flüh;Ind_04_01;UM_11;7.52;A;7,52;0,790326657;0.790326657428676 -2016;;2477;Metzerlen-Mariastein;Ind_04_01;UM_11;8.48;A;8,48;0,839258284;0.839258283836519 -2016;;2478;Nuglar-St. Pantaleon;Ind_04_01;UM_11;6.34;A;6,34;0,725675297;0.725675297137519 -2016;;2479;Rodersdorf;Ind_04_01;UM_11;5.35;A;5,35;0,666614263;0.666614262734816 -2016;;2480;Seewen;Ind_04_01;UM_11;16.31;A;16,31;1,163924181;1.16392418120617 -2016;;2481;Witterswil;Ind_04_01;UM_11;2.67;A;2,67;0,470926729;0.47092672922585 -2016;;2491;Hauenstein-Ifenthal;Ind_04_01;UM_11;5.35;A;5,35;0,666614263;0.666614262734816 -2016;;2492;Kienberg;Ind_04_01;UM_11;8.53;A;8,53;0,841728876;0.841728875827641 -2016;;2493;Lostorf;Ind_04_01;UM_11;13.25;A;13,25;1,049072855;1.04907285479565 -2016;;2495;Niedergösgen;Ind_04_01;UM_11;4.32;A;4,32;0,599017602;0.599017601541276 -2016;;2497;Obergösgen;Ind_04_01;UM_11;3.63;A;3,63;0,549099468;0.549099468079503 -2016;;2499;Stüsslingen;Ind_04_01;UM_11;8.39;A;8,39;0,834792793;0.834792792759555 -2016;;2500;Trimbach;Ind_04_01;UM_11;7.6;A;7,6;0,794519401;0.794519401213423 -2016;;2501;Winznau;Ind_04_01;UM_11;3.94;A;3,94;0,572065585;0.572065584536455 -2016;;2502;Wisen (SO);Ind_04_01;UM_11;4.79;A;4,79;0,630761921;0.630761921049782 -2016;;2503;Erlinsbach (SO);Ind_04_01;UM_11;8.87;A;8,87;0,858340333;0.858340333210677 -2016;;2511;Aeschi (SO);Ind_04_01;UM_11;5.48;A;5,48;0,674664704;0.674664703506476 -2016;;2513;Biberist;Ind_04_01;UM_11;12.25;A;12,25;1,008708673;1.00870867270594 -2016;;2514;Bolken;Ind_04_01;UM_11;2.12;A;2,12;0,419629142;0.41962914191826 -2016;;2516;Deitingen;Ind_04_01;UM_11;7.6;A;7,6;0,794519401;0.794519401213423 -2016;;2517;Derendingen;Ind_04_01;UM_11;5.62;A;5,62;0,683228334;0.68322833351395 -2016;;2518;Etziken;Ind_04_01;UM_11;3.37;A;3,37;0,529069421;0.529069420863837 -2016;;2519;Gerlafingen;Ind_04_01;UM_11;1.85;A;1,85;0,39199775;0.391997750391872 -2016;;2520;Halten;Ind_04_01;UM_11;1.85;A;1,85;0,39199775;0.391997750391872 -2016;;2523;Horriwil;Ind_04_01;UM_11;2.64;A;2,64;0,4682736;0.468273599780139 -2016;;2524;Hüniken;Ind_04_01;UM_11;1.02;A;1,02;0,291070235;0.291070234896066 -2016;;2525;Kriegstetten;Ind_04_01;UM_11;1.14;A;1,14;0,307716041;0.307716040913828 -2016;;2526;Lohn-Ammannsegg;Ind_04_01;UM_11;4.48;A;4,48;0,610009667;0.610009667038621 -2016;;2527;Luterbach;Ind_04_01;UM_11;4.52;A;4,52;0,612726873;0.612726872767667 -2016;;2528;Obergerlafingen;Ind_04_01;UM_11;1.51;A;1,51;0,354149134;0.354149133979088 -2016;;2529;Oekingen;Ind_04_01;UM_11;2.39;A;2,39;0,445550218;0.445550218473542 -2016;;2530;Recherswil;Ind_04_01;UM_11;3.36;A;3,36;0,528283868;0.528283868209532 -2016;;2532;Subingen;Ind_04_01;UM_11;6.27;A;6,27;0,721658084;0.721658083926344 -2016;;2534;Zuchwil;Ind_04_01;UM_11;4.63;A;4,63;0,620137803;0.620137802526266 -2016;;2535;Drei Höfe;Ind_04_01;UM_11;4.57;A;4,57;0,616106528;0.616106528147114 -2016;;2541;Balm bei Günsberg;Ind_04_01;UM_11;5.47;A;5,47;0,674048852;0.674048852439281 -2016;;2542;Bellach;Ind_04_01;UM_11;5.29;A;5,29;0,662865699;0.662865699206761 -2016;;2543;Bettlach;Ind_04_01;UM_11;12.19;A;12,19;1,006235333;1.00623533345613 -2016;;2544;Feldbrunnen-St. Niklaus;Ind_04_01;UM_11;2.51;A;2,51;0,456598595;0.456598595458912 -2016;;2545;Flumenthal;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;2546;Grenchen;Ind_04_01;UM_11;26.03;A;26,03;1,470397632;1.47039763167928 -2016;;2547;Günsberg;Ind_04_01;UM_11;5.26;A;5,26;0,660983445;0.660983445433061 -2016;;2548;Hubersdorf;Ind_04_01;UM_11;1.35;A;1,35;0,334861019;0.334861019191294 -2016;;2549;Kammersrohr;Ind_04_01;UM_11;0.95;A;0,95;0,280905028;0.280905028191143 -2016;;2550;Langendorf;Ind_04_01;UM_11;1.95;A;1,95;0,402452858;0.40245285828278 -2016;;2551;Lommiswil;Ind_04_01;UM_11;5.76;A;5,76;0,691685947;0.691685946998359 -2016;;2553;Oberdorf (SO);Ind_04_01;UM_11;11.91;A;11,91;0,994611763;0.994611763040248 -2016;;2554;Riedholz;Ind_04_01;UM_11;7.15;A;7,15;0,770638552;0.770638552227908 -2016;;2555;Rüttenen;Ind_04_01;UM_11;8.77;A;8,77;0,853488173;0.853488172611973 -2016;;2556;Selzach;Ind_04_01;UM_11;19.47;A;19,47;1,271688331;1.27168833105895 -2016;;2571;Boningen;Ind_04_01;UM_11;2.76;A;2,76;0,478797916;0.478797916081805 -2016;;2572;Däniken;Ind_04_01;UM_11;5.43;A;5,43;0,671579801;0.671579800726344 -2016;;2573;Dulliken;Ind_04_01;UM_11;6.04;A;6,04;0,708298268;0.708298267958176 -2016;;2574;Eppenberg-Wöschnau;Ind_04_01;UM_11;1.81;A;1,81;0,387736779;0.38773677873167 -2016;;2575;Fulenbach;Ind_04_01;UM_11;4.48;A;4,48;0,610009667;0.610009667038621 -2016;;2576;Gretzenbach;Ind_04_01;UM_11;5.83;A;5,83;0,695876207;0.695876207420832 -2016;;2578;Gunzgen;Ind_04_01;UM_11;3.93;A;3,93;0,571339152;0.571339151755126 -2016;;2579;Hägendorf;Ind_04_01;UM_11;13.94;A;13,94;1,076041689;1.07604168868133 -2016;;2580;Kappel (SO);Ind_04_01;UM_11;5.1;A;5,1;0,650852831;0.650852831454435 -2016;;2581;Olten;Ind_04_01;UM_11;11.49;A;11,49;0,97691713;0.976917129802588 -2016;;2582;Rickenbach (SO);Ind_04_01;UM_11;2.76;A;2,76;0,478797916;0.478797916081805 -2016;;2583;Schönenwerd;Ind_04_01;UM_11;3.71;A;3,71;0,555117176;0.555117176195572 -2016;;2584;Starrkirch-Wil;Ind_04_01;UM_11;1.85;A;1,85;0,39199775;0.391997750391872 -2016;;2585;Walterswil (SO);Ind_04_01;UM_11;4.48;A;4,48;0,610009667;0.610009667038621 -2016;;2586;Wangen bei Olten;Ind_04_01;UM_11;6.96;A;6,96;0,760330357;0.760330356626192 -2016;;2601;Solothurn;Ind_04_01;UM_11;6.28;A;6,28;0,72223334;0.722233339564861 -2016;;2611;Bärschwil;Ind_04_01;UM_11;11.19;A;11,19;0,96407929;0.964079290317271 -2016;;2612;Beinwil (SO);Ind_04_01;UM_11;22.66;A;22,66;1,371916449;1.37191644904303 -2016;;2613;Breitenbach;Ind_04_01;UM_11;6.8;A;6,8;0,751540115;0.751540114886096 -2016;;2614;Büsserach;Ind_04_01;UM_11;7.55;A;7,55;0,791901538;0.791901537749922 -2016;;2615;Erschwil;Ind_04_01;UM_11;7.43;A;7,43;0,785583073;0.785583073454018 -2016;;2616;Fehren;Ind_04_01;UM_11;1.48;A;1,48;0,350613447;0.350613446761288 -2016;;2617;Grindel;Ind_04_01;UM_11;3.08;A;3,08;0,505793296;0.505793296014183 -2016;;2618;Himmelried;Ind_04_01;UM_11;6.03;A;6,03;0,707711685;0.70771168544103 -2016;;2619;Kleinlützel;Ind_04_01;UM_11;16.32;A;16,32;1,16428094;1.16428093958426 -2016;;2620;Meltingen;Ind_04_01;UM_11;5.76;A;5,76;0,691685947;0.691685946998359 -2016;;2621;Nunningen;Ind_04_01;UM_11;10.31;A;10,31;0,925394775;0.925394775182446 -2016;;2622;Zullwil;Ind_04_01;UM_11;3.66;A;3,66;0,551363805;0.551363805389418 -2016;;2701;Basel;Ind_04_01;UM_11;23.85;A;23,85;1,40747893;1.4074789300037 -2016;;2702;Bettingen;Ind_04_01;UM_11;2.23;A;2,23;0,430378078;0.430378078272483 -2016;;2703;Riehen;Ind_04_01;UM_11;10.87;A;10,87;0,950194435;0.950194434929 -2016;;2761;Aesch (BL);Ind_04_01;UM_11;7.4;A;7,4;0,783995501;0.783995500783744 -2016;;2762;Allschwil;Ind_04_01;UM_11;8.89;A;8,89;0,859307478;0.859307477554894 -2016;;2763;Arlesheim;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;2764;Biel-Benken;Ind_04_01;UM_11;4.12;A;4,12;0,584987139;0.584987139432039 -2016;;2765;Binningen;Ind_04_01;UM_11;4.46;A;4,46;0,608646515;0.608646515241014 -2016;;2766;Birsfelden;Ind_04_01;UM_11;2.52;A;2,52;0,45750725;0.457507250278965 -2016;;2767;Bottmingen;Ind_04_01;UM_11;2.99;A;2,99;0,498348671;0.498348671261366 -2016;;2768;Ettingen;Ind_04_01;UM_11;6.32;A;6,32;0,724529795;0.724529794770435 -2016;;2769;Münchenstein;Ind_04_01;UM_11;7.19;A;7,19;0,772791178;0.772791178075295 -2016;;2770;Muttenz;Ind_04_01;UM_11;16.66;A;16,66;1,176346349;1.17634634929232 -2016;;2771;Oberwil (BL);Ind_04_01;UM_11;7.89;A;7,89;0,809536085;0.809536084868884 -2016;;2772;Pfeffingen;Ind_04_01;UM_11;4.89;A;4,89;0,637312065;0.637312064748584 -2016;;2773;Reinach (BL);Ind_04_01;UM_11;6.97;A;6,97;0,760876375;0.76087637490599 -2016;;2774;Schönenbuch;Ind_04_01;UM_11;1.35;A;1,35;0,334861019;0.334861019191294 -2016;;2775;Therwil;Ind_04_01;UM_11;7.66;A;7,66;0,797649496;0.797649496333541 -2016;;2781;Blauen;Ind_04_01;UM_11;7.12;A;7,12;0,769020129;0.769020128560767 -2016;;2782;Brislach;Ind_04_01;UM_11;9.42;A;9,42;0,884551579;0.884551578580083 -2016;;2783;Burg im Leimental;Ind_04_01;UM_11;2.84;A;2,84;0,485687449;0.485687448784125 -2016;;2784;Dittingen;Ind_04_01;UM_11;6.75;A;6,75;0,748772002;0.748772001926595 -2016;;2785;Duggingen;Ind_04_01;UM_11;5.86;A;5,86;0,697664329;0.697664329102978 -2016;;2786;Grellingen;Ind_04_01;UM_11;3.29;A;3,29;0,522751948;0.522751947515304 -2016;;2787;Laufen;Ind_04_01;UM_11;11.4;A;11,4;0,973083562;0.973083561857256 -2016;;2788;Liesberg;Ind_04_01;UM_11;12.46;A;12,46;1,017318007;1.01731800668735 -2016;;2789;Nenzlingen;Ind_04_01;UM_11;3.66;A;3,66;0,551363805;0.551363805389418 -2016;;2790;Roggenburg;Ind_04_01;UM_11;6.66;A;6,66;0,743763437;0.743763437340287 -2016;;2791;Röschenz;Ind_04_01;UM_11;10.07;A;10,07;0,914560512;0.914560511693191 -2016;;2792;Wahlen;Ind_04_01;UM_11;5.41;A;5,41;0,670341865;0.670341864557255 -2016;;2793;Zwingen;Ind_04_01;UM_11;4.61;A;4,61;0,618796962;0.618796962465531 -2016;;2821;Arisdorf;Ind_04_01;UM_11;10;A;10;0,911376258;0.911376257518884 -2016;;2822;Augst;Ind_04_01;UM_11;1.65;A;1,65;0,370202786;0.37020278585784 -2016;;2823;Bubendorf;Ind_04_01;UM_11;10.8;A;10,8;0,94712999;0.94712998970081 -2016;;2824;Frenkendorf;Ind_04_01;UM_11;4.59;A;4,59;0,617453211;0.617453210689708 -2016;;2825;Füllinsdorf;Ind_04_01;UM_11;4.62;A;4,62;0,619467745;0.619467745277619 -2016;;2826;Giebenach;Ind_04_01;UM_11;1.34;A;1,34;0,333618488;0.333618487933542 -2016;;2827;Hersberg;Ind_04_01;UM_11;1.66;A;1,66;0,371322918;0.371322917875634 -2016;;2828;Lausen;Ind_04_01;UM_11;5.57;A;5,57;0,680182271;0.68018227138202 -2016;;2829;Liestal;Ind_04_01;UM_11;18.18;A;18,18;1,228838048;1.22883804843204 -2016;;2830;Lupsingen;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;2831;Pratteln;Ind_04_01;UM_11;10.7;A;10,7;0,942734931;0.942734931230919 -2016;;2832;Ramlinsburg;Ind_04_01;UM_11;2.25;A;2,25;0,432303717;0.432303716873975 -2016;;2833;Seltisberg;Ind_04_01;UM_11;3.56;A;3,56;0,543779348;0.543779347774269 -2016;;2834;Ziefen;Ind_04_01;UM_11;7.82;A;7,82;0,805936986;0.805936986324276 -2016;;2841;Anwil;Ind_04_01;UM_11;3.95;A;3,95;0,572791096;0.572791096032232 -2016;;2842;Böckten;Ind_04_01;UM_11;2.28;A;2,28;0,435176198;0.435176198420089 -2016;;2843;Buckten;Ind_04_01;UM_11;2;A;2;0,407579853;0.407579852978316 -2016;;2844;Buus;Ind_04_01;UM_11;8.85;A;8,85;0,857372098;0.857372097896052 -2016;;2845;Diepflingen;Ind_04_01;UM_11;1.44;A;1,44;0,345842973;0.34584297349918 -2016;;2846;Gelterkinden;Ind_04_01;UM_11;9.78;A;9,78;0,901295365;0.901295365431447 -2016;;2847;Häfelfingen;Ind_04_01;UM_11;3.97;A;3,97;0,574239369;0.574239369130455 -2016;;2848;Hemmiken;Ind_04_01;UM_11;3.39;A;3,39;0,530637037;0.530637037398196 -2016;;2849;Itingen;Ind_04_01;UM_11;3.13;A;3,13;0,509882233;0.509882233174227 -2016;;2850;Känerkinden;Ind_04_01;UM_11;1.48;A;1,48;0,350613447;0.350613446761288 -2016;;2851;Kilchberg (BL);Ind_04_01;UM_11;1.59;A;1,59;0,363409497;0.363409497069478 -2016;;2852;Läufelfingen;Ind_04_01;UM_11;8.16;A;8,16;0,823270948;0.823270947586278 -2016;;2853;Maisprach;Ind_04_01;UM_11;5.08;A;5,08;0,649575396;0.649575395813847 -2016;;2854;Nusshof;Ind_04_01;UM_11;1.72;A;1,72;0,377974006;0.377974006297113 -2016;;2855;Oltingen;Ind_04_01;UM_11;7.18;A;7,18;0,772253584;0.772253584147224 -2016;;2856;Ormalingen;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;2857;Rickenbach (BL);Ind_04_01;UM_11;2.9;A;2,9;0,490791135;0.490791134804865 -2016;;2858;Rothenfluh;Ind_04_01;UM_11;10.95;A;10,95;0,953684601;0.95368460071042 -2016;;2859;Rümlingen;Ind_04_01;UM_11;2.28;A;2,28;0,435176198;0.435176198420089 -2016;;2860;Rünenberg;Ind_04_01;UM_11;4.97;A;4,97;0,642504102;0.642504102194107 -2016;;2861;Sissach;Ind_04_01;UM_11;8.9;A;8,9;0,859790642;0.859790641763751 -2016;;2862;Tecknau;Ind_04_01;UM_11;2.34;A;2,34;0,440865018;0.440865017627817 -2016;;2863;Tenniken;Ind_04_01;UM_11;4.67;A;4,67;0,622810823;0.622810822684691 -2016;;2864;Thürnen;Ind_04_01;UM_11;2.26;A;2,26;0,433263327;0.433263326749245 -2016;;2865;Wenslingen;Ind_04_01;UM_11;5.92;A;5,92;0,701226894;0.701226893522577 -2016;;2866;Wintersingen;Ind_04_01;UM_11;6.95;A;6,95;0,759783946;0.759783945950783 -2016;;2867;Wittinsburg;Ind_04_01;UM_11;3.2;A;3,2;0,515552266;0.515552265523216 -2016;;2868;Zeglingen;Ind_04_01;UM_11;7.91;A;7,91;0,810561463;0.810561463474781 -2016;;2869;Zunzgen;Ind_04_01;UM_11;6.86;A;6,86;0,754848451;0.754848451266624 -2016;;2881;Arboldswil;Ind_04_01;UM_11;3.47;A;3,47;0,536861732;0.536861731659919 -2016;;2882;Bennwil;Ind_04_01;UM_11;6.53;A;6,53;0,736468712;0.736468712063343 -2016;;2883;Bretzwil;Ind_04_01;UM_11;7.33;A;7,33;0,780278603;0.780278603109024 -2016;;2884;Diegten;Ind_04_01;UM_11;9.64;A;9,64;0,894821123;0.894821123012548 -2016;;2885;Eptingen;Ind_04_01;UM_11;11.18;A;11,18;0,963648417;0.96364841686991 -2016;;2886;Hölstein;Ind_04_01;UM_11;6.03;A;6,03;0,707711685;0.70771168544103 -2016;;2887;Lampenberg;Ind_04_01;UM_11;4.01;A;4,01;0,577125012;0.577125012272402 -2016;;2888;Langenbruck;Ind_04_01;UM_11;15.66;A;15,66;1,140495535;1.14049553493929 -2016;;2889;Lauwil;Ind_04_01;UM_11;7.3;A;7,3;0,778680216;0.778680215763482 -2016;;2890;Liedertswil;Ind_04_01;UM_11;1.95;A;1,95;0,402452858;0.40245285828278 -2016;;2891;Niederdorf;Ind_04_01;UM_11;4.4;A;4,4;0,604538618;0.604538617805691 -2016;;2892;Oberdorf (BL);Ind_04_01;UM_11;6.21;A;6,21;0,718196874;0.718196874122707 -2016;;2893;Reigoldswil;Ind_04_01;UM_11;9.25;A;9,25;0,876533617;0.876533616903221 -2016;;2894;Titterten;Ind_04_01;UM_11;3.71;A;3,71;0,555117176;0.555117176195572 -2016;;2895;Waldenburg;Ind_04_01;UM_11;8.32;A;8,32;0,831303049;0.831303049473484 -2016;;2901;Gächlingen;Ind_04_01;UM_11;7.13;A;7,13;0,769559981;0.769559981297356 -2016;;2903;Löhningen;Ind_04_01;UM_11;6.83;A;6,83;0,7531961;0.75319609951945 -2016;;2904;Neunkirch;Ind_04_01;UM_11;17.92;A;17,92;1,220019334;1.22001933407724 -2016;;2914;Büttenhardt;Ind_04_01;UM_11;4;A;4;0,576404956;0.576404955831966 -2016;;2915;Dörflingen;Ind_04_01;UM_11;5.82;A;5,82;0,695279145;0.695279144927871 -2016;;2917;Lohn (SH);Ind_04_01;UM_11;4.87;A;4,87;0,636007433;0.63600743274632 -2016;;2919;Stetten (SH);Ind_04_01;UM_11;4.72;A;4,72;0,626136051;0.62613605092426 -2016;;2920;Thayngen;Ind_04_01;UM_11;19.92;A;19,92;1,28630032;1.28630031955065 -2016;;2931;Bargen (SH);Ind_04_01;UM_11;8.27;A;8,27;0,828801379;0.828801379493343 -2016;;2932;Beringen;Ind_04_01;UM_11;18.68;A;18,68;1,245621645;1.24562164536938 -2016;;2933;Buchberg;Ind_04_01;UM_11;5.86;A;5,86;0,697664329;0.697664329102978 -2016;;2936;Merishausen;Ind_04_01;UM_11;17.57;A;17,57;1,208046333;1.20804633256567 -2016;;2937;Neuhausen am Rheinfall;Ind_04_01;UM_11;8;A;8;0,815159706;0.815159705956631 -2016;;2938;Rüdlingen;Ind_04_01;UM_11;5.52;A;5,52;0,677122507;0.677122506558863 -2016;;2939;Schaffhausen;Ind_04_01;UM_11;41.84;A;41,84;1,864204485;1.86420448468134 -2016;;2951;Beggingen;Ind_04_01;UM_11;12.58;A;12,58;1,022205071;1.02220507087549 -2016;;2952;Schleitheim;Ind_04_01;UM_11;21.63;A;21,63;1,340373924;1.3403739235115 -2016;;2953;Siblingen;Ind_04_01;UM_11;9.42;A;9,42;0,884551579;0.884551578580083 -2016;;2961;Buch (SH);Ind_04_01;UM_11;3.8;A;3,8;0,561810056;0.561810056382287 -2016;;2962;Hemishofen;Ind_04_01;UM_11;7.9;A;7,9;0,810048936;0.810048936415332 -2016;;2963;Ramsen;Ind_04_01;UM_11;13.49;A;13,49;1,058531254;1.05853125369804 -2016;;2964;Stein am Rhein;Ind_04_01;UM_11;5.78;A;5,78;0,69288575;0.692885750063137 -2016;;2971;Hallau;Ind_04_01;UM_11;15.32;A;15,32;1,128046736;1.12804673573496 -2016;;2972;Oberhallau;Ind_04_01;UM_11;6.05;A;6,05;0,708884365;0.708884365094422 -2016;;2973;Trasadingen;Ind_04_01;UM_11;4.14;A;4,14;0,586405292;0.586405292154171 -2016;;2974;Wilchingen;Ind_04_01;UM_11;21.1;A;21,1;1,323850483;1.32385048273695 -2016;;3001;Herisau;Ind_04_01;UM_11;25.2;A;25,2;1,446764957;1.44676495692224 -2016;;3002;Hundwil;Ind_04_01;UM_11;24.08;A;24,08;1,414249233;1.41424923267013 -2016;;3003;Schönengrund;Ind_04_01;UM_11;5.19;A;5,19;0,656570536;0.656570535705934 -2016;;3004;Schwellbrunn;Ind_04_01;UM_11;17.42;A;17,42;1,202878565;1.20287856468715 -2016;;3005;Stein (AR);Ind_04_01;UM_11;9.36;A;9,36;0,881730035;0.881730035255635 -2016;;3006;Urnäsch;Ind_04_01;UM_11;48.16;A;48,16;2,000050445;2.00005044541784 -2016;;3007;Waldstatt;Ind_04_01;UM_11;6.75;A;6,75;0,748772002;0.748772001926595 -2016;;3021;Bühler;Ind_04_01;UM_11;5.6;A;5,6;0,682011541;0.682011541215184 -2016;;3022;Gais;Ind_04_01;UM_11;21.21;A;21,21;1,327296792;1.32729679203761 -2016;;3023;Speicher;Ind_04_01;UM_11;8.18;A;8,18;0,824279241;0.824279240612758 -2016;;3024;Teufen (AR);Ind_04_01;UM_11;15.25;A;15,25;1,125466655;1.1254666548694 -2016;;3025;Trogen;Ind_04_01;UM_11;10.03;A;10,03;0,912742298;0.912742298141942 -2016;;3031;Grub (AR);Ind_04_01;UM_11;4.21;A;4,21;0,591342044;0.591342044375167 -2016;;3032;Heiden;Ind_04_01;UM_11;7.48;A;7,48;0,788221922;0.78822192224735 -2016;;3033;Lutzenberg;Ind_04_01;UM_11;2.25;A;2,25;0,432303717;0.432303716873975 -2016;;3034;Rehetobel;Ind_04_01;UM_11;6.72;A;6,72;0,747106211;0.747106211204841 -2016;;3035;Reute (AR);Ind_04_01;UM_11;4.99;A;4,99;0,643795569;0.643795569029327 -2016;;3036;Wald (AR);Ind_04_01;UM_11;6.83;A;6,83;0,7531961;0.75319609951945 -2016;;3037;Walzenhausen;Ind_04_01;UM_11;7;A;7;0,762512084;0.762512083798276 -2016;;3038;Wolfhalden;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;3101;Appenzell;Ind_04_01;UM_11;16.88;A;16,88;1,184087869;1.18408786857829 -2016;;3102;Gonten;Ind_04_01;UM_11;24.73;A;24,73;1,433209798;1.43320979849011 -2016;;3103;Rüte;Ind_04_01;UM_11;40.82;A;40,82;1,841340946;1.84134094590425 -2016;;3104;Schlatt-Haslen;Ind_04_01;UM_11;17.93;A;17,93;1,220359694;1.22035969378091 -2016;;3105;Schwende;Ind_04_01;UM_11;57.51;A;57,51;2,18559352;2.18559351952856 -2016;;3111;Oberegg;Ind_04_01;UM_11;14.61;A;14,61;1,101597188;1.10159718750807 -2016;;3201;Häggenschwil;Ind_04_01;UM_11;9.07;A;9,07;0,867963283;0.867963283366064 -2016;;3202;Muolen;Ind_04_01;UM_11;10.33;A;10,33;0,92629191;0.926291910415128 -2016;;3203;St. Gallen;Ind_04_01;UM_11;39.38;A;39,38;1,808571015;1.80857101512349 -2016;;3204;Wittenbach;Ind_04_01;UM_11;12.2;A;12,2;1,006647979;1.00664797867891 -2016;;3211;Berg (SG);Ind_04_01;UM_11;3.76;A;3,76;0,558845339;0.558845338820314 -2016;;3212;Eggersriet;Ind_04_01;UM_11;8.9;A;8,9;0,859790642;0.859790641763751 -2016;;3213;Goldach;Ind_04_01;UM_11;4.71;A;4,71;0,62547242;0.625472419523242 -2016;;3214;Mörschwil;Ind_04_01;UM_11;9.84;A;9,84;0,904055848;0.904055847746598 -2016;;3215;Rorschach;Ind_04_01;UM_11;1.78;A;1,78;0,384510064;0.384510064280383 -2016;;3216;Rorschacherberg;Ind_04_01;UM_11;7.09;A;7,09;0,767398292;0.767398291686469 -2016;;3217;Steinach;Ind_04_01;UM_11;4.49;A;4,49;0,610690102;0.610690101903853 -2016;;3218;Tübach;Ind_04_01;UM_11;1.99;A;1,99;0,406559626;0.406559626464626 -2016;;3219;Untereggen;Ind_04_01;UM_11;7.14;A;7,14;0,770099456;0.770099455588145 -2016;;3231;Au (SG);Ind_04_01;UM_11;4.65;A;4,65;0,62147575;0.621475749718076 -2016;;3232;Balgach;Ind_04_01;UM_11;6.52;A;6,52;0,735904584;0.735904584280782 -2016;;3233;Berneck;Ind_04_01;UM_11;5.62;A;5,62;0,683228334;0.68322833351395 -2016;;3234;Diepoldsau;Ind_04_01;UM_11;11.25;A;11,25;0,966660498;0.96666049785603 -2016;;3235;Rheineck;Ind_04_01;UM_11;2.2;A;2,2;0,427473356;0.427473356139547 -2016;;3236;St. Margrethen;Ind_04_01;UM_11;6.87;A;6,87;0,755398432;0.755398431996248 -2016;;3237;Thal;Ind_04_01;UM_11;9.65;A;9,65;0,895285122;0.895285121551904 -2016;;3238;Widnau;Ind_04_01;UM_11;4.22;A;4,22;0,592043934;0.592043934289147 -2016;;3251;Altstätten;Ind_04_01;UM_11;39.46;A;39,46;1,810407128;1.81040712830208 -2016;;3252;Eichberg;Ind_04_01;UM_11;5.44;A;5,44;0,672197914;0.672197913881325 -2016;;3253;Marbach (SG);Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;3254;Oberriet (SG);Ind_04_01;UM_11;34.6;A;34,6;1,695257834;1.69525783359971 -2016;;3255;Rebstein;Ind_04_01;UM_11;4.39;A;4,39;0,603851251;0.603851251332351 -2016;;3256;Rüthi (SG);Ind_04_01;UM_11;9.33;A;9,33;0,880315872;0.880315872300162 -2016;;3271;Buchs (SG);Ind_04_01;UM_11;15.95;A;15,95;1,151007237;1.15100723673518 -2016;;3272;Gams;Ind_04_01;UM_11;22.27;A;22,27;1,36005922;1.36005922022787 -2016;;3273;Grabs;Ind_04_01;UM_11;54.65;A;54,65;2,130555214;2.13055521433576 -2016;;3274;Sennwald;Ind_04_01;UM_11;41.56;A;41,56;1,857956236;1.8579562356494 -2016;;3275;Sevelen;Ind_04_01;UM_11;30.33;A;30,33;1,587208263;1.58720826259151 -2016;;3276;Wartau;Ind_04_01;UM_11;41.75;A;41,75;1,862198405;1.86219840526221 -2016;;3291;Bad Ragaz;Ind_04_01;UM_11;25.4;A;25,4;1,452494742;1.45249474155109 -2016;;3292;Flums;Ind_04_01;UM_11;75.15;A;75,15;2,498401333;2.4984013330548 -2016;;3293;Mels;Ind_04_01;UM_11;139.11;A;139,11;3,399201313;3.39920131266174 -2016;;3294;Pfäfers;Ind_04_01;UM_11;128.46;A;128,46;3,26649253;3.26649252974076 -2016;;3295;Quarten;Ind_04_01;UM_11;61.77;A;61,77;2,265095468;2.2650954680686 -2016;;3296;Sargans;Ind_04_01;UM_11;9.46;A;9,46;0,886427618;0.886427617969789 -2016;;3297;Vilters-Wangs;Ind_04_01;UM_11;32.72;A;32,72;1,648558481;1.64855848122552 -2016;;3298;Walenstadt;Ind_04_01;UM_11;45.72;A;45,72;1,948726187;1.94872618744154 -2016;;3311;Amden;Ind_04_01;UM_11;43.04;A;43,04;1,890748836;1.89074883647679 -2016;;3312;Benken (SG);Ind_04_01;UM_11;16.5;A;16,5;1,170683999;1.17068399945035 -2016;;3313;Kaltbrunn;Ind_04_01;UM_11;18.64;A;18,64;1,244287289;1.24428728864425 -2016;;3315;Schänis;Ind_04_01;UM_11;39.9;A;39,9;1,820472649;1.82047264858575 -2016;;3316;Weesen;Ind_04_01;UM_11;5.4;A;5,4;0,669722038;0.669722038382588 -2016;;3338;Schmerikon;Ind_04_01;UM_11;4.15;A;4,15;0,587113084;0.587113083953328 -2016;;3339;Uznach;Ind_04_01;UM_11;7.54;A;7,54;0,791376926;0.791376925875351 -2016;;3340;Rapperswil-Jona;Ind_04_01;UM_11;22.26;A;22,26;1,359753829;1.35975382913382 -2016;;3341;Gommiswald;Ind_04_01;UM_11;33.59;A;33,59;1,670331658;1.67033165791154 -2016;;3342;Eschenbach (SG);Ind_04_01;UM_11;54.89;A;54,89;2,135228344;2.13522834416363 -2016;;3352;Ebnat-Kappel;Ind_04_01;UM_11;43.55;A;43,55;1,901918007;1.90191800650279 -2016;;3359;Wildhaus-Alt St. Johann;Ind_04_01;UM_11;87.53;A;87,53;2,696349438;2.696349438459 -2016;;3360;Nesslau;Ind_04_01;UM_11;92.7;A;92,7;2,774837644;2.77483764376761 -2016;;3372;Hemberg;Ind_04_01;UM_11;20.19;A;20,19;1,294988375;1.29498837543465 -2016;;3374;Lichtensteig;Ind_04_01;UM_11;2.82;A;2,82;0,48397426;0.483974260204914 -2016;;3375;Oberhelfenschwil;Ind_04_01;UM_11;12.65;A;12,65;1,025045098;1.02504509837516 -2016;;3378;Neckertal;Ind_04_01;UM_11;49;A;49;2,017417345;2.01741734541188 -2016;;3379;Wattwil;Ind_04_01;UM_11;51.18;A;51,18;2,061806248;2.06180624754422 -2016;;3392;Kirchberg (SG);Ind_04_01;UM_11;42.54;A;42,54;1,879734244;1.87973424411534 -2016;;3393;Lütisburg;Ind_04_01;UM_11;14.1;A;14,1;1,082199345;1.08219934517836 -2016;;3394;Mosnang;Ind_04_01;UM_11;50.51;A;50,51;2,048266183;2.0482661825717 -2016;;3395;Bütschwil-Ganterschwil;Ind_04_01;UM_11;21.83;A;21,83;1,346556493;1.34655649286801 -2016;;3401;Degersheim;Ind_04_01;UM_11;14.48;A;14,48;1,096685222;1.09668522222637 -2016;;3402;Flawil;Ind_04_01;UM_11;11.47;A;11,47;0,976066527;0.976066527003251 -2016;;3405;Jonschwil;Ind_04_01;UM_11;10.99;A;10,99;0,955424903;0.955424902524144 -2016;;3407;Oberuzwil;Ind_04_01;UM_11;14.08;A;14,08;1,081431556;1.08143155554983 -2016;;3408;Uzwil;Ind_04_01;UM_11;14.49;A;14,49;1,097063847;1.09706384651599 -2016;;3422;Niederbüren;Ind_04_01;UM_11;15.84;A;15,84;1,147031379;1.1470313794776 -2016;;3423;Niederhelfenschwil;Ind_04_01;UM_11;16.37;A;16,37;1,166063094;1.1660630942162 -2016;;3424;Oberbüren;Ind_04_01;UM_11;17.73;A;17,73;1,213534362;1.21353436232752 -2016;;3426;Zuzwil (SG);Ind_04_01;UM_11;8.97;A;8,97;0,863165219;0.863165218509126 -2016;;3427;Wil (SG);Ind_04_01;UM_11;20.82;A;20,82;1,315037305;1.31503730499379 -2016;;3441;Andwil (SG);Ind_04_01;UM_11;6.31;A;6,31;0,723956364;0.723956363897244 -2016;;3442;Gaiserwald;Ind_04_01;UM_11;12.63;A;12,63;1,024234466;1.02423446550944 -2016;;3443;Gossau (SG);Ind_04_01;UM_11;27.51;A;27,51;1,51162131;1.51162130981866 -2016;;3444;Waldkirch;Ind_04_01;UM_11;31.34;A;31,34;1,613419147;1.6134191469666 -2016;;3506;Vaz/Obervaz;Ind_04_01;UM_11;42.51;A;42,51;1,879071315;1.87907131542461 -2016;;3513;Lantsch/Lenz;Ind_04_01;UM_11;21.81;A;21,81;1,345939514;1.34593951391564 -2016;;3514;Schmitten (GR);Ind_04_01;UM_11;11.35;A;11,35;0,970947262;0.970947261669221 -2016;;3542;Albula/Alvra;Ind_04_01;UM_11;93.93;A;93,93;2,793186097;2.79318609678095 -2016;;3543;Surses;Ind_04_01;UM_11;323.77;A;323,77;5,185802982;5.18580298198997 -2016;;3544;Bergün Filisur;Ind_04_01;UM_11;190.14;A;190,14;3,974060325;3.97406032492867 -2016;;3551;Brusio;Ind_04_01;UM_11;46.3;A;46,3;1,961047919;1.96104791915472 -2016;;3561;Poschiavo;Ind_04_01;UM_11;191.01;A;191,01;3,983141756;3.98314175589736 -2016;;3572;Falera;Ind_04_01;UM_11;22.36;A;22,36;1,36280466;1.36280466049679 -2016;;3575;Laax;Ind_04_01;UM_11;31.71;A;31,71;1,622915214;1.62291521376223 -2016;;3581;Sagogn;Ind_04_01;UM_11;6.92;A;6,92;0,758142351;0.758142351063595 -2016;;3582;Schluein;Ind_04_01;UM_11;4.79;A;4,79;0,630761921;0.630761921049782 -2016;;3603;Vals;Ind_04_01;UM_11;175.56;A;175,56;3,818655643;3.81865564337697 -2016;;3618;Lumnezia;Ind_04_01;UM_11;165.48;A;165,48;3,707408716;3.70740871586389 -2016;;3619;Ilanz/Glion;Ind_04_01;UM_11;133.48;A;133,48;3,329705393;3.32970539261393 -2016;;3633;Fürstenau;Ind_04_01;UM_11;1.32;A;1,32;0,331119438;0.331119437855171 -2016;;3637;Rothenbrunnen;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;3638;Scharans;Ind_04_01;UM_11;14.29;A;14,29;1,08946636;1.08946636004839 -2016;;3640;Sils im Domleschg;Ind_04_01;UM_11;9.28;A;9,28;0,877953872;0.877953872142352 -2016;;3661;Cazis;Ind_04_01;UM_11;31.18;A;31,18;1,609295385;1.60929538521495 -2016;;3662;Flerden;Ind_04_01;UM_11;6.09;A;6,09;0,711223924;0.711223923814714 -2016;;3663;Masein;Ind_04_01;UM_11;4.2;A;4,2;0,59063932;0.590639320366527 -2016;;3668;Thusis;Ind_04_01;UM_11;16.77;A;16,77;1,180223456;1.18022345638605 -2016;;3669;Tschappina;Ind_04_01;UM_11;24.67;A;24,67;1,431470114;1.43147011369132 -2016;;3670;Urmein;Ind_04_01;UM_11;4.33;A;4,33;0,599710508;0.599710508194605 -2016;;3672;Safiental;Ind_04_01;UM_11;151.42;A;151,42;3,546413173;3.54641317255761 -2016;;3673;Domleschg;Ind_04_01;UM_11;45.94;A;45,94;1,953409097;1.95340909710213 -2016;;3681;Avers;Ind_04_01;UM_11;93.12;A;93,12;2,78111658;2.78111657971148 -2016;;3695;Sufers;Ind_04_01;UM_11;34.62;A;34,62;1,695747722;1.6957477217283 -2016;;3701;Andeer;Ind_04_01;UM_11;46.3;A;46,3;1,961047919;1.96104791915472 -2016;;3711;Rongellen;Ind_04_01;UM_11;2.02;A;2,02;0,409612683;0.409612682810681 -2016;;3712;Zillis-Reischen;Ind_04_01;UM_11;24.47;A;24,47;1,425655832;1.42565583249817 -2016;;3713;Ferrera;Ind_04_01;UM_11;75.46;A;75,46;2,503549086;2.50354908643227 -2016;;3714;Rheinwald;Ind_04_01;UM_11;136.82;A;136,82;3,371106737;3.37110673720771 -2016;;3715;Muntogna da Schons;Ind_04_01;UM_11;53.59;A;53,59;2,109791746;2.10979174634838 -2016;;3721;Bonaduz;Ind_04_01;UM_11;14.4;A;14,4;1,093651509;1.09365150902266 -2016;;3722;Domat/Ems;Ind_04_01;UM_11;24.22;A;24,22;1,418354464;1.41835446404163 -2016;;3723;Rhäzüns;Ind_04_01;UM_11;13.37;A;13,37;1,053812666;1.05381266592423 -2016;;3731;Felsberg;Ind_04_01;UM_11;13.4;A;13,4;1,054994291;1.05499429141139 -2016;;3732;Flims;Ind_04_01;UM_11;50.5;A;50,5;2,048063414;2.0480634140534 -2016;;3733;Tamins;Ind_04_01;UM_11;40.74;A;40,74;1,839535709;1.83953570924878 -2016;;3734;Trin;Ind_04_01;UM_11;47.17;A;47,17;1,979386704;1.97938670365898 -2016;;3746;Zernez;Ind_04_01;UM_11;344.04;A;344,04;5,345670427;5.3456704269894 -2016;;3752;Samnaun;Ind_04_01;UM_11;56.28;A;56,28;2,162094912;2.1620949124922 -2016;;3762;Scuol;Ind_04_01;UM_11;438.63;A;438,63;6,035967273;6.03596727346183 -2016;;3764;Valsot;Ind_04_01;UM_11;158.96;A;158,96;3,633637823;3.63363782307731 -2016;;3781;Bever;Ind_04_01;UM_11;45.75;A;45,75;1,949365428;1.94936542845839 -2016;;3782;Celerina/Schlarigna;Ind_04_01;UM_11;24.02;A;24,02;1,412486195;1.41248619533482 -2016;;3783;Madulain;Ind_04_01;UM_11;16.28;A;16,28;1,162853249;1.16285324936044 -2016;;3784;Pontresina;Ind_04_01;UM_11;118.2;A;118,2;3,13333225;3.13333225022995 -2016;;3785;La Punt Chamues-ch;Ind_04_01;UM_11;63.28;A;63,28;2,29261403;2.29261402956604 -2016;;3786;Samedan;Ind_04_01;UM_11;113.8;A;113,8;3,074459961;3.07445996069434 -2016;;3787;St. Moritz;Ind_04_01;UM_11;28.69;A;28,69;1,543700286;1.54370028595729 -2016;;3788;S-chanf;Ind_04_01;UM_11;138.04;A;138,04;3,386103166;3.3861031657268 -2016;;3789;Sils im Engadin/Segl;Ind_04_01;UM_11;63.58;A;63,58;2,298042056;2.29804205554339 -2016;;3790;Silvaplana;Ind_04_01;UM_11;44.77;A;44,77;1,928373957;1.92837395718709 -2016;;3791;Zuoz;Ind_04_01;UM_11;65.79;A;65,79;2,337640128;2.33764012755131 -2016;;3792;Bregaglia;Ind_04_01;UM_11;251.45;A;251,45;4,570077137;4.57007713701089 -2016;;3804;Buseno;Ind_04_01;UM_11;11.15;A;11,15;0,962354639;0.962354639042997 -2016;;3805;Castaneda;Ind_04_01;UM_11;3.96;A;3,96;0,57351569;0.573515689738802 -2016;;3808;Rossa;Ind_04_01;UM_11;58.89;A;58,89;2,211660633;2.21166063283393 -2016;;3810;Santa Maria in Calanca;Ind_04_01;UM_11;9.31;A;9,31;0,879371834;0.879371833559648 -2016;;3821;Lostallo;Ind_04_01;UM_11;50.86;A;50,86;2,055350478;2.0553504782795 -2016;;3822;Mesocco;Ind_04_01;UM_11;164.77;A;164,77;3,699446758;3.69944675755536 -2016;;3823;Soazza;Ind_04_01;UM_11;46.42;A;46,42;1,963587589;1.96358758944293 -2016;;3831;Cama;Ind_04_01;UM_11;15;A;15;1,116203397;1.11620339730431 -2016;;3832;Grono;Ind_04_01;UM_11;37.13;A;37,13;1,756144246;1.75614424610331 -2016;;3834;Roveredo (GR);Ind_04_01;UM_11;38.79;A;38,79;1,794971677;1.79497167734241 -2016;;3835;San Vittore;Ind_04_01;UM_11;22.06;A;22,06;1,353631539;1.35363153856162 -2016;;3837;Calanca;Ind_04_01;UM_11;37.72;A;37,72;1,770041922;1.77004192249934 -2016;;3847;Val Müstair;Ind_04_01;UM_11;198.64;A;198,64;4,061917176;4.06191717622675 -2016;;3851;Davos;Ind_04_01;UM_11;284;A;284;4,856874488;4.85687448784125 -2016;;3861;Fideris;Ind_04_01;UM_11;25.36;A;25,36;1,451350594;1.45135059427504 -2016;;3862;Furna;Ind_04_01;UM_11;33.32;A;33,32;1,663604961;1.66360496121727 -2016;;3863;Jenaz;Ind_04_01;UM_11;25.91;A;25,91;1,467004402;1.46700440185257 -2016;;3871;Klosters;Ind_04_01;UM_11;219.8;A;219,8;4,272790059;4.27279005888019 -2016;;3881;Conters im Prättigau;Ind_04_01;UM_11;18.4;A;18,4;1,236250903;1.23625090345576 -2016;;3882;Küblis;Ind_04_01;UM_11;8.14;A;8,14;0,822261418;0.82226141814758 -2016;;3891;Luzein;Ind_04_01;UM_11;83.88;A;83,88;2,639531939;2.63953193863371 -2016;;3901;Chur;Ind_04_01;UM_11;54.24;A;54,24;2,12254815;2.12254814959278 -2016;;3911;Churwalden;Ind_04_01;UM_11;48.53;A;48,53;2,007718663;2.00771866342836 -2016;;3921;Arosa;Ind_04_01;UM_11;154.79;A;154,79;3,585660447;3.58566044719565 -2016;;3932;Tschiertschen-Praden;Ind_04_01;UM_11;27.74;A;27,74;1,517927185;1.51792718468363 -2016;;3945;Trimmis;Ind_04_01;UM_11;42.87;A;42,87;1,887011089;1.88701108874093 -2016;;3946;Untervaz;Ind_04_01;UM_11;27.72;A;27,72;1,517379888;1.51737988804255 -2016;;3947;Zizers;Ind_04_01;UM_11;11.01;A;11,01;0,956293866;0.956293865780184 -2016;;3951;Fläsch;Ind_04_01;UM_11;19.94;A;19,94;1,286945891;1.28694589064251 -2016;;3952;Jenins;Ind_04_01;UM_11;10.54;A;10,54;0,935659897;0.935659897419281 -2016;;3953;Maienfeld;Ind_04_01;UM_11;32.33;A;32,33;1,638704185;1.63870418483404 -2016;;3954;Malans;Ind_04_01;UM_11;11.4;A;11,4;0,973083562;0.973083561857256 -2016;;3955;Landquart;Ind_04_01;UM_11;18.86;A;18,86;1,251608646;1.25160864638375 -2016;;3961;Grüsch;Ind_04_01;UM_11;43.3;A;43,3;1,896451143;1.89645114263203 -2016;;3962;Schiers;Ind_04_01;UM_11;61.66;A;61,66;2,263077729;2.26307772865945 -2016;;3972;Seewis im Prättigau;Ind_04_01;UM_11;49.63;A;49,63;2,030345036;2.0303450363382 -2016;;3981;Breil/Brigels;Ind_04_01;UM_11;96.58;A;96,58;2,832313426;2.83231342583836 -2016;;3982;Disentis/Mustér;Ind_04_01;UM_11;90.99;A;90,99;2,749125353;2.74912535300162 -2016;;3983;Medel (Lucmagn);Ind_04_01;UM_11;136.22;A;136,22;3,363706918;3.36370691836864 -2016;;3985;Sumvitg;Ind_04_01;UM_11;101.88;A;101,88;2,908989667;2.90898966723016 -2016;;3986;Tujetsch;Ind_04_01;UM_11;133.91;A;133,91;3,335064331;3.33506433055816 -2016;;3987;Trun;Ind_04_01;UM_11;51.9;A;51,9;2,076258337;2.07625833738766 -2016;;3988;Obersaxen Mundaun;Ind_04_01;UM_11;70.36;A;70,36;2,417467398;2.41746739791121 -2016;;4001;Aarau;Ind_04_01;UM_11;12.34;A;12,34;1,012407352;1.01240735207579 -2016;;4002;Biberstein;Ind_04_01;UM_11;4.1;A;4,1;0,58356554;0.583565540394001 -2016;;4003;Buchs (AG);Ind_04_01;UM_11;5.32;A;5,32;0,664742623;0.66474262330106 -2016;;4004;Densbüren;Ind_04_01;UM_11;12.52;A;12,52;1,019764466;1.01976446634845 -2016;;4005;Erlinsbach (AG);Ind_04_01;UM_11;9.86;A;9,86;0,904974137;0.904974137315735 -2016;;4006;Gränichen;Ind_04_01;UM_11;17.23;A;17,23;1,196300679;1.19630067893118 -2016;;4007;Hirschthal;Ind_04_01;UM_11;3.53;A;3,53;0,541483295;0.541483295234028 -2016;;4008;Küttigen;Ind_04_01;UM_11;11.9;A;11,9;0,994194122;0.994194122138761 -2016;;4009;Muhen;Ind_04_01;UM_11;7.03;A;7,03;0,764144291;0.764144291339467 -2016;;4010;Oberentfelden;Ind_04_01;UM_11;7.16;A;7,16;0,771177272;0.771177272008644 -2016;;4012;Suhr;Ind_04_01;UM_11;10.62;A;10,62;0,939204076;0.93920407638639 -2016;;4013;Unterentfelden;Ind_04_01;UM_11;2.88;A;2,88;0,489095824;0.489095823573979 -2016;;4021;Baden;Ind_04_01;UM_11;13.17;A;13,17;1,045901048;1.04590104752168 -2016;;4022;Bellikon;Ind_04_01;UM_11;4.94;A;4,94;0,64056202;0.640562019860645 -2016;;4023;Bergdietikon;Ind_04_01;UM_11;5.94;A;5,94;0,7024104;0.702410399670208 -2016;;4024;Birmenstorf (AG);Ind_04_01;UM_11;7.8;A;7,8;0,804905717;0.804905716565561 -2016;;4026;Ennetbaden;Ind_04_01;UM_11;2.11;A;2,11;0,418638281;0.418638280696218 -2016;;4027;Fislisbach;Ind_04_01;UM_11;5.05;A;5,05;0,647654518;0.647654518086927 -2016;;4028;Freienwil;Ind_04_01;UM_11;3.99;A;3,99;0,575683999;0.575683998757028 -2016;;4029;Gebenstorf;Ind_04_01;UM_11;5.65;A;5,65;0,68504947;0.685049469574684 -2016;;4030;Killwangen;Ind_04_01;UM_11;2.43;A;2,43;0,449263201;0.449263201155957 -2016;;4031;Künten;Ind_04_01;UM_11;4.89;A;4,89;0,637312065;0.637312064748584 -2016;;4032;Mägenwil;Ind_04_01;UM_11;3.48;A;3,48;0,537634751;0.537634751112366 -2016;;4033;Mellingen;Ind_04_01;UM_11;4.87;A;4,87;0,636007433;0.63600743274632 -2016;;4034;Neuenhof;Ind_04_01;UM_11;5.38;A;5,38;0,668480662;0.668480661896655 -2016;;4035;Niederrohrdorf;Ind_04_01;UM_11;3.33;A;3,33;0,52592017;0.525920170141932 -2016;;4037;Oberrohrdorf;Ind_04_01;UM_11;4.3;A;4,3;0,597629378;0.597629378118851 -2016;;4038;Obersiggenthal;Ind_04_01;UM_11;8.36;A;8,36;0,833298978;0.833298978035489 -2016;;4039;Remetschwil;Ind_04_01;UM_11;3.88;A;3,88;0,567693045;0.56769304462396 -2016;;4040;Spreitenbach;Ind_04_01;UM_11;8.6;A;8,6;0,845175572;0.845175571808278 -2016;;4041;Stetten (AG);Ind_04_01;UM_11;4.41;A;4,41;0,605225204;0.605225203623564 -2016;;4042;Turgi;Ind_04_01;UM_11;1.55;A;1,55;0,358809191;0.358809191394555 -2016;;4044;Untersiggenthal;Ind_04_01;UM_11;8.28;A;8,28;0,829302317;0.829302317211785 -2016;;4045;Wettingen;Ind_04_01;UM_11;10.6;A;10,6;0,938319287;0.938319286669135 -2016;;4046;Wohlenschwil;Ind_04_01;UM_11;4.39;A;4,39;0,603851251;0.603851251332351 -2016;;4047;Würenlingen;Ind_04_01;UM_11;9.37;A;9,37;0,882200919;0.882200919153155 -2016;;4048;Würenlos;Ind_04_01;UM_11;9.02;A;9,02;0,865567576;0.86556757555823 -2016;;4049;Ehrendingen;Ind_04_01;UM_11;7.29;A;7,29;0,77814669;0.778146690373154 -2016;;4061;Arni (AG);Ind_04_01;UM_11;3.37;A;3,37;0,529069421;0.529069420863837 -2016;;4062;Berikon;Ind_04_01;UM_11;5.38;A;5,38;0,668480662;0.668480661896655 -2016;;4063;Bremgarten (AG);Ind_04_01;UM_11;11.36;A;11,36;0,971374898;0.97137489756825 -2016;;4064;Büttikon;Ind_04_01;UM_11;2.82;A;2,82;0,48397426;0.483974260204914 -2016;;4065;Dottikon;Ind_04_01;UM_11;3.88;A;3,88;0,567693045;0.56769304462396 -2016;;4066;Eggenwil;Ind_04_01;UM_11;2.46;A;2,46;0,452027924;0.452027923873299 -2016;;4067;Fischbach-Göslikon;Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;4068;Hägglingen;Ind_04_01;UM_11;7.75;A;7,75;0,802321743;0.802321742909958 -2016;;4071;Jonen;Ind_04_01;UM_11;5.7;A;5,7;0,688073985;0.688073985250425 -2016;;4072;Niederwil (AG);Ind_04_01;UM_11;6.15;A;6,15;0,714718903;0.714718902718413 -2016;;4073;Oberlunkhofen;Ind_04_01;UM_11;3.25;A;3,25;0,519564406;0.519564405920927 -2016;;4074;Oberwil-Lieli;Ind_04_01;UM_11;5.35;A;5,35;0,666614263;0.666614262734816 -2016;;4075;Rudolfstetten-Friedlisberg;Ind_04_01;UM_11;4.9;A;4,9;0,63796338;0.637963380263219 -2016;;4076;Sarmenstorf;Ind_04_01;UM_11;8.3;A;8,3;0,830303286;0.83030328597349 -2016;;4077;Tägerig;Ind_04_01;UM_11;3.29;A;3,29;0,522751948;0.522751947515304 -2016;;4078;Uezwil;Ind_04_01;UM_11;2.44;A;2,44;0,450186662;0.45018666194776 -2016;;4079;Unterlunkhofen;Ind_04_01;UM_11;4.49;A;4,49;0,610690102;0.610690101903853 -2016;;4080;Villmergen;Ind_04_01;UM_11;11.94;A;11,94;0,995863635;0.995863634854862 -2016;;4081;Widen;Ind_04_01;UM_11;2.62;A;2,62;0,466496464;0.466496463958207 -2016;;4082;Wohlen (AG);Ind_04_01;UM_11;12.48;A;12,48;1,018134146;1.01813414641484 -2016;;4083;Zufikon;Ind_04_01;UM_11;4.81;A;4,81;0,63207738;0.632077380082494 -2016;;4084;Islisberg;Ind_04_01;UM_11;1.66;A;1,66;0,371322918;0.371322917875634 -2016;;4091;Auenstein;Ind_04_01;UM_11;5.68;A;5,68;0,686865777;0.686865777144897 -2016;;4092;Birr;Ind_04_01;UM_11;5.05;A;5,05;0,647654518;0.647654518086927 -2016;;4093;Birrhard;Ind_04_01;UM_11;3;A;3;0,499181335;0.49918133461773 -2016;;4094;Bözen;Ind_04_01;UM_11;3.96;A;3,96;0,57351569;0.573515689738802 -2016;;4095;Brugg;Ind_04_01;UM_11;8.26;A;8,26;0,828300139;0.828300138818833 -2016;;4096;Effingen;Ind_04_01;UM_11;6.85;A;6,85;0,75429807;0.754298069530111 -2016;;4097;Elfingen;Ind_04_01;UM_11;4.22;A;4,22;0,592043934;0.592043934289147 -2016;;4099;Habsburg;Ind_04_01;UM_11;2.23;A;2,23;0,430378078;0.430378078272483 -2016;;4100;Hausen (AG);Ind_04_01;UM_11;3.2;A;3,2;0,515552266;0.515552265523216 -2016;;4104;Lupfig;Ind_04_01;UM_11;8.45;A;8,45;0,837772431;0.837772431475226 -2016;;4105;Mandach;Ind_04_01;UM_11;5.54;A;5,54;0,678348069;0.678348068659517 -2016;;4106;Mönthal;Ind_04_01;UM_11;3.94;A;3,94;0,572065585;0.572065584536455 -2016;;4107;Mülligen;Ind_04_01;UM_11;3.16;A;3,16;0,512319931;0.512319931053872 -2016;;4110;Remigen;Ind_04_01;UM_11;7.87;A;7,87;0,808509406;0.808509405844671 -2016;;4111;Riniken;Ind_04_01;UM_11;4.76;A;4,76;0,628783572;0.628783572462023 -2016;;4112;Rüfenach;Ind_04_01;UM_11;4.17;A;4,17;0,588526114;0.588526113876628 -2016;;4117;Thalheim (AG);Ind_04_01;UM_11;9.92;A;9,92;0,907723432;0.907723432168066 -2016;;4120;Veltheim (AG);Ind_04_01;UM_11;5.24;A;5,24;0,659725626;0.659725626128789 -2016;;4121;Villigen;Ind_04_01;UM_11;11.21;A;11,21;0,96494046;0.964940460020302 -2016;;4122;Villnachern;Ind_04_01;UM_11;5.75;A;5,75;0,691085264;0.691085264343155 -2016;;4123;Windisch;Ind_04_01;UM_11;4.91;A;4,91;0,638614032;0.63861403150858 -2016;;4124;Bözberg;Ind_04_01;UM_11;15.5;A;15,5;1,13465429;1.13465429021008 -2016;;4125;Schinznach;Ind_04_01;UM_11;12.24;A;12,24;1,008296871;1.00829687082199 -2016;;4131;Beinwil am See;Ind_04_01;UM_11;3.83;A;3,83;0,564023368;0.564023367867481 -2016;;4132;Birrwil;Ind_04_01;UM_11;3.41;A;3,41;0,532200036;0.532200036475264 -2016;;4133;Burg (AG);Ind_04_01;UM_11;0.94;A;0,94;0,279422669;0.279422669410157 -2016;;4134;Dürrenäsch;Ind_04_01;UM_11;5.91;A;5,91;0,700634391;0.700634390760655 -2016;;4135;Gontenschwil;Ind_04_01;UM_11;9.74;A;9,74;0,899450337;0.89945033715994 -2016;;4136;Holziken;Ind_04_01;UM_11;2.86;A;2,86;0,487394616;0.487394615554963 -2016;;4137;Leimbach (AG);Ind_04_01;UM_11;1.15;A;1,15;0,309062726;0.309062725863941 -2016;;4138;Leutwil;Ind_04_01;UM_11;3.75;A;3,75;0,558101699;0.558101698652157 -2016;;4139;Menziken;Ind_04_01;UM_11;6.38;A;6,38;0,727960894;0.72796089428396 -2016;;4140;Oberkulm;Ind_04_01;UM_11;9.41;A;9,41;0,884081947;0.884081946702764 -2016;;4141;Reinach (AG);Ind_04_01;UM_11;9.47;A;9,47;0,886896008;0.886896007760979 -2016;;4142;Schlossrued;Ind_04_01;UM_11;7.25;A;7,25;0,776008921;0.776008920701055 -2016;;4143;Schmiedrued;Ind_04_01;UM_11;8.65;A;8,65;0,847628917;0.847628916799854 -2016;;4144;Schöftland;Ind_04_01;UM_11;6.28;A;6,28;0,72223334;0.722233339564861 -2016;;4145;Teufenthal (AG);Ind_04_01;UM_11;3.57;A;3,57;0,544542547;0.544542547234445 -2016;;4146;Unterkulm;Ind_04_01;UM_11;8.88;A;8,88;0,858824042;0.858824041523632 -2016;;4147;Zetzwil;Ind_04_01;UM_11;5.8;A;5,8;0,694083479;0.694083479133522 -2016;;4161;Eiken;Ind_04_01;UM_11;7.09;A;7,09;0,767398292;0.767398291686469 -2016;;4163;Frick;Ind_04_01;UM_11;9.96;A;9,96;0,909551679;0.909551678596687 -2016;;4164;Gansingen;Ind_04_01;UM_11;8.77;A;8,77;0,853488173;0.853488172611973 -2016;;4165;Gipf-Oberfrick;Ind_04_01;UM_11;10.17;A;10,17;0,919090309;0.919090309151501 -2016;;4166;Herznach;Ind_04_01;UM_11;6.26;A;6,26;0,721082369;0.721082369368072 -2016;;4167;Hornussen;Ind_04_01;UM_11;7.27;A;7,27;0,777078541;0.777078540672148 -2016;;4169;Kaisten;Ind_04_01;UM_11;18.09;A;18,09;1,225792596;1.22579259629407 -2016;;4170;Laufenburg;Ind_04_01;UM_11;14.49;A;14,49;1,097063847;1.09706384651599 -2016;;4172;Münchwilen (AG);Ind_04_01;UM_11;2.46;A;2,46;0,452027924;0.452027923873299 -2016;;4173;Oberhof;Ind_04_01;UM_11;8.2;A;8,2;0,825286302;0.82528630175878 -2016;;4175;Oeschgen;Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;4176;Schwaderloch;Ind_04_01;UM_11;2.79;A;2,79;0,481393046;0.481393045745975 -2016;;4177;Sisseln;Ind_04_01;UM_11;2.52;A;2,52;0,45750725;0.457507250278965 -2016;;4179;Ueken;Ind_04_01;UM_11;5.1;A;5,1;0,650852831;0.650852831454435 -2016;;4181;Wittnau;Ind_04_01;UM_11;11.25;A;11,25;0,966660498;0.96666049785603 -2016;;4182;Wölflinswil;Ind_04_01;UM_11;9.51;A;9,51;0,888767098;0.888767098464744 -2016;;4183;Zeihen;Ind_04_01;UM_11;6.88;A;6,88;0,755948013;0.755948012594225 -2016;;4184;Mettauertal;Ind_04_01;UM_11;21.6;A;21,6;1,339444077;1.33944407676518 -2016;;4191;Ammerswil;Ind_04_01;UM_11;3.19;A;3,19;0,514746085;0.514746084786812 -2016;;4192;Boniswil;Ind_04_01;UM_11;2.41;A;2,41;0,447410562;0.447410561506274 -2016;;4193;Brunegg;Ind_04_01;UM_11;1.55;A;1,55;0,358809191;0.358809191394555 -2016;;4194;Dintikon;Ind_04_01;UM_11;3.72;A;3,72;0,555864809;0.555864809094905 -2016;;4195;Egliswil;Ind_04_01;UM_11;6.29;A;6,29;0,722808137;0.722808137379333 -2016;;4196;Fahrwangen;Ind_04_01;UM_11;4.01;A;4,01;0,577125012;0.577125012272402 -2016;;4197;Hallwil;Ind_04_01;UM_11;2.18;A;2,18;0,425525859;0.425525859195031 -2016;;4198;Hendschiken;Ind_04_01;UM_11;3.52;A;3,52;0,540715778;0.540715777774916 -2016;;4199;Holderbank (AG);Ind_04_01;UM_11;2.33;A;2,33;0,43992199;0.439921989772285 -2016;;4200;Hunzenschwil;Ind_04_01;UM_11;3.26;A;3,26;0,520363122;0.520363121851208 -2016;;4201;Lenzburg;Ind_04_01;UM_11;11.31;A;11,31;0,969234831;0.969234831303478 -2016;;4202;Meisterschwanden;Ind_04_01;UM_11;4.25;A;4,25;0,594144629;0.59414462900617 -2016;;4203;Möriken-Wildegg;Ind_04_01;UM_11;6.61;A;6,61;0,740966273;0.74096627272123 -2016;;4204;Niederlenz;Ind_04_01;UM_11;3.31;A;3,31;0,524338452;0.524338451762391 -2016;;4205;Othmarsingen;Ind_04_01;UM_11;4.72;A;4,72;0,626136051;0.62613605092426 -2016;;4206;Rupperswil;Ind_04_01;UM_11;6.22;A;6,22;0,7187749;0.718774899869491 -2016;;4207;Schafisheim;Ind_04_01;UM_11;6.33;A;6,33;0,725102772;0.725102772159131 -2016;;4208;Seengen;Ind_04_01;UM_11;9.69;A;9,69;0,897138716;0.897138715920389 -2016;;4209;Seon;Ind_04_01;UM_11;9.62;A;9,62;0,893892403;0.893892403381917 -2016;;4210;Staufen;Ind_04_01;UM_11;3.58;A;3,58;0,545304679;0.545304678534255 -2016;;4221;Abtwil;Ind_04_01;UM_11;4.15;A;4,15;0,587113084;0.587113083953328 -2016;;4222;Aristau;Ind_04_01;UM_11;8.64;A;8,64;0,847138816;0.847138816199875 -2016;;4223;Auw;Ind_04_01;UM_11;8.56;A;8,56;0,843207756;0.84320775639837 -2016;;4224;Beinwil (Freiamt);Ind_04_01;UM_11;11.31;A;11,31;0,969234831;0.969234831303478 -2016;;4226;Besenbüren;Ind_04_01;UM_11;2.38;A;2,38;0,444617128;0.444617127986599 -2016;;4227;Bettwil;Ind_04_01;UM_11;4.25;A;4,25;0,594144629;0.59414462900617 -2016;;4228;Boswil;Ind_04_01;UM_11;11.78;A;11,78;0,989168677;0.989168677376124 -2016;;4229;Bünzen;Ind_04_01;UM_11;5.78;A;5,78;0,69288575;0.692885750063137 -2016;;4230;Buttwil;Ind_04_01;UM_11;4.57;A;4,57;0,616106528;0.616106528147114 -2016;;4231;Dietwil;Ind_04_01;UM_11;5.49;A;5,49;0,675279993;0.67527999292164 -2016;;4232;Geltwil;Ind_04_01;UM_11;3.28;A;3,28;0,521956887;0.521956887058954 -2016;;4233;Kallern;Ind_04_01;UM_11;2.68;A;2,68;0,47180779;0.47180779029402 -2016;;4234;Merenschwand;Ind_04_01;UM_11;13.51;A;13,51;1,059315642;1.05931564154462 -2016;;4235;Mühlau;Ind_04_01;UM_11;5.52;A;5,52;0,677122507;0.677122506558863 -2016;;4236;Muri (AG);Ind_04_01;UM_11;12.34;A;12,34;1,012407352;1.01240735207579 -2016;;4237;Oberrüti;Ind_04_01;UM_11;5.38;A;5,38;0,668480662;0.668480661896655 -2016;;4238;Rottenschwil;Ind_04_01;UM_11;4.49;A;4,49;0,610690102;0.610690101903853 -2016;;4239;Sins;Ind_04_01;UM_11;20.31;A;20,31;1,298831079;1.29883107935716 -2016;;4240;Waltenschwil;Ind_04_01;UM_11;4.54;A;4,54;0,614080967;0.614080966955648 -2016;;4251;Hellikon;Ind_04_01;UM_11;7.04;A;7,04;0,764687586;0.764687586318403 -2016;;4252;Kaiseraugst;Ind_04_01;UM_11;4.9;A;4,9;0,63796338;0.637963380263219 -2016;;4253;Magden;Ind_04_01;UM_11;11.02;A;11,02;0,956728051;0.956728051439686 -2016;;4254;Möhlin;Ind_04_01;UM_11;18.78;A;18,78;1,2489513;1.24895130018765 -2016;;4255;Mumpf;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;4256;Obermumpf;Ind_04_01;UM_11;5.02;A;5,02;0,645727926;0.645727926258499 -2016;;4257;Olsberg;Ind_04_01;UM_11;4.61;A;4,61;0,618796962;0.618796962465531 -2016;;4258;Rheinfelden;Ind_04_01;UM_11;16.04;A;16,04;1,154250025;1.1542500245448 -2016;;4259;Schupfart;Ind_04_01;UM_11;7.05;A;7,05;0,765230496;0.765230495571259 -2016;;4260;Stein (AG);Ind_04_01;UM_11;2.81;A;2,81;0,483115388;0.483115387726498 -2016;;4261;Wallbach;Ind_04_01;UM_11;4.51;A;4,51;0,612048702;0.612048702252424 -2016;;4262;Wegenstetten;Ind_04_01;UM_11;7.12;A;7,12;0,769020129;0.769020128560767 -2016;;4263;Zeiningen;Ind_04_01;UM_11;11.37;A;11,37;0,971802345;0.971802345288638 -2016;;4264;Zuzgen;Ind_04_01;UM_11;8.4;A;8,4;0,835290137;0.83529013733317 -2016;;4271;Aarburg;Ind_04_01;UM_11;4.41;A;4,41;0,605225204;0.605225203623564 -2016;;4273;Bottenwil;Ind_04_01;UM_11;5.1;A;5,1;0,650852831;0.650852831454435 -2016;;4274;Brittnau;Ind_04_01;UM_11;13.67;A;13,67;1,065569958;1.06556995797807 -2016;;4275;Kirchleerau;Ind_04_01;UM_11;4.36;A;4,36;0,601784441;0.601784441214077 -2016;;4276;Kölliken;Ind_04_01;UM_11;8.89;A;8,89;0,859307478;0.859307477554894 -2016;;4277;Moosleerau;Ind_04_01;UM_11;3.81;A;3,81;0,562548794;0.562548794448124 -2016;;4279;Murgenthal;Ind_04_01;UM_11;18.62;A;18,62;1,243619573;1.24361957338895 -2016;;4280;Oftringen;Ind_04_01;UM_11;12.85;A;12,85;1,033116444;1.03311644423963 -2016;;4281;Reitnau;Ind_04_01;UM_11;8.02;A;8,02;0,81617802;0.816178019540369 -2016;;4282;Rothrist;Ind_04_01;UM_11;11.85;A;11,85;0,99210328;0.992103280450889 -2016;;4283;Safenwil;Ind_04_01;UM_11;5.99;A;5,99;0,705360477;0.705360477329647 -2016;;4284;Staffelbach;Ind_04_01;UM_11;8.93;A;8,93;0,861238508;0.861238508029472 -2016;;4285;Strengelbach;Ind_04_01;UM_11;6.03;A;6,03;0,707711685;0.70771168544103 -2016;;4286;Uerkheim;Ind_04_01;UM_11;7.09;A;7,09;0,767398292;0.767398291686469 -2016;;4287;Vordemwald;Ind_04_01;UM_11;10.14;A;10,14;0,917733718;0.917733717549865 -2016;;4288;Wiliberg;Ind_04_01;UM_11;1.17;A;1,17;0,311738644;0.311738643552556 -2016;;4289;Zofingen;Ind_04_01;UM_11;11.08;A;11,08;0,959329039;0.959329038707884 -2016;;4301;Baldingen;Ind_04_01;UM_11;2.82;A;2,82;0,48397426;0.483974260204914 -2016;;4302;Böbikon;Ind_04_01;UM_11;2.6;A;2,6;0,464712532;0.464712532131395 -2016;;4303;Böttstein;Ind_04_01;UM_11;7.43;A;7,43;0,785583073;0.785583073454018 -2016;;4304;Döttingen;Ind_04_01;UM_11;6.93;A;6,93;0,758689944;0.758689944021275 -2016;;4305;Endingen;Ind_04_01;UM_11;11.92;A;11,92;0,995029229;0.995029228646475 -2016;;4306;Fisibach;Ind_04_01;UM_11;5.77;A;5,77;0,692286108;0.692286108453569 -2016;;4307;Full-Reuenthal;Ind_04_01;UM_11;4.82;A;4,82;0,632734084;0.632734084031135 -2016;;4308;Kaiserstuhl;Ind_04_01;UM_11;0.32;A;0,32;0,163031941;0.163031941191326 -2016;;4309;Klingnau;Ind_04_01;UM_11;6.71;A;6,71;0,746550122;0.746550121651644 -2016;;4310;Koblenz;Ind_04_01;UM_11;4.08;A;4,08;0,58214047;0.582140469792132 -2016;;4311;Leibstadt;Ind_04_01;UM_11;6.39;A;6,39;0,728531173;0.728531173176187 -2016;;4312;Lengnau (AG);Ind_04_01;UM_11;12.67;A;12,67;1,025855091;1.02585509067728 -2016;;4313;Leuggern;Ind_04_01;UM_11;13.76;A;13,76;1,069071932;1.06907193185974 -2016;;4314;Mellikon;Ind_04_01;UM_11;2.7;A;2,7;0,473564995;0.473564994850405 -2016;;4315;Rekingen (AG);Ind_04_01;UM_11;3.1;A;3,1;0,507432825;0.507432824774304 -2016;;4316;Rietheim;Ind_04_01;UM_11;3.92;A;3,92;0,570611794;0.570611794169642 -2016;;4317;Rümikon;Ind_04_01;UM_11;2.9;A;2,9;0,490791135;0.490791134804865 -2016;;4318;Schneisingen;Ind_04_01;UM_11;8.26;A;8,26;0,828300139;0.828300138818833 -2016;;4319;Siglistorf;Ind_04_01;UM_11;5.51;A;5,51;0,676508893;0.676508892924394 -2016;;4320;Tegerfelden;Ind_04_01;UM_11;7.12;A;7,12;0,769020129;0.769020128560767 -2016;;4322;Wislikofen;Ind_04_01;UM_11;3.75;A;3,75;0,558101699;0.558101698652157 -2016;;4323;Bad Zurzach;Ind_04_01;UM_11;6.52;A;6,52;0,735904584;0.735904584280782 -2016;;4401;Arbon;Ind_04_01;UM_11;6;A;6;0,705949013;0.705949013499896 -2016;;4406;Dozwil;Ind_04_01;UM_11;1.3;A;1,3;0,328601383;0.328601382772481 -2016;;4411;Egnach;Ind_04_01;UM_11;18.43;A;18,43;1,237258306;1.23725830623338 -2016;;4416;Hefenhofen;Ind_04_01;UM_11;6.08;A;6,08;0,710639756;0.710639756222257 -2016;;4421;Horn;Ind_04_01;UM_11;1.73;A;1,73;0,379071176;0.379071175531798 -2016;;4426;Kesswil;Ind_04_01;UM_11;4.47;A;4,47;0,609328472;0.60932847233475 -2016;;4431;Roggwil (TG);Ind_04_01;UM_11;12.02;A;12,02;0,999194292;0.999194291761362 -2016;;4436;Romanshorn;Ind_04_01;UM_11;8.73;A;8,73;0,851539567;0.85153956693594 -2016;;4441;Salmsach;Ind_04_01;UM_11;2.71;A;2,71;0,474441157;0.474441156552036 -2016;;4446;Sommeri;Ind_04_01;UM_11;4.22;A;4,22;0,592043934;0.592043934289147 -2016;;4451;Uttwil;Ind_04_01;UM_11;4.35;A;4,35;0,601093925;0.601093925276716 -2016;;4461;Amriswil;Ind_04_01;UM_11;19.02;A;19,02;1,256906484;1.25690648443982 -2016;;4471;Bischofszell;Ind_04_01;UM_11;11.58;A;11,58;0,980735713;0.980735712945465 -2016;;4476;Erlen;Ind_04_01;UM_11;12.19;A;12,19;1,006235333;1.00623533345613 -2016;;4486;Hauptwil-Gottshaus;Ind_04_01;UM_11;12.49;A;12,49;1,018541971;1.01854197104422 -2016;;4495;Hohentannen;Ind_04_01;UM_11;8.01;A;8,01;0,815669022;0.815669021661403 -2016;;4501;Kradolf-Schönenberg;Ind_04_01;UM_11;10.95;A;10,95;0,953684601;0.95368460071042 -2016;;4506;Sulgen;Ind_04_01;UM_11;9.12;A;9,12;0,870352397;0.870352396840179 -2016;;4511;Zihlschlacht-Sitterdorf;Ind_04_01;UM_11;12.21;A;12,21;1,007060455;1.00706045481942 -2016;;4536;Basadingen-Schlattingen;Ind_04_01;UM_11;15.63;A;15,63;1,139402583;1.13940258257042 -2016;;4545;Diessenhofen;Ind_04_01;UM_11;10.08;A;10,08;0,915014501;0.915014500557931 -2016;;4546;Schlatt (TG);Ind_04_01;UM_11;15.54;A;15,54;1,136117417;1.13611741691747 -2016;;4551;Aadorf;Ind_04_01;UM_11;19.94;A;19,94;1,286945891;1.28694589064251 -2016;;4561;Felben-Wellhausen;Ind_04_01;UM_11;7.38;A;7,38;0,782935331;0.782935330588431 -2016;;4566;Frauenfeld;Ind_04_01;UM_11;27.36;A;27,36;1,507494572;1.50749457181654 -2016;;4571;Gachnang;Ind_04_01;UM_11;9.74;A;9,74;0,899450337;0.89945033715994 -2016;;4590;Hüttlingen;Ind_04_01;UM_11;11.6;A;11,6;0,98158227;0.981582269609729 -2016;;4591;Matzingen;Ind_04_01;UM_11;7.68;A;7,68;0,798690135;0.798690135388368 -2016;;4601;Neunforn;Ind_04_01;UM_11;11.36;A;11,36;0,971374898;0.97137489756825 -2016;;4606;Stettfurt;Ind_04_01;UM_11;6.37;A;6,37;0,727390168;0.727390168289298 -2016;;4611;Thundorf;Ind_04_01;UM_11;15.61;A;15,61;1,138673365;1.13867336484288 -2016;;4616;Uesslingen-Buch;Ind_04_01;UM_11;14.03;A;14,03;1,079509692;1.079509692372 -2016;;4621;Warth-Weiningen;Ind_04_01;UM_11;8.21;A;8,21;0,825789372;0.825789371785235 -2016;;4641;Altnau;Ind_04_01;UM_11;6.73;A;6,73;0,747661887;0.74766188715463 -2016;;4643;Bottighofen;Ind_04_01;UM_11;2.41;A;2,41;0,447410562;0.447410561506274 -2016;;4646;Ermatingen;Ind_04_01;UM_11;10.46;A;10,46;0,932102242;0.932102242340671 -2016;;4651;Gottlieben;Ind_04_01;UM_11;0.32;A;0,32;0,163031941;0.163031941191326 -2016;;4656;Güttingen;Ind_04_01;UM_11;9.54;A;9,54;0,890167836;0.89016783550168 -2016;;4666;Kemmental;Ind_04_01;UM_11;25.04;A;25,04;1,442164739;1.44216473873614 -2016;;4671;Kreuzlingen;Ind_04_01;UM_11;11.5;A;11,5;0,977342154;0.977342153590285 -2016;;4681;Langrickenbach;Ind_04_01;UM_11;10.83;A;10,83;0,948444536;0.948444535773687 -2016;;4683;Lengwil;Ind_04_01;UM_11;8.89;A;8,89;0,859307478;0.859307477554894 -2016;;4691;Münsterlingen;Ind_04_01;UM_11;5.46;A;5,46;0,673432438;0.673432438179171 -2016;;4696;Tägerwilen;Ind_04_01;UM_11;11.56;A;11,56;0,979888425;0.979888424914342 -2016;;4701;Wäldi;Ind_04_01;UM_11;12.21;A;12,21;1,007060455;1.00706045481942 -2016;;4711;Affeltrangen;Ind_04_01;UM_11;14.43;A;14,43;1,094790137;1.0947901366179 -2016;;4716;Bettwiesen;Ind_04_01;UM_11;3.85;A;3,85;0,565494096;0.565494096225693 -2016;;4721;Bichelsee-Balterswil;Ind_04_01;UM_11;12.26;A;12,26;1,009120307;1.00912030654177 -2016;;4723;Braunau;Ind_04_01;UM_11;9.17;A;9,17;0,87273497;0.872734970136575 -2016;;4724;Eschlikon;Ind_04_01;UM_11;6.22;A;6,22;0,7187749;0.718774899869491 -2016;;4726;Fischingen;Ind_04_01;UM_11;30.58;A;30,58;1,59373625;1.59373625042163 -2016;;4741;Lommis;Ind_04_01;UM_11;8.61;A;8,61;0,84566681;0.845666810194309 -2016;;4746;Münchwilen (TG);Ind_04_01;UM_11;7.81;A;7,81;0,805421517;0.805421516500949 -2016;;4751;Rickenbach (TG);Ind_04_01;UM_11;1.58;A;1,58;0,362264897;0.362264897385217 -2016;;4756;Schönholzerswilen;Ind_04_01;UM_11;10.93;A;10,93;0,952813258;0.952813257814277 -2016;;4761;Sirnach;Ind_04_01;UM_11;12.38;A;12,38;1,014046879;1.01404687922609 -2016;;4776;Tobel-Tägerschen;Ind_04_01;UM_11;7.11;A;7,11;0,768479897;0.768479896580808 -2016;;4781;Wängi;Ind_04_01;UM_11;16.43;A;16,43;1,168198091;1.16819809098871 -2016;;4786;Wilen (TG);Ind_04_01;UM_11;2.25;A;2,25;0,432303717;0.432303716873975 -2016;;4791;Wuppenau;Ind_04_01;UM_11;12.12;A;12,12;1,003342065;1.00334206505866 -2016;;4801;Berlingen;Ind_04_01;UM_11;3.58;A;3,58;0,545304679;0.545304678534255 -2016;;4806;Eschenz;Ind_04_01;UM_11;12;A;12;0,998362669;0.99836266923546 -2016;;4811;Herdern;Ind_04_01;UM_11;13.73;A;13,73;1,067905883;1.06790588323223 -2016;;4816;Homburg;Ind_04_01;UM_11;24.13;A;24,13;1,415716753;1.4157167532815 -2016;;4821;Hüttwilen;Ind_04_01;UM_11;17.66;A;17,66;1,211136409;1.2111364092332 -2016;;4826;Mammern;Ind_04_01;UM_11;5.44;A;5,44;0,672197914;0.672197913881325 -2016;;4831;Müllheim;Ind_04_01;UM_11;8.74;A;8,74;0,852027136;0.852027136152492 -2016;;4841;Pfyn;Ind_04_01;UM_11;13.14;A;13,14;1,044709137;1.04470913710881 -2016;;4846;Raperswilen;Ind_04_01;UM_11;7.69;A;7,69;0,799209947;0.799209946790866 -2016;;4851;Salenstein;Ind_04_01;UM_11;6.54;A;6,54;0,737032408;0.737032408060194 -2016;;4864;Steckborn;Ind_04_01;UM_11;8.78;A;8,78;0,853974629;0.853974629290176 -2016;;4871;Wagenhausen;Ind_04_01;UM_11;11.81;A;11,81;0,990427429;0.990427429118529 -2016;;4881;Amlikon-Bissegg;Ind_04_01;UM_11;14.46;A;14,46;1,095927581;1.09592758122248 -2016;;4891;Berg (TG);Ind_04_01;UM_11;13.14;A;13,14;1,044709137;1.04470913710881 -2016;;4901;Birwinken;Ind_04_01;UM_11;12.29;A;12,29;1,010354202;1.01035420181403 -2016;;4911;Bürglen (TG);Ind_04_01;UM_11;11.71;A;11,71;0,986225342;0.986225342162047 -2016;;4921;Bussnang;Ind_04_01;UM_11;18.88;A;18,88;1,252272102;1.25227210184852 -2016;;4941;Märstetten;Ind_04_01;UM_11;9.96;A;9,96;0,909551679;0.909551678596687 -2016;;4946;Weinfelden;Ind_04_01;UM_11;15.48;A;15,48;1,133922019;1.13392201889134 -2016;;4951;Wigoltingen;Ind_04_01;UM_11;17.13;A;17,13;1,192824064;1.192824063969 -2016;;5001;Arbedo-Castione;Ind_04_01;UM_11;21.39;A;21,39;1,332916987;1.33291698707878 -2016;;5002;Bellinzona;Ind_04_01;UM_11;164.22;A;164,22;3,693267245;3.69326724519559 -2016;;5003;Cadenazzo;Ind_04_01;UM_11;8.38;A;8,38;0,834295152;0.834295151706234 -2016;;5009;Isone;Ind_04_01;UM_11;12.83;A;12,83;1,032312149;1.03231214949394 -2016;;5010;Lumino;Ind_04_01;UM_11;10.09;A;10,09;0,915468264;0.915468264285578 -2016;;5017;Sant'Antonino;Ind_04_01;UM_11;6.55;A;6,55;0,737595673;0.737595673261292 -2016;;5048;Acquarossa;Ind_04_01;UM_11;61.78;A;61,78;2,26527881;2.26527880980414 -2016;;5049;Blenio;Ind_04_01;UM_11;202;A;202;4,096126828;4.09612682810681 -2016;;5050;Serravalle;Ind_04_01;UM_11;96.8;A;96,8;2,83553746;2.83553746037769 -2016;;5061;Airolo;Ind_04_01;UM_11;94.35;A;94,35;2,799423879;2.79942387857336 -2016;;5063;Bedretto;Ind_04_01;UM_11;75.19;A;75,19;2,499066155;2.49906615513497 -2016;;5064;Bodio;Ind_04_01;UM_11;6.48;A;6,48;0,733643735;0.733643735360968 -2016;;5071;Dalpe;Ind_04_01;UM_11;14.55;A;14,55;1,099332854;1.09933285379319 -2016;;5072;Faido;Ind_04_01;UM_11;132.6;A;132,6;3,318711288;3.31871128806328 -2016;;5073;Giornico;Ind_04_01;UM_11;19.52;A;19,52;1,273320166;1.27332016585199 -2016;;5076;Personico;Ind_04_01;UM_11;38.89;A;38,89;1,797283892;1.79728389223548 -2016;;5077;Pollegio;Ind_04_01;UM_11;5.99;A;5,99;0,705360477;0.705360477329647 -2016;;5078;Prato (Leventina);Ind_04_01;UM_11;16.82;A;16,82;1,181981574;1.18198157363712 -2016;;5079;Quinto;Ind_04_01;UM_11;75.21;A;75,21;2,4993985;2.49939849986084 -2016;;5091;Ascona;Ind_04_01;UM_11;4.95;A;4,95;0,641210034;0.64121003420932 -2016;;5096;Brione sopra Minusio;Ind_04_01;UM_11;3.82;A;3,82;0,563286564;0.563286563675902 -2016;;5097;Brissago;Ind_04_01;UM_11;17.8;A;17,8;1,215927586;1.21592758638376 -2016;;5108;Gordola;Ind_04_01;UM_11;6.94;A;6,94;0,759237142;0.759237142032563 -2016;;5112;Lavertezzo;Ind_04_01;UM_11;58.17;A;58,17;2,198098968;2.19809896812405 -2016;;5113;Locarno;Ind_04_01;UM_11;18.69;A;18,69;1,245955011;1.24595501126465 -2016;;5115;Losone;Ind_04_01;UM_11;9.26;A;9,26;0,877007291;0.877007290872893 -2016;;5117;Mergoscia;Ind_04_01;UM_11;12.17;A;12,17;1,005409535;1.00540953493093 -2016;;5118;Minusio;Ind_04_01;UM_11;5.86;A;5,86;0,697664329;0.697664329102978 -2016;;5120;Muralto;Ind_04_01;UM_11;0.59;A;0,59;0,221372524;0.221372523776955 -2016;;5121;Orselina;Ind_04_01;UM_11;1.94;A;1,94;0,401419601;0.401419601486039 -2016;;5125;Ronco sopra Ascona;Ind_04_01;UM_11;5.01;A;5,01;0,64508445;0.645084450337576 -2016;;5131;Tenero-Contra;Ind_04_01;UM_11;3.69;A;3,69;0,553618881;0.553618881489611 -2016;;5136;Onsernone;Ind_04_01;UM_11;105.38;A;105,38;2,958535655;2.9585356551884 -2016;;5138;Cugnasco-Gerra;Ind_04_01;UM_11;35.82;A;35,82;1,724886413;1.72488641297884 -2016;;5141;Agno;Ind_04_01;UM_11;2.5;A;2,5;0,455688129;0.455688128759442 -2016;;5143;Aranno;Ind_04_01;UM_11;2.59;A;2,59;0,463817993;0.463817993222777 -2016;;5144;Arogno;Ind_04_01;UM_11;8.48;A;8,48;0,839258284;0.839258283836519 -2016;;5146;Astano;Ind_04_01;UM_11;3.81;A;3,81;0,562548794;0.562548794448124 -2016;;5148;Bedano;Ind_04_01;UM_11;1.87;A;1,87;0,394110961;0.394110961123675 -2016;;5149;Bedigliora;Ind_04_01;UM_11;2.57;A;2,57;0,46202372;0.462023719598535 -2016;;5151;Bioggio;Ind_04_01;UM_11;6.41;A;6,41;0,729670394;0.729670393845749 -2016;;5154;Bissone;Ind_04_01;UM_11;1.86;A;1,86;0,393055776;0.393055775933973 -2016;;5160;Brusino Arsizio;Ind_04_01;UM_11;4.15;A;4,15;0,587113084;0.587113083953328 -2016;;5161;Cademario;Ind_04_01;UM_11;3.96;A;3,96;0,57351569;0.573515689738802 -2016;;5162;Cadempino;Ind_04_01;UM_11;0.76;A;0,76;0,251249095;0.251249095302757 -2016;;5167;Canobbio;Ind_04_01;UM_11;1.28;A;1,28;0,326063882;0.326063882382652 -2016;;5171;Caslano;Ind_04_01;UM_11;2.84;A;2,84;0,485687449;0.485687448784125 -2016;;5176;Comano;Ind_04_01;UM_11;2.06;A;2,06;0,413648373;0.413648373199315 -2016;;5178;Croglio;Ind_04_01;UM_11;4.39;A;4,39;0,603851251;0.603851251332351 -2016;;5180;Cureglia;Ind_04_01;UM_11;1.06;A;1,06;0,296722612;0.296722611833893 -2016;;5181;Curio;Ind_04_01;UM_11;2.75;A;2,75;0,477929741;0.477929741449002 -2016;;5186;Grancia;Ind_04_01;UM_11;0.61;A;0,61;0,225093331;0.22509333097388 -2016;;5187;Gravesano;Ind_04_01;UM_11;0.71;A;0,71;0,242843724;0.242843724392062 -2016;;5189;Lamone;Ind_04_01;UM_11;1.86;A;1,86;0,393055776;0.393055775933973 -2016;;5192;Lugano;Ind_04_01;UM_11;75.93;A;75,93;2,511333618;2.51133361827257 -2016;;5193;Magliaso;Ind_04_01;UM_11;1.1;A;1,1;0,302269309;0.302269308902846 -2016;;5194;Manno;Ind_04_01;UM_11;2.37;A;2,37;0,443682075;0.443682075157745 -2016;;5195;Maroggia;Ind_04_01;UM_11;1;A;1;0,288202478;0.288202477915983 -2016;;5196;Massagno;Ind_04_01;UM_11;0.74;A;0,74;0,247921146;0.247921145780096 -2016;;5197;Melano;Ind_04_01;UM_11;4.57;A;4,57;0,616106528;0.616106528147114 -2016;;5198;Melide;Ind_04_01;UM_11;1.68;A;1,68;0,373553106;0.373553105602421 -2016;;5199;Mezzovico-Vira;Ind_04_01;UM_11;11.13;A;11,13;0,961491153;0.961491153324896 -2016;;5200;Miglieglia;Ind_04_01;UM_11;5.1;A;5,1;0,650852831;0.650852831454435 -2016;;5202;Monteggio;Ind_04_01;UM_11;3.36;A;3,36;0,528283868;0.528283868209532 -2016;;5203;Morcote;Ind_04_01;UM_11;2.79;A;2,79;0,481393046;0.481393045745975 -2016;;5205;Muzzano;Ind_04_01;UM_11;1.56;A;1,56;0,35996478;0.359964779543754 -2016;;5206;Neggio;Ind_04_01;UM_11;0.89;A;0,89;0,271889674;0.271889673887134 -2016;;5207;Novaggio;Ind_04_01;UM_11;4.34;A;4,34;0,600402615;0.600402615185678 -2016;;5208;Origlio;Ind_04_01;UM_11;2.08;A;2,08;0,415651525;0.415651524736742 -2016;;5210;Paradiso;Ind_04_01;UM_11;0.89;A;0,89;0,271889674;0.271889673887134 -2016;;5212;Ponte Capriasca;Ind_04_01;UM_11;6.17;A;6,17;0,715880104;0.715880103975904 -2016;;5213;Ponte Tresa;Ind_04_01;UM_11;0.42;A;0,42;0,186776553;0.18677655280121 -2016;;5214;Porza;Ind_04_01;UM_11;1.56;A;1,56;0,35996478;0.359964779543754 -2016;;5216;Pura;Ind_04_01;UM_11;3.04;A;3,04;0,502498191;0.502498190605513 -2016;;5219;Rovio;Ind_04_01;UM_11;5.6;A;5,6;0,682011541;0.682011541215184 -2016;;5221;Savosa;Ind_04_01;UM_11;0.74;A;0,74;0,247921146;0.247921145780096 -2016;;5222;Sessa;Ind_04_01;UM_11;2.88;A;2,88;0,489095824;0.489095823573979 -2016;;5225;Sorengo;Ind_04_01;UM_11;0.85;A;0,85;0,265709556;0.265709555784838 -2016;;5226;Capriasca;Ind_04_01;UM_11;36.38;A;36,38;1,738317322;1.73831732198528 -2016;;5227;Torricella-Taverne;Ind_04_01;UM_11;5.25;A;5,25;0,660354835;0.660354835261916 -2016;;5230;Vernate;Ind_04_01;UM_11;1.51;A;1,51;0,354149134;0.354149133979088 -2016;;5231;Vezia;Ind_04_01;UM_11;1.39;A;1,39;0,33978571;0.339785710271796 -2016;;5233;Vico Morcote;Ind_04_01;UM_11;1.97;A;1,97;0,404511454;0.404511454109173 -2016;;5236;Collina d'Oro;Ind_04_01;UM_11;6.15;A;6,15;0,714718903;0.714718902718413 -2016;;5237;Alto Malcantone;Ind_04_01;UM_11;22.06;A;22,06;1,353631539;1.35363153856162 -2016;;5238;Monteceneri;Ind_04_01;UM_11;36.08;A;36,08;1,731135151;1.73113515111646 -2016;;5242;Balerna;Ind_04_01;UM_11;2.53;A;2,53;0,458414104;0.458414103993964 -2016;;5249;Castel San Pietro;Ind_04_01;UM_11;11.82;A;11,82;0,990846658;0.990846657678729 -2016;;5250;Chiasso;Ind_04_01;UM_11;5.35;A;5,35;0,666614263;0.666614262734816 -2016;;5251;Coldrerio;Ind_04_01;UM_11;2.46;A;2,46;0,452027924;0.452027923873299 -2016;;5254;Mendrisio;Ind_04_01;UM_11;31.77;A;31,77;1,624449886;1.62444988570208 -2016;;5257;Morbio Inferiore;Ind_04_01;UM_11;2.26;A;2,26;0,433263327;0.433263326749245 -2016;;5260;Novazzano;Ind_04_01;UM_11;5.23;A;5,23;0,659095816;0.659095816318275 -2016;;5263;Riva San Vitale;Ind_04_01;UM_11;6.08;A;6,08;0,710639756;0.710639756222257 -2016;;5266;Stabio;Ind_04_01;UM_11;6.15;A;6,15;0,714718903;0.714718902718413 -2016;;5268;Vacallo;Ind_04_01;UM_11;1.64;A;1,64;0,369079254;0.369079254326407 -2016;;5269;Breggia;Ind_04_01;UM_11;25.5;A;25,5;1,455351174;1.45535117448033 -2016;;5281;Biasca;Ind_04_01;UM_11;59;A;59;2,213725238;2.21372523776955 -2016;;5287;Riviera;Ind_04_01;UM_11;86.58;A;86,58;2,68167721;2.68167721014575 -2016;;5304;Bosco/Gurin;Ind_04_01;UM_11;22.01;A;22,01;1,352096634;1.35209663440704 -2016;;5307;Campo (Vallemaggia);Ind_04_01;UM_11;43.31;A;43,31;1,89667012;1.89667011972907 -2016;;5309;Cerentino;Ind_04_01;UM_11;20.1;A;20,1;1,292098848;1.29209884775351 -2016;;5310;Cevio;Ind_04_01;UM_11;151.3;A;151,3;3,545007632;3.54500763190954 -2016;;5315;Linescio;Ind_04_01;UM_11;6.66;A;6,66;0,743763437;0.743763437340287 -2016;;5317;Maggia;Ind_04_01;UM_11;111.15;A;111,15;3,038452448;3.03845244803647 -2016;;5323;Lavizzara;Ind_04_01;UM_11;187.53;A;187,53;3,946690654;3.94669065445589 -2016;;5324;Avegno Gordevio;Ind_04_01;UM_11;27.32;A;27,32;1,506392199;1.5063921990389 -2016;;5396;Terre di Pedemonte;Ind_04_01;UM_11;11.59;A;11,59;0,981159083;0.981159082580097 -2016;;5397;Centovalli;Ind_04_01;UM_11;53.5;A;53,5;2,108019391;2.10801939099592 -2016;;5398;Gambarogno;Ind_04_01;UM_11;51.8;A;51,8;2,074257124;2.07425712406733 -2016;;5399;Verzasca;Ind_04_01;UM_11;143.59;A;143,59;3,453502766;3.45350276645059 -2016;;5401;Aigle;Ind_04_01;UM_11;16.41;A;16,41;1,167486859;1.16748685920833 -2016;;5402;Bex;Ind_04_01;UM_11;96.57;A;96,57;2,832166792;2.83216679161053 -2016;;5403;Chessel;Ind_04_01;UM_11;3.55;A;3,55;0,543015076;0.543015075649876 -2016;;5404;Corbeyrier;Ind_04_01;UM_11;22;A;22;1,351789444;1.35178944443729 -2016;;5405;Gryon;Ind_04_01;UM_11;15.22;A;15,22;1,124359094;1.12435909351711 -2016;;5406;Lavey-Morcles;Ind_04_01;UM_11;14.2;A;14,2;1,086030151;1.08603015129975 -2016;;5407;Leysin;Ind_04_01;UM_11;18.57;A;18,57;1,241948715;1.2419487146828 -2016;;5408;Noville;Ind_04_01;UM_11;10.39;A;10,39;0,928978118;0.9289781178247 -2016;;5409;Ollon;Ind_04_01;UM_11;59.55;A;59,55;2,224019513;2.22401951337891 -2016;;5410;Ormont-Dessous;Ind_04_01;UM_11;64.11;A;64,11;2,307600365;2.30760036471501 -2016;;5411;Ormont-Dessus;Ind_04_01;UM_11;61.59;A;61,59;2,261792775;2.2617927754715 -2016;;5412;Rennaz;Ind_04_01;UM_11;2.19;A;2,19;0,426500719;0.426500719256649 -2016;;5413;Roche (VD);Ind_04_01;UM_11;6.45;A;6,45;0,731943516;0.731943515844008 -2016;;5414;Villeneuve (VD);Ind_04_01;UM_11;31.98;A;31,98;1,629809857;1.62980985746671 -2016;;5415;Yvorne;Ind_04_01;UM_11;12.2;A;12,2;1,006647979;1.00664797867891 -2016;;5421;Apples;Ind_04_01;UM_11;12.88;A;12,88;1,034321714;1.03432171368807 -2016;;5422;Aubonne;Ind_04_01;UM_11;14.34;A;14,34;1,09137069;1.09137069004575 -2016;;5423;Ballens;Ind_04_01;UM_11;8.45;A;8,45;0,837772431;0.837772431475226 -2016;;5424;Berolle;Ind_04_01;UM_11;9.61;A;9,61;0,893427682;0.893427681539547 -2016;;5425;Bière;Ind_04_01;UM_11;25.06;A;25,06;1,442740568;1.44274056816166 -2016;;5426;Bougy-Villars;Ind_04_01;UM_11;1.77;A;1,77;0,383428459;0.383428458581435 -2016;;5427;Féchy;Ind_04_01;UM_11;2.7;A;2,7;0,473564995;0.473564994850405 -2016;;5428;Gimel;Ind_04_01;UM_11;18.88;A;18,88;1,252272102;1.25227210184852 -2016;;5429;Longirod;Ind_04_01;UM_11;9.45;A;9,45;0,885958981;0.885958980549791 -2016;;5430;Marchissy;Ind_04_01;UM_11;11.98;A;11,98;0,997530353;0.997530353401546 -2016;;5431;Mollens (VD);Ind_04_01;UM_11;10.99;A;10,99;0,955424903;0.955424902524144 -2016;;5434;Saint-George;Ind_04_01;UM_11;12.32;A;12,32;1,011586592;1.01158659202837 -2016;;5435;Saint-Livres;Ind_04_01;UM_11;8.12;A;8,12;0,821250648;0.821250647737054 -2016;;5436;Saint-Oyens;Ind_04_01;UM_11;3.06;A;3,06;0,504148435;0.504148435410994 -2016;;5437;Saubraz;Ind_04_01;UM_11;3.71;A;3,71;0,555117176;0.555117176195572 -2016;;5451;Avenches;Ind_04_01;UM_11;19.47;A;19,47;1,271688331;1.27168833105895 -2016;;5456;Cudrefin;Ind_04_01;UM_11;15.51;A;15,51;1,135020249;1.13502024870701 -2016;;5458;Faoug;Ind_04_01;UM_11;3.48;A;3,48;0,537634751;0.537634751112366 -2016;;5464;Vully-les-Lacs;Ind_04_01;UM_11;20.92;A;20,92;1,318191633;1.31819163263655 -2016;;5471;Bettens;Ind_04_01;UM_11;3.74;A;3,74;0,557357066;0.557357066300996 -2016;;5472;Bournens;Ind_04_01;UM_11;3.91;A;3,91;0,569883508;0.569883508238946 -2016;;5473;Boussens;Ind_04_01;UM_11;3.16;A;3,16;0,512319931;0.512319931053872 -2016;;5474;La Chaux (Cossonay);Ind_04_01;UM_11;6.74;A;6,74;0,74821715;0.748217150422517 -2016;;5475;Chavannes-le-Veyron;Ind_04_01;UM_11;2.64;A;2,64;0,4682736;0.468273599780139 -2016;;5476;Chevilly;Ind_04_01;UM_11;3.89;A;3,89;0,568424137;0.568424137064209 -2016;;5477;Cossonay;Ind_04_01;UM_11;8.28;A;8,28;0,829302317;0.829302317211785 -2016;;5478;Cottens (VD);Ind_04_01;UM_11;2.35;A;2,35;0,441806033;0.441806032610177 -2016;;5479;Cuarnens;Ind_04_01;UM_11;7.13;A;7,13;0,769559981;0.769559981297356 -2016;;5480;Daillens;Ind_04_01;UM_11;5.52;A;5,52;0,677122507;0.677122506558863 -2016;;5481;Dizy;Ind_04_01;UM_11;3.04;A;3,04;0,502498191;0.502498190605513 -2016;;5482;Eclépens;Ind_04_01;UM_11;5.8;A;5,8;0,694083479;0.694083479133522 -2016;;5483;Ferreyres;Ind_04_01;UM_11;3.16;A;3,16;0,512319931;0.512319931053872 -2016;;5484;Gollion;Ind_04_01;UM_11;5.45;A;5,45;0,672815459;0.672815459178201 -2016;;5485;Grancy;Ind_04_01;UM_11;5.67;A;5,67;0,686260875;0.686260875418448 -2016;;5486;L'Isle;Ind_04_01;UM_11;16.22;A;16,22;1,160708421;1.16070842137529 -2016;;5487;Lussery-Villars;Ind_04_01;UM_11;3.74;A;3,74;0,557357066;0.557357066300996 -2016;;5488;Mauraz;Ind_04_01;UM_11;0.5;A;0,5;0,203789926;0.203789926489158 -2016;;5489;Mex (VD);Ind_04_01;UM_11;2.83;A;2,83;0,484831611;0.484831611205027 -2016;;5490;Moiry;Ind_04_01;UM_11;6.66;A;6,66;0,743763437;0.743763437340287 -2016;;5491;Mont-la-Ville;Ind_04_01;UM_11;19.79;A;19,79;1,282096184;1.28209618406737 -2016;;5492;Montricher;Ind_04_01;UM_11;26.02;A;26,02;1,470115162;1.47011516166771 -2016;;5493;Orny;Ind_04_01;UM_11;5.55;A;5,55;0,67896002;0.678960020131425 -2016;;5494;Pampigny;Ind_04_01;UM_11;11.09;A;11,09;0,959761851;0.959761851289663 -2016;;5495;Penthalaz;Ind_04_01;UM_11;3.87;A;3,87;0,566961009;0.566961009445669 -2016;;5496;Penthaz;Ind_04_01;UM_11;3.84;A;3,84;0,564759211;0.564759210799917 -2016;;5497;Pompaples;Ind_04_01;UM_11;4.44;A;4,44;0,607280304;0.607280303607397 -2016;;5498;La Sarraz;Ind_04_01;UM_11;7.7;A;7,7;0,79972942;0.799729420324292 -2016;;5499;Senarclens;Ind_04_01;UM_11;3.97;A;3,97;0,574239369;0.574239369130455 -2016;;5500;Sévery;Ind_04_01;UM_11;2.38;A;2,38;0,444617128;0.444617127986599 -2016;;5501;Sullens;Ind_04_01;UM_11;3.91;A;3,91;0,569883508;0.569883508238946 -2016;;5503;Vufflens-la-Ville;Ind_04_01;UM_11;5.38;A;5,38;0,668480662;0.668480661896655 -2016;;5511;Assens;Ind_04_01;UM_11;5.34;A;5,34;0,665990967;0.665990967355199 -2016;;5512;Bercher;Ind_04_01;UM_11;4.27;A;4,27;0,595540976;0.595540975536039 -2016;;5513;Bioley-Orjulaz;Ind_04_01;UM_11;3.12;A;3,12;0,509067073;0.509067073207419 -2016;;5514;Bottens;Ind_04_01;UM_11;6.88;A;6,88;0,755948013;0.755948012594225 -2016;;5515;Bretigny-sur-Morrens;Ind_04_01;UM_11;2.87;A;2,87;0,488245961;0.488245960510417 -2016;;5516;Cugy (VD);Ind_04_01;UM_11;2.91;A;2,91;0,491636598;0.491636598196082 -2016;;5518;Echallens;Ind_04_01;UM_11;6.66;A;6,66;0,743763437;0.743763437340287 -2016;;5520;Essertines-sur-Yverdon;Ind_04_01;UM_11;9.75;A;9,75;0,899911949;0.899911948859386 -2016;;5521;Etagnières;Ind_04_01;UM_11;3.78;A;3,78;0,560329658;0.560329658403631 -2016;;5522;Fey;Ind_04_01;UM_11;7.34;A;7,34;0,780810672;0.780810671771678 -2016;;5523;Froideville;Ind_04_01;UM_11;7.08;A;7,08;0,766856917;0.766856917162871 -2016;;5527;Morrens (VD);Ind_04_01;UM_11;3.67;A;3,67;0,552116521;0.552116520832577 -2016;;5529;Oulens-sous-Echallens;Ind_04_01;UM_11;5.87;A;5,87;0,698259352;0.698259352093101 -2016;;5530;Pailly;Ind_04_01;UM_11;5.77;A;5,77;0,692286108;0.692286108453569 -2016;;5531;Penthéréaz;Ind_04_01;UM_11;5.68;A;5,68;0,686865777;0.686865777144897 -2016;;5533;Poliez-Pittet;Ind_04_01;UM_11;5.01;A;5,01;0,64508445;0.645084450337576 -2016;;5534;Rueyres;Ind_04_01;UM_11;2;A;2;0,407579853;0.407579852978316 -2016;;5535;Saint-Barthélemy (VD);Ind_04_01;UM_11;4.12;A;4,12;0,584987139;0.584987139432039 -2016;;5537;Villars-le-Terroir;Ind_04_01;UM_11;7.09;A;7,09;0,767398292;0.767398291686469 -2016;;5539;Vuarrens;Ind_04_01;UM_11;8.97;A;8,97;0,863165219;0.863165218509126 -2016;;5540;Montilliez;Ind_04_01;UM_11;11.86;A;11,86;0,992521801;0.992521801153095 -2016;;5541;Goumoëns;Ind_04_01;UM_11;10.69;A;10,69;0,942294298;0.942294297913447 -2016;;5551;Bonvillars;Ind_04_01;UM_11;7.52;A;7,52;0,790326657;0.790326657428676 -2016;;5552;Bullet;Ind_04_01;UM_11;16.82;A;16,82;1,181981574;1.18198157363712 -2016;;5553;Champagne;Ind_04_01;UM_11;3.92;A;3,92;0,570611794;0.570611794169642 -2016;;5554;Concise;Ind_04_01;UM_11;11.37;A;11,37;0,971802345;0.971802345288638 -2016;;5555;Corcelles-près-Concise;Ind_04_01;UM_11;4.06;A;4,06;0,580711902;0.580711902068715 -2016;;5556;Fiez;Ind_04_01;UM_11;6.83;A;6,83;0,7531961;0.75319609951945 -2016;;5557;Fontaines-sur-Grandson;Ind_04_01;UM_11;7.86;A;7,86;0,807995577;0.807995577126839 -2016;;5559;Giez;Ind_04_01;UM_11;4.76;A;4,76;0,628783572;0.628783572462023 -2016;;5560;Grandevent;Ind_04_01;UM_11;3.44;A;3,44;0,534535966;0.53453596592987 -2016;;5561;Grandson;Ind_04_01;UM_11;7.85;A;7,85;0,807481421;0.807481421441859 -2016;;5562;Mauborget;Ind_04_01;UM_11;5.52;A;5,52;0,677122507;0.677122506558863 -2016;;5563;Mutrux;Ind_04_01;UM_11;3.23;A;3,23;0,517963279;0.517963279137072 -2016;;5564;Novalles;Ind_04_01;UM_11;2.06;A;2,06;0,413648373;0.413648373199315 -2016;;5565;Onnens (VD);Ind_04_01;UM_11;5.14;A;5,14;0,65340021;0.653400210394312 -2016;;5566;Provence;Ind_04_01;UM_11;31.86;A;31,86;1,626749179;1.62674917897703 -2016;;5568;Sainte-Croix;Ind_04_01;UM_11;39.47;A;39,47;1,810636512;1.81063651153116 -2016;;5571;Tévenon;Ind_04_01;UM_11;14.28;A;14,28;1,089085094;1.08908509446889 -2016;;5581;Belmont-sur-Lausanne;Ind_04_01;UM_11;2.65;A;2,65;0,469159643;0.469159643334567 -2016;;5582;Cheseaux-sur-Lausanne;Ind_04_01;UM_11;4.58;A;4,58;0,616780237;0.616780236963102 -2016;;5583;Crissier;Ind_04_01;UM_11;5.5;A;5,5;0,675894722;0.675894722218645 -2016;;5584;Epalinges;Ind_04_01;UM_11;4.58;A;4,58;0,616780237;0.616780236963102 -2016;;5585;Jouxtens-Mézery;Ind_04_01;UM_11;1.93;A;1,93;0,400383678;0.400383678206844 -2016;;5586;Lausanne;Ind_04_01;UM_11;41.38;A;41,38;1,853928384;1.85392838408031 -2016;;5587;Le Mont-sur-Lausanne;Ind_04_01;UM_11;9.8;A;9,8;0,902216465;0.902216464665628 -2016;;5588;Paudex;Ind_04_01;UM_11;0.49;A;0,49;0,201741735;0.201741734541188 -2016;;5589;Prilly;Ind_04_01;UM_11;2.2;A;2,2;0,427473356;0.427473356139547 -2016;;5590;Pully;Ind_04_01;UM_11;5.86;A;5,86;0,697664329;0.697664329102978 -2016;;5591;Renens (VD);Ind_04_01;UM_11;2.95;A;2,95;0,495004012;0.49500401151596 -2016;;5592;Romanel-sur-Lausanne;Ind_04_01;UM_11;2.88;A;2,88;0,489095824;0.489095823573979 -2016;;5601;Chexbres;Ind_04_01;UM_11;2.15;A;2,15;0,422587786;0.422587785904139 -2016;;5604;Forel (Lavaux);Ind_04_01;UM_11;18.51;A;18,51;1,239940712;1.23994071221396 -2016;;5606;Lutry;Ind_04_01;UM_11;8.46;A;8,46;0,838268008;0.838268008230471 -2016;;5607;Puidoux;Ind_04_01;UM_11;22.86;A;22,86;1,377957502;1.37795750181572 -2016;;5609;Rivaz;Ind_04_01;UM_11;0.31;A;0,31;0,160464349;0.160464348581992 -2016;;5610;Saint-Saphorin (Lavaux);Ind_04_01;UM_11;0.89;A;0,89;0,271889674;0.271889673887134 -2016;;5611;Savigny;Ind_04_01;UM_11;16.01;A;16,01;1,153170108;1.15317010848936 -2016;;5613;Bourg-en-Lavaux;Ind_04_01;UM_11;9.65;A;9,65;0,895285122;0.895285121551904 -2016;;5621;Aclens;Ind_04_01;UM_11;3.9;A;3,9;0,56915429;0.569154290399325 -2016;;5622;Bremblens;Ind_04_01;UM_11;2.91;A;2,91;0,491636598;0.491636598196082 -2016;;5623;Buchillon;Ind_04_01;UM_11;2.1;A;2,1;0,417645069;0.417645068666585 -2016;;5624;Bussigny;Ind_04_01;UM_11;4.81;A;4,81;0,63207738;0.632077380082494 -2016;;5625;Bussy-Chardonney;Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;5627;Chavannes-près-Renens;Ind_04_01;UM_11;1.65;A;1,65;0,370202786;0.37020278585784 -2016;;5628;Chigny;Ind_04_01;UM_11;0.89;A;0,89;0,271889674;0.271889673887134 -2016;;5629;Clarmont;Ind_04_01;UM_11;1.02;A;1,02;0,291070235;0.291070234896066 -2016;;5631;Denens;Ind_04_01;UM_11;3.3;A;3,3;0,523545801;0.52354580058846 -2016;;5632;Denges;Ind_04_01;UM_11;1.66;A;1,66;0,371322918;0.371322917875634 -2016;;5633;Echandens;Ind_04_01;UM_11;3.88;A;3,88;0,567693045;0.56769304462396 -2016;;5634;Echichens;Ind_04_01;UM_11;13.27;A;13,27;1,049864309;1.04986430934413 -2016;;5635;Ecublens (VD);Ind_04_01;UM_11;5.72;A;5,72;0,689280076;0.68928007554545 -2016;;5636;Etoy;Ind_04_01;UM_11;4.92;A;4,92;0,639264021;0.639264020512973 -2016;;5637;Lavigny;Ind_04_01;UM_11;4;A;4;0,576404956;0.576404955831966 -2016;;5638;Lonay;Ind_04_01;UM_11;3.72;A;3,72;0,555864809;0.555864809094905 -2016;;5639;Lully (VD);Ind_04_01;UM_11;2.05;A;2,05;0,412643151;0.41264315087939 -2016;;5640;Lussy-sur-Morges;Ind_04_01;UM_11;2.34;A;2,34;0,440865018;0.440865017627817 -2016;;5642;Morges;Ind_04_01;UM_11;3.83;A;3,83;0,564023368;0.564023367867481 -2016;;5643;Préverenges;Ind_04_01;UM_11;1.87;A;1,87;0,394110961;0.394110961123675 -2016;;5644;Reverolle;Ind_04_01;UM_11;1.18;A;1,18;0,313068025;0.31306802546213 -2016;;5645;Romanel-sur-Morges;Ind_04_01;UM_11;1.76;A;1,76;0,382343793;0.382343793159202 -2016;;5646;Saint-Prex;Ind_04_01;UM_11;5.54;A;5,54;0,678348069;0.678348068659517 -2016;;5648;Saint-Sulpice (VD);Ind_04_01;UM_11;1.86;A;1,86;0,393055776;0.393055775933973 -2016;;5649;Tolochenaz;Ind_04_01;UM_11;1.59;A;1,59;0,363409497;0.363409497069478 -2016;;5650;Vaux-sur-Morges;Ind_04_01;UM_11;2.1;A;2,1;0,417645069;0.417645068666585 -2016;;5651;Villars-Sainte-Croix;Ind_04_01;UM_11;1.65;A;1,65;0,370202786;0.37020278585784 -2016;;5652;Villars-sous-Yens;Ind_04_01;UM_11;3.04;A;3,04;0,502498191;0.502498190605513 -2016;;5653;Vufflens-le-Château;Ind_04_01;UM_11;2.14;A;2,14;0,421603878;0.421603878199185 -2016;;5654;Vullierens;Ind_04_01;UM_11;6.84;A;6,84;0,753747286;0.75374728590827 -2016;;5655;Yens;Ind_04_01;UM_11;9.51;A;9,51;0,888767098;0.888767098464744 -2016;;5661;Boulens;Ind_04_01;UM_11;3.42;A;3,42;0,532979817;0.532979817166693 -2016;;5663;Bussy-sur-Moudon;Ind_04_01;UM_11;3.12;A;3,12;0,509067073;0.509067073207419 -2016;;5665;Chavannes-sur-Moudon;Ind_04_01;UM_11;5.15;A;5,15;0,654035505;0.654035504866594 -2016;;5669;Curtilles;Ind_04_01;UM_11;4.96;A;4,96;0,641857394;0.641857394327967 -2016;;5671;Dompierre (VD);Ind_04_01;UM_11;3.21;A;3,21;0,516357188;0.516357187583256 -2016;;5673;Hermenches;Ind_04_01;UM_11;4.77;A;4,77;0,629443713;0.62944371287739 -2016;;5674;Lovatens;Ind_04_01;UM_11;3.47;A;3,47;0,536861732;0.536861731659919 -2016;;5675;Lucens;Ind_04_01;UM_11;19.27;A;19,27;1,265139944;1.26513994391771 -2016;;5678;Moudon;Ind_04_01;UM_11;15.65;A;15,65;1,140131334;1.14013133389697 -2016;;5680;Ogens;Ind_04_01;UM_11;3.4;A;3,4;0,531419112;0.531419111569675 -2016;;5683;Prévonloup;Ind_04_01;UM_11;1.84;A;1,84;0,390936861;0.390936861436114 -2016;;5684;Rossenges;Ind_04_01;UM_11;1.08;A;1,08;0,299508801;0.299508800770638 -2016;;5688;Syens;Ind_04_01;UM_11;2.52;A;2,52;0,45750725;0.457507250278965 -2016;;5690;Villars-le-Comte;Ind_04_01;UM_11;4.2;A;4,2;0,59063932;0.590639320366527 -2016;;5692;Vucherens;Ind_04_01;UM_11;3.28;A;3,28;0,521956887;0.521956887058954 -2016;;5693;Montanaire;Ind_04_01;UM_11;33.5;A;33,5;1,66809244;1.66809243966771 -2016;;5701;Arnex-sur-Nyon;Ind_04_01;UM_11;2.04;A;2,04;0,411635474;0.411635473793139 -2016;;5702;Arzier-Le Muids;Ind_04_01;UM_11;51.9;A;51,9;2,076258337;2.07625833738766 -2016;;5703;Bassins;Ind_04_01;UM_11;20.77;A;20,77;1,3134573;1.31345730045231 -2016;;5704;Begnins;Ind_04_01;UM_11;4.79;A;4,79;0,630761921;0.630761921049782 -2016;;5705;Bogis-Bossey;Ind_04_01;UM_11;2.45;A;2,45;0,451108232;0.451108232332814 -2016;;5706;Borex;Ind_04_01;UM_11;1.99;A;1,99;0,406559626;0.406559626464626 -2016;;5707;Chavannes-de-Bogis;Ind_04_01;UM_11;2.86;A;2,86;0,487394616;0.487394615554963 -2016;;5708;Chavannes-des-Bois;Ind_04_01;UM_11;2.12;A;2,12;0,419629142;0.41962914191826 -2016;;5709;Chéserex;Ind_04_01;UM_11;10.58;A;10,58;0,937433662;0.937433661850126 -2016;;5710;Coinsins;Ind_04_01;UM_11;2.91;A;2,91;0,491636598;0.491636598196082 -2016;;5711;Commugny;Ind_04_01;UM_11;6.53;A;6,53;0,736468712;0.736468712063343 -2016;;5712;Coppet;Ind_04_01;UM_11;1.87;A;1,87;0,394110961;0.394110961123675 -2016;;5713;Crans (VD);Ind_04_01;UM_11;4.31;A;4,31;0,598323892;0.598323892447472 -2016;;5714;Crassier;Ind_04_01;UM_11;2.03;A;2,03;0,410625324;0.410625323868527 -2016;;5715;Duillier;Ind_04_01;UM_11;4.11;A;4,11;0,584276772;0.584276772273305 -2016;;5716;Eysins;Ind_04_01;UM_11;2.38;A;2,38;0,444617128;0.444617127986599 -2016;;5717;Founex;Ind_04_01;UM_11;4.79;A;4,79;0,630761921;0.630761921049782 -2016;;5718;Genolier;Ind_04_01;UM_11;4.86;A;4,86;0,635354112;0.635354112149906 -2016;;5719;Gingins;Ind_04_01;UM_11;12.56;A;12,56;1,021392184;1.02139218401064 -2016;;5720;Givrins;Ind_04_01;UM_11;3.96;A;3,96;0,57351569;0.573515689738802 -2016;;5721;Gland;Ind_04_01;UM_11;8.32;A;8,32;0,831303049;0.831303049473484 -2016;;5722;Grens;Ind_04_01;UM_11;2.55;A;2,55;0,460222451;0.460222450675896 -2016;;5723;Mies;Ind_04_01;UM_11;3.45;A;3,45;0,535312344;0.535312343922078 -2016;;5724;Nyon;Ind_04_01;UM_11;6.8;A;6,8;0,751540115;0.751540114886096 -2016;;5725;Prangins;Ind_04_01;UM_11;6.07;A;6,07;0,710055108;0.710055108030961 -2016;;5726;La Rippe;Ind_04_01;UM_11;16.59;A;16,59;1,173872432;1.17387243204446 -2016;;5727;Saint-Cergue;Ind_04_01;UM_11;24.28;A;24,28;1,420110216;1.42011021606192 -2016;;5728;Signy-Avenex;Ind_04_01;UM_11;1.94;A;1,94;0,401419601;0.401419601486039 -2016;;5729;Tannay;Ind_04_01;UM_11;1.81;A;1,81;0,387736779;0.38773677873167 -2016;;5730;Trélex;Ind_04_01;UM_11;5.77;A;5,77;0,692286108;0.692286108453569 -2016;;5731;Le Vaud;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;5732;Vich;Ind_04_01;UM_11;1.55;A;1,55;0,358809191;0.358809191394555 -2016;;5741;L'Abergement;Ind_04_01;UM_11;5.79;A;5,79;0,693484873;0.693484873175561 -2016;;5742;Agiez;Ind_04_01;UM_11;5.46;A;5,46;0,673432438;0.673432438179171 -2016;;5743;Arnex-sur-Orbe;Ind_04_01;UM_11;7.62;A;7,62;0,795564135;0.795564134605171 -2016;;5744;Ballaigues;Ind_04_01;UM_11;9.06;A;9,06;0,867484671;0.867484671097322 -2016;;5745;Baulmes;Ind_04_01;UM_11;22.5;A;22,5;1,367064386;1.36706438627833 -2016;;5746;Bavois;Ind_04_01;UM_11;9.35;A;9,35;0,8812589;0.881258899750314 -2016;;5747;Bofflens;Ind_04_01;UM_11;4.21;A;4,21;0,591342044;0.591342044375167 -2016;;5748;Bretonnières;Ind_04_01;UM_11;5.45;A;5,45;0,672815459;0.672815459178201 -2016;;5749;Chavornay;Ind_04_01;UM_11;19.29;A;19,29;1,265796307;1.26579630709749 -2016;;5750;Les Clées;Ind_04_01;UM_11;7.04;A;7,04;0,764687586;0.764687586318403 -2016;;5752;Croy;Ind_04_01;UM_11;4.48;A;4,48;0,610009667;0.610009667038621 -2016;;5754;Juriens;Ind_04_01;UM_11;9.35;A;9,35;0,8812589;0.881258899750314 -2016;;5755;Lignerolle;Ind_04_01;UM_11;10.64;A;10,64;0,940088033;0.940088033359829 -2016;;5756;Montcherand;Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;5757;Orbe;Ind_04_01;UM_11;12.05;A;12,05;1,000440429;1.00044042937938 -2016;;5758;La Praz;Ind_04_01;UM_11;5.12;A;5,12;0,652127765;0.652127764765305 -2016;;5759;Premier;Ind_04_01;UM_11;6.12;A;6,12;0,712973555;0.712973554807404 -2016;;5760;Rances;Ind_04_01;UM_11;9.83;A;9,83;0,903596353;0.903596353003957 -2016;;5761;Romainmôtier-Envy;Ind_04_01;UM_11;6.98;A;6,98;0,761422002;0.761422001634344 -2016;;5762;Sergey;Ind_04_01;UM_11;1.46;A;1,46;0,348236379;0.34823637903627 -2016;;5763;Valeyres-sous-Rances;Ind_04_01;UM_11;6.34;A;6,34;0,725675297;0.725675297137519 -2016;;5764;Vallorbe;Ind_04_01;UM_11;23.19;A;23,19;1,387867752;1.38786775210811 -2016;;5765;Vaulion;Ind_04_01;UM_11;13.15;A;13,15;1,045106592;1.04510659161705 -2016;;5766;Vuiteboeuf;Ind_04_01;UM_11;5.06;A;5,06;0,648295443;0.648295443051375 -2016;;5785;Corcelles-le-Jorat;Ind_04_01;UM_11;7.94;A;7,94;0,812097104;0.81209710387286 -2016;;5788;Essertes;Ind_04_01;UM_11;1.66;A;1,66;0,371322918;0.371322917875634 -2016;;5790;Maracon;Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;5792;Montpreveyres;Ind_04_01;UM_11;4.12;A;4,12;0,584987139;0.584987139432039 -2016;;5798;Ropraz;Ind_04_01;UM_11;4.81;A;4,81;0,63207738;0.632077380082494 -2016;;5799;Servion;Ind_04_01;UM_11;6.32;A;6,32;0,724529795;0.724529794770435 -2016;;5803;Vulliens;Ind_04_01;UM_11;6.63;A;6,63;0,742086404;0.742086403780538 -2016;;5804;Jorat-Menthue;Ind_04_01;UM_11;17.65;A;17,65;1,210793457;1.21079345682387 -2016;;5805;Oron;Ind_04_01;UM_11;24.62;A;24,62;1,43001876;1.43001875965932 -2016;;5806;Jorat-Mézières;Ind_04_01;UM_11;11.08;A;11,08;0,959329039;0.959329038707884 -2016;;5812;Champtauroz;Ind_04_01;UM_11;3.05;A;3,05;0,503323989;0.503323989339455 -2016;;5813;Chevroux;Ind_04_01;UM_11;3.4;A;3,4;0,531419112;0.531419111569675 -2016;;5816;Corcelles-près-Payerne;Ind_04_01;UM_11;12.12;A;12,12;1,003342065;1.00334206505866 -2016;;5817;Grandcour;Ind_04_01;UM_11;10.2;A;10,2;0,920444901;0.920444901351791 -2016;;5819;Henniez;Ind_04_01;UM_11;2.61;A;2,61;0,465605352;0.465605352420633 -2016;;5821;Missy;Ind_04_01;UM_11;3.11;A;3,11;0,508250606;0.508250605844399 -2016;;5822;Payerne;Ind_04_01;UM_11;24.18;A;24,18;1,417182754;1.41718275424722 -2016;;5827;Trey;Ind_04_01;UM_11;3.79;A;3,79;0,561070346;0.561070345651505 -2016;;5828;Treytorrens (Payerne);Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;5830;Villarzel;Ind_04_01;UM_11;7.66;A;7,66;0,797649496;0.797649496333541 -2016;;5831;Valbroye;Ind_04_01;UM_11;33.55;A;33,55;1,669336821;1.66933682062381 -2016;;5841;Château-d'Oex;Ind_04_01;UM_11;113.66;A;113,66;3,072568235;3.07256823461317 -2016;;5842;Rossinière;Ind_04_01;UM_11;23.36;A;23,36;1,392945516;1.39294551614508 -2016;;5843;Rougemont;Ind_04_01;UM_11;48.54;A;48,54;2,007925506;2.00792550612849 -2016;;5851;Allaman;Ind_04_01;UM_11;2.6;A;2,6;0,464712532;0.464712532131395 -2016;;5852;Bursinel;Ind_04_01;UM_11;1.78;A;1,78;0,384510064;0.384510064280383 -2016;;5853;Bursins;Ind_04_01;UM_11;3.37;A;3,37;0,529069421;0.529069420863837 -2016;;5854;Burtigny;Ind_04_01;UM_11;5.68;A;5,68;0,686865777;0.686865777144897 -2016;;5855;Dully;Ind_04_01;UM_11;1.65;A;1,65;0,370202786;0.37020278585784 -2016;;5856;Essertines-sur-Rolle;Ind_04_01;UM_11;6.95;A;6,95;0,759783946;0.759783945950783 -2016;;5857;Gilly;Ind_04_01;UM_11;7.76;A;7,76;0,802839203;0.802839202972078 -2016;;5858;Luins;Ind_04_01;UM_11;2.67;A;2,67;0,470926729;0.47092672922585 -2016;;5859;Mont-sur-Rolle;Ind_04_01;UM_11;3.86;A;3,86;0,566228028;0.566228027872944 -2016;;5860;Perroy;Ind_04_01;UM_11;2.91;A;2,91;0,491636598;0.491636598196082 -2016;;5861;Rolle;Ind_04_01;UM_11;2.74;A;2,74;0,477059987;0.477059986876641 -2016;;5862;Tartegnin;Ind_04_01;UM_11;1.09;A;1,09;0,300892221;0.300892220607039 -2016;;5863;Vinzel;Ind_04_01;UM_11;1.1;A;1,1;0,302269309;0.302269308902846 -2016;;5871;L'Abbaye;Ind_04_01;UM_11;31.88;A;31,88;1,627259692;1.62725969183409 -2016;;5872;Le Chenit;Ind_04_01;UM_11;99.19;A;99,19;2,870328846;2.8703288463845 -2016;;5873;Le Lieu;Ind_04_01;UM_11;32.54;A;32,54;1,644017684;1.64401768412957 -2016;;5881;Blonay;Ind_04_01;UM_11;16.07;A;16,07;1,155328931;1.15532893117501 -2016;;5882;Chardonne;Ind_04_01;UM_11;10.34;A;10,34;0,926740152;0.926740152353008 -2016;;5883;Corseaux;Ind_04_01;UM_11;1.07;A;1,07;0,298118961;0.298118961249191 -2016;;5884;Corsier-sur-Vevey;Ind_04_01;UM_11;6.74;A;6,74;0,74821715;0.748217150422517 -2016;;5885;Jongny;Ind_04_01;UM_11;2.16;A;2,16;0,423569408;0.423569408099937 -2016;;5886;Montreux;Ind_04_01;UM_11;33.41;A;33,41;1,665850211;1.66585021149311 -2016;;5888;Saint-Légier-La Chiésaz;Ind_04_01;UM_11;15.17;A;15,17;1,122510729;1.12251072946354 -2016;;5889;La Tour-de-Peilz;Ind_04_01;UM_11;3.26;A;3,26;0,520363122;0.520363121851208 -2016;;5890;Vevey;Ind_04_01;UM_11;2.4;A;2,4;0,446481359;0.446481358921725 -2016;;5891;Veytaux;Ind_04_01;UM_11;6.77;A;6,77;0,749880473;0.749880473298711 -2016;;5902;Belmont-sur-Yverdon;Ind_04_01;UM_11;6.46;A;6,46;0,732510694;0.732510694166888 -2016;;5903;Bioley-Magnoux;Ind_04_01;UM_11;4.29;A;4,29;0,596934056;0.596934055744816 -2016;;5904;Chamblon;Ind_04_01;UM_11;2.86;A;2,86;0,487394616;0.487394615554963 -2016;;5905;Champvent;Ind_04_01;UM_11;9.03;A;9,03;0,866047247;0.866047247291117 -2016;;5907;Chavannes-le-Chêne;Ind_04_01;UM_11;4;A;4;0,576404956;0.576404955831966 -2016;;5908;Chêne-Pâquier;Ind_04_01;UM_11;2.11;A;2,11;0,418638281;0.418638280696218 -2016;;5909;Cheseaux-Noréaz;Ind_04_01;UM_11;5.9;A;5,9;0,700041387;0.700041386514958 -2016;;5910;Cronay;Ind_04_01;UM_11;6.57;A;6,57;0,738720915;0.738720915217186 -2016;;5911;Cuarny;Ind_04_01;UM_11;4.56;A;4,56;0,615432082;0.615432081827655 -2016;;5912;Démoret;Ind_04_01;UM_11;4.28;A;4,28;0,596237922;0.596237922498382 -2016;;5913;Donneloye;Ind_04_01;UM_11;9.01;A;9,01;0,865087638;0.865087637858144 -2016;;5914;Ependes (VD);Ind_04_01;UM_11;4.81;A;4,81;0,63207738;0.632077380082494 -2016;;5919;Mathod;Ind_04_01;UM_11;6.59;A;6,59;0,739844446;0.739844445775498 -2016;;5921;Molondin;Ind_04_01;UM_11;5.49;A;5,49;0,675279993;0.67527999292164 -2016;;5922;Montagny-près-Yverdon;Ind_04_01;UM_11;3.52;A;3,52;0,540715778;0.540715777774916 -2016;;5923;Oppens;Ind_04_01;UM_11;3.6;A;3,6;0,546825755;0.54682575451133 -2016;;5924;Orges;Ind_04_01;UM_11;4.02;A;4,02;0,577844171;0.577844171445199 -2016;;5925;Orzens;Ind_04_01;UM_11;4.2;A;4,2;0,59063932;0.590639320366527 -2016;;5926;Pomy;Ind_04_01;UM_11;5.63;A;5,63;0,683835918;0.683835917745637 -2016;;5928;Rovray;Ind_04_01;UM_11;3.2;A;3,2;0,515552266;0.515552265523216 -2016;;5929;Suchy;Ind_04_01;UM_11;6.64;A;6,64;0,742645836;0.742645835751269 -2016;;5930;Suscévaz;Ind_04_01;UM_11;4.16;A;4,16;0,587820024;0.587820023503757 -2016;;5931;Treycovagnes;Ind_04_01;UM_11;2.08;A;2,08;0,415651525;0.415651524736742 -2016;;5932;Ursins;Ind_04_01;UM_11;3.36;A;3,36;0,528283868;0.528283868209532 -2016;;5933;Valeyres-sous-Montagny;Ind_04_01;UM_11;2.28;A;2,28;0,435176198;0.435176198420089 -2016;;5934;Valeyres-sous-Ursins;Ind_04_01;UM_11;2.87;A;2,87;0,488245961;0.488245960510417 -2016;;5935;Villars-Epeney;Ind_04_01;UM_11;0.86;A;0,86;0,267267983;0.267267982964935 -2016;;5937;Vugelles-La Mothe;Ind_04_01;UM_11;3.07;A;3,07;0,504971535;0.504971535445437 -2016;;5938;Yverdon-les-Bains;Ind_04_01;UM_11;13.54;A;13,54;1,060491135;1.06049113549779 -2016;;5939;Yvonand;Ind_04_01;UM_11;13.4;A;13,4;1,054994291;1.05499429141139 -2016;;6002;Brig-Glis;Ind_04_01;UM_11;37.67;A;37,67;1,768868388;1.76886838797896 -2016;;6004;Eggerberg;Ind_04_01;UM_11;6.04;A;6,04;0,708298268;0.708298267958176 -2016;;6007;Naters;Ind_04_01;UM_11;147.22;A;147,22;3,496883124;3.49688312411597 -2016;;6008;Ried-Brig;Ind_04_01;UM_11;47.57;A;47,57;1,987761553;1.9877615525844 -2016;;6009;Simplon;Ind_04_01;UM_11;91.01;A;91,01;2,749427471;2.74942747128958 -2016;;6010;Termen;Ind_04_01;UM_11;18.65;A;18,65;1,244621012;1.24462101194075 -2016;;6011;Zwischbergen;Ind_04_01;UM_11;86.03;A;86,03;2,673145954;2.67314595408908 -2016;;6021;Ardon;Ind_04_01;UM_11;20.39;A;20,39;1,301386578;1.30138657829495 -2016;;6022;Chamoson;Ind_04_01;UM_11;32.47;A;32,47;1,642248428;1.64224842790345 -2016;;6023;Conthey;Ind_04_01;UM_11;84.94;A;84,94;2,656157594;2.65615759386392 -2016;;6024;Nendaz;Ind_04_01;UM_11;85.96;A;85,96;2,672058204;2.67205820391013 -2016;;6025;Vétroz;Ind_04_01;UM_11;10.44;A;10,44;0,931210705;0.931210704841266 -2016;;6032;Bourg-Saint-Pierre;Ind_04_01;UM_11;89.81;A;89,81;2,731241223;2.73124122295149 -2016;;6033;Liddes;Ind_04_01;UM_11;58.64;A;58,64;2,206961166;2.20696116589263 -2016;;6034;Orsières;Ind_04_01;UM_11;164.93;A;164,93;3,701242497;3.70124249663693 -2016;;6035;Sembrancher;Ind_04_01;UM_11;17.68;A;17,68;1,211822023;1.21182202287952 -2016;;6037;Val de Bagnes;Ind_04_01;UM_11;301.89;A;301,89;5,00751287;5.00751287028972 -2016;;6052;Bellwald;Ind_04_01;UM_11;13.96;A;13,96;1,076813321;1.07681332140056 -2016;;6054;Binn;Ind_04_01;UM_11;65.09;A;65,09;2,325170725;2.32517072451557 -2016;;6056;Ernen;Ind_04_01;UM_11;35.37;A;35,37;1,714017455;1.71401745526538 -2016;;6057;Fiesch;Ind_04_01;UM_11;11.04;A;11,04;0,957595832;0.95759583216361 -2016;;6058;Fieschertal;Ind_04_01;UM_11;172.86;A;172,86;3,789177631;3.78917763087812 -2016;;6061;Lax;Ind_04_01;UM_11;5.42;A;5,42;0,670961118;0.670961118143866 -2016;;6076;Obergoms;Ind_04_01;UM_11;155.89;A;155,89;3,598378465;3.59837846504337 -2016;;6077;Goms;Ind_04_01;UM_11;128.9;A;128,9;3,272081928;3.27208192759504 -2016;;6082;Ayent;Ind_04_01;UM_11;55.14;A;55,14;2,140085337;2.14008533680061 -2016;;6083;Evolène;Ind_04_01;UM_11;209.83;A;209,83;4,174759876;4.17475987627367 -2016;;6084;Hérémence;Ind_04_01;UM_11;107.46;A;107,46;2,987590905;2.98759090456458 -2016;;6087;Saint-Martin (VS);Ind_04_01;UM_11;37;A;37;1,753067234;1.75306723380644 -2016;;6089;Vex;Ind_04_01;UM_11;13.05;A;13,05;1,041125219;1.04112521870028 -2016;;6090;Mont-Noble;Ind_04_01;UM_11;43.87;A;43,87;1,908892746;1.908892746413 -2016;;6101;Agarn;Ind_04_01;UM_11;7.65;A;7,65;0,797128667;0.797128667354513 -2016;;6102;Albinen;Ind_04_01;UM_11;15.56;A;15,56;1,136848274;1.13684827412842 -2016;;6104;Ergisch;Ind_04_01;UM_11;29.53;A;29,53;1,566135861;1.56613586071491 -2016;;6109;Inden;Ind_04_01;UM_11;9.74;A;9,74;0,899450337;0.89945033715994 -2016;;6110;Leuk;Ind_04_01;UM_11;55.15;A;55,15;2,140279387;2.14027938724638 -2016;;6111;Leukerbad;Ind_04_01;UM_11;67.32;A;67,32;2,364665767;2.36466576674205 -2016;;6112;Oberems;Ind_04_01;UM_11;50.26;A;50,26;2,043190933;2.04319093273185 -2016;;6113;Salgesch;Ind_04_01;UM_11;11.36;A;11,36;0,971374898;0.97137489756825 -2016;;6116;Varen;Ind_04_01;UM_11;12.81;A;12,81;1,031507228;1.03150722761755 -2016;;6117;Guttet-Feschel;Ind_04_01;UM_11;10.43;A;10,43;0,930764616;0.930764615855265 -2016;;6118;Gampel-Bratsch;Ind_04_01;UM_11;23.04;A;23,04;1,383371894;1.38337189399672 -2016;;6119;Turtmann-Unterems;Ind_04_01;UM_11;42.42;A;42,42;1,877081125;1.87708112459388 -2016;;6131;Bovernier;Ind_04_01;UM_11;13.07;A;13,07;1,04192271;1.04192271036735 -2016;;6133;Fully;Ind_04_01;UM_11;37.8;A;37,8;1,771917961;1.77191796109958 -2016;;6134;Isérables;Ind_04_01;UM_11;15.25;A;15,25;1,125466655;1.1254666548694 -2016;;6135;Leytron;Ind_04_01;UM_11;26.83;A;26,83;1,492822069;1.49282206905899 -2016;;6136;Martigny;Ind_04_01;UM_11;32.59;A;32,59;1,645280274;1.64528027373593 -2016;;6137;Martigny-Combe;Ind_04_01;UM_11;37.41;A;37,41;1,762753414;1.76275341447387 -2016;;6139;Riddes;Ind_04_01;UM_11;23.9;A;23,9;1,408953502;1.40895350236202 -2016;;6140;Saillon;Ind_04_01;UM_11;13.74;A;13,74;1,068294708;1.06829470752446 -2016;;6141;Saxon;Ind_04_01;UM_11;23.22;A;23,22;1,388765177;1.38876517719516 -2016;;6142;Trient;Ind_04_01;UM_11;39.56;A;39,56;1,812699654;1.81269965439249 -2016;;6151;Champéry;Ind_04_01;UM_11;38.85;A;38,85;1,796359363;1.79635936342316 -2016;;6152;Collombey-Muraz;Ind_04_01;UM_11;29.75;A;29,75;1,571958931;1.57195893115506 -2016;;6153;Monthey;Ind_04_01;UM_11;28.7;A;28,7;1,543969294;1.54396929358954 -2016;;6154;Port-Valais;Ind_04_01;UM_11;14.35;A;14,35;1,091751157;1.09175115744097 -2016;;6155;Saint-Gingolph;Ind_04_01;UM_11;14.45;A;14,45;1,095548564;1.09554856423683 -2016;;6156;Troistorrents;Ind_04_01;UM_11;36.96;A;36,96;1,752119374;1.75211937364858 -2016;;6157;Val-d'Illiez;Ind_04_01;UM_11;39.26;A;39,26;1,805813345;1.80581334488136 -2016;;6158;Vionnaz;Ind_04_01;UM_11;20.95;A;20,95;1,31913646;1.31913646011371 -2016;;6159;Vouvry;Ind_04_01;UM_11;33.51;A;33,51;1,66834139;1.66834139011155 -2016;;6172;Bister;Ind_04_01;UM_11;5.81;A;5,81;0,694681569;0.69468156927391 -2016;;6173;Bitsch;Ind_04_01;UM_11;5.79;A;5,79;0,693484873;0.693484873175561 -2016;;6177;Grengiols;Ind_04_01;UM_11;58.52;A;58,52;2,204701864;2.20470186364618 -2016;;6181;Riederalp;Ind_04_01;UM_11;19.09;A;19,09;1,25921728;1.25921727966474 -2016;;6191;Ausserberg;Ind_04_01;UM_11;15.01;A;15,01;1,116575403;1.11657540311278 -2016;;6192;Blatten;Ind_04_01;UM_11;90.51;A;90,51;2,741864527;2.74186452724116 -2016;;6193;Bürchen;Ind_04_01;UM_11;13.44;A;13,44;1,056567736;1.05656773641906 -2016;;6194;Eischoll;Ind_04_01;UM_11;14.09;A;14,09;1,081815518;1.08181551847887 -2016;;6195;Ferden;Ind_04_01;UM_11;27.92;A;27,92;1,522844003;1.52284400326869 -2016;;6197;Kippel;Ind_04_01;UM_11;11.68;A;11,68;0,98496122;0.984961220289581 -2016;;6198;Niedergesteln;Ind_04_01;UM_11;17.63;A;17,63;1,21010726;1.21010726042032 -2016;;6199;Raron;Ind_04_01;UM_11;30.35;A;30,35;1,587731489;1.58773148932819 -2016;;6201;Unterbäch;Ind_04_01;UM_11;22.09;A;22,09;1,354551646;1.35455164620512 -2016;;6202;Wiler (Lötschen);Ind_04_01;UM_11;14.86;A;14,86;1,110982237;1.11098223684941 -2016;;6203;Mörel-Filet;Ind_04_01;UM_11;8.55;A;8,55;0,842715085;0.84271508457343 -2016;;6204;Steg-Hohtenn;Ind_04_01;UM_11;14.03;A;14,03;1,079509692;1.079509692372 -2016;;6205;Bettmeralp;Ind_04_01;UM_11;28.79;A;28,79;1,546388256;1.54638825645189 -2016;;6211;Collonges;Ind_04_01;UM_11;12.21;A;12,21;1,007060455;1.00706045481942 -2016;;6212;Dorénaz;Ind_04_01;UM_11;12.58;A;12,58;1,022205071;1.02220507087549 -2016;;6213;Evionnaz;Ind_04_01;UM_11;48.08;A;48,08;1,998388584;1.99838858352272 -2016;;6214;Finhaut;Ind_04_01;UM_11;22.82;A;22,82;1,376751412;1.3767514118675 -2016;;6215;Massongex;Ind_04_01;UM_11;6.63;A;6,63;0,742086404;0.742086403780538 -2016;;6217;Saint-Maurice;Ind_04_01;UM_11;14.92;A;14,92;1,113222876;1.11322287556964 -2016;;6218;Salvan;Ind_04_01;UM_11;53.46;A;53,46;2,107231199;2.10723119901062 -2016;;6219;Vernayaz;Ind_04_01;UM_11;5.59;A;5,59;0,68140233;0.681402330248394 -2016;;6220;Vérossaz;Ind_04_01;UM_11;14.29;A;14,29;1,08946636;1.08946636004839 -2016;;6232;Chalais;Ind_04_01;UM_11;24.34;A;24,34;1,4218638;1.42186380003855 -2016;;6235;Chippis;Ind_04_01;UM_11;1.97;A;1,97;0,404511454;0.404511454109173 -2016;;6238;Grône;Ind_04_01;UM_11;20.3;A;20,3;1,298511288;1.29851128836885 -2016;;6239;Icogne;Ind_04_01;UM_11;24.83;A;24,83;1,43610459;1.43610458996403 -2016;;6240;Lens;Ind_04_01;UM_11;13.98;A;13,98;1,077584402;1.07758440157198 -2016;;6246;Saint-Léonard;Ind_04_01;UM_11;3.89;A;3,89;0,568424137;0.568424137064209 -2016;;6248;Sierre;Ind_04_01;UM_11;19.13;A;19,13;1,260535832;1.26053583215129 -2016;;6252;Anniviers;Ind_04_01;UM_11;243.37;A;243,37;4,496051027;4.4960510271295 -2016;;6253;Crans-Montana;Ind_04_01;UM_11;59.65;A;59,65;2,225886085;2.22588608484752 -2016;;6254;Noble-Contrée;Ind_04_01;UM_11;6.5;A;6,5;0,734775029;0.734775029379695 -2016;;6261;Arbaz;Ind_04_01;UM_11;19.23;A;19,23;1,263826195;1.26382619491963 -2016;;6263;Grimisuat;Ind_04_01;UM_11;4.45;A;4,45;0,607963793;0.607963793191882 -2016;;6265;Savièse;Ind_04_01;UM_11;70.98;A;70,98;2,428095186;2.42809518641574 -2016;;6266;Sion;Ind_04_01;UM_11;34.87;A;34,87;1,701859425;1.70185942510418 -2016;;6267;Veysonnaz;Ind_04_01;UM_11;1.14;A;1,14;0,307716041;0.307716040913828 -2016;;6281;Baltschieder;Ind_04_01;UM_11;31.34;A;31,34;1,613419147;1.6134191469666 -2016;;6282;Eisten;Ind_04_01;UM_11;38;A;38;1,776599391;1.77659939055564 -2016;;6283;Embd;Ind_04_01;UM_11;13.39;A;13,39;1,054600563;1.05460056335461 -2016;;6285;Grächen;Ind_04_01;UM_11;14.26;A;14,26;1,088322163;1.08832216261031 -2016;;6286;Lalden;Ind_04_01;UM_11;1.3;A;1,3;0,328601383;0.328601382772481 -2016;;6287;Randa;Ind_04_01;UM_11;54.53;A;54,53;2,128214801;2.12821480145686 -2016;;6288;Saas-Almagell;Ind_04_01;UM_11;110.43;A;110,43;3,028595318;3.02859531760509 -2016;;6289;Saas-Balen;Ind_04_01;UM_11;30.24;A;30,24;1,584851605;1.5848516046286 -2016;;6290;Saas-Fee;Ind_04_01;UM_11;40.32;A;40,32;1,830029001;1.83002900111586 -2016;;6291;Saas-Grund;Ind_04_01;UM_11;24.78;A;24,78;1,434657924;1.43465792435057 -2016;;6292;St. Niklaus;Ind_04_01;UM_11;89.24;A;89,24;2,722560199;2.72256019897296 -2016;;6293;Stalden (VS);Ind_04_01;UM_11;10.51;A;10,51;0,934327364;0.934327364252141 -2016;;6294;Staldenried;Ind_04_01;UM_11;14.28;A;14,28;1,089085094;1.08908509446889 -2016;;6295;Täsch;Ind_04_01;UM_11;58.72;A;58,72;2,208466083;2.20846608333031 -2016;;6296;Törbel;Ind_04_01;UM_11;17.55;A;17,55;1,207358575;1.20735857484834 -2016;;6297;Visp;Ind_04_01;UM_11;13.2;A;13,2;1,047091601;1.04709160117692 -2016;;6298;Visperterminen;Ind_04_01;UM_11;51.63;A;51,63;2,070850623;2.07085062308632 -2016;;6299;Zeneggen;Ind_04_01;UM_11;7.57;A;7,57;0,79294972;0.792949720257362 -2016;;6300;Zermatt;Ind_04_01;UM_11;242.91;A;242,91;4,491799966;4.49179996562011 -2016;;6404;Boudry;Ind_04_01;UM_11;16.76;A;16,76;1,179871519;1.17987151856508 -2016;;6408;Cortaillod;Ind_04_01;UM_11;3.68;A;3,68;0,552868211;0.552868211474524 -2016;;6413;Rochefort;Ind_04_01;UM_11;25.85;A;25,85;1,46530484;1.46530484028348 -2016;;6416;Milvignes;Ind_04_01;UM_11;8.78;A;8,78;0,853974629;0.853974629290176 -2016;;6417;La Grande Béroche;Ind_04_01;UM_11;42.13;A;42,13;1,870653884;1.87065388420903 -2016;;6421;La Chaux-de-Fonds;Ind_04_01;UM_11;55.72;A;55,72;2,151311329;2.15131132948943 -2016;;6422;Les Planchettes;Ind_04_01;UM_11;11.73;A;11,73;0,987067191;0.987067190665451 -2016;;6423;La Sagne;Ind_04_01;UM_11;25.55;A;25,55;1,456777291;1.45677729062308 -2016;;6432;La Brévine;Ind_04_01;UM_11;41.81;A;41,81;1,863536031;1.86353603148899 -2016;;6433;Brot-Plamboz;Ind_04_01;UM_11;16.09;A;16,09;1,156047643;1.15604764286578 -2016;;6434;Le Cerneux-Péquignot;Ind_04_01;UM_11;15.7;A;15,7;1,141951178;1.14195117756738 -2016;;6435;La Chaux-du-Milieu;Ind_04_01;UM_11;17.31;A;17,31;1,199074713;1.19907471321572 -2016;;6436;Le Locle;Ind_04_01;UM_11;34.66;A;34,66;1,696727074;1.69672707365616 -2016;;6437;Les Ponts-de-Martel;Ind_04_01;UM_11;18.17;A;18,17;1,228500038;1.22850003768478 -2016;;6451;Cornaux;Ind_04_01;UM_11;4.73;A;4,73;0,62679898;0.626798979697476 -2016;;6452;Cressier (NE);Ind_04_01;UM_11;8.57;A;8,57;0,843700141;0.843700140531659 -2016;;6453;Enges;Ind_04_01;UM_11;9.58;A;9,58;0,892032063;0.892032063377109 -2016;;6454;Hauterive (NE);Ind_04_01;UM_11;2.13;A;2,13;0,420617669;0.420617668946306 -2016;;6455;Le Landeron;Ind_04_01;UM_11;10.28;A;10,28;0,924047439;0.92404743919707 -2016;;6456;Lignières;Ind_04_01;UM_11;12.52;A;12,52;1,019764466;1.01976446634845 -2016;;6458;Neuchâtel;Ind_04_01;UM_11;30.07;A;30,07;1,580390551;1.58039055144188 -2016;;6459;Saint-Blaise;Ind_04_01;UM_11;8.86;A;8,86;0,857856352;0.857856352155445 -2016;;6461;La Tène;Ind_04_01;UM_11;5.29;A;5,29;0,662865699;0.662865699206761 -2016;;6487;Val-de-Ruz;Ind_04_01;UM_11;124.31;A;124,31;3,213296076;3.21329607622812 -2016;;6504;La Côte-aux-Fées;Ind_04_01;UM_11;12.83;A;12,83;1,032312149;1.03231214949394 -2016;;6511;Les Verrières;Ind_04_01;UM_11;28.87;A;28,87;1,548535273;1.5485352734615 -2016;;6512;Val-de-Travers;Ind_04_01;UM_11;124.74;A;124,74;3,218848825;3.21884882541291 -2016;;6601;Aire-la-Ville;Ind_04_01;UM_11;2.93;A;2,93;0,493323178;0.493323178100679 -2016;;6602;Anières;Ind_04_01;UM_11;3.87;A;3,87;0,566961009;0.566961009445669 -2016;;6603;Avully;Ind_04_01;UM_11;4.62;A;4,62;0,619467745;0.619467745277619 -2016;;6604;Avusy;Ind_04_01;UM_11;5.17;A;5,17;0,655304246;0.655304246126666 -2016;;6605;Bardonnex;Ind_04_01;UM_11;5;A;5;0,644440332;0.64444033190402 -2016;;6606;Bellevue;Ind_04_01;UM_11;4.36;A;4,36;0,601784441;0.601784441214077 -2016;;6607;Bernex;Ind_04_01;UM_11;12.95;A;12,95;1,037128562;1.03712856203367 -2016;;6608;Carouge (GE);Ind_04_01;UM_11;2.7;A;2,7;0,473564995;0.473564994850405 -2016;;6609;Cartigny;Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;6610;Céligny;Ind_04_01;UM_11;4.65;A;4,65;0,62147575;0.621475749718076 -2016;;6611;Chancy;Ind_04_01;UM_11;5.38;A;5,38;0,668480662;0.668480661896655 -2016;;6612;Chêne-Bougeries;Ind_04_01;UM_11;4.14;A;4,14;0,586405292;0.586405292154171 -2016;;6613;Chêne-Bourg;Ind_04_01;UM_11;1.28;A;1,28;0,326063882;0.326063882382652 -2016;;6614;Choulex;Ind_04_01;UM_11;3.91;A;3,91;0,569883508;0.569883508238946 -2016;;6615;Collex-Bossy;Ind_04_01;UM_11;6.89;A;6,89;0,756497194;0.75649719393262 -2016;;6616;Collonge-Bellerive;Ind_04_01;UM_11;6.12;A;6,12;0,712973555;0.712973554807404 -2016;;6617;Cologny;Ind_04_01;UM_11;3.66;A;3,66;0,551363805;0.551363805389418 -2016;;6618;Confignon;Ind_04_01;UM_11;2.77;A;2,77;0,479664519;0.479664519353942 -2016;;6619;Corsier (GE);Ind_04_01;UM_11;2.74;A;2,74;0,477059987;0.477059986876641 -2016;;6620;Dardagny;Ind_04_01;UM_11;8.6;A;8,6;0,845175572;0.845175571808278 -2016;;6621;Genève;Ind_04_01;UM_11;15.92;A;15,92;1,149924275;1.14992427531923 -2016;;6622;Genthod;Ind_04_01;UM_11;2.87;A;2,87;0,488245961;0.488245960510417 -2016;;6623;Le Grand-Saconnex;Ind_04_01;UM_11;4.38;A;4,38;0,603163102;0.603163101534633 -2016;;6624;Gy;Ind_04_01;UM_11;3.29;A;3,29;0,522751948;0.522751947515304 -2016;;6625;Hermance;Ind_04_01;UM_11;1.44;A;1,44;0,345842973;0.34584297349918 -2016;;6626;Jussy;Ind_04_01;UM_11;11.35;A;11,35;0,970947262;0.970947261669221 -2016;;6627;Laconnex;Ind_04_01;UM_11;3.83;A;3,83;0,564023368;0.564023367867481 -2016;;6628;Lancy;Ind_04_01;UM_11;4.77;A;4,77;0,629443713;0.62944371287739 -2016;;6629;Meinier;Ind_04_01;UM_11;6.95;A;6,95;0,759783946;0.759783945950783 -2016;;6630;Meyrin;Ind_04_01;UM_11;9.94;A;9,94;0,908638015;0.908638015203256 -2016;;6631;Onex;Ind_04_01;UM_11;2.82;A;2,82;0,48397426;0.483974260204914 -2016;;6632;Perly-Certoux;Ind_04_01;UM_11;2.54;A;2,54;0,459319167;0.459319167271907 -2016;;6633;Plan-les-Ouates;Ind_04_01;UM_11;5.85;A;5,85;0,697068798;0.697068798197093 -2016;;6634;Pregny-Chambésy;Ind_04_01;UM_11;3.24;A;3,24;0,51876446;0.518764460248769 -2016;;6635;Presinge;Ind_04_01;UM_11;4.71;A;4,71;0,62547242;0.625472419523242 -2016;;6636;Puplinge;Ind_04_01;UM_11;2.67;A;2,67;0,470926729;0.47092672922585 -2016;;6637;Russin;Ind_04_01;UM_11;4.91;A;4,91;0,638614032;0.63861403150858 -2016;;6638;Satigny;Ind_04_01;UM_11;18.92;A;18,92;1,253597959;1.25359795939495 -2016;;6639;Soral;Ind_04_01;UM_11;2.94;A;2,94;0,494164309;0.494164309449927 -2016;;6640;Thônex;Ind_04_01;UM_11;3.82;A;3,82;0,563286564;0.563286563675902 -2016;;6641;Troinex;Ind_04_01;UM_11;3.43;A;3,43;0,533758459;0.533758458658793 -2016;;6642;Vandoeuvres;Ind_04_01;UM_11;4.42;A;4,42;0,605911011;0.605911011439761 -2016;;6643;Vernier;Ind_04_01;UM_11;7.69;A;7,69;0,799209947;0.799209946790866 -2016;;6644;Versoix;Ind_04_01;UM_11;10.5;A;10,5;0,933882764;0.933882764006052 -2016;;6645;Veyrier;Ind_04_01;UM_11;6.5;A;6,5;0,734775029;0.734775029379695 -2016;;6702;Boécourt;Ind_04_01;UM_11;12.35;A;12,35;1,012817483;1.01281748267882 -2016;;6703;Bourrignon;Ind_04_01;UM_11;13.55;A;13,55;1,060882677;1.06088267737397 -2016;;6704;Châtillon (JU);Ind_04_01;UM_11;5.31;A;5,31;0,664117571;0.664117571330865 -2016;;6706;Courchapoix;Ind_04_01;UM_11;6.39;A;6,39;0,728531173;0.728531173176187 -2016;;6708;Courrendlin;Ind_04_01;UM_11;21.55;A;21,55;1,337892896;1.33789289607482 -2016;;6709;Courroux;Ind_04_01;UM_11;19.74;A;19,74;1,280475533;1.28047553345867 -2016;;6710;Courtételle;Ind_04_01;UM_11;13.55;A;13,55;1,060882677;1.06088267737397 -2016;;6711;Delémont;Ind_04_01;UM_11;21.97;A;21,97;1,350867455;1.35086745539441 -2016;;6712;Develier;Ind_04_01;UM_11;12.47;A;12,47;1,017726158;1.01772615836142 -2016;;6713;Ederswiler;Ind_04_01;UM_11;3.31;A;3,31;0,524338452;0.524338451762391 -2016;;6715;Mervelier;Ind_04_01;UM_11;9.74;A;9,74;0,899450337;0.89945033715994 -2016;;6716;Mettembert;Ind_04_01;UM_11;2.34;A;2,34;0,440865018;0.440865017627817 -2016;;6718;Movelier;Ind_04_01;UM_11;8.08;A;8,08;0,819225366;0.819225365621362 -2016;;6719;Pleigne;Ind_04_01;UM_11;17.84;A;17,84;1,21729303;1.21729303048203 -2016;;6721;Rossemaison;Ind_04_01;UM_11;1.89;A;1,89;0,396212901;0.396212901157149 -2016;;6722;Saulcy;Ind_04_01;UM_11;7.86;A;7,86;0,807995577;0.807995577126839 -2016;;6724;Soyhières;Ind_04_01;UM_11;7.51;A;7,51;0,789800999;0.789800999467343 -2016;;6729;Haute-Sorne;Ind_04_01;UM_11;71.04;A;71,04;2,429121214;2.42912121442959 -2016;;6730;Val Terbi;Ind_04_01;UM_11;46.69;A;46,69;1,969289872;1.96928987247918 -2016;;6741;Le Bémont (JU);Ind_04_01;UM_11;11.68;A;11,68;0,98496122;0.984961220289581 -2016;;6742;Les Bois;Ind_04_01;UM_11;24.71;A;24,71;1,432630138;1.432630138285 -2016;;6743;Les Breuleux;Ind_04_01;UM_11;10.82;A;10,82;0,948006556;0.948006556283339 -2016;;6744;La Chaux-des-Breuleux;Ind_04_01;UM_11;4.05;A;4,05;0,579996299;0.579996298713618 -2016;;6745;Les Enfers;Ind_04_01;UM_11;7.12;A;7,12;0,769020129;0.769020128560767 -2016;;6748;Les Genevez (JU);Ind_04_01;UM_11;13.63;A;13,63;1,064009825;1.06400982543129 -2016;;6750;Lajoux (JU);Ind_04_01;UM_11;12.38;A;12,38;1,014046879;1.01404687922609 -2016;;6751;Montfaucon;Ind_04_01;UM_11;18.25;A;18,25;1,231201525;1.23120152536198 -2016;;6753;Muriaux;Ind_04_01;UM_11;16.88;A;16,88;1,184087869;1.18408786857829 -2016;;6754;Le Noirmont;Ind_04_01;UM_11;20.39;A;20,39;1,301386578;1.30138657829495 -2016;;6757;Saignelégier;Ind_04_01;UM_11;31.67;A;31,67;1,621891292;1.62189129238979 -2016;;6758;Saint-Brais;Ind_04_01;UM_11;15.16;A;15,16;1,122140691;1.12214069130301 -2016;;6759;Soubey;Ind_04_01;UM_11;13.49;A;13,49;1,058531254;1.05853125369804 -2016;;6771;Alle;Ind_04_01;UM_11;10.6;A;10,6;0,938319287;0.938319286669135 -2016;;6773;Beurnevésin;Ind_04_01;UM_11;5.09;A;5,09;0,650214427;0.650214427346461 -2016;;6774;Boncourt;Ind_04_01;UM_11;9.01;A;9,01;0,865087638;0.865087637858144 -2016;;6775;Bonfol;Ind_04_01;UM_11;13.58;A;13,58;1,062056437;1.06205643691871 -2016;;6778;Bure;Ind_04_01;UM_11;13.69;A;13,69;1,066349168;1.06634916828914 -2016;;6781;Coeuve;Ind_04_01;UM_11;11.62;A;11,62;0,982428097;0.982428096797789 -2016;;6782;Cornol;Ind_04_01;UM_11;10.45;A;10,45;0,93165658;0.931656580234228 -2016;;6783;Courchavon;Ind_04_01;UM_11;6.19;A;6,19;0,717039425;0.717039424741827 -2016;;6784;Courgenay;Ind_04_01;UM_11;18.44;A;18,44;1,237593925;1.23759392493106 -2016;;6785;Courtedoux;Ind_04_01;UM_11;8.22;A;8,22;0,826292136;0.826292135528484 -2016;;6787;Damphreux;Ind_04_01;UM_11;5.67;A;5,67;0,686260875;0.686260875418448 -2016;;6789;Fahy;Ind_04_01;UM_11;7.78;A;7,78;0,803873124;0.803873123816427 -2016;;6790;Fontenais;Ind_04_01;UM_11;19.99;A;19,99;1,288558403;1.28855840335449 -2016;;6792;Grandfontaine;Ind_04_01;UM_11;8.97;A;8,97;0,863165219;0.863165218509126 -2016;;6793;Lugnez;Ind_04_01;UM_11;5.1;A;5,1;0,650852831;0.650852831454435 -2016;;6800;Porrentruy;Ind_04_01;UM_11;14.76;A;14,76;1,107237763;1.10723776297922 -2016;;6806;Vendlincourt;Ind_04_01;UM_11;9.15;A;9,15;0,871782722;0.871782722204192 -2016;;6807;Basse-Allaine;Ind_04_01;UM_11;23.04;A;23,04;1,383371894;1.38337189399672 -2016;;6808;Clos du Doubs;Ind_04_01;UM_11;61.75;A;61,75;2,26472874;2.26472874007007 -2016;;6809;Haute-Ajoie;Ind_04_01;UM_11;40.93;A;40,93;1,84382026;1.84382026037628 -2016;;6810;La Baroche;Ind_04_01;UM_11;31.07;A;31,07;1,606454159;1.60645415850054 diff --git a/mobility/data/CH/CH-2021-emplois-communes-par-secteur.csv b/mobility/data/CH/CH-2021-emplois-communes-par-secteur.csv deleted file mode 100644 index e67b5896..00000000 --- a/mobility/data/CH/CH-2021-emplois-communes-par-secteur.csv +++ /dev/null @@ -1,8657 +0,0 @@ -"Anne,""Commune"",""Secteur conomique"",""Etablissements"",""Emplois"",""Emplois femmes"",""Emplois hommes"",""Equivalents plein temps"",""Equivalents plein temps femmes"",""Equivalents plein temps hommes""" -"2021,""Suisse"",""Secteur conomique - total"",703957,5417999,2481067,2936932,4201003,1651870,2549133" -"2021,""Suisse"",""Secteur primaire"",51666,160306,56414,103892,103443,28312,75132" -"2021,""Suisse"",""Secteur secondaire"",96543,1087112,255865,831247,991161,196764,794397" -"2021,""Suisse"",""Secteur tertiaire"",555748,4170581,2168788,2001793,3106399,1426795,1679604" -"2021,""1 Aeugst am Albis"",""Secteur conomique - total"",143,470,262,208,297,141,156" -"2021,""1 Aeugst am Albis"",""Secteur primaire"",15,40,X,X,26,X,X" -"2021,""1 Aeugst am Albis"",""Secteur secondaire"",14,18,X,X,15,X,X" -"2021,""1 Aeugst am Albis"",""Secteur tertiaire"",114,412,246,166,256,133,123" -"2021,""2 Affoltern am Albis"",""Secteur conomique - total"",982,6931,3773,3158,5172,2423,2748" -"2021,""2 Affoltern am Albis"",""Secteur primaire"",19,43,13,30,26,6,20" -"2021,""2 Affoltern am Albis"",""Secteur secondaire"",126,1243,261,982,1131,193,938" -"2021,""2 Affoltern am Albis"",""Secteur tertiaire"",837,5645,3499,2146,4015,2224,1791" -"2021,""3 Bonstetten"",""Secteur conomique - total"",278,1047,637,410,725,382,343" -"2021,""3 Bonstetten"",""Secteur primaire"",17,43,18,25,23,7,15" -"2021,""3 Bonstetten"",""Secteur secondaire"",31,133,35,98,111,18,93" -"2021,""3 Bonstetten"",""Secteur tertiaire"",230,871,584,287,591,357,234" -"2021,""4 Hausen am Albis"",""Secteur conomique - total"",275,1113,584,529,780,351,429" -"2021,""4 Hausen am Albis"",""Secteur primaire"",35,111,35,76,74,16,58" -"2021,""4 Hausen am Albis"",""Secteur secondaire"",41,133,22,111,117,13,104" -"2021,""4 Hausen am Albis"",""Secteur tertiaire"",199,869,527,342,588,321,267" -"2021,""5 Hedingen"",""Secteur conomique - total"",196,1409,472,937,1146,292,854" -"2021,""5 Hedingen"",""Secteur primaire"",11,27,X,X,17,X,X" -"2021,""5 Hedingen"",""Secteur secondaire"",29,647,X,X,597,X,X" -"2021,""5 Hedingen"",""Secteur tertiaire"",156,735,335,400,533,191,342" -"2021,""6 Kappel am Albis"",""Secteur conomique - total"",105,355,178,177,245,100,146" -"2021,""6 Kappel am Albis"",""Secteur primaire"",20,57,16,41,39,9,30" -"2021,""6 Kappel am Albis"",""Secteur secondaire"",23,88,18,70,70,9,62" -"2021,""6 Kappel am Albis"",""Secteur tertiaire"",62,210,144,66,136,82,54" -"2021,""7 Knonau"",""Secteur conomique - total"",137,516,251,265,351,136,215" -"2021,""7 Knonau"",""Secteur primaire"",22,51,19,32,33,9,25" -"2021,""7 Knonau"",""Secteur secondaire"",16,87,31,56,67,17,50" -"2021,""7 Knonau"",""Secteur tertiaire"",99,378,201,177,251,111,140" -"2021,""8 Maschwanden"",""Secteur conomique - total"",60,178,79,99,117,36,81" -"2021,""8 Maschwanden"",""Secteur primaire"",18,46,16,30,29,8,21" -"2021,""8 Maschwanden"",""Secteur secondaire"",6,55,10,45,49,6,43" -"2021,""8 Maschwanden"",""Secteur tertiaire"",36,77,53,24,40,22,18" -"2021,""9 Mettmenstetten"",""Secteur conomique - total"",326,1769,791,978,1281,451,831" -"2021,""9 Mettmenstetten"",""Secteur primaire"",46,148,44,104,105,24,81" -"2021,""9 Mettmenstetten"",""Secteur secondaire"",58,588,121,467,526,84,442" -"2021,""9 Mettmenstetten"",""Secteur tertiaire"",222,1033,626,407,650,343,307" -"2021,""10 Obfelden"",""Secteur conomique - total"",330,1464,768,696,1023,442,581" -"2021,""10 Obfelden"",""Secteur primaire"",17,52,19,33,33,10,23" -"2021,""10 Obfelden"",""Secteur secondaire"",59,283,90,193,235,53,182" -"2021,""10 Obfelden"",""Secteur tertiaire"",254,1129,659,470,755,379,376" -"2021,""11 Ottenbach"",""Secteur conomique - total"",180,717,338,379,510,186,324" -"2021,""11 Ottenbach"",""Secteur primaire"",14,38,16,22,18,6,12" -"2021,""11 Ottenbach"",""Secteur secondaire"",37,279,67,212,245,43,202" -"2021,""11 Ottenbach"",""Secteur tertiaire"",129,400,255,145,247,137,111" -"2021,""12 Rifferswil"",""Secteur conomique - total"",96,277,129,148,188,66,122" -"2021,""12 Rifferswil"",""Secteur primaire"",16,46,16,30,27,7,20" -"2021,""12 Rifferswil"",""Secteur secondaire"",14,78,14,64,68,8,61" -"2021,""12 Rifferswil"",""Secteur tertiaire"",66,153,99,54,93,51,42" -"2021,""13 Stallikon"",""Secteur conomique - total"",193,777,380,397,545,225,320" -"2021,""13 Stallikon"",""Secteur primaire"",16,42,14,28,28,8,21" -"2021,""13 Stallikon"",""Secteur secondaire"",23,138,34,104,118,23,95" -"2021,""13 Stallikon"",""Secteur tertiaire"",154,597,332,265,399,194,204" -"2021,""14 Wettswil am Albis"",""Secteur conomique - total"",274,1367,514,853,1050,302,749" -"2021,""14 Wettswil am Albis"",""Secteur primaire"",4,13,X,X,7,X,X" -"2021,""14 Wettswil am Albis"",""Secteur secondaire"",35,448,X,X,408,X,X" -"2021,""14 Wettswil am Albis"",""Secteur tertiaire"",235,906,438,468,636,254,382" -"2021,""21 Adlikon"",""Secteur conomique - total"",58,138,53,85,97,27,71" -"2021,""21 Adlikon"",""Secteur primaire"",14,35,X,X,21,X,X" -"2021,""21 Adlikon"",""Secteur secondaire"",8,32,X,X,29,X,X" -"2021,""21 Adlikon"",""Secteur tertiaire"",36,71,38,33,48,21,27" -"2021,""22 Benken (ZH)"",""Secteur conomique - total"",68,357,202,155,221,86,135" -"2021,""22 Benken (ZH)"",""Secteur primaire"",18,185,120,65,106,48,58" -"2021,""22 Benken (ZH)"",""Secteur secondaire"",8,41,X,X,37,X,X" -"2021,""22 Benken (ZH)"",""Secteur tertiaire"",42,131,X,X,78,X,X" -"2021,""23 Berg am Irchel"",""Secteur conomique - total"",49,142,73,69,93,38,55" -"2021,""23 Berg am Irchel"",""Secteur primaire"",15,46,X,X,29,X,X" -"2021,""23 Berg am Irchel"",""Secteur secondaire"",11,28,X,X,23,X,X" -"2021,""23 Berg am Irchel"",""Secteur tertiaire"",23,68,45,23,41,23,18" -"2021,""24 Buch am Irchel"",""Secteur conomique - total"",76,197,85,112,136,40,97" -"2021,""24 Buch am Irchel"",""Secteur primaire"",22,66,X,X,46,X,X" -"2021,""24 Buch am Irchel"",""Secteur secondaire"",9,40,X,X,36,X,X" -"2021,""24 Buch am Irchel"",""Secteur tertiaire"",45,91,58,33,54,28,26" -"2021,""25 Dachsen"",""Secteur conomique - total"",107,421,161,260,300,83,218" -"2021,""25 Dachsen"",""Secteur primaire"",5,26,X,X,6,X,X" -"2021,""25 Dachsen"",""Secteur secondaire"",21,170,29,141,155,21,134" -"2021,""25 Dachsen"",""Secteur tertiaire"",81,225,X,X,140,X,X" -"2021,""26 Dorf"",""Secteur conomique - total"",54,164,80,84,103,42,60" -"2021,""26 Dorf"",""Secteur primaire"",10,28,X,X,16,X,X" -"2021,""26 Dorf"",""Secteur secondaire"",6,19,X,X,17,X,X" -"2021,""26 Dorf"",""Secteur tertiaire"",38,117,68,49,70,36,34" -"2021,""27 Feuerthalen"",""Secteur conomique - total"",192,1270,638,632,919,379,539" -"2021,""27 Feuerthalen"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""27 Feuerthalen"",""Secteur secondaire"",26,255,49,206,220,29,191" -"2021,""27 Feuerthalen"",""Secteur tertiaire"",166,1015,589,426,699,350,349" -"2021,""28 Flaach"",""Secteur conomique - total"",134,754,356,398,498,187,311" -"2021,""28 Flaach"",""Secteur primaire"",24,144,60,84,64,20,45" -"2021,""28 Flaach"",""Secteur secondaire"",21,135,54,81,105,29,76" -"2021,""28 Flaach"",""Secteur tertiaire"",89,475,242,233,328,138,190" -"2021,""29 Flurlingen"",""Secteur conomique - total"",115,448,234,214,328,145,184" -"2021,""29 Flurlingen"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""29 Flurlingen"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""29 Flurlingen"",""Secteur tertiaire"",91,295,173,122,187,91,96" -"2021,""30 Andelfingen"",""Secteur conomique - total"",211,1724,785,939,1326,500,826" -"2021,""30 Andelfingen"",""Secteur primaire"",12,69,29,40,48,18,30" -"2021,""30 Andelfingen"",""Secteur secondaire"",36,706,185,521,631,139,493" -"2021,""30 Andelfingen"",""Secteur tertiaire"",163,949,571,378,647,343,303" -"2021,""31 Henggart"",""Secteur conomique - total"",114,727,341,386,531,189,342" -"2021,""31 Henggart"",""Secteur primaire"",11,33,19,14,18,9,9" -"2021,""31 Henggart"",""Secteur secondaire"",19,361,76,285,322,50,271" -"2021,""31 Henggart"",""Secteur tertiaire"",84,333,246,87,191,129,61" -"2021,""32 Humlikon"",""Secteur conomique - total"",43,162,94,68,100,47,53" -"2021,""32 Humlikon"",""Secteur primaire"",8,26,X,X,17,X,X" -"2021,""32 Humlikon"",""Secteur secondaire"",9,25,X,X,23,X,X" -"2021,""32 Humlikon"",""Secteur tertiaire"",26,111,81,30,60,39,21" -"2021,""33 Kleinandelfingen"",""Secteur conomique - total"",182,1118,413,705,901,257,645" -"2021,""33 Kleinandelfingen"",""Secteur primaire"",25,52,16,36,38,8,30" -"2021,""33 Kleinandelfingen"",""Secteur secondaire"",36,512,110,402,458,74,384" -"2021,""33 Kleinandelfingen"",""Secteur tertiaire"",121,554,287,267,405,175,231" -"2021,""34 Laufen-Uhwiesen"",""Secteur conomique - total"",114,435,250,185,282,140,142" -"2021,""34 Laufen-Uhwiesen"",""Secteur primaire"",20,79,38,41,52,22,30" -"2021,""34 Laufen-Uhwiesen"",""Secteur secondaire"",15,63,24,39,51,15,36" -"2021,""34 Laufen-Uhwiesen"",""Secteur tertiaire"",79,293,188,105,179,103,76" -"2021,""35 Marthalen"",""Secteur conomique - total"",213,1237,603,634,868,341,526" -"2021,""35 Marthalen"",""Secteur primaire"",31,107,43,64,59,21,38" -"2021,""35 Marthalen"",""Secteur secondaire"",47,286,71,215,237,42,195" -"2021,""35 Marthalen"",""Secteur tertiaire"",135,844,489,355,571,279,293" -"2021,""37 Ossingen"",""Secteur conomique - total"",114,456,257,199,307,144,163" -"2021,""37 Ossingen"",""Secteur primaire"",24,66,19,47,48,9,39" -"2021,""37 Ossingen"",""Secteur secondaire"",15,45,9,36,41,6,35" -"2021,""37 Ossingen"",""Secteur tertiaire"",75,345,229,116,218,129,89" -"2021,""38 Rheinau"",""Secteur conomique - total"",87,785,431,354,566,282,284" -"2021,""38 Rheinau"",""Secteur primaire"",X,29,11,18,18,6,12" -"2021,""38 Rheinau"",""Secteur secondaire"",X,46,11,35,38,6,32" -"2021,""38 Rheinau"",""Secteur tertiaire"",69,710,409,301,510,270,240" -"2021,""39 Thalheim an der Thur"",""Secteur conomique - total"",74,294,128,166,190,54,136" -"2021,""39 Thalheim an der Thur"",""Secteur primaire"",16,39,X,X,20,X,X" -"2021,""39 Thalheim an der Thur"",""Secteur secondaire"",10,82,X,X,74,X,X" -"2021,""39 Thalheim an der Thur"",""Secteur tertiaire"",48,173,103,70,96,45,51" -"2021,""40 Trllikon"",""Secteur conomique - total"",95,337,157,180,218,83,135" -"2021,""40 Trllikon"",""Secteur primaire"",29,106,41,65,66,20,47" -"2021,""40 Trllikon"",""Secteur secondaire"",16,76,21,55,62,12,51" -"2021,""40 Trllikon"",""Secteur tertiaire"",50,155,95,60,90,51,38" -"2021,""41 Truttikon"",""Secteur conomique - total"",34,123,56,67,80,28,52" -"2021,""41 Truttikon"",""Secteur primaire"",15,44,11,33,30,6,24" -"2021,""41 Truttikon"",""Secteur secondaire"",6,34,18,16,27,12,15" -"2021,""41 Truttikon"",""Secteur tertiaire"",13,45,27,18,23,11,12" -"2021,""43 Volken"",""Secteur conomique - total"",28,86,38,48,53,16,36" -"2021,""43 Volken"",""Secteur primaire"",11,34,X,X,20,X,X" -"2021,""43 Volken"",""Secteur secondaire"",4,14,X,X,11,X,X" -"2021,""43 Volken"",""Secteur tertiaire"",13,38,23,15,22,10,12" -"2021,""51 Bachenblach"",""Secteur conomique - total"",270,1730,673,1057,1414,446,968" -"2021,""51 Bachenblach"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""51 Bachenblach"",""Secteur secondaire"",X,619,X,X,X,X,X" -"2021,""51 Bachenblach"",""Secteur tertiaire"",215,1105,544,561,839,349,489" -"2021,""52 Bassersdorf"",""Secteur conomique - total"",650,4507,1864,2643,3588,1234,2355" -"2021,""52 Bassersdorf"",""Secteur primaire"",11,40,X,X,29,X,X" -"2021,""52 Bassersdorf"",""Secteur secondaire"",107,954,X,X,878,X,X" -"2021,""52 Bassersdorf"",""Secteur tertiaire"",532,3513,1640,1873,2681,1065,1616" -"2021,""53 Blach"",""Secteur conomique - total"",1332,10845,6031,4814,8165,4049,4116" -"2021,""53 Blach"",""Secteur primaire"",22,81,32,49,55,16,39" -"2021,""53 Blach"",""Secteur secondaire"",168,2084,777,1307,1935,678,1257" -"2021,""53 Blach"",""Secteur tertiaire"",1142,8680,5222,3458,6175,3355,2820" -"2021,""54 Dietlikon"",""Secteur conomique - total"",580,5751,2291,3460,4692,1580,3111" -"2021,""54 Dietlikon"",""Secteur primaire"",5,11,X,X,8,X,X" -"2021,""54 Dietlikon"",""Secteur secondaire"",101,1398,X,X,1298,X,X" -"2021,""54 Dietlikon"",""Secteur tertiaire"",474,4342,2078,2264,3386,1426,1960" -"2021,""55 Eglisau"",""Secteur conomique - total"",302,1325,669,656,950,396,555" -"2021,""55 Eglisau"",""Secteur primaire"",25,82,29,53,50,14,36" -"2021,""55 Eglisau"",""Secteur secondaire"",43,334,75,259,294,46,247" -"2021,""55 Eglisau"",""Secteur tertiaire"",234,909,565,344,607,336,271" -"2021,""56 Embrach"",""Secteur conomique - total"",498,3748,1780,1968,2964,1199,1765" -"2021,""56 Embrach"",""Secteur primaire"",24,60,20,40,39,11,29" -"2021,""56 Embrach"",""Secteur secondaire"",73,766,169,597,703,127,575" -"2021,""56 Embrach"",""Secteur tertiaire"",401,2922,1591,1331,2222,1061,1161" -"2021,""57 Freienstein-Teufen"",""Secteur conomique - total"",165,762,335,427,544,190,354" -"2021,""57 Freienstein-Teufen"",""Secteur primaire"",27,76,31,45,48,18,30" -"2021,""57 Freienstein-Teufen"",""Secteur secondaire"",20,104,22,82,92,15,76" -"2021,""57 Freienstein-Teufen"",""Secteur tertiaire"",118,582,282,300,404,157,248" -"2021,""58 Glattfelden"",""Secteur conomique - total"",241,1066,458,608,796,269,527" -"2021,""58 Glattfelden"",""Secteur primaire"",14,38,14,24,23,7,16" -"2021,""58 Glattfelden"",""Secteur secondaire"",55,243,43,200,204,20,184" -"2021,""58 Glattfelden"",""Secteur tertiaire"",172,785,401,384,568,242,327" -"2021,""59 Hochfelden"",""Secteur conomique - total"",79,403,117,286,329,66,263" -"2021,""59 Hochfelden"",""Secteur primaire"",9,25,11,14,15,5,10" -"2021,""59 Hochfelden"",""Secteur secondaire"",16,217,11,206,207,7,200" -"2021,""59 Hochfelden"",""Secteur tertiaire"",54,161,95,66,107,54,53" -"2021,""60 Hri"",""Secteur conomique - total"",237,1248,334,914,1037,216,821" -"2021,""60 Hri"",""Secteur primaire"",12,32,10,22,19,4,15" -"2021,""60 Hri"",""Secteur secondaire"",60,618,100,518,565,67,497" -"2021,""60 Hri"",""Secteur tertiaire"",165,598,224,374,453,144,309" -"2021,""61 Hntwangen"",""Secteur conomique - total"",94,362,171,191,268,96,171" -"2021,""61 Hntwangen"",""Secteur primaire"",14,30,13,17,15,5,10" -"2021,""61 Hntwangen"",""Secteur secondaire"",15,132,22,110,123,16,107" -"2021,""61 Hntwangen"",""Secteur tertiaire"",65,200,136,64,130,75,55" -"2021,""62 Kloten"",""Secteur conomique - total"",1546,35226,14155,21071,29261,10214,19047" -"2021,""62 Kloten"",""Secteur primaire"",18,51,17,34,35,8,27" -"2021,""62 Kloten"",""Secteur secondaire"",139,3816,545,3271,3571,419,3152" -"2021,""62 Kloten"",""Secteur tertiaire"",1389,31359,13593,17766,25655,9788,15868" -"2021,""63 Lufingen"",""Secteur conomique - total"",126,498,211,287,370,133,237" -"2021,""63 Lufingen"",""Secteur primaire"",7,18,X,X,10,X,X" -"2021,""63 Lufingen"",""Secteur secondaire"",24,139,X,X,124,X,X" -"2021,""63 Lufingen"",""Secteur tertiaire"",95,341,174,167,236,110,126" -"2021,""64 Nrensdorf"",""Secteur conomique - total"",303,1147,577,570,783,302,481" -"2021,""64 Nrensdorf"",""Secteur primaire"",18,46,15,31,26,6,20" -"2021,""64 Nrensdorf"",""Secteur secondaire"",46,216,41,175,190,28,163" -"2021,""64 Nrensdorf"",""Secteur tertiaire"",239,885,521,364,567,268,299" -"2021,""65 Oberembrach"",""Secteur conomique - total"",91,254,117,137,162,60,102" -"2021,""65 Oberembrach"",""Secteur primaire"",35,81,X,X,51,X,X" -"2021,""65 Oberembrach"",""Secteur secondaire"",10,36,X,X,29,X,X" -"2021,""65 Oberembrach"",""Secteur tertiaire"",46,137,87,50,82,46,35" -"2021,""66 Opfikon"",""Secteur conomique - total"",1534,24028,9511,14517,19944,6939,13005" -"2021,""66 Opfikon"",""Secteur primaire"",5,10,X,X,6,X,X" -"2021,""66 Opfikon"",""Secteur secondaire"",187,3081,X,X,2878,X,X" -"2021,""66 Opfikon"",""Secteur tertiaire"",1342,20937,8972,11965,17060,6515,10545" -"2021,""67 Rafz"",""Secteur conomique - total"",252,1618,720,898,1227,439,789" -"2021,""67 Rafz"",""Secteur primaire"",27,237,99,138,191,74,117" -"2021,""67 Rafz"",""Secteur secondaire"",43,511,84,427,460,52,408" -"2021,""67 Rafz"",""Secteur tertiaire"",182,870,537,333,577,312,265" -"2021,""68 Rorbas"",""Secteur conomique - total"",169,513,261,252,342,132,209" -"2021,""68 Rorbas"",""Secteur primaire"",6,10,X,X,7,X,X" -"2021,""68 Rorbas"",""Secteur secondaire"",37,111,X,X,93,X,X" -"2021,""68 Rorbas"",""Secteur tertiaire"",126,392,233,159,241,119,122" -"2021,""69 Wallisellen"",""Secteur conomique - total"",1493,21225,8541,12684,17907,6290,11617" -"2021,""69 Wallisellen"",""Secteur primaire"",7,27,X,X,23,X,X" -"2021,""69 Wallisellen"",""Secteur secondaire"",171,2824,X,X,2632,X,X" -"2021,""69 Wallisellen"",""Secteur tertiaire"",1315,18374,8053,10321,15252,5918,9334" -"2021,""70 Wasterkingen"",""Secteur conomique - total"",37,75,30,45,47,15,32" -"2021,""70 Wasterkingen"",""Secteur primaire"",8,18,X,X,10,X,X" -"2021,""70 Wasterkingen"",""Secteur secondaire"",4,12,X,X,12,X,X" -"2021,""70 Wasterkingen"",""Secteur tertiaire"",25,45,21,24,26,10,16" -"2021,""71 Wil (ZH)"",""Secteur conomique - total"",124,503,163,340,393,99,294" -"2021,""71 Wil (ZH)"",""Secteur primaire"",24,73,25,48,48,14,33" -"2021,""71 Wil (ZH)"",""Secteur secondaire"",24,170,19,151,158,14,144" -"2021,""71 Wil (ZH)"",""Secteur tertiaire"",76,260,119,141,187,71,116" -"2021,""72 Winkel"",""Secteur conomique - total"",276,1033,561,472,726,323,403" -"2021,""72 Winkel"",""Secteur primaire"",21,119,40,79,102,34,68" -"2021,""72 Winkel"",""Secteur secondaire"",24,106,28,78,91,16,75" -"2021,""72 Winkel"",""Secteur tertiaire"",231,808,493,315,534,274,260" -"2021,""81 Bachs"",""Secteur conomique - total"",55,238,123,115,168,72,95" -"2021,""81 Bachs"",""Secteur primaire"",21,72,X,X,46,X,X" -"2021,""81 Bachs"",""Secteur secondaire"",5,42,X,X,40,X,X" -"2021,""81 Bachs"",""Secteur tertiaire"",29,124,87,37,82,53,28" -"2021,""82 Boppelsen"",""Secteur conomique - total"",78,329,202,127,255,145,111" -"2021,""82 Boppelsen"",""Secteur primaire"",10,170,105,65,161,101,60" -"2021,""82 Boppelsen"",""Secteur secondaire"",9,14,X,X,11,X,X" -"2021,""82 Boppelsen"",""Secteur tertiaire"",59,145,X,X,84,X,X" -"2021,""83 Buchs (ZH)"",""Secteur conomique - total"",302,2452,903,1549,2024,610,1414" -"2021,""83 Buchs (ZH)"",""Secteur primaire"",10,43,15,28,36,13,23" -"2021,""83 Buchs (ZH)"",""Secteur secondaire"",54,281,58,223,250,36,214" -"2021,""83 Buchs (ZH)"",""Secteur tertiaire"",238,2128,830,1298,1737,561,1177" -"2021,""84 Dllikon"",""Secteur conomique - total"",285,2934,944,1990,2549,687,1862" -"2021,""84 Dllikon"",""Secteur primaire"",10,215,88,127,194,74,120" -"2021,""84 Dllikon"",""Secteur secondaire"",65,1304,369,935,1196,290,906" -"2021,""84 Dllikon"",""Secteur tertiaire"",210,1415,487,928,1160,323,837" -"2021,""85 Dnikon"",""Secteur conomique - total"",97,409,167,242,312,101,211" -"2021,""85 Dnikon"",""Secteur primaire"",8,56,17,39,40,10,30" -"2021,""85 Dnikon"",""Secteur secondaire"",24,182,39,143,163,26,137" -"2021,""85 Dnikon"",""Secteur tertiaire"",65,171,111,60,109,64,45" -"2021,""86 Dielsdorf"",""Secteur conomique - total"",436,4535,2176,2359,3537,1515,2023" -"2021,""86 Dielsdorf"",""Secteur primaire"",8,26,8,18,20,5,15" -"2021,""86 Dielsdorf"",""Secteur secondaire"",57,655,164,491,597,122,475" -"2021,""86 Dielsdorf"",""Secteur tertiaire"",371,3854,2004,1850,2921,1387,1533" -"2021,""87 Httikon"",""Secteur conomique - total"",44,104,41,63,67,20,47" -"2021,""87 Httikon"",""Secteur primaire"",7,16,X,X,9,X,X" -"2021,""87 Httikon"",""Secteur secondaire"",6,26,X,X,22,X,X" -"2021,""87 Httikon"",""Secteur tertiaire"",31,62,30,32,37,15,22" -"2021,""88 Neerach"",""Secteur conomique - total"",241,680,342,338,457,183,274" -"2021,""88 Neerach"",""Secteur primaire"",15,34,X,X,24,X,X" -"2021,""88 Neerach"",""Secteur secondaire"",27,68,X,X,61,X,X" -"2021,""88 Neerach"",""Secteur tertiaire"",199,578,325,253,372,174,198" -"2021,""89 Niederglatt"",""Secteur conomique - total"",251,1700,669,1031,1363,437,926" -"2021,""89 Niederglatt"",""Secteur primaire"",10,36,16,20,21,7,14" -"2021,""89 Niederglatt"",""Secteur secondaire"",41,368,159,209,310,111,199" -"2021,""89 Niederglatt"",""Secteur tertiaire"",200,1296,494,802,1032,319,714" -"2021,""90 Niederhasli"",""Secteur conomique - total"",486,2580,930,1650,2058,591,1467" -"2021,""90 Niederhasli"",""Secteur primaire"",23,55,22,33,35,10,25" -"2021,""90 Niederhasli"",""Secteur secondaire"",102,941,159,782,857,111,746" -"2021,""90 Niederhasli"",""Secteur tertiaire"",361,1584,749,835,1166,470,696" -"2021,""91 Niederweningen"",""Secteur conomique - total"",165,878,353,525,696,223,473" -"2021,""91 Niederweningen"",""Secteur primaire"",20,49,17,32,31,7,24" -"2021,""91 Niederweningen"",""Secteur secondaire"",18,347,68,279,327,56,271" -"2021,""91 Niederweningen"",""Secteur tertiaire"",127,482,268,214,338,160,178" -"2021,""92 Oberglatt"",""Secteur conomique - total"",329,1927,642,1285,1571,388,1183" -"2021,""92 Oberglatt"",""Secteur primaire"",9,25,X,X,16,X,X" -"2021,""92 Oberglatt"",""Secteur secondaire"",70,972,X,X,918,X,X" -"2021,""92 Oberglatt"",""Secteur tertiaire"",250,930,511,419,637,296,340" -"2021,""93 Oberweningen"",""Secteur conomique - total"",92,241,125,116,174,75,99" -"2021,""93 Oberweningen"",""Secteur primaire"",8,35,13,22,26,8,19" -"2021,""93 Oberweningen"",""Secteur secondaire"",15,37,12,25,30,6,23" -"2021,""93 Oberweningen"",""Secteur tertiaire"",69,169,100,69,118,61,57" -"2021,""94 Otelfingen"",""Secteur conomique - total"",268,2441,860,1581,1965,556,1409" -"2021,""94 Otelfingen"",""Secteur primaire"",11,107,66,41,46,21,25" -"2021,""94 Otelfingen"",""Secteur secondaire"",53,479,80,399,429,53,376" -"2021,""94 Otelfingen"",""Secteur tertiaire"",204,1855,714,1141,1490,483,1007" -"2021,""95 Regensberg"",""Secteur conomique - total"",45,299,166,133,187,91,96" -"2021,""95 Regensberg"",""Secteur primaire"",X,21,8,13,14,4,9" -"2021,""95 Regensberg"",""Secteur secondaire"",X,6,0,6,6,0,6" -"2021,""95 Regensberg"",""Secteur tertiaire"",37,272,158,114,167,87,81" -"2021,""96 Regensdorf"",""Secteur conomique - total"",1282,10239,4020,6219,8220,2626,5594" -"2021,""96 Regensdorf"",""Secteur primaire"",23,111,52,59,63,23,40" -"2021,""96 Regensdorf"",""Secteur secondaire"",222,2350,338,2012,2191,251,1941" -"2021,""96 Regensdorf"",""Secteur tertiaire"",1037,7778,3630,4148,5967,2353,3614" -"2021,""97 Rmlang"",""Secteur conomique - total"",776,6596,2126,4470,5462,1409,4053" -"2021,""97 Rmlang"",""Secteur primaire"",26,88,31,57,54,12,42" -"2021,""97 Rmlang"",""Secteur secondaire"",151,1922,309,1613,1791,235,1556" -"2021,""97 Rmlang"",""Secteur tertiaire"",599,4586,1786,2800,3616,1162,2454" -"2021,""98 Schleinikon"",""Secteur conomique - total"",61,156,69,87,103,35,68" -"2021,""98 Schleinikon"",""Secteur primaire"",15,38,12,26,27,6,20" -"2021,""98 Schleinikon"",""Secteur secondaire"",11,42,18,24,30,8,22" -"2021,""98 Schleinikon"",""Secteur tertiaire"",35,76,39,37,46,21,25" -"2021,""99 Schfflisdorf"",""Secteur conomique - total"",92,328,211,117,203,107,96" -"2021,""99 Schfflisdorf"",""Secteur primaire"",7,16,X,X,11,X,X" -"2021,""99 Schfflisdorf"",""Secteur secondaire"",13,23,X,X,19,X,X" -"2021,""99 Schfflisdorf"",""Secteur tertiaire"",72,289,198,91,173,101,72" -"2021,""100 Stadel"",""Secteur conomique - total"",145,518,258,260,356,146,210" -"2021,""100 Stadel"",""Secteur primaire"",34,85,32,53,54,18,36" -"2021,""100 Stadel"",""Secteur secondaire"",17,57,17,40,48,11,38" -"2021,""100 Stadel"",""Secteur tertiaire"",94,376,209,167,254,118,136" -"2021,""101 Steinmaur"",""Secteur conomique - total"",226,840,404,436,604,237,367" -"2021,""101 Steinmaur"",""Secteur primaire"",27,184,82,102,145,62,83" -"2021,""101 Steinmaur"",""Secteur secondaire"",37,162,44,118,137,26,111" -"2021,""101 Steinmaur"",""Secteur tertiaire"",162,494,278,216,322,149,173" -"2021,""102 Weiach"",""Secteur conomique - total"",106,304,124,180,217,68,149" -"2021,""102 Weiach"",""Secteur primaire"",10,26,X,X,16,X,X" -"2021,""102 Weiach"",""Secteur secondaire"",18,94,X,X,85,X,X" -"2021,""102 Weiach"",""Secteur tertiaire"",78,184,105,79,117,59,57" -"2021,""111 Bretswil"",""Secteur conomique - total"",369,1668,830,838,1155,444,710" -"2021,""111 Bretswil"",""Secteur primaire"",57,141,47,94,86,19,67" -"2021,""111 Bretswil"",""Secteur secondaire"",68,408,86,322,362,53,308" -"2021,""111 Bretswil"",""Secteur tertiaire"",244,1119,697,422,707,372,335" -"2021,""112 Bubikon"",""Secteur conomique - total"",581,3791,1625,2166,2975,1036,1939" -"2021,""112 Bubikon"",""Secteur primaire"",32,89,24,65,60,12,48" -"2021,""112 Bubikon"",""Secteur secondaire"",104,1619,412,1207,1488,319,1169" -"2021,""112 Bubikon"",""Secteur tertiaire"",445,2083,1189,894,1428,705,723" -"2021,""113 Drnten"",""Secteur conomique - total"",454,1903,1011,892,1328,589,738" -"2021,""113 Drnten"",""Secteur primaire"",34,128,45,83,88,29,60" -"2021,""113 Drnten"",""Secteur secondaire"",86,331,66,265,283,38,245" -"2021,""113 Drnten"",""Secteur tertiaire"",334,1444,900,544,956,522,434" -"2021,""114 Fischenthal"",""Secteur conomique - total"",213,674,287,387,478,168,310" -"2021,""114 Fischenthal"",""Secteur primaire"",52,139,46,93,77,22,55" -"2021,""114 Fischenthal"",""Secteur secondaire"",46,237,73,164,201,49,153" -"2021,""114 Fischenthal"",""Secteur tertiaire"",115,298,168,130,199,97,102" -"2021,""115 Gossau (ZH)"",""Secteur conomique - total"",623,2548,1130,1418,1863,666,1197" -"2021,""115 Gossau (ZH)"",""Secteur primaire"",47,133,44,89,87,24,64" -"2021,""115 Gossau (ZH)"",""Secteur secondaire"",117,746,124,622,662,69,592" -"2021,""115 Gossau (ZH)"",""Secteur tertiaire"",459,1669,962,707,1114,574,540" -"2021,""116 Grningen"",""Secteur conomique - total"",277,1864,762,1102,1468,481,987" -"2021,""116 Grningen"",""Secteur primaire"",37,86,33,53,54,17,37" -"2021,""116 Grningen"",""Secteur secondaire"",48,509,70,439,473,49,424" -"2021,""116 Grningen"",""Secteur tertiaire"",192,1269,659,610,941,415,526" -"2021,""117 Hinwil"",""Secteur conomique - total"",893,7324,2840,4484,6005,1895,4110" -"2021,""117 Hinwil"",""Secteur primaire"",67,197,61,136,130,31,100" -"2021,""117 Hinwil"",""Secteur secondaire"",152,2391,666,1725,2182,526,1656" -"2021,""117 Hinwil"",""Secteur tertiaire"",674,4736,2113,2623,3693,1339,2354" -"2021,""118 Rti (ZH)"",""Secteur conomique - total"",855,5215,2602,2613,3845,1579,2266" -"2021,""118 Rti (ZH)"",""Secteur primaire"",19,63,29,34,36,10,25" -"2021,""118 Rti (ZH)"",""Secteur secondaire"",134,1397,271,1126,1278,198,1080" -"2021,""118 Rti (ZH)"",""Secteur tertiaire"",702,3755,2302,1453,2531,1371,1160" -"2021,""119 Seegrben"",""Secteur conomique - total"",127,556,299,257,366,169,198" -"2021,""119 Seegrben"",""Secteur primaire"",14,68,27,41,54,19,35" -"2021,""119 Seegrben"",""Secteur secondaire"",10,57,22,35,46,14,33" -"2021,""119 Seegrben"",""Secteur tertiaire"",103,431,250,181,266,136,129" -"2021,""120 Wald (ZH)"",""Secteur conomique - total"",696,3486,1908,1578,2499,1165,1334" -"2021,""120 Wald (ZH)"",""Secteur primaire"",74,180,61,119,104,29,75" -"2021,""120 Wald (ZH)"",""Secteur secondaire"",133,898,221,677,801,160,642" -"2021,""120 Wald (ZH)"",""Secteur tertiaire"",489,2408,1626,782,1594,976,617" -"2021,""121 Wetzikon (ZH)"",""Secteur conomique - total"",1824,14354,7242,7112,10532,4534,5998" -"2021,""121 Wetzikon (ZH)"",""Secteur primaire"",26,75,25,50,52,13,39" -"2021,""121 Wetzikon (ZH)"",""Secteur secondaire"",302,3369,946,2423,3056,726,2330" -"2021,""121 Wetzikon (ZH)"",""Secteur tertiaire"",1496,10910,6271,4639,7424,3794,3630" -"2021,""131 Adliswil"",""Secteur conomique - total"",1013,7464,3424,4040,5848,2320,3528" -"2021,""131 Adliswil"",""Secteur primaire"",X,16,7,9,11,4,7" -"2021,""131 Adliswil"",""Secteur secondaire"",X,586,132,454,523,88,435" -"2021,""131 Adliswil"",""Secteur tertiaire"",905,6862,3285,3577,5314,2228,3086" -"2021,""135 Kilchberg (ZH)"",""Secteur conomique - total"",638,4312,2386,1926,3221,1569,1651" -"2021,""135 Kilchberg (ZH)"",""Secteur primaire"",X,10,X,X,8,X,X" -"2021,""135 Kilchberg (ZH)"",""Secteur secondaire"",X,1092,X,X,969,X,X" -"2021,""135 Kilchberg (ZH)"",""Secteur tertiaire"",594,3210,1961,1249,2244,1243,1001" -"2021,""136 Langnau am Albis"",""Secteur conomique - total"",374,1589,877,712,1123,550,573" -"2021,""136 Langnau am Albis"",""Secteur primaire"",8,20,8,12,14,5,9" -"2021,""136 Langnau am Albis"",""Secteur secondaire"",49,172,35,137,150,20,130" -"2021,""136 Langnau am Albis"",""Secteur tertiaire"",317,1397,834,563,958,524,434" -"2021,""137 Oberrieden"",""Secteur conomique - total"",291,1026,554,472,700,315,386" -"2021,""137 Oberrieden"",""Secteur primaire"",X,13,X,X,10,X,X" -"2021,""137 Oberrieden"",""Secteur secondaire"",X,106,X,X,92,X,X" -"2021,""137 Oberrieden"",""Secteur tertiaire"",267,907,528,379,598,300,299" -"2021,""138 Richterswil"",""Secteur conomique - total"",813,4238,1810,2428,3274,1118,2156" -"2021,""138 Richterswil"",""Secteur primaire"",20,56,20,36,34,10,25" -"2021,""138 Richterswil"",""Secteur secondaire"",114,1473,267,1206,1346,187,1159" -"2021,""138 Richterswil"",""Secteur tertiaire"",679,2709,1523,1186,1894,922,972" -"2021,""139 Rschlikon"",""Secteur conomique - total"",428,2950,1323,1627,2384,914,1470" -"2021,""139 Rschlikon"",""Secteur primaire"",X,6,X,X,4,X,X" -"2021,""139 Rschlikon"",""Secteur secondaire"",X,279,X,X,248,X,X" -"2021,""139 Rschlikon"",""Secteur tertiaire"",382,2665,1257,1408,2132,871,1262" -"2021,""141 Thalwil"",""Secteur conomique - total"",1334,6728,3399,3329,4894,2095,2799" -"2021,""141 Thalwil"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""141 Thalwil"",""Secteur secondaire"",X,1075,X,X,X,X,X" -"2021,""141 Thalwil"",""Secteur tertiaire"",1221,5646,3177,2469,3905,1938,1967" -"2021,""151 Erlenbach (ZH)"",""Secteur conomique - total"",480,1887,1039,848,1340,655,686" -"2021,""151 Erlenbach (ZH)"",""Secteur primaire"",X,26,14,12,19,8,10" -"2021,""151 Erlenbach (ZH)"",""Secteur secondaire"",X,123,25,98,108,16,92" -"2021,""151 Erlenbach (ZH)"",""Secteur tertiaire"",442,1738,1000,738,1214,630,584" -"2021,""152 Herrliberg"",""Secteur conomique - total"",483,1538,769,769,1126,483,644" -"2021,""152 Herrliberg"",""Secteur primaire"",17,47,17,30,32,10,22" -"2021,""152 Herrliberg"",""Secteur secondaire"",30,150,29,121,129,16,113" -"2021,""152 Herrliberg"",""Secteur tertiaire"",436,1341,723,618,965,456,509" -"2021,""153 Hombrechtikon"",""Secteur conomique - total"",616,2899,1447,1452,2040,823,1217" -"2021,""153 Hombrechtikon"",""Secteur primaire"",68,217,94,123,123,42,81" -"2021,""153 Hombrechtikon"",""Secteur secondaire"",101,566,113,453,502,74,427" -"2021,""153 Hombrechtikon"",""Secteur tertiaire"",447,2116,1240,876,1415,707,709" -"2021,""154 Ksnacht (ZH)"",""Secteur conomique - total"",1268,6293,3174,3119,4784,2106,2678" -"2021,""154 Ksnacht (ZH)"",""Secteur primaire"",22,79,34,45,48,16,32" -"2021,""154 Ksnacht (ZH)"",""Secteur secondaire"",103,809,183,626,726,129,598" -"2021,""154 Ksnacht (ZH)"",""Secteur tertiaire"",1143,5405,2957,2448,4010,1962,2048" -"2021,""155 Mnnedorf"",""Secteur conomique - total"",770,5354,3024,2330,4071,2043,2028" -"2021,""155 Mnnedorf"",""Secteur primaire"",10,22,X,X,13,X,X" -"2021,""155 Mnnedorf"",""Secteur secondaire"",65,933,X,X,867,X,X" -"2021,""155 Mnnedorf"",""Secteur tertiaire"",695,4399,2802,1597,3191,1869,1322" -"2021,""156 Meilen"",""Secteur conomique - total"",1196,6111,3128,2983,4590,1993,2597" -"2021,""156 Meilen"",""Secteur primaire"",29,96,36,60,61,17,45" -"2021,""156 Meilen"",""Secteur secondaire"",89,1160,340,820,1060,266,794" -"2021,""156 Meilen"",""Secteur tertiaire"",1078,4855,2752,2103,3469,1710,1758" -"2021,""157 Oetwil am See"",""Secteur conomique - total"",288,2178,1029,1149,1730,698,1032" -"2021,""157 Oetwil am See"",""Secteur primaire"",15,38,9,29,25,5,20" -"2021,""157 Oetwil am See"",""Secteur secondaire"",61,737,206,531,639,129,510" -"2021,""157 Oetwil am See"",""Secteur tertiaire"",212,1403,814,589,1066,565,502" -"2021,""158 Stfa"",""Secteur conomique - total"",1031,6426,3044,3382,5065,2082,2983" -"2021,""158 Stfa"",""Secteur primaire"",23,75,26,49,48,14,34" -"2021,""158 Stfa"",""Secteur secondaire"",118,2727,866,1861,2508,736,1772" -"2021,""158 Stfa"",""Secteur tertiaire"",890,3624,2152,1472,2508,1331,1177" -"2021,""159 Uetikon am See"",""Secteur conomique - total"",397,1650,922,728,1203,591,612" -"2021,""159 Uetikon am See"",""Secteur primaire"",8,21,X,X,14,X,X" -"2021,""159 Uetikon am See"",""Secteur secondaire"",42,237,X,X,208,X,X" -"2021,""159 Uetikon am See"",""Secteur tertiaire"",347,1392,868,524,981,559,421" -"2021,""160 Zumikon"",""Secteur conomique - total"",383,1874,1052,822,1348,665,683" -"2021,""160 Zumikon"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""160 Zumikon"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""160 Zumikon"",""Secteur tertiaire"",344,1673,1019,654,1174,646,528" -"2021,""161 Zollikon"",""Secteur conomique - total"",1140,6411,3854,2557,4570,2492,2079" -"2021,""161 Zollikon"",""Secteur primaire"",4,8,X,X,7,X,X" -"2021,""161 Zollikon"",""Secteur secondaire"",71,318,X,X,285,X,X" -"2021,""161 Zollikon"",""Secteur tertiaire"",1065,6085,3781,2304,4279,2440,1839" -"2021,""172 Fehraltorf"",""Secteur conomique - total"",436,4747,2221,2526,3664,1402,2262" -"2021,""172 Fehraltorf"",""Secteur primaire"",22,58,22,36,39,11,28" -"2021,""172 Fehraltorf"",""Secteur secondaire"",93,1253,279,974,1123,204,919" -"2021,""172 Fehraltorf"",""Secteur tertiaire"",321,3436,1920,1516,2502,1187,1315" -"2021,""173 Hittnau"",""Secteur conomique - total"",258,832,360,472,598,191,407" -"2021,""173 Hittnau"",""Secteur primaire"",25,63,22,41,42,11,31" -"2021,""173 Hittnau"",""Secteur secondaire"",54,274,57,217,242,35,207" -"2021,""173 Hittnau"",""Secteur tertiaire"",179,495,281,214,314,145,169" -"2021,""176 Lindau"",""Secteur conomique - total"",393,3244,1318,1926,2645,920,1724" -"2021,""176 Lindau"",""Secteur primaire"",23,108,35,73,86,22,64" -"2021,""176 Lindau"",""Secteur secondaire"",80,1519,528,991,1380,433,947" -"2021,""176 Lindau"",""Secteur tertiaire"",290,1617,755,862,1178,466,713" -"2021,""177 Pfffikon"",""Secteur conomique - total"",851,6086,2936,3150,4462,1767,2696" -"2021,""177 Pfffikon"",""Secteur primaire"",40,248,74,174,202,54,148" -"2021,""177 Pfffikon"",""Secteur secondaire"",102,1545,325,1220,1425,243,1183" -"2021,""177 Pfffikon"",""Secteur tertiaire"",709,4293,2537,1756,2835,1470,1365" -"2021,""178 Russikon"",""Secteur conomique - total"",300,1173,517,656,876,294,582" -"2021,""178 Russikon"",""Secteur primaire"",32,119,46,73,77,22,55" -"2021,""178 Russikon"",""Secteur secondaire"",53,345,62,283,322,48,273" -"2021,""178 Russikon"",""Secteur tertiaire"",215,709,409,300,477,223,254" -"2021,""180 Weisslingen"",""Secteur conomique - total"",219,876,408,468,636,229,407" -"2021,""180 Weisslingen"",""Secteur primaire"",27,66,19,47,45,11,34" -"2021,""180 Weisslingen"",""Secteur secondaire"",36,189,42,147,170,30,140" -"2021,""180 Weisslingen"",""Secteur tertiaire"",156,621,347,274,421,189,233" -"2021,""181 Wila"",""Secteur conomique - total"",160,608,237,371,448,127,321" -"2021,""181 Wila"",""Secteur primaire"",19,48,15,33,30,7,23" -"2021,""181 Wila"",""Secteur secondaire"",36,245,39,206,220,25,195" -"2021,""181 Wila"",""Secteur tertiaire"",105,315,183,132,198,96,103" -"2021,""182 Wildberg"",""Secteur conomique - total"",78,264,105,159,181,49,132" -"2021,""182 Wildberg"",""Secteur primaire"",24,64,26,38,36,11,25" -"2021,""182 Wildberg"",""Secteur secondaire"",26,111,26,85,94,14,79" -"2021,""182 Wildberg"",""Secteur tertiaire"",28,89,53,36,52,24,28" -"2021,""191 Dbendorf"",""Secteur conomique - total"",1971,20149,9385,10764,15858,6332,9526" -"2021,""191 Dbendorf"",""Secteur primaire"",12,165,66,99,149,54,95" -"2021,""191 Dbendorf"",""Secteur secondaire"",262,1804,360,1444,1642,257,1386" -"2021,""191 Dbendorf"",""Secteur tertiaire"",1697,18180,8959,9221,14067,6021,8046" -"2021,""192 Egg"",""Secteur conomique - total"",605,2735,1348,1387,2012,821,1191" -"2021,""192 Egg"",""Secteur primaire"",51,147,54,93,90,28,62" -"2021,""192 Egg"",""Secteur secondaire"",75,384,106,278,331,65,266" -"2021,""192 Egg"",""Secteur tertiaire"",479,2204,1188,1016,1591,728,863" -"2021,""193 Fllanden"",""Secteur conomique - total"",493,2945,1176,1769,2295,756,1539" -"2021,""193 Fllanden"",""Secteur primaire"",7,20,X,X,11,X,X" -"2021,""193 Fllanden"",""Secteur secondaire"",67,1162,X,X,1093,X,X" -"2021,""193 Fllanden"",""Secteur tertiaire"",419,1763,946,817,1191,570,620" -"2021,""194 Greifensee"",""Secteur conomique - total"",227,1750,848,902,1331,543,788" -"2021,""194 Greifensee"",""Secteur primaire"",X,14,X,X,10,X,X" -"2021,""194 Greifensee"",""Secteur secondaire"",X,568,X,X,538,X,X" -"2021,""194 Greifensee"",""Secteur tertiaire"",194,1168,678,490,783,396,387" -"2021,""195 Maur"",""Secteur conomique - total"",700,2359,1184,1175,1710,729,981" -"2021,""195 Maur"",""Secteur primaire"",36,96,32,64,66,17,49" -"2021,""195 Maur"",""Secteur secondaire"",75,317,66,251,280,39,241" -"2021,""195 Maur"",""Secteur tertiaire"",589,1946,1086,860,1364,672,691" -"2021,""196 Mnchaltorf"",""Secteur conomique - total"",270,1420,643,777,1125,421,704" -"2021,""196 Mnchaltorf"",""Secteur primaire"",25,58,19,39,33,7,27" -"2021,""196 Mnchaltorf"",""Secteur secondaire"",55,451,146,305,408,114,295" -"2021,""196 Mnchaltorf"",""Secteur tertiaire"",190,911,478,433,683,300,383" -"2021,""197 Schwerzenbach"",""Secteur conomique - total"",306,2688,1214,1474,2152,824,1328" -"2021,""197 Schwerzenbach"",""Secteur primaire"",9,53,7,46,48,5,43" -"2021,""197 Schwerzenbach"",""Secteur secondaire"",44,345,82,263,312,58,254" -"2021,""197 Schwerzenbach"",""Secteur tertiaire"",253,2290,1125,1165,1792,761,1031" -"2021,""198 Uster"",""Secteur conomique - total"",2520,17583,8898,8685,13374,5833,7540" -"2021,""198 Uster"",""Secteur primaire"",59,174,67,107,115,37,78" -"2021,""198 Uster"",""Secteur secondaire"",291,3580,976,2604,3247,747,2500" -"2021,""198 Uster"",""Secteur tertiaire"",2170,13829,7855,5974,10011,5048,4962" -"2021,""199 Volketswil"",""Secteur conomique - total"",1289,11534,4709,6825,9231,3059,6172" -"2021,""199 Volketswil"",""Secteur primaire"",25,61,20,41,38,9,29" -"2021,""199 Volketswil"",""Secteur secondaire"",238,3003,614,2389,2773,470,2303" -"2021,""199 Volketswil"",""Secteur tertiaire"",1026,8470,4075,4395,6420,2580,3840" -"2021,""200 Wangen-Brttisellen"",""Secteur conomique - total"",537,5286,1812,3474,4274,1235,3039" -"2021,""200 Wangen-Brttisellen"",""Secteur primaire"",12,30,11,19,20,6,14" -"2021,""200 Wangen-Brttisellen"",""Secteur secondaire"",101,1455,297,1158,1366,246,1121" -"2021,""200 Wangen-Brttisellen"",""Secteur tertiaire"",424,3801,1504,2297,2888,983,1904" -"2021,""211 Altikon"",""Secteur conomique - total"",67,166,70,96,101,31,70" -"2021,""211 Altikon"",""Secteur primaire"",21,65,X,X,40,X,X" -"2021,""211 Altikon"",""Secteur secondaire"",8,13,X,X,9,X,X" -"2021,""211 Altikon"",""Secteur tertiaire"",38,88,41,47,53,17,35" -"2021,""213 Brtten"",""Secteur conomique - total"",133,395,192,203,273,111,162" -"2021,""213 Brtten"",""Secteur primaire"",20,65,10,55,43,5,39" -"2021,""213 Brtten"",""Secteur secondaire"",12,52,17,35,43,10,33" -"2021,""213 Brtten"",""Secteur tertiaire"",101,278,165,113,186,96,90" -"2021,""214 Dgerlen"",""Secteur conomique - total"",89,292,143,149,178,68,110" -"2021,""214 Dgerlen"",""Secteur primaire"",26,65,21,44,37,8,29" -"2021,""214 Dgerlen"",""Secteur secondaire"",9,65,18,47,56,10,45" -"2021,""214 Dgerlen"",""Secteur tertiaire"",54,162,104,58,85,50,35" -"2021,""215 Dttlikon"",""Secteur conomique - total"",56,189,94,95,102,35,68" -"2021,""215 Dttlikon"",""Secteur primaire"",9,37,X,X,22,X,X" -"2021,""215 Dttlikon"",""Secteur secondaire"",10,28,X,X,25,X,X" -"2021,""215 Dttlikon"",""Secteur tertiaire"",37,124,75,49,55,26,29" -"2021,""216 Dinhard"",""Secteur conomique - total"",110,437,172,265,312,83,229" -"2021,""216 Dinhard"",""Secteur primaire"",22,70,23,47,44,9,35" -"2021,""216 Dinhard"",""Secteur secondaire"",20,154,17,137,143,10,133" -"2021,""216 Dinhard"",""Secteur tertiaire"",68,213,132,81,125,64,61" -"2021,""218 Ellikon an der Thur"",""Secteur conomique - total"",69,650,278,372,519,193,326" -"2021,""218 Ellikon an der Thur"",""Secteur primaire"",15,109,36,73,88,27,61" -"2021,""218 Ellikon an der Thur"",""Secteur secondaire"",17,292,86,206,248,58,190" -"2021,""218 Ellikon an der Thur"",""Secteur tertiaire"",37,249,156,93,183,109,75" -"2021,""219 Elsau"",""Secteur conomique - total"",234,1140,484,656,859,276,583" -"2021,""219 Elsau"",""Secteur primaire"",16,42,17,25,30,8,22" -"2021,""219 Elsau"",""Secteur secondaire"",51,365,81,284,332,57,275" -"2021,""219 Elsau"",""Secteur tertiaire"",167,733,386,347,498,212,286" -"2021,""220 Hagenbuch"",""Secteur conomique - total"",76,198,82,116,141,44,97" -"2021,""220 Hagenbuch"",""Secteur primaire"",19,56,22,34,35,10,25" -"2021,""220 Hagenbuch"",""Secteur secondaire"",11,50,10,40,44,6,38" -"2021,""220 Hagenbuch"",""Secteur tertiaire"",46,92,50,42,62,29,34" -"2021,""221 Hettlingen"",""Secteur conomique - total"",177,846,446,400,633,287,345" -"2021,""221 Hettlingen"",""Secteur primaire"",19,41,15,26,25,7,18" -"2021,""221 Hettlingen"",""Secteur secondaire"",17,327,161,166,305,144,161" -"2021,""221 Hettlingen"",""Secteur tertiaire"",141,478,270,208,303,137,166" -"2021,""223 Neftenbach"",""Secteur conomique - total"",363,1715,662,1053,1288,354,934" -"2021,""223 Neftenbach"",""Secteur primaire"",40,142,50,92,85,21,64" -"2021,""223 Neftenbach"",""Secteur secondaire"",59,473,78,395,430,46,383" -"2021,""223 Neftenbach"",""Secteur tertiaire"",264,1100,534,566,773,287,487" -"2021,""224 Pfungen"",""Secteur conomique - total"",224,1458,616,842,1166,408,758" -"2021,""224 Pfungen"",""Secteur primaire"",7,20,X,X,13,X,X" -"2021,""224 Pfungen"",""Secteur secondaire"",46,437,X,X,399,X,X" -"2021,""224 Pfungen"",""Secteur tertiaire"",171,1001,507,494,753,327,427" -"2021,""225 Rickenbach (ZH)"",""Secteur conomique - total"",167,547,295,252,365,155,210" -"2021,""225 Rickenbach (ZH)"",""Secteur primaire"",23,74,26,48,49,12,36" -"2021,""225 Rickenbach (ZH)"",""Secteur secondaire"",22,71,13,58,64,8,56" -"2021,""225 Rickenbach (ZH)"",""Secteur tertiaire"",122,402,256,146,253,135,118" -"2021,""226 Schlatt (ZH)"",""Secteur conomique - total"",48,140,43,97,105,22,83" -"2021,""226 Schlatt (ZH)"",""Secteur primaire"",15,36,X,X,25,X,X" -"2021,""226 Schlatt (ZH)"",""Secteur secondaire"",8,36,X,X,32,X,X" -"2021,""226 Schlatt (ZH)"",""Secteur tertiaire"",25,68,26,42,48,13,35" -"2021,""227 Seuzach"",""Secteur conomique - total"",418,2667,1168,1499,2057,717,1340" -"2021,""227 Seuzach"",""Secteur primaire"",13,32,9,23,21,5,16" -"2021,""227 Seuzach"",""Secteur secondaire"",90,641,101,540,578,62,516" -"2021,""227 Seuzach"",""Secteur tertiaire"",315,1994,1058,936,1458,650,808" -"2021,""228 Turbenthal"",""Secteur conomique - total"",333,1586,906,680,1114,555,559" -"2021,""228 Turbenthal"",""Secteur primaire"",46,115,46,69,72,23,49" -"2021,""228 Turbenthal"",""Secteur secondaire"",53,260,54,206,229,34,195" -"2021,""228 Turbenthal"",""Secteur tertiaire"",234,1211,806,405,813,498,315" -"2021,""230 Winterthur"",""Secteur conomique - total"",8258,75220,36482,38738,57292,23823,33469" -"2021,""230 Winterthur"",""Secteur primaire"",56,179,49,130,124,22,102" -"2021,""230 Winterthur"",""Secteur secondaire"",874,11709,2457,9252,10807,1922,8884" -"2021,""230 Winterthur"",""Secteur tertiaire"",7328,63332,33976,29356,46361,21879,24482" -"2021,""231 Zell (ZH)"",""Secteur conomique - total"",343,1532,824,708,1095,490,605" -"2021,""231 Zell (ZH)"",""Secteur primaire"",25,94,49,45,60,27,32" -"2021,""231 Zell (ZH)"",""Secteur secondaire"",64,444,126,318,380,82,298" -"2021,""231 Zell (ZH)"",""Secteur tertiaire"",254,994,649,345,655,380,275" -"2021,""241 Aesch (ZH)"",""Secteur conomique - total"",106,364,138,226,255,74,182" -"2021,""241 Aesch (ZH)"",""Secteur primaire"",15,44,X,X,29,X,X" -"2021,""241 Aesch (ZH)"",""Secteur secondaire"",11,35,X,X,30,X,X" -"2021,""241 Aesch (ZH)"",""Secteur tertiaire"",80,285,118,167,197,62,135" -"2021,""242 Birmensdorf (ZH)"",""Secteur conomique - total"",423,2641,1151,1490,2053,744,1309" -"2021,""242 Birmensdorf (ZH)"",""Secteur primaire"",17,50,13,37,28,6,22" -"2021,""242 Birmensdorf (ZH)"",""Secteur secondaire"",74,423,85,338,388,60,327" -"2021,""242 Birmensdorf (ZH)"",""Secteur tertiaire"",332,2168,1053,1115,1637,678,960" -"2021,""243 Dietikon"",""Secteur conomique - total"",1808,19198,7984,11214,15203,5270,9933" -"2021,""243 Dietikon"",""Secteur primaire"",10,42,20,22,31,13,18" -"2021,""243 Dietikon"",""Secteur secondaire"",296,4413,1019,3394,3998,736,3262" -"2021,""243 Dietikon"",""Secteur tertiaire"",1502,14743,6945,7798,11175,4521,6653" -"2021,""244 Geroldswil"",""Secteur conomique - total"",316,2256,985,1271,1744,605,1139" -"2021,""244 Geroldswil"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""244 Geroldswil"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""244 Geroldswil"",""Secteur tertiaire"",263,1653,772,881,1228,463,765" -"2021,""245 Oberengstringen"",""Secteur conomique - total"",328,1333,637,696,958,369,588" -"2021,""245 Oberengstringen"",""Secteur primaire"",X,5,X,X,4,X,X" -"2021,""245 Oberengstringen"",""Secteur secondaire"",X,320,X,X,290,X,X" -"2021,""245 Oberengstringen"",""Secteur tertiaire"",274,1008,578,430,664,332,331" -"2021,""246 Oetwil an der Limmat"",""Secteur conomique - total"",120,260,137,123,178,73,105" -"2021,""246 Oetwil an der Limmat"",""Secteur primaire"",X,5,0,5,5,0,5" -"2021,""246 Oetwil an der Limmat"",""Secteur secondaire"",X,36,X,X,29,X,X" -"2021,""246 Oetwil an der Limmat"",""Secteur tertiaire"",105,219,X,X,143,X,X" -"2021,""247 Schlieren"",""Secteur conomique - total"",1472,19963,8791,11172,15960,6054,9906" -"2021,""247 Schlieren"",""Secteur primaire"",8,30,9,21,20,4,15" -"2021,""247 Schlieren"",""Secteur secondaire"",220,2952,622,2330,2755,506,2249" -"2021,""247 Schlieren"",""Secteur tertiaire"",1244,16981,8160,8821,13185,5543,7642" -"2021,""248 Uitikon"",""Secteur conomique - total"",307,1105,644,461,758,379,378" -"2021,""248 Uitikon"",""Secteur primaire"",6,17,X,X,15,X,X" -"2021,""248 Uitikon"",""Secteur secondaire"",20,102,X,X,87,X,X" -"2021,""248 Uitikon"",""Secteur tertiaire"",281,986,601,385,655,351,305" -"2021,""249 Unterengstringen"",""Secteur conomique - total"",259,953,393,560,741,244,497" -"2021,""249 Unterengstringen"",""Secteur primaire"",4,10,X,X,5,X,X" -"2021,""249 Unterengstringen"",""Secteur secondaire"",44,241,X,X,221,X,X" -"2021,""249 Unterengstringen"",""Secteur tertiaire"",211,702,350,352,515,215,301" -"2021,""250 Urdorf"",""Secteur conomique - total"",661,8663,3457,5206,6066,1949,4117" -"2021,""250 Urdorf"",""Secteur primaire"",7,29,13,16,15,4,11" -"2021,""250 Urdorf"",""Secteur secondaire"",115,1623,394,1229,1507,313,1195" -"2021,""250 Urdorf"",""Secteur tertiaire"",539,7011,3050,3961,4543,1632,2911" -"2021,""251 Weiningen (ZH)"",""Secteur conomique - total"",261,2164,1030,1134,1482,499,983" -"2021,""251 Weiningen (ZH)"",""Secteur primaire"",12,44,18,26,27,9,18" -"2021,""251 Weiningen (ZH)"",""Secteur secondaire"",49,451,64,387,413,43,370" -"2021,""251 Weiningen (ZH)"",""Secteur tertiaire"",200,1669,948,721,1042,447,595" -"2021,""261 Zrich"",""Secteur conomique - total"",46132,514995,242639,272356,396784,165122,231662" -"2021,""261 Zrich"",""Secteur primaire"",57,179,66,113,135,44,92" -"2021,""261 Zrich"",""Secteur secondaire"",2573,26590,5584,21006,24438,4235,20203" -"2021,""261 Zrich"",""Secteur tertiaire"",43502,488226,236989,251237,372211,160843,211367" -"2021,""292 Stammheim"",""Secteur conomique - total"",270,1319,595,724,964,353,611" -"2021,""292 Stammheim"",""Secteur primaire"",76,402,124,278,296,72,224" -"2021,""292 Stammheim"",""Secteur secondaire"",58,380,133,247,309,82,227" -"2021,""292 Stammheim"",""Secteur tertiaire"",136,537,338,199,358,199,159" -"2021,""293 Wdenswil"",""Secteur conomique - total"",1867,10179,4964,5215,7612,3142,4470" -"2021,""293 Wdenswil"",""Secteur primaire"",137,397,146,251,241,72,170" -"2021,""293 Wdenswil"",""Secteur secondaire"",233,1705,399,1306,1536,285,1252" -"2021,""293 Wdenswil"",""Secteur tertiaire"",1497,8077,4419,3658,5834,2786,3049" -"2021,""294 Elgg"",""Secteur conomique - total"",341,1705,802,903,1262,473,789" -"2021,""294 Elgg"",""Secteur primaire"",39,120,36,84,82,17,66" -"2021,""294 Elgg"",""Secteur secondaire"",82,481,83,398,431,54,378" -"2021,""294 Elgg"",""Secteur tertiaire"",220,1104,683,421,749,403,346" -"2021,""295 Horgen"",""Secteur conomique - total"",1459,10583,5439,5144,8011,3578,4433" -"2021,""295 Horgen"",""Secteur primaire"",68,197,65,132,133,33,100" -"2021,""295 Horgen"",""Secteur secondaire"",165,1430,358,1072,1301,269,1032" -"2021,""295 Horgen"",""Secteur tertiaire"",1226,8956,5016,3940,6577,3276,3301" -"2021,""296 Illnau-Effretikon"",""Secteur conomique - total"",1054,6766,2904,3862,5108,1765,3343" -"2021,""296 Illnau-Effretikon"",""Secteur primaire"",64,213,90,123,153,60,93" -"2021,""296 Illnau-Effretikon"",""Secteur secondaire"",163,1704,287,1417,1572,203,1369" -"2021,""296 Illnau-Effretikon"",""Secteur tertiaire"",827,4849,2527,2322,3382,1501,1881" -"2021,""297 Bauma"",""Secteur conomique - total"",398,1830,910,920,1319,526,792" -"2021,""297 Bauma"",""Secteur primaire"",64,153,57,96,92,29,63" -"2021,""297 Bauma"",""Secteur secondaire"",70,563,190,373,487,128,358" -"2021,""297 Bauma"",""Secteur tertiaire"",264,1114,663,451,740,369,371" -"2021,""298 Wiesendangen"",""Secteur conomique - total"",398,1611,801,810,1107,441,666" -"2021,""298 Wiesendangen"",""Secteur primaire"",50,157,63,94,100,33,68" -"2021,""298 Wiesendangen"",""Secteur secondaire"",58,285,70,215,238,37,201" -"2021,""298 Wiesendangen"",""Secteur tertiaire"",290,1169,668,501,769,371,397" -"2021,""301 Aarberg"",""Secteur conomique - total"",344,2976,1536,1440,2180,982,1198" -"2021,""301 Aarberg"",""Secteur primaire"",16,134,61,73,104,43,61" -"2021,""301 Aarberg"",""Secteur secondaire"",53,827,179,648,737,132,605" -"2021,""301 Aarberg"",""Secteur tertiaire"",275,2015,1296,719,1339,807,532" -"2021,""302 Bargen (BE)"",""Secteur conomique - total"",69,409,156,253,315,92,223" -"2021,""302 Bargen (BE)"",""Secteur primaire"",19,57,24,33,36,10,26" -"2021,""302 Bargen (BE)"",""Secteur secondaire"",11,198,39,159,187,33,154" -"2021,""302 Bargen (BE)"",""Secteur tertiaire"",39,154,93,61,92,49,43" -"2021,""303 Grossaffoltern"",""Secteur conomique - total"",195,725,303,422,508,158,350" -"2021,""303 Grossaffoltern"",""Secteur primaire"",53,182,67,115,113,32,81" -"2021,""303 Grossaffoltern"",""Secteur secondaire"",37,194,54,140,163,34,129" -"2021,""303 Grossaffoltern"",""Secteur tertiaire"",105,349,182,167,232,92,140" -"2021,""304 Kallnach"",""Secteur conomique - total"",177,1104,329,775,832,189,643" -"2021,""304 Kallnach"",""Secteur primaire"",58,262,87,175,185,48,137" -"2021,""304 Kallnach"",""Secteur secondaire"",31,259,49,210,217,26,191" -"2021,""304 Kallnach"",""Secteur tertiaire"",88,583,193,390,430,115,315" -"2021,""305 Kappelen"",""Secteur conomique - total"",122,672,231,441,518,132,387" -"2021,""305 Kappelen"",""Secteur primaire"",30,107,41,66,70,21,49" -"2021,""305 Kappelen"",""Secteur secondaire"",24,322,55,267,295,37,258" -"2021,""305 Kappelen"",""Secteur tertiaire"",68,243,135,108,153,73,80" -"2021,""306 Lyss"",""Secteur conomique - total"",924,8714,3503,5211,6847,2195,4652" -"2021,""306 Lyss"",""Secteur primaire"",19,101,27,74,78,16,62" -"2021,""306 Lyss"",""Secteur secondaire"",161,3106,559,2547,2882,426,2456" -"2021,""306 Lyss"",""Secteur tertiaire"",744,5507,2917,2590,3887,1754,2134" -"2021,""307 Meikirch"",""Secteur conomique - total"",144,516,193,323,364,100,264" -"2021,""307 Meikirch"",""Secteur primaire"",28,75,29,46,47,12,34" -"2021,""307 Meikirch"",""Secteur secondaire"",21,113,18,95,94,8,86" -"2021,""307 Meikirch"",""Secteur tertiaire"",95,328,146,182,224,80,144" -"2021,""309 Radelfingen"",""Secteur conomique - total"",101,267,117,150,175,58,117" -"2021,""309 Radelfingen"",""Secteur primaire"",39,116,X,X,77,X,X" -"2021,""309 Radelfingen"",""Secteur secondaire"",16,35,X,X,29,X,X" -"2021,""309 Radelfingen"",""Secteur tertiaire"",46,116,67,49,69,35,35" -"2021,""310 Rapperswil (BE)"",""Secteur conomique - total"",238,865,330,535,620,176,444" -"2021,""310 Rapperswil (BE)"",""Secteur primaire"",74,209,68,141,132,31,100" -"2021,""310 Rapperswil (BE)"",""Secteur secondaire"",43,312,65,247,271,41,230" -"2021,""310 Rapperswil (BE)"",""Secteur tertiaire"",121,344,197,147,218,104,114" -"2021,""311 Schpfen"",""Secteur conomique - total"",275,1293,631,662,904,369,536" -"2021,""311 Schpfen"",""Secteur primaire"",55,143,47,96,85,19,67" -"2021,""311 Schpfen"",""Secteur secondaire"",34,240,49,191,201,25,176" -"2021,""311 Schpfen"",""Secteur tertiaire"",186,910,535,375,617,325,292" -"2021,""312 Seedorf (BE)"",""Secteur conomique - total"",220,1246,600,646,928,390,537" -"2021,""312 Seedorf (BE)"",""Secteur primaire"",60,203,82,121,128,37,91" -"2021,""312 Seedorf (BE)"",""Secteur secondaire"",46,218,44,174,187,25,162" -"2021,""312 Seedorf (BE)"",""Secteur tertiaire"",114,825,474,351,613,328,284" -"2021,""321 Aarwangen"",""Secteur conomique - total"",251,1506,677,829,1084,379,704" -"2021,""321 Aarwangen"",""Secteur primaire"",24,72,23,49,40,8,32" -"2021,""321 Aarwangen"",""Secteur secondaire"",52,584,137,447,499,86,414" -"2021,""321 Aarwangen"",""Secteur tertiaire"",175,850,517,333,544,285,259" -"2021,""322 Auswil"",""Secteur conomique - total"",51,137,53,84,80,25,55" -"2021,""322 Auswil"",""Secteur primaire"",26,76,X,X,40,X,X" -"2021,""322 Auswil"",""Secteur secondaire"",4,9,X,X,6,X,X" -"2021,""322 Auswil"",""Secteur tertiaire"",21,52,X,X,34,X,X" -"2021,""323 Bannwil"",""Secteur conomique - total"",55,287,95,192,211,52,159" -"2021,""323 Bannwil"",""Secteur primaire"",14,46,18,28,25,7,18" -"2021,""323 Bannwil"",""Secteur secondaire"",10,52,11,41,41,5,36" -"2021,""323 Bannwil"",""Secteur tertiaire"",31,189,66,123,144,39,105" -"2021,""324 Bleienbach"",""Secteur conomique - total"",71,465,205,260,360,134,225" -"2021,""324 Bleienbach"",""Secteur primaire"",18,60,20,40,37,8,29" -"2021,""324 Bleienbach"",""Secteur secondaire"",19,203,55,148,186,45,141" -"2021,""324 Bleienbach"",""Secteur tertiaire"",34,202,130,72,137,81,56" -"2021,""325 Busswil bei Melchnau"",""Secteur conomique - total"",17,48,19,29,29,7,22" -"2021,""325 Busswil bei Melchnau"",""Secteur primaire"",9,33,14,19,19,6,13" -"2021,""325 Busswil bei Melchnau"",""Secteur secondaire"",X,7,X,X,5,X,X" -"2021,""325 Busswil bei Melchnau"",""Secteur tertiaire"",X,8,X,X,6,X,X" -"2021,""326 Gondiswil"",""Secteur conomique - total"",79,244,105,139,155,51,103" -"2021,""326 Gondiswil"",""Secteur primaire"",45,124,52,72,74,25,49" -"2021,""326 Gondiswil"",""Secteur secondaire"",11,69,22,47,54,11,43" -"2021,""326 Gondiswil"",""Secteur tertiaire"",23,51,31,20,27,15,12" -"2021,""329 Langenthal"",""Secteur conomique - total"",1303,12793,6248,6545,9769,4028,5740" -"2021,""329 Langenthal"",""Secteur primaire"",33,105,40,65,70,22,48" -"2021,""329 Langenthal"",""Secteur secondaire"",185,3342,783,2559,3010,578,2432" -"2021,""329 Langenthal"",""Secteur tertiaire"",1085,9346,5425,3921,6688,3429,3260" -"2021,""331 Lotzwil"",""Secteur conomique - total"",139,926,456,470,702,281,421" -"2021,""331 Lotzwil"",""Secteur primaire"",12,39,17,22,28,9,18" -"2021,""331 Lotzwil"",""Secteur secondaire"",33,425,115,310,374,79,295" -"2021,""331 Lotzwil"",""Secteur tertiaire"",94,462,324,138,300,193,107" -"2021,""332 Madiswil"",""Secteur conomique - total"",282,1225,587,638,799,315,484" -"2021,""332 Madiswil"",""Secteur primaire"",91,237,96,141,138,44,94" -"2021,""332 Madiswil"",""Secteur secondaire"",46,261,57,204,220,34,186" -"2021,""332 Madiswil"",""Secteur tertiaire"",145,727,434,293,440,236,205" -"2021,""333 Melchnau"",""Secteur conomique - total"",118,654,397,257,441,229,212" -"2021,""333 Melchnau"",""Secteur primaire"",32,99,46,53,55,17,38" -"2021,""333 Melchnau"",""Secteur secondaire"",20,151,35,116,134,28,106" -"2021,""333 Melchnau"",""Secteur tertiaire"",66,404,316,88,252,184,68" -"2021,""335 Oeschenbach"",""Secteur conomique - total"",32,98,35,63,65,17,48" -"2021,""335 Oeschenbach"",""Secteur primaire"",18,58,25,33,33,12,21" -"2021,""335 Oeschenbach"",""Secteur secondaire"",6,17,X,X,15,X,X" -"2021,""335 Oeschenbach"",""Secteur tertiaire"",8,23,X,X,17,X,X" -"2021,""336 Reisiswil"",""Secteur conomique - total"",16,51,26,25,28,10,18" -"2021,""336 Reisiswil"",""Secteur primaire"",7,19,8,11,12,5,7" -"2021,""336 Reisiswil"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""336 Reisiswil"",""Secteur tertiaire"",9,32,18,14,16,5,11" -"2021,""337 Roggwil (BE)"",""Secteur conomique - total"",231,1733,720,1013,1343,462,881" -"2021,""337 Roggwil (BE)"",""Secteur primaire"",17,41,14,27,25,5,20" -"2021,""337 Roggwil (BE)"",""Secteur secondaire"",36,603,149,454,539,107,432" -"2021,""337 Roggwil (BE)"",""Secteur tertiaire"",178,1089,557,532,779,350,429" -"2021,""338 Rohrbach"",""Secteur conomique - total"",102,582,225,357,458,140,318" -"2021,""338 Rohrbach"",""Secteur primaire"",18,41,14,27,26,10,16" -"2021,""338 Rohrbach"",""Secteur secondaire"",25,321,73,248,293,54,240" -"2021,""338 Rohrbach"",""Secteur tertiaire"",59,220,138,82,139,77,63" -"2021,""339 Rohrbachgraben"",""Secteur conomique - total"",47,163,87,76,93,40,53" -"2021,""339 Rohrbachgraben"",""Secteur primaire"",29,78,X,X,42,X,X" -"2021,""339 Rohrbachgraben"",""Secteur secondaire"",4,11,X,X,9,X,X" -"2021,""339 Rohrbachgraben"",""Secteur tertiaire"",14,74,52,22,42,28,15" -"2021,""340 Rtschelen"",""Secteur conomique - total"",44,93,39,54,57,17,40" -"2021,""340 Rtschelen"",""Secteur primaire"",11,34,X,X,22,X,X" -"2021,""340 Rtschelen"",""Secteur secondaire"",7,11,X,X,9,X,X" -"2021,""340 Rtschelen"",""Secteur tertiaire"",26,48,24,24,25,10,15" -"2021,""341 Schwarzhusern"",""Secteur conomique - total"",28,77,32,45,56,17,39" -"2021,""341 Schwarzhusern"",""Secteur primaire"",7,14,X,X,8,X,X" -"2021,""341 Schwarzhusern"",""Secteur secondaire"",8,17,X,X,15,X,X" -"2021,""341 Schwarzhusern"",""Secteur tertiaire"",13,46,26,20,33,15,18" -"2021,""342 Thunstetten"",""Secteur conomique - total"",204,1557,475,1082,1265,307,959" -"2021,""342 Thunstetten"",""Secteur primaire"",34,124,50,74,70,23,47" -"2021,""342 Thunstetten"",""Secteur secondaire"",44,862,158,704,779,123,656" -"2021,""342 Thunstetten"",""Secteur tertiaire"",126,571,267,304,417,161,256" -"2021,""344 Ursenbach"",""Secteur conomique - total"",90,443,151,292,332,82,250" -"2021,""344 Ursenbach"",""Secteur primaire"",39,104,40,64,56,17,40" -"2021,""344 Ursenbach"",""Secteur secondaire"",15,215,36,179,195,25,170" -"2021,""344 Ursenbach"",""Secteur tertiaire"",36,124,75,49,80,41,40" -"2021,""345 Wynau"",""Secteur conomique - total"",96,363,165,198,260,96,164" -"2021,""345 Wynau"",""Secteur primaire"",13,31,X,X,17,X,X" -"2021,""345 Wynau"",""Secteur secondaire"",19,83,X,X,70,X,X" -"2021,""345 Wynau"",""Secteur tertiaire"",64,249,136,113,173,82,90" -"2021,""351 Bern"",""Secteur conomique - total"",14809,193347,96809,96538,144144,64831,79314" -"2021,""351 Bern"",""Secteur primaire"",45,310,127,183,248,90,158" -"2021,""351 Bern"",""Secteur secondaire"",1071,14493,3513,10980,12757,2589,10168" -"2021,""351 Bern"",""Secteur tertiaire"",13693,178544,93169,85375,131140,62151,68989" -"2021,""352 Bolligen"",""Secteur conomique - total"",353,1666,890,776,1162,537,625" -"2021,""352 Bolligen"",""Secteur primaire"",40,117,51,66,71,25,46" -"2021,""352 Bolligen"",""Secteur secondaire"",36,259,63,196,225,42,183" -"2021,""352 Bolligen"",""Secteur tertiaire"",277,1290,776,514,867,471,396" -"2021,""353 Bremgarten bei Bern"",""Secteur conomique - total"",204,682,437,245,415,241,174" -"2021,""353 Bremgarten bei Bern"",""Secteur primaire"",X,8,X,X,4,X,X" -"2021,""353 Bremgarten bei Bern"",""Secteur secondaire"",X,25,X,X,16,X,X" -"2021,""353 Bremgarten bei Bern"",""Secteur tertiaire"",184,649,423,226,395,235,160" -"2021,""354 Kirchlindach"",""Secteur conomique - total"",188,867,494,373,588,298,291" -"2021,""354 Kirchlindach"",""Secteur primaire"",36,125,42,83,86,22,64" -"2021,""354 Kirchlindach"",""Secteur secondaire"",20,75,16,59,64,9,55" -"2021,""354 Kirchlindach"",""Secteur tertiaire"",132,667,436,231,438,267,172" -"2021,""355 Kniz"",""Secteur conomique - total"",2261,20899,9982,10917,15564,6386,9178" -"2021,""355 Kniz"",""Secteur primaire"",126,442,201,241,285,106,179" -"2021,""355 Kniz"",""Secteur secondaire"",294,3727,808,2919,3349,588,2761" -"2021,""355 Kniz"",""Secteur tertiaire"",1841,16730,8973,7757,11930,5692,6238" -"2021,""356 Muri bei Bern"",""Secteur conomique - total"",1030,10444,4714,5730,7880,3042,4838" -"2021,""356 Muri bei Bern"",""Secteur primaire"",6,24,13,11,17,9,8" -"2021,""356 Muri bei Bern"",""Secteur secondaire"",128,1730,300,1430,1592,226,1366" -"2021,""356 Muri bei Bern"",""Secteur tertiaire"",896,8690,4401,4289,6271,2807,3464" -"2021,""357 Oberbalm"",""Secteur conomique - total"",96,299,119,180,188,55,133" -"2021,""357 Oberbalm"",""Secteur primaire"",59,169,68,101,98,31,67" -"2021,""357 Oberbalm"",""Secteur secondaire"",10,64,X,X,55,X,X" -"2021,""357 Oberbalm"",""Secteur tertiaire"",27,66,X,X,35,X,X" -"2021,""358 Stettlen"",""Secteur conomique - total"",166,809,385,424,585,225,360" -"2021,""358 Stettlen"",""Secteur primaire"",8,25,9,16,15,5,10" -"2021,""358 Stettlen"",""Secteur secondaire"",24,198,30,168,181,21,160" -"2021,""358 Stettlen"",""Secteur tertiaire"",134,586,346,240,389,199,190" -"2021,""359 Vechigen"",""Secteur conomique - total"",311,1408,759,649,915,425,490" -"2021,""359 Vechigen"",""Secteur primaire"",82,237,94,143,136,46,90" -"2021,""359 Vechigen"",""Secteur secondaire"",39,137,34,103,111,19,92" -"2021,""359 Vechigen"",""Secteur tertiaire"",190,1034,631,403,668,361,307" -"2021,""360 Wohlen bei Bern"",""Secteur conomique - total"",487,1986,1039,947,1361,608,753" -"2021,""360 Wohlen bei Bern"",""Secteur primaire"",80,259,94,165,175,51,124" -"2021,""360 Wohlen bei Bern"",""Secteur secondaire"",57,340,66,274,293,38,256" -"2021,""360 Wohlen bei Bern"",""Secteur tertiaire"",350,1387,879,508,893,519,374" -"2021,""361 Zollikofen"",""Secteur conomique - total"",520,9136,3486,5650,7277,2323,4954" -"2021,""361 Zollikofen"",""Secteur primaire"",13,395,86,309,358,75,283" -"2021,""361 Zollikofen"",""Secteur secondaire"",75,1235,216,1019,1139,165,975" -"2021,""361 Zollikofen"",""Secteur tertiaire"",432,7506,3184,4322,5780,2083,3696" -"2021,""362 Ittigen"",""Secteur conomique - total"",665,13110,4643,8467,10752,3292,7460" -"2021,""362 Ittigen"",""Secteur primaire"",6,39,7,32,35,6,30" -"2021,""362 Ittigen"",""Secteur secondaire"",92,731,136,595,653,94,559" -"2021,""362 Ittigen"",""Secteur tertiaire"",567,12340,4500,7840,10064,3193,6871" -"2021,""363 Ostermundigen"",""Secteur conomique - total"",733,8138,3245,4893,6427,2178,4250" -"2021,""363 Ostermundigen"",""Secteur primaire"",8,19,X,X,13,X,X" -"2021,""363 Ostermundigen"",""Secteur secondaire"",109,1942,X,X,1797,X,X" -"2021,""363 Ostermundigen"",""Secteur tertiaire"",616,6177,2912,3265,4617,1918,2699" -"2021,""371 Biel/Bienne"",""Secteur conomique - total"",4444,42400,21165,21235,32433,14466,17968" -"2021,""371 Biel/Bienne"",""Secteur primaire"",6,31,X,X,24,X,X" -"2021,""371 Biel/Bienne"",""Secteur secondaire"",513,9982,X,X,9380,X,X" -"2021,""371 Biel/Bienne"",""Secteur tertiaire"",3925,32387,17602,14785,23029,11284,11745" -"2021,""372 Evilard"",""Secteur conomique - total"",145,338,203,135,214,117,97" -"2021,""372 Evilard"",""Secteur primaire"",6,17,X,X,10,X,X" -"2021,""372 Evilard"",""Secteur secondaire"",14,31,X,X,25,X,X" -"2021,""372 Evilard"",""Secteur tertiaire"",125,290,193,97,179,111,68" -"2021,""381 Arch"",""Secteur conomique - total"",111,548,252,296,421,163,258" -"2021,""381 Arch"",""Secteur primaire"",11,27,X,X,15,X,X" -"2021,""381 Arch"",""Secteur secondaire"",27,296,110,186,260,84,176" -"2021,""381 Arch"",""Secteur tertiaire"",73,225,X,X,146,X,X" -"2021,""382 Betigen"",""Secteur conomique - total"",56,138,55,83,93,28,65" -"2021,""382 Betigen"",""Secteur primaire"",8,25,11,14,16,6,10" -"2021,""382 Betigen"",""Secteur secondaire"",15,41,9,32,32,4,28" -"2021,""382 Betigen"",""Secteur tertiaire"",33,72,35,37,45,18,27" -"2021,""383 Bren an der Aare"",""Secteur conomique - total"",259,2250,971,1279,1773,641,1132" -"2021,""383 Bren an der Aare"",""Secteur primaire"",30,111,42,69,78,27,51" -"2021,""383 Bren an der Aare"",""Secteur secondaire"",53,1282,374,908,1140,283,858" -"2021,""383 Bren an der Aare"",""Secteur tertiaire"",176,857,555,302,555,332,223" -"2021,""385 Diessbach bei Bren"",""Secteur conomique - total"",67,294,129,165,184,66,118" -"2021,""385 Diessbach bei Bren"",""Secteur primaire"",21,149,67,82,87,37,50" -"2021,""385 Diessbach bei Bren"",""Secteur secondaire"",14,68,14,54,58,8,50" -"2021,""385 Diessbach bei Bren"",""Secteur tertiaire"",32,77,48,29,40,22,18" -"2021,""386 Dotzigen"",""Secteur conomique - total"",86,813,324,489,671,223,448" -"2021,""386 Dotzigen"",""Secteur primaire"",8,25,X,X,15,X,X" -"2021,""386 Dotzigen"",""Secteur secondaire"",19,92,X,X,68,X,X" -"2021,""386 Dotzigen"",""Secteur tertiaire"",59,696,271,425,588,194,394" -"2021,""387 Lengnau (BE)"",""Secteur conomique - total"",276,1537,755,782,1205,517,687" -"2021,""387 Lengnau (BE)"",""Secteur primaire"",11,31,X,X,19,X,X" -"2021,""387 Lengnau (BE)"",""Secteur secondaire"",69,733,X,X,652,X,X" -"2021,""387 Lengnau (BE)"",""Secteur tertiaire"",196,773,440,333,533,270,263" -"2021,""388 Leuzigen"",""Secteur conomique - total"",92,269,113,156,173,55,118" -"2021,""388 Leuzigen"",""Secteur primaire"",22,86,32,54,52,14,38" -"2021,""388 Leuzigen"",""Secteur secondaire"",18,49,10,39,41,5,36" -"2021,""388 Leuzigen"",""Secteur tertiaire"",52,134,71,63,80,36,44" -"2021,""389 Meienried"",""Secteur conomique - total"",7,18,X,X,11,X,X" -"2021,""389 Meienried"",""Secteur primaire"",X,9,X,X,5,X,X" -"2021,""389 Meienried"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""389 Meienried"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""390 Meinisberg"",""Secteur conomique - total"",78,264,113,151,183,59,124" -"2021,""390 Meinisberg"",""Secteur primaire"",10,22,X,X,11,X,X" -"2021,""390 Meinisberg"",""Secteur secondaire"",15,63,X,X,55,X,X" -"2021,""390 Meinisberg"",""Secteur tertiaire"",53,179,91,88,116,48,69" -"2021,""391 Oberwil bei Bren"",""Secteur conomique - total"",70,167,80,87,112,41,71" -"2021,""391 Oberwil bei Bren"",""Secteur primaire"",21,62,24,38,44,13,31" -"2021,""391 Oberwil bei Bren"",""Secteur secondaire"",10,33,12,21,26,6,20" -"2021,""391 Oberwil bei Bren"",""Secteur tertiaire"",39,72,44,28,42,22,20" -"2021,""392 Pieterlen"",""Secteur conomique - total"",231,1342,579,763,1057,390,666" -"2021,""392 Pieterlen"",""Secteur primaire"",11,32,11,21,21,5,16" -"2021,""392 Pieterlen"",""Secteur secondaire"",47,430,106,324,385,78,306" -"2021,""392 Pieterlen"",""Secteur tertiaire"",173,880,462,418,651,307,344" -"2021,""393 Rti bei Bren"",""Secteur conomique - total"",64,515,192,323,434,136,299" -"2021,""393 Rti bei Bren"",""Secteur primaire"",16,39,13,26,24,6,18" -"2021,""393 Rti bei Bren"",""Secteur secondaire"",17,144,62,82,120,43,77" -"2021,""393 Rti bei Bren"",""Secteur tertiaire"",31,332,117,215,291,87,204" -"2021,""394 Wengi"",""Secteur conomique - total"",62,153,64,89,101,37,65" -"2021,""394 Wengi"",""Secteur primaire"",19,63,19,44,41,10,31" -"2021,""394 Wengi"",""Secteur secondaire"",7,32,7,25,26,5,21" -"2021,""394 Wengi"",""Secteur tertiaire"",36,58,38,20,34,22,13" -"2021,""401 Aefligen"",""Secteur conomique - total"",70,281,83,198,196,47,150" -"2021,""401 Aefligen"",""Secteur primaire"",9,22,8,14,15,4,11" -"2021,""401 Aefligen"",""Secteur secondaire"",16,111,20,91,97,11,85" -"2021,""401 Aefligen"",""Secteur tertiaire"",45,148,55,93,85,31,54" -"2021,""402 Alchenstorf"",""Secteur conomique - total"",45,134,57,77,85,29,56" -"2021,""402 Alchenstorf"",""Secteur primaire"",24,91,37,54,53,17,37" -"2021,""402 Alchenstorf"",""Secteur secondaire"",8,12,X,X,10,X,X" -"2021,""402 Alchenstorf"",""Secteur tertiaire"",13,31,X,X,21,X,X" -"2021,""403 Briswil"",""Secteur conomique - total"",57,207,102,105,133,54,78" -"2021,""403 Briswil"",""Secteur primaire"",6,15,X,X,9,X,X" -"2021,""403 Briswil"",""Secteur secondaire"",12,31,X,X,25,X,X" -"2021,""403 Briswil"",""Secteur tertiaire"",39,161,89,72,99,48,51" -"2021,""404 Burgdorf"",""Secteur conomique - total"",1290,14416,6817,7599,10919,4383,6536" -"2021,""404 Burgdorf"",""Secteur primaire"",9,31,8,23,25,6,19" -"2021,""404 Burgdorf"",""Secteur secondaire"",177,3708,841,2867,3338,637,2701" -"2021,""404 Burgdorf"",""Secteur tertiaire"",1104,10677,5968,4709,7556,3740,3816" -"2021,""405 Ersigen"",""Secteur conomique - total"",145,575,257,318,393,134,259" -"2021,""405 Ersigen"",""Secteur primaire"",49,159,58,101,102,25,77" -"2021,""405 Ersigen"",""Secteur secondaire"",22,154,60,94,118,32,86" -"2021,""405 Ersigen"",""Secteur tertiaire"",74,262,139,123,173,76,96" -"2021,""406 Hasle bei Burgdorf"",""Secteur conomique - total"",261,1360,560,800,984,317,667" -"2021,""406 Hasle bei Burgdorf"",""Secteur primaire"",80,251,113,138,144,51,93" -"2021,""406 Hasle bei Burgdorf"",""Secteur secondaire"",40,309,75,234,265,51,214" -"2021,""406 Hasle bei Burgdorf"",""Secteur tertiaire"",141,800,372,428,575,215,359" -"2021,""407 Heimiswil"",""Secteur conomique - total"",138,476,217,259,305,115,190" -"2021,""407 Heimiswil"",""Secteur primaire"",90,269,112,157,162,56,106" -"2021,""407 Heimiswil"",""Secteur secondaire"",13,53,X,X,46,X,X" -"2021,""407 Heimiswil"",""Secteur tertiaire"",35,154,X,X,97,X,X" -"2021,""408 Hellsau"",""Secteur conomique - total"",17,145,24,121,123,14,109" -"2021,""408 Hellsau"",""Secteur primaire"",X,27,X,X,19,X,X" -"2021,""408 Hellsau"",""Secteur secondaire"",X,79,X,X,72,X,X" -"2021,""408 Hellsau"",""Secteur tertiaire"",7,39,16,23,32,11,21" -"2021,""409 Hindelbank"",""Secteur conomique - total"",180,1030,540,490,761,340,421" -"2021,""409 Hindelbank"",""Secteur primaire"",20,58,22,36,38,11,27" -"2021,""409 Hindelbank"",""Secteur secondaire"",28,146,48,98,121,29,92" -"2021,""409 Hindelbank"",""Secteur tertiaire"",132,826,470,356,601,300,301" -"2021,""410 Hchstetten"",""Secteur conomique - total"",31,93,29,64,68,15,53" -"2021,""410 Hchstetten"",""Secteur primaire"",12,35,14,21,23,8,15" -"2021,""410 Hchstetten"",""Secteur secondaire"",7,26,X,X,23,X,X" -"2021,""410 Hchstetten"",""Secteur tertiaire"",12,32,X,X,23,X,X" -"2021,""411 Kernenried"",""Secteur conomique - total"",35,129,55,74,101,36,64" -"2021,""411 Kernenried"",""Secteur primaire"",11,35,X,X,28,X,X" -"2021,""411 Kernenried"",""Secteur secondaire"",7,25,X,X,23,X,X" -"2021,""411 Kernenried"",""Secteur tertiaire"",17,69,41,28,50,25,25" -"2021,""412 Kirchberg (BE)"",""Secteur conomique - total"",409,3260,1442,1818,2547,927,1620" -"2021,""412 Kirchberg (BE)"",""Secteur primaire"",25,66,24,42,40,10,30" -"2021,""412 Kirchberg (BE)"",""Secteur secondaire"",71,1095,276,819,969,199,770" -"2021,""412 Kirchberg (BE)"",""Secteur tertiaire"",313,2099,1142,957,1539,718,820" -"2021,""413 Koppigen"",""Secteur conomique - total"",141,949,570,379,631,333,298" -"2021,""413 Koppigen"",""Secteur primaire"",18,53,21,32,41,17,24" -"2021,""413 Koppigen"",""Secteur secondaire"",23,208,73,135,172,48,124" -"2021,""413 Koppigen"",""Secteur tertiaire"",100,688,476,212,418,268,150" -"2021,""414 Krauchthal"",""Secteur conomique - total"",133,528,178,350,395,97,298" -"2021,""414 Krauchthal"",""Secteur primaire"",43,118,37,81,76,18,58" -"2021,""414 Krauchthal"",""Secteur secondaire"",28,101,16,85,85,9,76" -"2021,""414 Krauchthal"",""Secteur tertiaire"",62,309,125,184,234,70,164" -"2021,""415 Lyssach"",""Secteur conomique - total"",166,1599,777,822,1220,514,706" -"2021,""415 Lyssach"",""Secteur primaire"",12,33,12,21,22,6,15" -"2021,""415 Lyssach"",""Secteur secondaire"",21,180,61,119,157,44,114" -"2021,""415 Lyssach"",""Secteur tertiaire"",133,1386,704,682,1040,464,577" -"2021,""418 Oberburg"",""Secteur conomique - total"",179,1242,539,703,907,327,580" -"2021,""418 Oberburg"",""Secteur primaire"",47,134,47,87,90,26,64" -"2021,""418 Oberburg"",""Secteur secondaire"",31,331,75,256,289,48,241" -"2021,""418 Oberburg"",""Secteur tertiaire"",101,777,417,360,528,253,275" -"2021,""420 Rdtligen-Alchenflh"",""Secteur conomique - total"",112,1150,478,672,936,337,599" -"2021,""420 Rdtligen-Alchenflh"",""Secteur primaire"",7,32,X,X,26,X,X" -"2021,""420 Rdtligen-Alchenflh"",""Secteur secondaire"",20,401,X,X,364,X,X" -"2021,""420 Rdtligen-Alchenflh"",""Secteur tertiaire"",85,717,345,372,545,229,317" -"2021,""421 Rumendingen"",""Secteur conomique - total"",13,144,70,74,81,36,45" -"2021,""421 Rumendingen"",""Secteur primaire"",9,33,X,X,20,X,X" -"2021,""421 Rumendingen"",""Secteur secondaire"",X,13,X,X,12,X,X" -"2021,""421 Rumendingen"",""Secteur tertiaire"",X,98,58,40,50,30,19" -"2021,""422 Rti bei Lyssach"",""Secteur conomique - total"",11,26,13,13,15,5,9" -"2021,""422 Rti bei Lyssach"",""Secteur primaire"",7,22,X,X,12,X,X" -"2021,""422 Rti bei Lyssach"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""422 Rti bei Lyssach"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""423 Willadingen"",""Secteur conomique - total"",18,40,14,26,28,7,20" -"2021,""423 Willadingen"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""423 Willadingen"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""423 Willadingen"",""Secteur tertiaire"",8,21,X,X,13,X,X" -"2021,""424 Wynigen"",""Secteur conomique - total"",216,779,383,396,512,206,306" -"2021,""424 Wynigen"",""Secteur primaire"",99,273,118,155,162,56,105" -"2021,""424 Wynigen"",""Secteur secondaire"",37,187,57,130,149,31,118" -"2021,""424 Wynigen"",""Secteur tertiaire"",80,319,208,111,202,119,83" -"2021,""431 Corgmont"",""Secteur conomique - total"",123,636,261,375,469,159,310" -"2021,""431 Corgmont"",""Secteur primaire"",24,58,23,35,35,11,25" -"2021,""431 Corgmont"",""Secteur secondaire"",19,108,29,79,93,20,73" -"2021,""431 Corgmont"",""Secteur tertiaire"",80,470,209,261,341,128,212" -"2021,""432 Cormoret"",""Secteur conomique - total"",49,127,54,73,85,31,54" -"2021,""432 Cormoret"",""Secteur primaire"",11,33,X,X,25,X,X" -"2021,""432 Cormoret"",""Secteur secondaire"",12,27,X,X,22,X,X" -"2021,""432 Cormoret"",""Secteur tertiaire"",26,67,36,31,39,22,17" -"2021,""433 Cortbert"",""Secteur conomique - total"",62,237,101,136,162,58,104" -"2021,""433 Cortbert"",""Secteur primaire"",18,50,16,34,29,8,21" -"2021,""433 Cortbert"",""Secteur secondaire"",14,62,16,46,51,11,40" -"2021,""433 Cortbert"",""Secteur tertiaire"",30,125,69,56,83,39,43" -"2021,""434 Courtelary"",""Secteur conomique - total"",107,779,400,379,612,274,337" -"2021,""434 Courtelary"",""Secteur primaire"",22,59,25,34,43,15,28" -"2021,""434 Courtelary"",""Secteur secondaire"",23,380,144,236,330,110,220" -"2021,""434 Courtelary"",""Secteur tertiaire"",62,340,231,109,238,149,89" -"2021,""435 La Ferrire"",""Secteur conomique - total"",62,215,74,141,161,39,123" -"2021,""435 La Ferrire"",""Secteur primaire"",27,66,24,42,45,11,34" -"2021,""435 La Ferrire"",""Secteur secondaire"",11,83,7,76,76,5,72" -"2021,""435 La Ferrire"",""Secteur tertiaire"",24,66,43,23,40,23,18" -"2021,""437 Mont-Tramelan"",""Secteur conomique - total"",16,52,21,31,29,8,21" -"2021,""437 Mont-Tramelan"",""Secteur primaire"",12,36,13,23,19,4,15" -"2021,""437 Mont-Tramelan"",""Secteur secondaire"",X,9,X,X,X,X,X" -"2021,""437 Mont-Tramelan"",""Secteur tertiaire"",X,7,X,X,X,X,X" -"2021,""438 Orvin"",""Secteur conomique - total"",97,491,214,277,375,138,237" -"2021,""438 Orvin"",""Secteur primaire"",22,52,20,32,34,11,23" -"2021,""438 Orvin"",""Secteur secondaire"",19,179,51,128,156,34,122" -"2021,""438 Orvin"",""Secteur tertiaire"",56,260,143,117,185,93,92" -"2021,""441 Renan (BE)"",""Secteur conomique - total"",65,249,139,110,175,86,89" -"2021,""441 Renan (BE)"",""Secteur primaire"",21,54,X,X,40,X,X" -"2021,""441 Renan (BE)"",""Secteur secondaire"",7,26,X,X,22,X,X" -"2021,""441 Renan (BE)"",""Secteur tertiaire"",37,169,113,56,114,69,44" -"2021,""442 Romont (BE)"",""Secteur conomique - total"",16,37,18,19,21,9,13" -"2021,""442 Romont (BE)"",""Secteur primaire"",X,15,X,X,9,X,X" -"2021,""442 Romont (BE)"",""Secteur secondaire"",X,5,X,X,4,X,X" -"2021,""442 Romont (BE)"",""Secteur tertiaire"",8,17,X,X,8,X,X" -"2021,""443 Saint-Imier"",""Secteur conomique - total"",370,3799,2067,1732,2932,1488,1444" -"2021,""443 Saint-Imier"",""Secteur primaire"",24,59,20,39,39,11,28" -"2021,""443 Saint-Imier"",""Secteur secondaire"",72,1373,641,732,1239,542,697" -"2021,""443 Saint-Imier"",""Secteur tertiaire"",274,2367,1406,961,1655,936,719" -"2021,""444 Sonceboz-Sombeval"",""Secteur conomique - total"",111,1782,603,1179,1552,461,1091" -"2021,""444 Sonceboz-Sombeval"",""Secteur primaire"",11,40,8,32,31,5,26" -"2021,""444 Sonceboz-Sombeval"",""Secteur secondaire"",29,1205,359,846,1122,310,812" -"2021,""444 Sonceboz-Sombeval"",""Secteur tertiaire"",71,537,236,301,398,146,253" -"2021,""445 Sonvilier"",""Secteur conomique - total"",110,331,167,164,221,95,126" -"2021,""445 Sonvilier"",""Secteur primaire"",41,109,40,69,76,22,54" -"2021,""445 Sonvilier"",""Secteur secondaire"",12,43,20,23,28,9,19" -"2021,""445 Sonvilier"",""Secteur tertiaire"",57,179,107,72,117,64,52" -"2021,""446 Tramelan"",""Secteur conomique - total"",332,2382,1000,1382,1934,693,1241" -"2021,""446 Tramelan"",""Secteur primaire"",36,91,31,60,64,15,49" -"2021,""446 Tramelan"",""Secteur secondaire"",69,1073,329,744,987,276,712" -"2021,""446 Tramelan"",""Secteur tertiaire"",227,1218,640,578,882,402,480" -"2021,""448 Villeret"",""Secteur conomique - total"",73,1293,642,651,1195,566,629" -"2021,""448 Villeret"",""Secteur primaire"",13,39,18,21,32,13,19" -"2021,""448 Villeret"",""Secteur secondaire"",19,1121,541,580,1076,504,573" -"2021,""448 Villeret"",""Secteur tertiaire"",41,133,83,50,86,50,37" -"2021,""449 Sauge"",""Secteur conomique - total"",51,151,49,102,109,25,83" -"2021,""449 Sauge"",""Secteur primaire"",8,25,X,X,19,X,X" -"2021,""449 Sauge"",""Secteur secondaire"",11,24,X,X,19,X,X" -"2021,""449 Sauge"",""Secteur tertiaire"",32,102,37,65,71,18,53" -"2021,""450 Pry-La Heutte"",""Secteur conomique - total"",105,457,149,308,358,84,275" -"2021,""450 Pry-La Heutte"",""Secteur primaire"",11,26,13,13,16,7,10" -"2021,""450 Pry-La Heutte"",""Secteur secondaire"",30,208,19,189,194,13,180" -"2021,""450 Pry-La Heutte"",""Secteur tertiaire"",64,223,117,106,149,64,85" -"2021,""491 Brttelen"",""Secteur conomique - total"",64,310,150,160,216,87,129" -"2021,""491 Brttelen"",""Secteur primaire"",18,118,X,X,90,X,X" -"2021,""491 Brttelen"",""Secteur secondaire"",12,23,X,X,19,X,X" -"2021,""491 Brttelen"",""Secteur tertiaire"",34,169,116,53,107,68,40" -"2021,""492 Erlach"",""Secteur conomique - total"",100,359,173,186,255,102,153" -"2021,""492 Erlach"",""Secteur primaire"",9,36,15,21,22,8,14" -"2021,""492 Erlach"",""Secteur secondaire"",17,50,14,36,40,9,32" -"2021,""492 Erlach"",""Secteur tertiaire"",74,273,144,129,193,86,107" -"2021,""493 Finsterhennen"",""Secteur conomique - total"",43,178,64,114,134,38,96" -"2021,""493 Finsterhennen"",""Secteur primaire"",12,52,X,X,45,X,X" -"2021,""493 Finsterhennen"",""Secteur secondaire"",7,55,X,X,49,X,X" -"2021,""493 Finsterhennen"",""Secteur tertiaire"",24,71,42,29,40,21,19" -"2021,""494 Gals"",""Secteur conomique - total"",65,636,282,354,472,168,304" -"2021,""494 Gals"",""Secteur primaire"",16,142,75,67,69,27,42" -"2021,""494 Gals"",""Secteur secondaire"",8,44,13,31,38,8,30" -"2021,""494 Gals"",""Secteur tertiaire"",41,450,194,256,365,133,232" -"2021,""495 Gampelen"",""Secteur conomique - total"",102,770,333,437,613,226,387" -"2021,""495 Gampelen"",""Secteur primaire"",20,84,21,63,63,13,50" -"2021,""495 Gampelen"",""Secteur secondaire"",15,164,35,129,141,19,121" -"2021,""495 Gampelen"",""Secteur tertiaire"",67,522,277,245,410,194,216" -"2021,""496 Ins"",""Secteur conomique - total"",299,1725,911,814,1212,544,667" -"2021,""496 Ins"",""Secteur primaire"",43,288,114,174,197,62,135" -"2021,""496 Ins"",""Secteur secondaire"",42,394,116,278,335,77,258" -"2021,""496 Ins"",""Secteur tertiaire"",214,1043,681,362,680,405,274" -"2021,""497 Lscherz"",""Secteur conomique - total"",51,142,55,87,98,31,67" -"2021,""497 Lscherz"",""Secteur primaire"",13,37,X,X,24,X,X" -"2021,""497 Lscherz"",""Secteur secondaire"",10,34,X,X,28,X,X" -"2021,""497 Lscherz"",""Secteur tertiaire"",28,71,40,31,46,23,23" -"2021,""498 Mntschemier"",""Secteur conomique - total"",83,1077,322,755,905,219,686" -"2021,""498 Mntschemier"",""Secteur primaire"",18,101,26,75,85,19,67" -"2021,""498 Mntschemier"",""Secteur secondaire"",18,207,17,190,190,10,181" -"2021,""498 Mntschemier"",""Secteur tertiaire"",47,769,279,490,629,191,438" -"2021,""499 Siselen"",""Secteur conomique - total"",60,197,83,114,136,44,91" -"2021,""499 Siselen"",""Secteur primaire"",19,48,19,29,32,8,23" -"2021,""499 Siselen"",""Secteur secondaire"",12,65,29,36,48,18,29" -"2021,""499 Siselen"",""Secteur tertiaire"",29,84,35,49,57,18,39" -"2021,""500 Treiten"",""Secteur conomique - total"",37,132,53,79,101,34,67" -"2021,""500 Treiten"",""Secteur primaire"",15,68,X,X,56,X,X" -"2021,""500 Treiten"",""Secteur secondaire"",5,11,X,X,9,X,X" -"2021,""500 Treiten"",""Secteur tertiaire"",17,53,31,22,36,17,19" -"2021,""501 Tschugg"",""Secteur conomique - total"",34,428,305,123,300,206,94" -"2021,""501 Tschugg"",""Secteur primaire"",4,13,X,X,10,X,X" -"2021,""501 Tschugg"",""Secteur secondaire"",5,17,X,X,12,X,X" -"2021,""501 Tschugg"",""Secteur tertiaire"",25,398,296,102,278,202,76" -"2021,""502 Vinelz"",""Secteur conomique - total"",65,220,105,115,148,58,91" -"2021,""502 Vinelz"",""Secteur primaire"",10,34,X,X,20,X,X" -"2021,""502 Vinelz"",""Secteur secondaire"",8,43,X,X,39,X,X" -"2021,""502 Vinelz"",""Secteur tertiaire"",47,143,85,58,89,47,42" -"2021,""533 Btterkinden"",""Secteur conomique - total"",165,976,468,508,714,274,441" -"2021,""533 Btterkinden"",""Secteur primaire"",18,65,23,42,44,11,33" -"2021,""533 Btterkinden"",""Secteur secondaire"",34,352,119,233,293,75,217" -"2021,""533 Btterkinden"",""Secteur tertiaire"",113,559,326,233,378,188,190" -"2021,""535 Deisswil bei Mnchenbuchsee"",""Secteur conomique - total"",10,396,119,277,347,95,252" -"2021,""535 Deisswil bei Mnchenbuchsee"",""Secteur primaire"",5,15,X,X,10,X,X" -"2021,""535 Deisswil bei Mnchenbuchsee"",""Secteur secondaire"",X,344,113,231,305,92,213" -"2021,""535 Deisswil bei Mnchenbuchsee"",""Secteur tertiaire"",X,37,X,X,31,X,X" -"2021,""536 Diemerswil"",""Secteur conomique - total"",22,73,37,36,46,19,28" -"2021,""536 Diemerswil"",""Secteur primaire"",12,36,X,X,23,X,X" -"2021,""536 Diemerswil"",""Secteur secondaire"",X,12,X,X,10,X,X" -"2021,""536 Diemerswil"",""Secteur tertiaire"",X,25,X,X,13,X,X" -"2021,""538 Fraubrunnen"",""Secteur conomique - total"",320,1262,574,688,862,310,552" -"2021,""538 Fraubrunnen"",""Secteur primaire"",83,254,91,163,167,40,126" -"2021,""538 Fraubrunnen"",""Secteur secondaire"",42,217,53,164,178,29,149" -"2021,""538 Fraubrunnen"",""Secteur tertiaire"",195,791,430,361,518,241,276" -"2021,""540 Jegenstorf"",""Secteur conomique - total"",324,2303,1123,1180,1631,670,961" -"2021,""540 Jegenstorf"",""Secteur primaire"",37,100,35,65,69,17,51" -"2021,""540 Jegenstorf"",""Secteur secondaire"",45,277,78,199,231,48,182" -"2021,""540 Jegenstorf"",""Secteur tertiaire"",242,1926,1010,916,1332,604,728" -"2021,""541 Iffwil"",""Secteur conomique - total"",36,154,86,68,96,45,51" -"2021,""541 Iffwil"",""Secteur primaire"",12,69,X,X,41,X,X" -"2021,""541 Iffwil"",""Secteur secondaire"",6,10,X,X,7,X,X" -"2021,""541 Iffwil"",""Secteur tertiaire"",18,75,46,29,48,27,21" -"2021,""543 Mattstetten"",""Secteur conomique - total"",37,190,67,123,141,38,103" -"2021,""543 Mattstetten"",""Secteur primaire"",9,26,X,X,18,X,X" -"2021,""543 Mattstetten"",""Secteur secondaire"",4,29,X,X,25,X,X" -"2021,""543 Mattstetten"",""Secteur tertiaire"",24,135,55,80,98,30,67" -"2021,""544 Moosseedorf"",""Secteur conomique - total"",238,5143,1910,3233,4343,1351,2992" -"2021,""544 Moosseedorf"",""Secteur primaire"",11,30,12,18,19,6,13" -"2021,""544 Moosseedorf"",""Secteur secondaire"",37,1285,112,1173,1228,81,1147" -"2021,""544 Moosseedorf"",""Secteur tertiaire"",190,3828,1786,2042,3097,1265,1832" -"2021,""546 Mnchenbuchsee"",""Secteur conomique - total"",512,5114,2299,2815,3951,1482,2469" -"2021,""546 Mnchenbuchsee"",""Secteur primaire"",11,24,X,X,16,X,X" -"2021,""546 Mnchenbuchsee"",""Secteur secondaire"",90,737,X,X,643,X,X" -"2021,""546 Mnchenbuchsee"",""Secteur tertiaire"",411,4353,2145,2208,3292,1386,1906" -"2021,""551 Urtenen-Schnbhl"",""Secteur conomique - total"",329,4340,2265,2075,2901,1209,1692" -"2021,""551 Urtenen-Schnbhl"",""Secteur primaire"",14,43,19,24,26,9,17" -"2021,""551 Urtenen-Schnbhl"",""Secteur secondaire"",49,636,111,525,568,73,495" -"2021,""551 Urtenen-Schnbhl"",""Secteur tertiaire"",266,3661,2135,1526,2307,1127,1180" -"2021,""552 Utzenstorf"",""Secteur conomique - total"",272,1651,760,891,1219,444,775" -"2021,""552 Utzenstorf"",""Secteur primaire"",34,114,43,71,71,17,54" -"2021,""552 Utzenstorf"",""Secteur secondaire"",49,554,117,437,491,77,413" -"2021,""552 Utzenstorf"",""Secteur tertiaire"",189,983,600,383,657,349,308" -"2021,""553 Wiggiswil"",""Secteur conomique - total"",14,42,17,25,27,8,19" -"2021,""553 Wiggiswil"",""Secteur primaire"",X,18,X,X,10,X,X" -"2021,""553 Wiggiswil"",""Secteur secondaire"",X,11,X,X,9,X,X" -"2021,""553 Wiggiswil"",""Secteur tertiaire"",6,13,X,X,8,X,X" -"2021,""554 Wiler bei Utzenstorf"",""Secteur conomique - total"",61,332,131,201,264,83,181" -"2021,""554 Wiler bei Utzenstorf"",""Secteur primaire"",12,50,26,24,35,17,18" -"2021,""554 Wiler bei Utzenstorf"",""Secteur secondaire"",15,195,59,136,170,39,132" -"2021,""554 Wiler bei Utzenstorf"",""Secteur tertiaire"",34,87,46,41,59,27,32" -"2021,""556 Zielebach"",""Secteur conomique - total"",19,41,22,19,25,12,13" -"2021,""556 Zielebach"",""Secteur primaire"",6,16,X,X,9,X,X" -"2021,""556 Zielebach"",""Secteur secondaire"",5,10,X,X,8,X,X" -"2021,""556 Zielebach"",""Secteur tertiaire"",8,15,X,X,8,X,X" -"2021,""557 Zuzwil (BE)"",""Secteur conomique - total"",28,77,40,37,47,21,27" -"2021,""557 Zuzwil (BE)"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""557 Zuzwil (BE)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""557 Zuzwil (BE)"",""Secteur tertiaire"",17,47,X,X,26,X,X" -"2021,""561 Adelboden"",""Secteur conomique - total"",402,2419,1051,1368,1759,633,1125" -"2021,""561 Adelboden"",""Secteur primaire"",116,350,147,203,193,68,124" -"2021,""561 Adelboden"",""Secteur secondaire"",72,576,141,435,479,78,401" -"2021,""561 Adelboden"",""Secteur tertiaire"",214,1493,763,730,1087,487,600" -"2021,""562 Aeschi bei Spiez"",""Secteur conomique - total"",225,1041,534,507,667,283,384" -"2021,""562 Aeschi bei Spiez"",""Secteur primaire"",64,160,60,100,88,26,62" -"2021,""562 Aeschi bei Spiez"",""Secteur secondaire"",33,157,30,127,135,15,120" -"2021,""562 Aeschi bei Spiez"",""Secteur tertiaire"",128,724,444,280,445,242,203" -"2021,""563 Frutigen"",""Secteur conomique - total"",668,4409,2056,2353,3120,1181,1939" -"2021,""563 Frutigen"",""Secteur primaire"",194,564,228,336,316,101,215" -"2021,""563 Frutigen"",""Secteur secondaire"",130,1409,359,1050,1198,233,965" -"2021,""563 Frutigen"",""Secteur tertiaire"",344,2436,1469,967,1606,848,759" -"2021,""564 Kandergrund"",""Secteur conomique - total"",88,310,115,195,213,59,154" -"2021,""564 Kandergrund"",""Secteur primaire"",37,111,47,64,67,21,45" -"2021,""564 Kandergrund"",""Secteur secondaire"",20,77,10,67,67,5,62" -"2021,""564 Kandergrund"",""Secteur tertiaire"",31,122,58,64,80,33,47" -"2021,""565 Kandersteg"",""Secteur conomique - total"",127,694,353,341,498,228,270" -"2021,""565 Kandersteg"",""Secteur primaire"",14,45,10,35,29,5,25" -"2021,""565 Kandersteg"",""Secteur secondaire"",21,84,22,62,62,12,50" -"2021,""565 Kandersteg"",""Secteur tertiaire"",92,565,321,244,406,211,195" -"2021,""566 Krattigen"",""Secteur conomique - total"",78,281,149,132,180,80,99" -"2021,""566 Krattigen"",""Secteur primaire"",10,31,X,X,23,X,X" -"2021,""566 Krattigen"",""Secteur secondaire"",18,43,X,X,35,X,X" -"2021,""566 Krattigen"",""Secteur tertiaire"",50,207,135,72,122,72,49" -"2021,""567 Reichenbach im Kandertal"",""Secteur conomique - total"",361,1393,623,770,962,338,624" -"2021,""567 Reichenbach im Kandertal"",""Secteur primaire"",113,300,123,177,168,55,113" -"2021,""567 Reichenbach im Kandertal"",""Secteur secondaire"",79,436,93,343,368,51,317" -"2021,""567 Reichenbach im Kandertal"",""Secteur tertiaire"",169,657,407,250,426,232,194" -"2021,""571 Beatenberg"",""Secteur conomique - total"",123,563,276,287,379,157,221" -"2021,""571 Beatenberg"",""Secteur primaire"",20,56,22,34,27,7,20" -"2021,""571 Beatenberg"",""Secteur secondaire"",20,71,8,63,64,5,58" -"2021,""571 Beatenberg"",""Secteur tertiaire"",83,436,246,190,288,145,143" -"2021,""572 Bnigen"",""Secteur conomique - total"",127,703,216,487,573,127,447" -"2021,""572 Bnigen"",""Secteur primaire"",10,26,X,X,13,X,X" -"2021,""572 Bnigen"",""Secteur secondaire"",33,399,X,X,370,X,X" -"2021,""572 Bnigen"",""Secteur tertiaire"",84,278,162,116,189,95,94" -"2021,""573 Brienz (BE)"",""Secteur conomique - total"",300,1583,769,814,1152,471,681" -"2021,""573 Brienz (BE)"",""Secteur primaire"",35,118,45,73,70,20,50" -"2021,""573 Brienz (BE)"",""Secteur secondaire"",62,430,110,320,363,67,296" -"2021,""573 Brienz (BE)"",""Secteur tertiaire"",203,1035,614,421,719,384,335" -"2021,""574 Brienzwiler"",""Secteur conomique - total"",48,122,51,71,80,27,54" -"2021,""574 Brienzwiler"",""Secteur primaire"",6,18,X,X,8,X,X" -"2021,""574 Brienzwiler"",""Secteur secondaire"",11,27,X,X,21,X,X" -"2021,""574 Brienzwiler"",""Secteur tertiaire"",31,77,35,42,51,19,32" -"2021,""575 Drligen"",""Secteur conomique - total"",25,78,37,41,52,22,30" -"2021,""575 Drligen"",""Secteur primaire"",5,14,X,X,X,X,X" -"2021,""575 Drligen"",""Secteur secondaire"",4,4,X,X,X,X,X" -"2021,""575 Drligen"",""Secteur tertiaire"",16,60,X,X,41,X,X" -"2021,""576 Grindelwald"",""Secteur conomique - total"",463,3115,1364,1751,2407,920,1487" -"2021,""576 Grindelwald"",""Secteur primaire"",95,248,91,157,137,42,95" -"2021,""576 Grindelwald"",""Secteur secondaire"",59,465,84,381,403,51,351" -"2021,""576 Grindelwald"",""Secteur tertiaire"",309,2402,1189,1213,1868,827,1041" -"2021,""577 Gsteigwiler"",""Secteur conomique - total"",34,139,57,82,92,33,59" -"2021,""577 Gsteigwiler"",""Secteur primaire"",9,24,X,X,11,X,X" -"2021,""577 Gsteigwiler"",""Secteur secondaire"",5,10,X,X,8,X,X" -"2021,""577 Gsteigwiler"",""Secteur tertiaire"",20,105,48,57,73,29,43" -"2021,""578 Gndlischwand"",""Secteur conomique - total"",19,120,17,103,107,11,96" -"2021,""578 Gndlischwand"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""578 Gndlischwand"",""Secteur secondaire"",X,15,X,X,X,X,X" -"2021,""578 Gndlischwand"",""Secteur tertiaire"",11,101,13,88,93,10,84" -"2021,""579 Habkern"",""Secteur conomique - total"",79,279,113,166,155,49,106" -"2021,""579 Habkern"",""Secteur primaire"",45,137,X,X,71,X,X" -"2021,""579 Habkern"",""Secteur secondaire"",11,52,X,X,37,X,X" -"2021,""579 Habkern"",""Secteur tertiaire"",23,90,54,36,47,25,22" -"2021,""580 Hofstetten bei Brienz"",""Secteur conomique - total"",58,292,145,147,198,81,118" -"2021,""580 Hofstetten bei Brienz"",""Secteur primaire"",8,20,X,X,12,X,X" -"2021,""580 Hofstetten bei Brienz"",""Secteur secondaire"",17,128,X,X,97,X,X" -"2021,""580 Hofstetten bei Brienz"",""Secteur tertiaire"",33,144,89,55,88,50,38" -"2021,""581 Interlaken"",""Secteur conomique - total"",863,6739,3556,3183,4973,2294,2679" -"2021,""581 Interlaken"",""Secteur primaire"",X,7,X,X,5,X,X" -"2021,""581 Interlaken"",""Secteur secondaire"",X,691,X,X,600,X,X" -"2021,""581 Interlaken"",""Secteur tertiaire"",766,6041,3424,2617,4368,2216,2152" -"2021,""582 Iseltwald"",""Secteur conomique - total"",39,109,55,54,73,30,44" -"2021,""582 Iseltwald"",""Secteur primaire"",8,18,X,X,12,X,X" -"2021,""582 Iseltwald"",""Secteur secondaire"",7,18,X,X,14,X,X" -"2021,""582 Iseltwald"",""Secteur tertiaire"",24,73,45,28,47,25,23" -"2021,""584 Lauterbrunnen"",""Secteur conomique - total"",364,2043,933,1110,1543,607,936" -"2021,""584 Lauterbrunnen"",""Secteur primaire"",45,127,45,82,72,19,53" -"2021,""584 Lauterbrunnen"",""Secteur secondaire"",40,176,42,134,145,25,120" -"2021,""584 Lauterbrunnen"",""Secteur tertiaire"",279,1740,846,894,1326,563,764" -"2021,""585 Leissigen"",""Secteur conomique - total"",77,225,121,104,144,66,78" -"2021,""585 Leissigen"",""Secteur primaire"",6,17,X,X,8,X,X" -"2021,""585 Leissigen"",""Secteur secondaire"",13,53,X,X,41,X,X" -"2021,""585 Leissigen"",""Secteur tertiaire"",58,155,94,61,95,52,43" -"2021,""586 Ltschental"",""Secteur conomique - total"",30,145,48,97,79,22,57" -"2021,""586 Ltschental"",""Secteur primaire"",X,34,X,X,17,X,X" -"2021,""586 Ltschental"",""Secteur secondaire"",X,12,X,X,10,X,X" -"2021,""586 Ltschental"",""Secteur tertiaire"",15,99,36,63,51,17,35" -"2021,""587 Matten bei Interlaken"",""Secteur conomique - total"",232,1270,617,653,892,358,534" -"2021,""587 Matten bei Interlaken"",""Secteur primaire"",10,24,12,12,13,5,8" -"2021,""587 Matten bei Interlaken"",""Secteur secondaire"",30,249,46,203,209,24,185" -"2021,""587 Matten bei Interlaken"",""Secteur tertiaire"",192,997,559,438,670,329,341" -"2021,""588 Niederried bei Interlaken"",""Secteur conomique - total"",20,49,18,31,30,7,23" -"2021,""588 Niederried bei Interlaken"",""Secteur primaire"",X,8,X,X,X,X,X" -"2021,""588 Niederried bei Interlaken"",""Secteur secondaire"",X,10,X,X,X,X,X" -"2021,""588 Niederried bei Interlaken"",""Secteur tertiaire"",14,31,X,X,18,X,X" -"2021,""589 Oberried am Brienzersee"",""Secteur conomique - total"",44,160,90,70,102,52,50" -"2021,""589 Oberried am Brienzersee"",""Secteur primaire"",10,23,X,X,14,X,X" -"2021,""589 Oberried am Brienzersee"",""Secteur secondaire"",10,15,X,X,10,X,X" -"2021,""589 Oberried am Brienzersee"",""Secteur tertiaire"",24,122,79,43,78,47,32" -"2021,""590 Ringgenberg (BE)"",""Secteur conomique - total"",171,732,359,373,503,200,304" -"2021,""590 Ringgenberg (BE)"",""Secteur primaire"",13,31,X,X,16,X,X" -"2021,""590 Ringgenberg (BE)"",""Secteur secondaire"",40,173,X,X,147,X,X" -"2021,""590 Ringgenberg (BE)"",""Secteur tertiaire"",118,528,328,200,341,185,156" -"2021,""591 Saxeten"",""Secteur conomique - total"",15,36,14,22,19,6,12" -"2021,""591 Saxeten"",""Secteur primaire"",X,18,X,X,12,X,X" -"2021,""591 Saxeten"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""591 Saxeten"",""Secteur tertiaire"",7,X,X,X,X,X,X" -"2021,""592 Schwanden bei Brienz"",""Secteur conomique - total"",31,90,39,51,59,22,37" -"2021,""592 Schwanden bei Brienz"",""Secteur primaire"",6,14,X,X,7,X,X" -"2021,""592 Schwanden bei Brienz"",""Secteur secondaire"",6,24,X,X,19,X,X" -"2021,""592 Schwanden bei Brienz"",""Secteur tertiaire"",19,52,29,23,32,16,16" -"2021,""593 Unterseen"",""Secteur conomique - total"",435,3365,2089,1276,2413,1334,1078" -"2021,""593 Unterseen"",""Secteur primaire"",18,65,20,45,47,11,36" -"2021,""593 Unterseen"",""Secteur secondaire"",60,556,239,317,468,171,297" -"2021,""593 Unterseen"",""Secteur tertiaire"",357,2744,1830,914,1898,1153,746" -"2021,""594 Wilderswil"",""Secteur conomique - total"",198,1166,474,692,905,291,614" -"2021,""594 Wilderswil"",""Secteur primaire"",17,45,19,26,27,10,17" -"2021,""594 Wilderswil"",""Secteur secondaire"",35,395,46,349,365,31,334" -"2021,""594 Wilderswil"",""Secteur tertiaire"",146,726,409,317,513,250,263" -"2021,""602 Arni (BE)"",""Secteur conomique - total"",88,260,110,150,166,53,113" -"2021,""602 Arni (BE)"",""Secteur primaire"",49,128,50,78,81,22,59" -"2021,""602 Arni (BE)"",""Secteur secondaire"",20,62,16,46,44,7,37" -"2021,""602 Arni (BE)"",""Secteur tertiaire"",19,70,44,26,41,24,17" -"2021,""603 Biglen"",""Secteur conomique - total"",138,740,389,351,511,218,293" -"2021,""603 Biglen"",""Secteur primaire"",20,53,16,37,30,6,24" -"2021,""603 Biglen"",""Secteur secondaire"",27,236,69,167,197,42,154" -"2021,""603 Biglen"",""Secteur tertiaire"",91,451,304,147,285,170,115" -"2021,""605 Bowil"",""Secteur conomique - total"",118,397,149,248,282,75,207" -"2021,""605 Bowil"",""Secteur primaire"",52,124,43,81,77,22,55" -"2021,""605 Bowil"",""Secteur secondaire"",20,131,19,112,117,10,107" -"2021,""605 Bowil"",""Secteur tertiaire"",46,142,87,55,88,42,46" -"2021,""606 Brenzikofen"",""Secteur conomique - total"",40,116,50,66,77,26,51" -"2021,""606 Brenzikofen"",""Secteur primaire"",X,24,X,X,14,X,X" -"2021,""606 Brenzikofen"",""Secteur secondaire"",X,6,X,X,4,X,X" -"2021,""606 Brenzikofen"",""Secteur tertiaire"",28,86,38,48,59,20,39" -"2021,""607 Freimettigen"",""Secteur conomique - total"",30,72,34,38,46,17,30" -"2021,""607 Freimettigen"",""Secteur primaire"",X,29,X,X,20,X,X" -"2021,""607 Freimettigen"",""Secteur secondaire"",X,8,X,X,6,X,X" -"2021,""607 Freimettigen"",""Secteur tertiaire"",15,35,23,12,21,12,9" -"2021,""608 Grosshchstetten"",""Secteur conomique - total"",257,1702,934,768,1184,550,634" -"2021,""608 Grosshchstetten"",""Secteur primaire"",26,78,28,50,48,16,32" -"2021,""608 Grosshchstetten"",""Secteur secondaire"",53,352,89,263,290,46,244" -"2021,""608 Grosshchstetten"",""Secteur tertiaire"",178,1272,817,455,846,487,358" -"2021,""609 Hutligen"",""Secteur conomique - total"",30,56,29,27,31,13,17" -"2021,""609 Hutligen"",""Secteur primaire"",15,34,X,X,21,X,X" -"2021,""609 Hutligen"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""609 Hutligen"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""610 Herbligen"",""Secteur conomique - total"",40,184,94,90,100,37,63" -"2021,""610 Herbligen"",""Secteur primaire"",14,48,X,X,26,X,X" -"2021,""610 Herbligen"",""Secteur secondaire"",5,16,X,X,12,X,X" -"2021,""610 Herbligen"",""Secteur tertiaire"",21,120,70,50,62,29,33" -"2021,""611 Kiesen"",""Secteur conomique - total"",60,433,137,296,336,78,258" -"2021,""611 Kiesen"",""Secteur primaire"",12,33,X,X,20,X,X" -"2021,""611 Kiesen"",""Secteur secondaire"",9,54,X,X,41,X,X" -"2021,""611 Kiesen"",""Secteur tertiaire"",39,346,108,238,275,67,208" -"2021,""612 Konolfingen"",""Secteur conomique - total"",364,3093,1351,1742,2462,894,1567" -"2021,""612 Konolfingen"",""Secteur primaire"",58,158,56,102,92,26,67" -"2021,""612 Konolfingen"",""Secteur secondaire"",58,1138,208,930,1052,159,893" -"2021,""612 Konolfingen"",""Secteur tertiaire"",248,1797,1087,710,1317,710,607" -"2021,""613 Landiswil"",""Secteur conomique - total"",82,319,133,186,181,58,123" -"2021,""613 Landiswil"",""Secteur primaire"",54,167,75,92,95,33,62" -"2021,""613 Landiswil"",""Secteur secondaire"",10,34,X,X,27,X,X" -"2021,""613 Landiswil"",""Secteur tertiaire"",18,118,X,X,59,X,X" -"2021,""614 Linden"",""Secteur conomique - total"",123,531,223,308,343,113,229" -"2021,""614 Linden"",""Secteur primaire"",57,158,64,94,88,29,58" -"2021,""614 Linden"",""Secteur secondaire"",20,174,54,120,132,30,102" -"2021,""614 Linden"",""Secteur tertiaire"",46,199,105,94,123,54,69" -"2021,""615 Mirchel"",""Secteur conomique - total"",43,134,71,63,83,38,45" -"2021,""615 Mirchel"",""Secteur primaire"",17,50,X,X,29,X,X" -"2021,""615 Mirchel"",""Secteur secondaire"",5,10,X,X,9,X,X" -"2021,""615 Mirchel"",""Secteur tertiaire"",21,74,57,17,45,32,13" -"2021,""616 Mnsingen"",""Secteur conomique - total"",798,6718,3510,3208,4915,2189,2727" -"2021,""616 Mnsingen"",""Secteur primaire"",44,216,81,135,152,46,106" -"2021,""616 Mnsingen"",""Secteur secondaire"",103,1450,314,1136,1301,219,1083" -"2021,""616 Mnsingen"",""Secteur tertiaire"",651,5052,3115,1937,3462,1924,1538" -"2021,""617 Niederhnigen"",""Secteur conomique - total"",41,131,63,68,81,31,50" -"2021,""617 Niederhnigen"",""Secteur primaire"",15,45,15,30,25,7,18" -"2021,""617 Niederhnigen"",""Secteur secondaire"",7,43,17,26,32,9,23" -"2021,""617 Niederhnigen"",""Secteur tertiaire"",19,43,31,12,23,15,8" -"2021,""619 Oberdiessbach"",""Secteur conomique - total"",268,1757,825,932,1317,502,815" -"2021,""619 Oberdiessbach"",""Secteur primaire"",48,141,58,83,83,30,53" -"2021,""619 Oberdiessbach"",""Secteur secondaire"",57,776,213,563,700,163,538" -"2021,""619 Oberdiessbach"",""Secteur tertiaire"",163,840,554,286,533,309,224" -"2021,""620 Oberthal"",""Secteur conomique - total"",87,359,157,202,224,74,150" -"2021,""620 Oberthal"",""Secteur primaire"",55,143,54,89,88,25,63" -"2021,""620 Oberthal"",""Secteur secondaire"",12,58,7,51,48,4,44" -"2021,""620 Oberthal"",""Secteur tertiaire"",20,158,96,62,88,44,43" -"2021,""622 Oppligen"",""Secteur conomique - total"",51,217,102,115,143,41,102" -"2021,""622 Oppligen"",""Secteur primaire"",13,73,X,X,34,X,X" -"2021,""622 Oppligen"",""Secteur secondaire"",8,73,X,X,68,X,X" -"2021,""622 Oppligen"",""Secteur tertiaire"",30,71,45,26,41,23,18" -"2021,""623 Rubigen"",""Secteur conomique - total"",152,1418,516,902,1111,322,789" -"2021,""623 Rubigen"",""Secteur primaire"",17,66,27,39,46,16,30" -"2021,""623 Rubigen"",""Secteur secondaire"",25,532,49,483,497,32,464" -"2021,""623 Rubigen"",""Secteur tertiaire"",110,820,440,380,568,274,295" -"2021,""626 Walkringen"",""Secteur conomique - total"",169,979,477,502,677,269,408" -"2021,""626 Walkringen"",""Secteur primaire"",65,184,71,113,107,31,77" -"2021,""626 Walkringen"",""Secteur secondaire"",28,217,51,166,185,33,151" -"2021,""626 Walkringen"",""Secteur tertiaire"",76,578,355,223,385,205,180" -"2021,""627 Worb"",""Secteur conomique - total"",676,4026,1900,2126,2911,1129,1782" -"2021,""627 Worb"",""Secteur primaire"",74,197,82,115,122,40,82" -"2021,""627 Worb"",""Secteur secondaire"",102,816,136,680,723,91,633" -"2021,""627 Worb"",""Secteur tertiaire"",500,3013,1682,1331,2066,999,1067" -"2021,""628 Zziwil"",""Secteur conomique - total"",96,473,179,294,340,94,245" -"2021,""628 Zziwil"",""Secteur primaire"",15,76,33,43,45,13,31" -"2021,""628 Zziwil"",""Secteur secondaire"",29,211,52,159,179,30,149" -"2021,""628 Zziwil"",""Secteur tertiaire"",52,186,94,92,117,51,65" -"2021,""629 Oberhnigen"",""Secteur conomique - total"",30,77,38,39,44,17,26" -"2021,""629 Oberhnigen"",""Secteur primaire"",20,46,X,X,26,X,X" -"2021,""629 Oberhnigen"",""Secteur secondaire"",X,9,X,X,6,X,X" -"2021,""629 Oberhnigen"",""Secteur tertiaire"",X,22,X,X,12,X,X" -"2021,""630 Allmendingen"",""Secteur conomique - total"",46,226,126,100,163,80,83" -"2021,""630 Allmendingen"",""Secteur primaire"",X,44,X,X,28,X,X" -"2021,""630 Allmendingen"",""Secteur secondaire"",X,9,X,X,6,X,X" -"2021,""630 Allmendingen"",""Secteur tertiaire"",31,173,103,70,130,69,60" -"2021,""632 Wichtrach"",""Secteur conomique - total"",236,1137,514,623,818,289,529" -"2021,""632 Wichtrach"",""Secteur primaire"",34,83,33,50,53,16,36" -"2021,""632 Wichtrach"",""Secteur secondaire"",38,327,76,251,292,52,240" -"2021,""632 Wichtrach"",""Secteur tertiaire"",164,727,405,322,474,221,253" -"2021,""661 Clavaleyres"",""Secteur conomique - total"",7,23,X,X,12,X,X" -"2021,""661 Clavaleyres"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""661 Clavaleyres"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""661 Clavaleyres"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""662 Ferenbalm"",""Secteur conomique - total"",99,390,117,273,290,62,228" -"2021,""662 Ferenbalm"",""Secteur primaire"",29,84,27,57,55,14,41" -"2021,""662 Ferenbalm"",""Secteur secondaire"",22,168,32,136,141,19,122" -"2021,""662 Ferenbalm"",""Secteur tertiaire"",48,138,58,80,94,29,65" -"2021,""663 Frauenkappelen"",""Secteur conomique - total"",98,447,114,333,358,66,292" -"2021,""663 Frauenkappelen"",""Secteur primaire"",17,49,13,36,30,5,25" -"2021,""663 Frauenkappelen"",""Secteur secondaire"",28,272,31,241,243,20,224" -"2021,""663 Frauenkappelen"",""Secteur tertiaire"",53,126,70,56,84,42,43" -"2021,""665 Gurbr"",""Secteur conomique - total"",23,68,33,35,40,15,26" -"2021,""665 Gurbr"",""Secteur primaire"",11,46,X,X,29,X,X" -"2021,""665 Gurbr"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""665 Gurbr"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""666 Kriechenwil"",""Secteur conomique - total"",36,105,41,64,67,19,48" -"2021,""666 Kriechenwil"",""Secteur primaire"",18,50,X,X,30,X,X" -"2021,""666 Kriechenwil"",""Secteur secondaire"",X,16,X,X,14,X,X" -"2021,""666 Kriechenwil"",""Secteur tertiaire"",X,39,22,17,23,12,12" -"2021,""667 Laupen"",""Secteur conomique - total"",204,1313,805,508,919,500,419" -"2021,""667 Laupen"",""Secteur primaire"",X,13,X,X,8,X,X" -"2021,""667 Laupen"",""Secteur secondaire"",X,151,X,X,119,X,X" -"2021,""667 Laupen"",""Secteur tertiaire"",174,1149,756,393,792,474,318" -"2021,""668 Mhleberg"",""Secteur conomique - total"",226,1306,402,904,1023,224,799" -"2021,""668 Mhleberg"",""Secteur primaire"",63,205,71,134,129,30,99" -"2021,""668 Mhleberg"",""Secteur secondaire"",41,565,55,510,534,40,495" -"2021,""668 Mhleberg"",""Secteur tertiaire"",122,536,276,260,360,154,205" -"2021,""669 Mnchenwiler"",""Secteur conomique - total"",35,218,72,146,174,44,130" -"2021,""669 Mnchenwiler"",""Secteur primaire"",9,31,10,21,26,8,18" -"2021,""669 Mnchenwiler"",""Secteur secondaire"",6,93,14,79,84,9,75" -"2021,""669 Mnchenwiler"",""Secteur tertiaire"",20,94,48,46,65,28,37" -"2021,""670 Neuenegg"",""Secteur conomique - total"",319,2026,845,1181,1594,575,1019" -"2021,""670 Neuenegg"",""Secteur primaire"",67,208,70,138,132,34,98" -"2021,""670 Neuenegg"",""Secteur secondaire"",58,644,199,445,582,161,420" -"2021,""670 Neuenegg"",""Secteur tertiaire"",194,1174,576,598,880,380,500" -"2021,""671 Wileroltigen"",""Secteur conomique - total"",28,91,39,52,58,17,40" -"2021,""671 Wileroltigen"",""Secteur primaire"",15,57,25,32,34,10,23" -"2021,""671 Wileroltigen"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""671 Wileroltigen"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""681 Belprahon"",""Secteur conomique - total"",19,105,42,63,79,23,56" -"2021,""681 Belprahon"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""681 Belprahon"",""Secteur secondaire"",X,46,X,X,41,X,X" -"2021,""681 Belprahon"",""Secteur tertiaire"",11,54,X,X,X,X,X" -"2021,""683 Champoz"",""Secteur conomique - total"",13,32,16,16,18,8,10" -"2021,""683 Champoz"",""Secteur primaire"",9,19,X,X,13,X,X" -"2021,""683 Champoz"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""683 Champoz"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""687 Corcelles (BE)"",""Secteur conomique - total"",18,57,24,33,41,14,27" -"2021,""687 Corcelles (BE)"",""Secteur primaire"",5,16,X,X,14,X,X" -"2021,""687 Corcelles (BE)"",""Secteur secondaire"",4,22,X,X,19,X,X" -"2021,""687 Corcelles (BE)"",""Secteur tertiaire"",9,19,X,X,9,X,X" -"2021,""690 Court"",""Secteur conomique - total"",104,643,285,358,506,183,323" -"2021,""690 Court"",""Secteur primaire"",18,69,19,50,49,9,39" -"2021,""690 Court"",""Secteur secondaire"",38,387,151,236,335,109,227" -"2021,""690 Court"",""Secteur tertiaire"",48,187,115,72,122,65,58" -"2021,""691 Crmines"",""Secteur conomique - total"",48,280,149,131,205,93,111" -"2021,""691 Crmines"",""Secteur primaire"",5,16,X,X,11,X,X" -"2021,""691 Crmines"",""Secteur secondaire"",9,101,X,X,87,X,X" -"2021,""691 Crmines"",""Secteur tertiaire"",34,163,109,54,107,65,42" -"2021,""692 Eschert"",""Secteur conomique - total"",28,152,44,108,111,24,87" -"2021,""692 Eschert"",""Secteur primaire"",5,18,X,X,11,X,X" -"2021,""692 Eschert"",""Secteur secondaire"",11,85,22,63,72,14,58" -"2021,""692 Eschert"",""Secteur tertiaire"",12,49,X,X,28,X,X" -"2021,""694 Grandval"",""Secteur conomique - total"",34,82,53,29,46,26,20" -"2021,""694 Grandval"",""Secteur primaire"",X,22,X,X,X,X,X" -"2021,""694 Grandval"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""694 Grandval"",""Secteur tertiaire"",23,56,X,X,30,X,X" -"2021,""696 Loveresse"",""Secteur conomique - total"",28,285,148,137,198,83,116" -"2021,""696 Loveresse"",""Secteur primaire"",X,15,X,X,9,X,X" -"2021,""696 Loveresse"",""Secteur secondaire"",X,84,X,X,81,X,X" -"2021,""696 Loveresse"",""Secteur tertiaire"",21,186,126,60,109,66,42" -"2021,""700 Moutier"",""Secteur conomique - total"",500,3489,1615,1874,2718,1042,1676" -"2021,""700 Moutier"",""Secteur primaire"",18,61,34,27,28,8,20" -"2021,""700 Moutier"",""Secteur secondaire"",105,1412,367,1045,1282,285,997" -"2021,""700 Moutier"",""Secteur tertiaire"",377,2016,1214,802,1408,749,659" -"2021,""701 Perrefitte"",""Secteur conomique - total"",35,84,47,37,52,24,28" -"2021,""701 Perrefitte"",""Secteur primaire"",9,24,X,X,15,X,X" -"2021,""701 Perrefitte"",""Secteur secondaire"",7,10,X,X,8,X,X" -"2021,""701 Perrefitte"",""Secteur tertiaire"",19,50,35,15,29,18,11" -"2021,""703 Reconvilier"",""Secteur conomique - total"",118,849,407,442,655,263,393" -"2021,""703 Reconvilier"",""Secteur primaire"",7,19,7,12,13,5,8" -"2021,""703 Reconvilier"",""Secteur secondaire"",31,299,46,253,274,34,239" -"2021,""703 Reconvilier"",""Secteur tertiaire"",80,531,354,177,369,223,145" -"2021,""704 Roches (BE)"",""Secteur conomique - total"",23,50,16,34,34,8,26" -"2021,""704 Roches (BE)"",""Secteur primaire"",7,17,X,X,12,X,X" -"2021,""704 Roches (BE)"",""Secteur secondaire"",6,11,X,X,8,X,X" -"2021,""704 Roches (BE)"",""Secteur tertiaire"",10,22,8,14,15,4,10" -"2021,""706 Saicourt"",""Secteur conomique - total"",46,288,158,130,211,105,107" -"2021,""706 Saicourt"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""706 Saicourt"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""706 Saicourt"",""Secteur tertiaire"",26,231,137,94,168,91,77" -"2021,""707 Saules (BE)"",""Secteur conomique - total"",12,27,X,X,14,X,X" -"2021,""707 Saules (BE)"",""Secteur primaire"",6,14,X,X,8,X,X" -"2021,""707 Saules (BE)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""707 Saules (BE)"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""708 Schelten"",""Secteur conomique - total"",11,26,13,13,15,7,8" -"2021,""708 Schelten"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""708 Schelten"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""708 Schelten"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""709 Seehof"",""Secteur conomique - total"",14,36,13,23,24,7,17" -"2021,""709 Seehof"",""Secteur primaire"",11,29,10,19,19,6,14" -"2021,""709 Seehof"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""709 Seehof"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""711 Sorvilier"",""Secteur conomique - total"",24,61,32,29,41,18,23" -"2021,""711 Sorvilier"",""Secteur primaire"",6,16,X,X,12,X,X" -"2021,""711 Sorvilier"",""Secteur secondaire"",7,8,0,8,7,0,7" -"2021,""711 Sorvilier"",""Secteur tertiaire"",11,37,X,X,22,X,X" -"2021,""713 Tavannes"",""Secteur conomique - total"",265,1551,727,824,1159,450,708" -"2021,""713 Tavannes"",""Secteur primaire"",21,55,18,37,38,10,28" -"2021,""713 Tavannes"",""Secteur secondaire"",51,551,149,402,482,107,376" -"2021,""713 Tavannes"",""Secteur tertiaire"",193,945,560,385,638,333,305" -"2021,""715 Rebvelier"",""Secteur conomique - total"",9,25,X,X,15,X,X" -"2021,""715 Rebvelier"",""Secteur primaire"",X,22,X,X,14,X,X" -"2021,""715 Rebvelier"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""715 Rebvelier"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""716 Petit-Val"",""Secteur conomique - total"",57,167,61,106,115,30,84" -"2021,""716 Petit-Val"",""Secteur primaire"",32,84,34,50,57,18,39" -"2021,""716 Petit-Val"",""Secteur secondaire"",6,35,X,X,27,X,X" -"2021,""716 Petit-Val"",""Secteur tertiaire"",19,48,X,X,31,X,X" -"2021,""717 Valbirse"",""Secteur conomique - total"",236,1786,842,944,1366,554,812" -"2021,""717 Valbirse"",""Secteur primaire"",22,63,20,43,45,13,33" -"2021,""717 Valbirse"",""Secteur secondaire"",52,814,276,538,719,212,507" -"2021,""717 Valbirse"",""Secteur tertiaire"",162,909,546,363,602,330,272" -"2021,""723 La Neuveville"",""Secteur conomique - total"",289,1561,821,740,1173,545,628" -"2021,""723 La Neuveville"",""Secteur primaire"",13,43,10,33,31,4,27" -"2021,""723 La Neuveville"",""Secteur secondaire"",38,402,123,279,354,100,254" -"2021,""723 La Neuveville"",""Secteur tertiaire"",238,1116,688,428,788,442,346" -"2021,""724 Nods"",""Secteur conomique - total"",67,204,78,126,147,41,106" -"2021,""724 Nods"",""Secteur primaire"",19,51,17,34,39,10,29" -"2021,""724 Nods"",""Secteur secondaire"",17,74,23,51,60,14,46" -"2021,""724 Nods"",""Secteur tertiaire"",31,79,38,41,48,17,31" -"2021,""726 Plateau de Diesse"",""Secteur conomique - total"",132,402,178,224,276,98,178" -"2021,""726 Plateau de Diesse"",""Secteur primaire"",28,85,34,51,57,18,39" -"2021,""726 Plateau de Diesse"",""Secteur secondaire"",20,77,14,63,64,6,58" -"2021,""726 Plateau de Diesse"",""Secteur tertiaire"",84,240,130,110,156,74,82" -"2021,""731 Aegerten"",""Secteur conomique - total"",81,436,248,188,312,160,152" -"2021,""731 Aegerten"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""731 Aegerten"",""Secteur secondaire"",X,160,X,X,X,X,X" -"2021,""731 Aegerten"",""Secteur tertiaire"",60,270,X,X,169,X,X" -"2021,""732 Bellmund"",""Secteur conomique - total"",76,231,120,111,147,66,80" -"2021,""732 Bellmund"",""Secteur primaire"",10,29,X,X,16,X,X" -"2021,""732 Bellmund"",""Secteur secondaire"",12,27,X,X,22,X,X" -"2021,""732 Bellmund"",""Secteur tertiaire"",54,175,107,68,109,60,49" -"2021,""733 Brgg"",""Secteur conomique - total"",349,3101,1283,1818,2507,894,1613" -"2021,""733 Brgg"",""Secteur primaire"",4,9,X,X,6,X,X" -"2021,""733 Brgg"",""Secteur secondaire"",93,1401,X,X,1234,X,X" -"2021,""733 Brgg"",""Secteur tertiaire"",252,1691,843,848,1267,544,723" -"2021,""734 Bhl"",""Secteur conomique - total"",31,82,33,49,52,17,35" -"2021,""734 Bhl"",""Secteur primaire"",10,33,X,X,20,X,X" -"2021,""734 Bhl"",""Secteur secondaire"",5,9,X,X,7,X,X" -"2021,""734 Bhl"",""Secteur tertiaire"",16,40,18,22,25,9,15" -"2021,""735 Epsach"",""Secteur conomique - total"",29,84,39,45,49,19,29" -"2021,""735 Epsach"",""Secteur primaire"",14,52,X,X,29,X,X" -"2021,""735 Epsach"",""Secteur secondaire"",4,6,X,X,5,X,X" -"2021,""735 Epsach"",""Secteur tertiaire"",11,26,X,X,15,X,X" -"2021,""736 Hagneck"",""Secteur conomique - total"",31,97,42,55,67,21,45" -"2021,""736 Hagneck"",""Secteur primaire"",6,14,X,X,11,X,X" -"2021,""736 Hagneck"",""Secteur secondaire"",10,25,X,X,19,X,X" -"2021,""736 Hagneck"",""Secteur tertiaire"",15,58,33,25,36,16,20" -"2021,""737 Hermrigen"",""Secteur conomique - total"",26,82,30,52,56,16,40" -"2021,""737 Hermrigen"",""Secteur primaire"",7,19,X,X,12,X,X" -"2021,""737 Hermrigen"",""Secteur secondaire"",5,18,X,X,15,X,X" -"2021,""737 Hermrigen"",""Secteur tertiaire"",14,45,19,26,29,10,19" -"2021,""738 Jens"",""Secteur conomique - total"",44,126,48,78,85,23,62" -"2021,""738 Jens"",""Secteur primaire"",11,30,X,X,16,X,X" -"2021,""738 Jens"",""Secteur secondaire"",7,47,X,X,42,X,X" -"2021,""738 Jens"",""Secteur tertiaire"",26,49,33,16,26,17,10" -"2021,""739 Ipsach"",""Secteur conomique - total"",162,733,364,369,537,228,309" -"2021,""739 Ipsach"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""739 Ipsach"",""Secteur secondaire"",X,187,X,X,X,X,X" -"2021,""739 Ipsach"",""Secteur tertiaire"",136,540,314,226,364,188,176" -"2021,""740 Ligerz"",""Secteur conomique - total"",51,190,94,96,110,44,66" -"2021,""740 Ligerz"",""Secteur primaire"",21,117,54,63,61,22,40" -"2021,""740 Ligerz"",""Secteur secondaire"",4,10,X,X,8,X,X" -"2021,""740 Ligerz"",""Secteur tertiaire"",26,63,X,X,41,X,X" -"2021,""741 Merzligen"",""Secteur conomique - total"",24,46,22,24,26,10,17" -"2021,""741 Merzligen"",""Secteur primaire"",4,10,X,X,4,X,X" -"2021,""741 Merzligen"",""Secteur secondaire"",4,8,X,X,7,X,X" -"2021,""741 Merzligen"",""Secteur tertiaire"",16,28,17,11,16,8,8" -"2021,""742 Mrigen"",""Secteur conomique - total"",49,159,96,63,99,54,45" -"2021,""742 Mrigen"",""Secteur primaire"",8,24,X,X,11,X,X" -"2021,""742 Mrigen"",""Secteur secondaire"",6,16,X,X,11,X,X" -"2021,""742 Mrigen"",""Secteur tertiaire"",35,119,78,41,76,47,29" -"2021,""743 Nidau"",""Secteur conomique - total"",447,2850,1440,1410,2140,934,1207" -"2021,""743 Nidau"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""743 Nidau"",""Secteur secondaire"",62,621,149,472,563,112,451" -"2021,""743 Nidau"",""Secteur tertiaire"",385,2229,1291,938,1577,821,756" -"2021,""744 Orpund"",""Secteur conomique - total"",135,808,335,473,624,212,412" -"2021,""744 Orpund"",""Secteur primaire"",7,20,9,11,14,6,8" -"2021,""744 Orpund"",""Secteur secondaire"",35,395,97,298,348,66,282" -"2021,""744 Orpund"",""Secteur tertiaire"",93,393,229,164,262,140,122" -"2021,""745 Port"",""Secteur conomique - total"",173,972,381,591,753,249,504" -"2021,""745 Port"",""Secteur primaire"",4,12,X,X,8,X,X" -"2021,""745 Port"",""Secteur secondaire"",34,484,X,X,432,X,X" -"2021,""745 Port"",""Secteur tertiaire"",135,476,228,248,313,134,179" -"2021,""746 Safnern"",""Secteur conomique - total"",113,498,166,332,393,99,294" -"2021,""746 Safnern"",""Secteur primaire"",11,35,19,16,24,11,12" -"2021,""746 Safnern"",""Secteur secondaire"",30,246,45,201,227,34,193" -"2021,""746 Safnern"",""Secteur tertiaire"",72,217,102,115,142,54,88" -"2021,""747 Scheuren"",""Secteur conomique - total"",33,128,51,77,84,27,57" -"2021,""747 Scheuren"",""Secteur primaire"",9,42,9,33,27,5,22" -"2021,""747 Scheuren"",""Secteur secondaire"",5,26,8,18,22,6,16" -"2021,""747 Scheuren"",""Secteur tertiaire"",19,60,34,26,34,16,19" -"2021,""748 Schwadernau"",""Secteur conomique - total"",53,201,109,92,134,62,72" -"2021,""748 Schwadernau"",""Secteur primaire"",16,47,X,X,31,X,X" -"2021,""748 Schwadernau"",""Secteur secondaire"",8,20,X,X,16,X,X" -"2021,""748 Schwadernau"",""Secteur tertiaire"",29,134,89,45,87,52,35" -"2021,""749 Studen (BE)"",""Secteur conomique - total"",172,1748,640,1108,1408,408,1001" -"2021,""749 Studen (BE)"",""Secteur primaire"",5,45,17,28,28,9,19" -"2021,""749 Studen (BE)"",""Secteur secondaire"",39,586,87,499,536,60,477" -"2021,""749 Studen (BE)"",""Secteur tertiaire"",128,1117,536,581,844,339,505" -"2021,""750 Sutz-Lattrigen"",""Secteur conomique - total"",105,645,356,289,455,220,235" -"2021,""750 Sutz-Lattrigen"",""Secteur primaire"",12,42,15,27,22,7,15" -"2021,""750 Sutz-Lattrigen"",""Secteur secondaire"",15,128,18,110,112,11,102" -"2021,""750 Sutz-Lattrigen"",""Secteur tertiaire"",78,475,323,152,321,202,119" -"2021,""751 Tuffelen"",""Secteur conomique - total"",180,1105,519,586,873,346,527" -"2021,""751 Tuffelen"",""Secteur primaire"",13,77,40,37,52,21,31" -"2021,""751 Tuffelen"",""Secteur secondaire"",32,482,125,357,432,92,340" -"2021,""751 Tuffelen"",""Secteur tertiaire"",135,546,354,192,389,233,157" -"2021,""754 Walperswil"",""Secteur conomique - total"",61,305,141,164,169,58,111" -"2021,""754 Walperswil"",""Secteur primaire"",21,164,88,76,73,29,43" -"2021,""754 Walperswil"",""Secteur secondaire"",7,54,X,X,46,X,X" -"2021,""754 Walperswil"",""Secteur tertiaire"",33,87,X,X,50,X,X" -"2021,""755 Worben"",""Secteur conomique - total"",99,876,524,352,627,333,293" -"2021,""755 Worben"",""Secteur primaire"",9,72,47,25,30,13,17" -"2021,""755 Worben"",""Secteur secondaire"",25,190,57,133,162,43,119" -"2021,""755 Worben"",""Secteur tertiaire"",65,614,420,194,435,277,158" -"2021,""756 Twann-Tscherz"",""Secteur conomique - total"",109,369,178,191,243,97,146" -"2021,""756 Twann-Tscherz"",""Secteur primaire"",32,107,35,72,68,19,49" -"2021,""756 Twann-Tscherz"",""Secteur secondaire"",20,63,22,41,45,11,35" -"2021,""756 Twann-Tscherz"",""Secteur tertiaire"",57,199,121,78,130,68,62" -"2021,""761 Drstetten"",""Secteur conomique - total"",98,321,117,204,217,59,158" -"2021,""761 Drstetten"",""Secteur primaire"",42,114,43,71,70,21,49" -"2021,""761 Drstetten"",""Secteur secondaire"",18,92,12,80,77,6,70" -"2021,""761 Drstetten"",""Secteur tertiaire"",38,115,62,53,70,31,39" -"2021,""762 Diemtigen"",""Secteur conomique - total"",316,1427,543,884,1010,286,724" -"2021,""762 Diemtigen"",""Secteur primaire"",108,305,119,186,191,55,136" -"2021,""762 Diemtigen"",""Secteur secondaire"",78,576,94,482,497,57,440" -"2021,""762 Diemtigen"",""Secteur tertiaire"",130,546,330,216,323,174,148" -"2021,""763 Erlenbach im Simmental"",""Secteur conomique - total"",158,658,339,319,443,194,249" -"2021,""763 Erlenbach im Simmental"",""Secteur primaire"",46,133,53,80,77,27,51" -"2021,""763 Erlenbach im Simmental"",""Secteur secondaire"",28,125,25,100,103,14,89" -"2021,""763 Erlenbach im Simmental"",""Secteur tertiaire"",84,400,261,139,263,154,109" -"2021,""766 Oberwil im Simmental"",""Secteur conomique - total"",100,324,122,202,215,59,155" -"2021,""766 Oberwil im Simmental"",""Secteur primaire"",55,160,69,91,106,35,71" -"2021,""766 Oberwil im Simmental"",""Secteur secondaire"",13,93,18,75,73,8,65" -"2021,""766 Oberwil im Simmental"",""Secteur tertiaire"",32,71,35,36,36,17,19" -"2021,""767 Reutigen"",""Secteur conomique - total"",52,198,86,112,134,50,84" -"2021,""767 Reutigen"",""Secteur primaire"",17,60,17,43,40,10,29" -"2021,""767 Reutigen"",""Secteur secondaire"",8,40,14,26,34,10,24" -"2021,""767 Reutigen"",""Secteur tertiaire"",27,98,55,43,60,29,31" -"2021,""768 Spiez"",""Secteur conomique - total"",840,5884,2927,2957,4319,1769,2550" -"2021,""768 Spiez"",""Secteur primaire"",37,108,45,63,69,24,45" -"2021,""768 Spiez"",""Secteur secondaire"",109,1067,171,896,959,110,849" -"2021,""768 Spiez"",""Secteur tertiaire"",694,4709,2711,1998,3291,1635,1656" -"2021,""769 Wimmis"",""Secteur conomique - total"",183,1329,426,903,1070,247,823" -"2021,""769 Wimmis"",""Secteur primaire"",25,67,26,41,41,12,29" -"2021,""769 Wimmis"",""Secteur secondaire"",43,817,129,688,745,86,659" -"2021,""769 Wimmis"",""Secteur tertiaire"",115,445,271,174,284,149,135" -"2021,""770 Stocken-Hfen"",""Secteur conomique - total"",76,185,84,101,113,43,70" -"2021,""770 Stocken-Hfen"",""Secteur primaire"",26,70,X,X,47,X,X" -"2021,""770 Stocken-Hfen"",""Secteur secondaire"",17,31,X,X,24,X,X" -"2021,""770 Stocken-Hfen"",""Secteur tertiaire"",33,84,50,34,42,25,17" -"2021,""782 Guttannen"",""Secteur conomique - total"",33,148,59,89,94,32,63" -"2021,""782 Guttannen"",""Secteur primaire"",12,42,21,21,17,8,9" -"2021,""782 Guttannen"",""Secteur secondaire"",4,65,15,50,52,9,43" -"2021,""782 Guttannen"",""Secteur tertiaire"",17,41,23,18,25,14,11" -"2021,""783 Hasliberg"",""Secteur conomique - total"",131,903,460,443,616,269,347" -"2021,""783 Hasliberg"",""Secteur primaire"",43,117,46,71,67,22,45" -"2021,""783 Hasliberg"",""Secteur secondaire"",12,60,7,53,50,4,45" -"2021,""783 Hasliberg"",""Secteur tertiaire"",76,726,407,319,499,243,257" -"2021,""784 Innertkirchen"",""Secteur conomique - total"",122,600,196,404,432,104,328" -"2021,""784 Innertkirchen"",""Secteur primaire"",45,112,40,72,67,21,46" -"2021,""784 Innertkirchen"",""Secteur secondaire"",22,339,68,271,278,34,244" -"2021,""784 Innertkirchen"",""Secteur tertiaire"",55,149,88,61,88,49,38" -"2021,""785 Meiringen"",""Secteur conomique - total"",422,2734,1246,1488,2084,780,1304" -"2021,""785 Meiringen"",""Secteur primaire"",59,162,57,105,91,26,65" -"2021,""785 Meiringen"",""Secteur secondaire"",57,573,107,466,504,64,440" -"2021,""785 Meiringen"",""Secteur tertiaire"",306,1999,1082,917,1489,691,798" -"2021,""786 Schattenhalb"",""Secteur conomique - total"",50,631,358,273,458,237,221" -"2021,""786 Schattenhalb"",""Secteur primaire"",12,32,X,X,17,X,X" -"2021,""786 Schattenhalb"",""Secteur secondaire"",11,88,X,X,76,X,X" -"2021,""786 Schattenhalb"",""Secteur tertiaire"",27,511,333,178,366,224,142" -"2021,""791 Boltigen"",""Secteur conomique - total"",169,481,201,280,318,106,212" -"2021,""791 Boltigen"",""Secteur primaire"",83,215,83,132,149,48,101" -"2021,""791 Boltigen"",""Secteur secondaire"",31,93,18,75,70,6,64" -"2021,""791 Boltigen"",""Secteur tertiaire"",55,173,100,73,99,52,47" -"2021,""792 Lenk"",""Secteur conomique - total"",320,1769,840,929,1253,490,763" -"2021,""792 Lenk"",""Secteur primaire"",97,273,112,161,155,48,107" -"2021,""792 Lenk"",""Secteur secondaire"",50,353,95,258,302,62,240" -"2021,""792 Lenk"",""Secteur tertiaire"",173,1143,633,510,796,379,417" -"2021,""793 St. Stephan"",""Secteur conomique - total"",159,699,302,397,469,161,308" -"2021,""793 St. Stephan"",""Secteur primaire"",73,234,92,142,143,43,100" -"2021,""793 St. Stephan"",""Secteur secondaire"",33,176,23,153,147,10,137" -"2021,""793 St. Stephan"",""Secteur tertiaire"",53,289,187,102,179,107,72" -"2021,""794 Zweisimmen"",""Secteur conomique - total"",330,1747,894,853,1259,550,709" -"2021,""794 Zweisimmen"",""Secteur primaire"",82,227,88,139,149,45,104" -"2021,""794 Zweisimmen"",""Secteur secondaire"",51,279,50,229,235,29,206" -"2021,""794 Zweisimmen"",""Secteur tertiaire"",197,1241,756,485,875,476,399" -"2021,""841 Gsteig"",""Secteur conomique - total"",128,392,155,237,288,95,193" -"2021,""841 Gsteig"",""Secteur primaire"",41,100,42,58,72,27,45" -"2021,""841 Gsteig"",""Secteur secondaire"",26,80,19,61,57,9,48" -"2021,""841 Gsteig"",""Secteur tertiaire"",61,212,94,118,159,58,101" -"2021,""842 Lauenen"",""Secteur conomique - total"",125,484,213,271,325,116,208" -"2021,""842 Lauenen"",""Secteur primaire"",54,163,65,98,97,28,69" -"2021,""842 Lauenen"",""Secteur secondaire"",22,85,14,71,68,9,59" -"2021,""842 Lauenen"",""Secteur tertiaire"",49,236,134,102,159,79,80" -"2021,""843 Saanen"",""Secteur conomique - total"",930,6643,2899,3744,5157,1912,3246" -"2021,""843 Saanen"",""Secteur primaire"",170,452,173,279,288,83,205" -"2021,""843 Saanen"",""Secteur secondaire"",125,1394,321,1073,1196,203,993" -"2021,""843 Saanen"",""Secteur tertiaire"",635,4797,2405,2392,3673,1625,2048" -"2021,""852 Guggisberg"",""Secteur conomique - total"",186,563,276,287,374,151,223" -"2021,""852 Guggisberg"",""Secteur primaire"",107,271,109,162,181,59,122" -"2021,""852 Guggisberg"",""Secteur secondaire"",22,76,10,66,62,5,57" -"2021,""852 Guggisberg"",""Secteur tertiaire"",57,216,157,59,130,87,43" -"2021,""853 Rschegg"",""Secteur conomique - total"",148,461,200,261,293,98,194" -"2021,""853 Rschegg"",""Secteur primaire"",54,150,53,97,85,24,61" -"2021,""853 Rschegg"",""Secteur secondaire"",20,102,18,84,84,6,77" -"2021,""853 Rschegg"",""Secteur tertiaire"",74,209,129,80,124,68,56" -"2021,""855 Schwarzenburg"",""Secteur conomique - total"",605,3245,1502,1743,2378,915,1463" -"2021,""855 Schwarzenburg"",""Secteur primaire"",186,521,199,322,326,96,230" -"2021,""855 Schwarzenburg"",""Secteur secondaire"",96,973,204,769,863,138,725" -"2021,""855 Schwarzenburg"",""Secteur tertiaire"",323,1751,1099,652,1189,681,508" -"2021,""861 Belp"",""Secteur conomique - total"",757,5227,2419,2808,3895,1522,2373" -"2021,""861 Belp"",""Secteur primaire"",74,266,89,177,164,43,121" -"2021,""861 Belp"",""Secteur secondaire"",128,1301,355,946,1150,254,895" -"2021,""861 Belp"",""Secteur tertiaire"",555,3660,1975,1685,2581,1224,1357" -"2021,""863 Burgistein"",""Secteur conomique - total"",96,300,118,182,199,64,135" -"2021,""863 Burgistein"",""Secteur primaire"",37,96,39,57,56,20,36" -"2021,""863 Burgistein"",""Secteur secondaire"",16,92,20,72,81,14,66" -"2021,""863 Burgistein"",""Secteur tertiaire"",43,112,59,53,62,29,33" -"2021,""866 Gerzensee"",""Secteur conomique - total"",87,306,142,164,208,78,129" -"2021,""866 Gerzensee"",""Secteur primaire"",31,83,X,X,53,X,X" -"2021,""866 Gerzensee"",""Secteur secondaire"",12,30,X,X,27,X,X" -"2021,""866 Gerzensee"",""Secteur tertiaire"",44,193,113,80,128,66,62" -"2021,""867 Gurzelen"",""Secteur conomique - total"",56,147,58,89,97,31,66" -"2021,""867 Gurzelen"",""Secteur primaire"",25,85,30,55,58,17,41" -"2021,""867 Gurzelen"",""Secteur secondaire"",11,18,X,X,16,X,X" -"2021,""867 Gurzelen"",""Secteur tertiaire"",20,44,X,X,23,X,X" -"2021,""868 Jaberg"",""Secteur conomique - total"",25,87,28,59,62,15,48" -"2021,""868 Jaberg"",""Secteur primaire"",7,17,X,X,13,X,X" -"2021,""868 Jaberg"",""Secteur secondaire"",5,46,12,34,40,7,32" -"2021,""868 Jaberg"",""Secteur tertiaire"",13,24,X,X,10,X,X" -"2021,""869 Kaufdorf"",""Secteur conomique - total"",58,163,75,88,103,35,68" -"2021,""869 Kaufdorf"",""Secteur primaire"",10,20,X,X,13,X,X" -"2021,""869 Kaufdorf"",""Secteur secondaire"",12,43,X,X,35,X,X" -"2021,""869 Kaufdorf"",""Secteur tertiaire"",36,100,61,39,56,30,26" -"2021,""870 Kehrsatz"",""Secteur conomique - total"",219,1052,478,574,752,278,475" -"2021,""870 Kehrsatz"",""Secteur primaire"",13,43,19,24,28,9,19" -"2021,""870 Kehrsatz"",""Secteur secondaire"",38,177,52,125,146,34,112" -"2021,""870 Kehrsatz"",""Secteur tertiaire"",168,832,407,425,578,234,344" -"2021,""872 Kirchdorf (BE)"",""Secteur conomique - total"",151,574,241,333,357,110,248" -"2021,""872 Kirchdorf (BE)"",""Secteur primaire"",63,234,92,142,146,41,105" -"2021,""872 Kirchdorf (BE)"",""Secteur secondaire"",23,117,31,86,90,16,74" -"2021,""872 Kirchdorf (BE)"",""Secteur tertiaire"",65,223,118,105,121,52,69" -"2021,""877 Niedermuhlern"",""Secteur conomique - total"",65,162,59,103,103,29,74" -"2021,""877 Niedermuhlern"",""Secteur primaire"",33,95,29,66,60,15,45" -"2021,""877 Niedermuhlern"",""Secteur secondaire"",7,9,X,X,7,X,X" -"2021,""877 Niedermuhlern"",""Secteur tertiaire"",25,58,X,X,36,X,X" -"2021,""879 Riggisberg"",""Secteur conomique - total"",260,1929,1179,750,1328,728,601" -"2021,""879 Riggisberg"",""Secteur primaire"",72,188,70,118,119,34,85" -"2021,""879 Riggisberg"",""Secteur secondaire"",49,304,77,227,245,46,198" -"2021,""879 Riggisberg"",""Secteur tertiaire"",139,1437,1032,405,965,647,318" -"2021,""880 Reggisberg"",""Secteur conomique - total"",205,579,249,330,382,129,253" -"2021,""880 Reggisberg"",""Secteur primaire"",112,281,103,178,185,52,132" -"2021,""880 Reggisberg"",""Secteur secondaire"",22,75,16,59,60,8,52" -"2021,""880 Reggisberg"",""Secteur tertiaire"",71,223,130,93,137,69,68" -"2021,""883 Seftigen"",""Secteur conomique - total"",141,702,340,362,515,203,312" -"2021,""883 Seftigen"",""Secteur primaire"",14,119,79,40,98,66,32" -"2021,""883 Seftigen"",""Secteur secondaire"",27,240,42,198,211,27,184" -"2021,""883 Seftigen"",""Secteur tertiaire"",100,343,219,124,206,110,96" -"2021,""884 Toffen"",""Secteur conomique - total"",141,477,209,268,330,114,217" -"2021,""884 Toffen"",""Secteur primaire"",13,36,14,22,22,7,15" -"2021,""884 Toffen"",""Secteur secondaire"",18,43,14,29,31,7,24" -"2021,""884 Toffen"",""Secteur tertiaire"",110,398,181,217,277,100,177" -"2021,""885 Uttigen"",""Secteur conomique - total"",113,326,170,156,210,84,126" -"2021,""885 Uttigen"",""Secteur primaire"",14,46,22,24,30,12,18" -"2021,""885 Uttigen"",""Secteur secondaire"",30,98,19,79,75,9,66" -"2021,""885 Uttigen"",""Secteur tertiaire"",69,182,129,53,105,64,41" -"2021,""886 Wattenwil"",""Secteur conomique - total"",208,1061,595,466,723,334,389" -"2021,""886 Wattenwil"",""Secteur primaire"",33,91,36,55,57,18,39" -"2021,""886 Wattenwil"",""Secteur secondaire"",41,193,41,152,163,23,140" -"2021,""886 Wattenwil"",""Secteur tertiaire"",134,777,518,259,504,294,210" -"2021,""888 Wald (BE)"",""Secteur conomique - total"",123,630,285,345,474,187,287" -"2021,""888 Wald (BE)"",""Secteur primaire"",47,143,X,X,89,X,X" -"2021,""888 Wald (BE)"",""Secteur secondaire"",13,35,X,X,27,X,X" -"2021,""888 Wald (BE)"",""Secteur tertiaire"",63,452,223,229,358,154,204" -"2021,""889 Thurnen"",""Secteur conomique - total"",111,372,180,192,246,96,150" -"2021,""889 Thurnen"",""Secteur primaire"",28,81,37,44,49,17,32" -"2021,""889 Thurnen"",""Secteur secondaire"",17,81,16,65,66,8,58" -"2021,""889 Thurnen"",""Secteur tertiaire"",66,210,127,83,131,71,60" -"2021,""901 Eggiwil"",""Secteur conomique - total"",317,1329,563,766,903,305,598" -"2021,""901 Eggiwil"",""Secteur primaire"",179,500,207,293,296,104,192" -"2021,""901 Eggiwil"",""Secteur secondaire"",41,371,55,316,316,29,286" -"2021,""901 Eggiwil"",""Secteur tertiaire"",97,458,301,157,291,171,120" -"2021,""902 Langnau im Emmental"",""Secteur conomique - total"",751,6184,3415,2769,4346,2044,2303" -"2021,""902 Langnau im Emmental"",""Secteur primaire"",162,481,203,278,294,105,189" -"2021,""902 Langnau im Emmental"",""Secteur secondaire"",112,1359,318,1041,1178,202,976" -"2021,""902 Langnau im Emmental"",""Secteur tertiaire"",477,4344,2894,1450,2874,1736,1138" -"2021,""903 Lauperswil"",""Secteur conomique - total"",228,1298,593,705,954,365,589" -"2021,""903 Lauperswil"",""Secteur primaire"",91,235,98,137,138,48,90" -"2021,""903 Lauperswil"",""Secteur secondaire"",39,507,115,392,444,79,364" -"2021,""903 Lauperswil"",""Secteur tertiaire"",98,556,380,176,373,238,135" -"2021,""904 Rthenbach im Emmental"",""Secteur conomique - total"",161,597,271,326,394,146,248" -"2021,""904 Rthenbach im Emmental"",""Secteur primaire"",93,264,107,157,166,58,108" -"2021,""904 Rthenbach im Emmental"",""Secteur secondaire"",17,136,32,104,113,22,92" -"2021,""904 Rthenbach im Emmental"",""Secteur tertiaire"",51,197,132,65,115,66,49" -"2021,""905 Rderswil"",""Secteur conomique - total"",211,763,384,379,502,204,298" -"2021,""905 Rderswil"",""Secteur primaire"",76,201,82,119,124,39,85" -"2021,""905 Rderswil"",""Secteur secondaire"",44,230,72,158,179,40,139" -"2021,""905 Rderswil"",""Secteur tertiaire"",91,332,230,102,199,125,74" -"2021,""906 Schangnau"",""Secteur conomique - total"",144,578,274,304,407,168,239" -"2021,""906 Schangnau"",""Secteur primaire"",82,238,94,144,165,57,108" -"2021,""906 Schangnau"",""Secteur secondaire"",21,106,34,72,80,16,64" -"2021,""906 Schangnau"",""Secteur tertiaire"",41,234,146,88,162,94,67" -"2021,""907 Signau"",""Secteur conomique - total"",226,1019,385,634,703,200,503" -"2021,""907 Signau"",""Secteur primaire"",100,284,117,167,164,54,110" -"2021,""907 Signau"",""Secteur secondaire"",45,409,83,326,346,49,298" -"2021,""907 Signau"",""Secteur tertiaire"",81,326,185,141,193,98,95" -"2021,""908 Trub"",""Secteur conomique - total"",201,637,262,375,430,139,291" -"2021,""908 Trub"",""Secteur primaire"",128,334,131,203,219,71,148" -"2021,""908 Trub"",""Secteur secondaire"",23,153,29,124,131,19,112" -"2021,""908 Trub"",""Secteur tertiaire"",50,150,102,48,80,49,31" -"2021,""909 Trubschachen"",""Secteur conomique - total"",128,1001,464,537,765,307,458" -"2021,""909 Trubschachen"",""Secteur primaire"",46,131,47,84,81,23,58" -"2021,""909 Trubschachen"",""Secteur secondaire"",27,647,277,370,546,205,341" -"2021,""909 Trubschachen"",""Secteur tertiaire"",55,223,140,83,138,80,59" -"2021,""921 Amsoldingen"",""Secteur conomique - total"",55,120,55,65,81,30,52" -"2021,""921 Amsoldingen"",""Secteur primaire"",14,35,X,X,26,X,X" -"2021,""921 Amsoldingen"",""Secteur secondaire"",7,27,X,X,23,X,X" -"2021,""921 Amsoldingen"",""Secteur tertiaire"",34,58,36,22,33,19,14" -"2021,""922 Blumenstein"",""Secteur conomique - total"",84,329,150,179,231,86,145" -"2021,""922 Blumenstein"",""Secteur primaire"",20,57,24,33,37,14,23" -"2021,""922 Blumenstein"",""Secteur secondaire"",27,138,40,98,112,24,89" -"2021,""922 Blumenstein"",""Secteur tertiaire"",37,134,86,48,82,48,34" -"2021,""923 Buchholterberg"",""Secteur conomique - total"",150,484,233,251,307,117,190" -"2021,""923 Buchholterberg"",""Secteur primaire"",71,178,72,106,105,34,71" -"2021,""923 Buchholterberg"",""Secteur secondaire"",22,70,17,53,55,7,48" -"2021,""923 Buchholterberg"",""Secteur tertiaire"",57,236,144,92,147,76,71" -"2021,""924 Eriz"",""Secteur conomique - total"",57,194,93,101,108,39,69" -"2021,""924 Eriz"",""Secteur primaire"",30,94,X,X,54,X,X" -"2021,""924 Eriz"",""Secteur secondaire"",8,18,X,X,15,X,X" -"2021,""924 Eriz"",""Secteur tertiaire"",19,82,50,32,40,20,20" -"2021,""925 Fahrni"",""Secteur conomique - total"",84,208,90,118,128,43,85" -"2021,""925 Fahrni"",""Secteur primaire"",40,101,X,X,59,X,X" -"2021,""925 Fahrni"",""Secteur secondaire"",12,28,X,X,22,X,X" -"2021,""925 Fahrni"",""Secteur tertiaire"",32,79,49,30,47,27,21" -"2021,""927 Heiligenschwendi"",""Secteur conomique - total"",56,628,452,176,415,287,128" -"2021,""927 Heiligenschwendi"",""Secteur primaire"",16,47,X,X,26,X,X" -"2021,""927 Heiligenschwendi"",""Secteur secondaire"",5,17,X,X,13,X,X" -"2021,""927 Heiligenschwendi"",""Secteur tertiaire"",35,564,427,137,376,277,99" -"2021,""928 Heimberg"",""Secteur conomique - total"",384,2410,1132,1278,1780,676,1104" -"2021,""928 Heimberg"",""Secteur primaire"",12,28,10,18,17,6,11" -"2021,""928 Heimberg"",""Secteur secondaire"",82,691,115,576,602,62,540" -"2021,""928 Heimberg"",""Secteur tertiaire"",290,1691,1007,684,1160,607,553" -"2021,""929 Hilterfingen"",""Secteur conomique - total"",229,977,594,383,646,355,291" -"2021,""929 Hilterfingen"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""929 Hilterfingen"",""Secteur secondaire"",X,139,X,X,X,X,X" -"2021,""929 Hilterfingen"",""Secteur tertiaire"",200,831,543,288,532,325,206" -"2021,""931 Homberg"",""Secteur conomique - total"",73,175,79,96,97,35,62" -"2021,""931 Homberg"",""Secteur primaire"",34,87,X,X,48,X,X" -"2021,""931 Homberg"",""Secteur secondaire"",9,22,X,X,18,X,X" -"2021,""931 Homberg"",""Secteur tertiaire"",30,66,41,25,31,17,14" -"2021,""932 Horrenbach-Buchen"",""Secteur conomique - total"",34,97,38,59,62,18,44" -"2021,""932 Horrenbach-Buchen"",""Secteur primaire"",22,58,23,35,35,12,24" -"2021,""932 Horrenbach-Buchen"",""Secteur secondaire"",4,25,X,X,21,X,X" -"2021,""932 Horrenbach-Buchen"",""Secteur tertiaire"",8,14,X,X,6,X,X" -"2021,""934 Oberhofen am Thunersee"",""Secteur conomique - total"",190,855,489,366,479,242,237" -"2021,""934 Oberhofen am Thunersee"",""Secteur primaire"",7,25,X,X,15,X,X" -"2021,""934 Oberhofen am Thunersee"",""Secteur secondaire"",19,64,X,X,50,X,X" -"2021,""934 Oberhofen am Thunersee"",""Secteur tertiaire"",164,766,473,293,415,236,178" -"2021,""935 Oberlangenegg"",""Secteur conomique - total"",68,280,105,175,188,55,133" -"2021,""935 Oberlangenegg"",""Secteur primaire"",32,97,X,X,57,X,X" -"2021,""935 Oberlangenegg"",""Secteur secondaire"",6,60,X,X,49,X,X" -"2021,""935 Oberlangenegg"",""Secteur tertiaire"",30,123,58,65,82,31,52" -"2021,""936 Pohlern"",""Secteur conomique - total"",21,61,23,38,36,10,26" -"2021,""936 Pohlern"",""Secteur primaire"",9,25,X,X,16,X,X" -"2021,""936 Pohlern"",""Secteur secondaire"",5,12,X,X,9,X,X" -"2021,""936 Pohlern"",""Secteur tertiaire"",7,24,13,11,11,5,6" -"2021,""938 Sigriswil"",""Secteur conomique - total"",386,1822,1037,785,1239,631,608" -"2021,""938 Sigriswil"",""Secteur primaire"",97,271,105,166,154,47,108" -"2021,""938 Sigriswil"",""Secteur secondaire"",59,181,41,140,144,21,122" -"2021,""938 Sigriswil"",""Secteur tertiaire"",230,1370,891,479,941,563,378" -"2021,""939 Steffisburg"",""Secteur conomique - total"",826,6328,2783,3545,4775,1676,3098" -"2021,""939 Steffisburg"",""Secteur primaire"",54,149,60,89,82,30,52" -"2021,""939 Steffisburg"",""Secteur secondaire"",124,1709,275,1434,1563,190,1372" -"2021,""939 Steffisburg"",""Secteur tertiaire"",648,4470,2448,2022,3130,1456,1674" -"2021,""940 Teuffenthal (BE)"",""Secteur conomique - total"",26,69,30,39,40,13,27" -"2021,""940 Teuffenthal (BE)"",""Secteur primaire"",14,33,16,17,18,7,11" -"2021,""940 Teuffenthal (BE)"",""Secteur secondaire"",4,6,0,6,4,0,4" -"2021,""940 Teuffenthal (BE)"",""Secteur tertiaire"",8,30,14,16,18,6,12" -"2021,""941 Thierachern"",""Secteur conomique - total"",143,472,239,233,315,130,185" -"2021,""941 Thierachern"",""Secteur primaire"",25,73,30,43,46,13,33" -"2021,""941 Thierachern"",""Secteur secondaire"",18,74,12,62,64,6,57" -"2021,""941 Thierachern"",""Secteur tertiaire"",100,325,197,128,205,110,95" -"2021,""942 Thun"",""Secteur conomique - total"",3277,28449,13739,14710,21072,8519,12553" -"2021,""942 Thun"",""Secteur primaire"",32,78,28,50,44,14,30" -"2021,""942 Thun"",""Secteur secondaire"",378,5729,1063,4666,5213,757,4456" -"2021,""942 Thun"",""Secteur tertiaire"",2867,22642,12648,9994,15815,7748,8067" -"2021,""943 Uebeschi"",""Secteur conomique - total"",70,222,88,134,145,43,102" -"2021,""943 Uebeschi"",""Secteur primaire"",30,76,28,48,47,14,33" -"2021,""943 Uebeschi"",""Secteur secondaire"",16,55,17,38,41,7,34" -"2021,""943 Uebeschi"",""Secteur tertiaire"",24,91,43,48,57,22,35" -"2021,""944 Uetendorf"",""Secteur conomique - total"",468,3543,1304,2239,2750,782,1968" -"2021,""944 Uetendorf"",""Secteur primaire"",41,116,42,74,72,18,54" -"2021,""944 Uetendorf"",""Secteur secondaire"",115,1357,266,1091,1212,174,1038" -"2021,""944 Uetendorf"",""Secteur tertiaire"",312,2070,996,1074,1465,589,876" -"2021,""945 Unterlangenegg"",""Secteur conomique - total"",101,330,155,175,220,83,138" -"2021,""945 Unterlangenegg"",""Secteur primaire"",37,94,36,58,56,17,39" -"2021,""945 Unterlangenegg"",""Secteur secondaire"",22,87,30,57,68,18,50" -"2021,""945 Unterlangenegg"",""Secteur tertiaire"",42,149,89,60,96,48,48" -"2021,""946 Wachseldorn"",""Secteur conomique - total"",29,66,26,40,46,14,32" -"2021,""946 Wachseldorn"",""Secteur primaire"",20,52,18,34,37,11,26" -"2021,""946 Wachseldorn"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""946 Wachseldorn"",""Secteur tertiaire"",X,10,X,X,X,X,X" -"2021,""947 Zwieselberg"",""Secteur conomique - total"",28,115,51,64,75,23,52" -"2021,""947 Zwieselberg"",""Secteur primaire"",X,22,X,X,11,X,X" -"2021,""947 Zwieselberg"",""Secteur secondaire"",X,42,X,X,40,X,X" -"2021,""947 Zwieselberg"",""Secteur tertiaire"",20,51,35,16,23,13,10" -"2021,""948 Forst-Lngenbhl"",""Secteur conomique - total"",59,189,86,103,128,47,82" -"2021,""948 Forst-Lngenbhl"",""Secteur primaire"",24,69,28,41,47,15,32" -"2021,""948 Forst-Lngenbhl"",""Secteur secondaire"",8,42,19,23,31,11,20" -"2021,""948 Forst-Lngenbhl"",""Secteur tertiaire"",27,78,39,39,50,21,29" -"2021,""951 Affoltern im Emmental"",""Secteur conomique - total"",125,504,262,242,330,142,188" -"2021,""951 Affoltern im Emmental"",""Secteur primaire"",54,150,63,87,96,30,66" -"2021,""951 Affoltern im Emmental"",""Secteur secondaire"",20,154,62,92,111,34,77" -"2021,""951 Affoltern im Emmental"",""Secteur tertiaire"",51,200,137,63,124,79,45" -"2021,""952 Drrenroth"",""Secteur conomique - total"",115,410,202,208,268,108,159" -"2021,""952 Drrenroth"",""Secteur primaire"",59,171,73,98,104,34,69" -"2021,""952 Drrenroth"",""Secteur secondaire"",19,63,13,50,52,7,45" -"2021,""952 Drrenroth"",""Secteur tertiaire"",37,176,116,60,113,67,45" -"2021,""953 Eriswil"",""Secteur conomique - total"",125,378,185,193,234,96,138" -"2021,""953 Eriswil"",""Secteur primaire"",58,157,62,95,87,28,59" -"2021,""953 Eriswil"",""Secteur secondaire"",24,70,14,56,56,6,50" -"2021,""953 Eriswil"",""Secteur tertiaire"",43,151,109,42,92,62,30" -"2021,""954 Huttwil"",""Secteur conomique - total"",410,3159,1522,1637,2363,926,1437" -"2021,""954 Huttwil"",""Secteur primaire"",75,202,79,123,129,41,88" -"2021,""954 Huttwil"",""Secteur secondaire"",89,1312,348,964,1131,228,904" -"2021,""954 Huttwil"",""Secteur tertiaire"",246,1645,1095,550,1103,657,445" -"2021,""955 Ltzelflh"",""Secteur conomique - total"",347,1609,653,956,1157,356,801" -"2021,""955 Ltzelflh"",""Secteur primaire"",113,327,131,196,204,66,138" -"2021,""955 Ltzelflh"",""Secteur secondaire"",68,597,115,482,524,71,453" -"2021,""955 Ltzelflh"",""Secteur tertiaire"",166,685,407,278,429,219,210" -"2021,""956 Regsau"",""Secteur conomique - total"",225,1277,654,623,923,399,524" -"2021,""956 Regsau"",""Secteur primaire"",64,176,65,111,112,35,77" -"2021,""956 Regsau"",""Secteur secondaire"",35,472,158,314,398,110,288" -"2021,""956 Regsau"",""Secteur tertiaire"",126,629,431,198,412,253,159" -"2021,""957 Sumiswald"",""Secteur conomique - total"",464,2979,1485,1494,2147,896,1252" -"2021,""957 Sumiswald"",""Secteur primaire"",167,445,169,276,271,81,191" -"2021,""957 Sumiswald"",""Secteur secondaire"",80,1149,351,798,988,255,733" -"2021,""957 Sumiswald"",""Secteur tertiaire"",217,1385,965,420,888,560,328" -"2021,""958 Trachselwald"",""Secteur conomique - total"",117,375,182,193,217,82,134" -"2021,""958 Trachselwald"",""Secteur primaire"",69,183,X,X,97,X,X" -"2021,""958 Trachselwald"",""Secteur secondaire"",14,49,X,X,39,X,X" -"2021,""958 Trachselwald"",""Secteur tertiaire"",34,143,103,40,81,51,29" -"2021,""959 Walterswil (BE)"",""Secteur conomique - total"",71,208,78,130,139,41,98" -"2021,""959 Walterswil (BE)"",""Secteur primaire"",46,120,51,69,71,26,45" -"2021,""959 Walterswil (BE)"",""Secteur secondaire"",8,53,11,42,45,6,39" -"2021,""959 Walterswil (BE)"",""Secteur tertiaire"",17,35,16,19,23,8,15" -"2021,""960 Wyssachen"",""Secteur conomique - total"",113,561,192,369,413,102,311" -"2021,""960 Wyssachen"",""Secteur primaire"",60,157,55,102,103,27,77" -"2021,""960 Wyssachen"",""Secteur secondaire"",23,261,64,197,213,37,176" -"2021,""960 Wyssachen"",""Secteur tertiaire"",30,143,73,70,96,39,57" -"2021,""971 Attiswil"",""Secteur conomique - total"",93,486,304,182,291,146,145" -"2021,""971 Attiswil"",""Secteur primaire"",17,66,27,39,46,13,32" -"2021,""971 Attiswil"",""Secteur secondaire"",20,68,15,53,57,9,48" -"2021,""971 Attiswil"",""Secteur tertiaire"",56,352,262,90,188,123,65" -"2021,""972 Berken"",""Secteur conomique - total"",7,44,18,26,30,9,21" -"2021,""972 Berken"",""Secteur primaire"",X,13,X,X,7,X,X" -"2021,""972 Berken"",""Secteur secondaire"",X,9,X,X,9,X,X" -"2021,""972 Berken"",""Secteur tertiaire"",X,22,14,8,14,7,7" -"2021,""973 Bettenhausen"",""Secteur conomique - total"",33,103,37,66,71,17,54" -"2021,""973 Bettenhausen"",""Secteur primaire"",13,37,X,X,23,X,X" -"2021,""973 Bettenhausen"",""Secteur secondaire"",7,32,X,X,29,X,X" -"2021,""973 Bettenhausen"",""Secteur tertiaire"",13,34,20,14,19,8,11" -"2021,""975 Farnern"",""Secteur conomique - total"",17,60,24,36,43,17,25" -"2021,""975 Farnern"",""Secteur primaire"",8,X,X,X,X,X,X" -"2021,""975 Farnern"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""975 Farnern"",""Secteur tertiaire"",X,40,X,X,30,X,X" -"2021,""976 Graben"",""Secteur conomique - total"",21,59,30,29,37,15,22" -"2021,""976 Graben"",""Secteur primaire"",X,21,X,X,X,X,X" -"2021,""976 Graben"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""976 Graben"",""Secteur tertiaire"",10,34,X,X,18,X,X" -"2021,""977 Heimenhausen"",""Secteur conomique - total"",66,213,101,112,140,48,92" -"2021,""977 Heimenhausen"",""Secteur primaire"",15,41,15,26,23,6,18" -"2021,""977 Heimenhausen"",""Secteur secondaire"",16,71,15,56,60,9,51" -"2021,""977 Heimenhausen"",""Secteur tertiaire"",35,101,71,30,57,33,23" -"2021,""979 Herzogenbuchsee"",""Secteur conomique - total"",476,4284,1973,2311,3278,1231,2047" -"2021,""979 Herzogenbuchsee"",""Secteur primaire"",12,42,15,27,27,8,20" -"2021,""979 Herzogenbuchsee"",""Secteur secondaire"",93,1460,364,1096,1313,270,1044" -"2021,""979 Herzogenbuchsee"",""Secteur tertiaire"",371,2782,1594,1188,1938,954,984" -"2021,""980 Inkwil"",""Secteur conomique - total"",32,123,54,69,94,37,56" -"2021,""980 Inkwil"",""Secteur primaire"",5,15,X,X,11,X,X" -"2021,""980 Inkwil"",""Secteur secondaire"",7,66,25,41,58,20,39" -"2021,""980 Inkwil"",""Secteur tertiaire"",20,42,X,X,25,X,X" -"2021,""981 Niederbipp"",""Secteur conomique - total"",338,3256,1450,1806,2603,969,1634" -"2021,""981 Niederbipp"",""Secteur primaire"",40,247,99,148,185,70,115" -"2021,""981 Niederbipp"",""Secteur secondaire"",68,661,120,541,588,74,514" -"2021,""981 Niederbipp"",""Secteur tertiaire"",230,2348,1231,1117,1830,825,1006" -"2021,""982 Niedernz"",""Secteur conomique - total"",71,909,196,713,812,135,677" -"2021,""982 Niedernz"",""Secteur primaire"",7,19,X,X,12,X,X" -"2021,""982 Niedernz"",""Secteur secondaire"",22,736,107,629,694,89,605" -"2021,""982 Niedernz"",""Secteur tertiaire"",42,154,X,X,106,X,X" -"2021,""983 Oberbipp"",""Secteur conomique - total"",117,878,331,547,679,203,476" -"2021,""983 Oberbipp"",""Secteur primaire"",14,40,15,25,28,8,20" -"2021,""983 Oberbipp"",""Secteur secondaire"",22,257,66,191,234,53,181" -"2021,""983 Oberbipp"",""Secteur tertiaire"",81,581,250,331,417,142,275" -"2021,""985 Ochlenberg"",""Secteur conomique - total"",67,186,81,105,107,38,69" -"2021,""985 Ochlenberg"",""Secteur primaire"",46,144,55,89,86,27,59" -"2021,""985 Ochlenberg"",""Secteur secondaire"",6,9,X,X,6,X,X" -"2021,""985 Ochlenberg"",""Secteur tertiaire"",15,33,X,X,15,X,X" -"2021,""987 Rumisberg"",""Secteur conomique - total"",29,82,32,50,51,15,35" -"2021,""987 Rumisberg"",""Secteur primaire"",X,24,X,X,15,X,X" -"2021,""987 Rumisberg"",""Secteur secondaire"",X,12,X,X,11,X,X" -"2021,""987 Rumisberg"",""Secteur tertiaire"",16,46,25,21,24,11,13" -"2021,""988 Seeberg"",""Secteur conomique - total"",147,483,203,280,316,99,217" -"2021,""988 Seeberg"",""Secteur primaire"",56,157,54,103,91,22,69" -"2021,""988 Seeberg"",""Secteur secondaire"",23,91,18,73,75,8,67" -"2021,""988 Seeberg"",""Secteur tertiaire"",68,235,131,104,150,68,81" -"2021,""989 Thrigen"",""Secteur conomique - total"",78,360,129,231,262,66,196" -"2021,""989 Thrigen"",""Secteur primaire"",12,44,14,30,26,5,21" -"2021,""989 Thrigen"",""Secteur secondaire"",16,146,31,115,129,19,110" -"2021,""989 Thrigen"",""Secteur tertiaire"",50,170,84,86,107,42,65" -"2021,""990 Walliswil bei Niederbipp"",""Secteur conomique - total"",16,75,33,42,54,20,33" -"2021,""990 Walliswil bei Niederbipp"",""Secteur primaire"",6,13,X,X,7,X,X" -"2021,""990 Walliswil bei Niederbipp"",""Secteur secondaire"",4,23,0,23,21,0,21" -"2021,""990 Walliswil bei Niederbipp"",""Secteur tertiaire"",6,39,X,X,25,X,X" -"2021,""991 Walliswil bei Wangen"",""Secteur conomique - total"",30,107,45,62,71,26,45" -"2021,""991 Walliswil bei Wangen"",""Secteur primaire"",8,20,X,X,9,X,X" -"2021,""991 Walliswil bei Wangen"",""Secteur secondaire"",6,9,X,X,7,X,X" -"2021,""991 Walliswil bei Wangen"",""Secteur tertiaire"",16,78,37,41,55,23,32" -"2021,""992 Wangen an der Aare"",""Secteur conomique - total"",195,1059,519,540,780,334,446" -"2021,""992 Wangen an der Aare"",""Secteur primaire"",12,39,15,24,24,7,18" -"2021,""992 Wangen an der Aare"",""Secteur secondaire"",43,231,93,138,192,63,129" -"2021,""992 Wangen an der Aare"",""Secteur tertiaire"",140,789,411,378,563,264,300" -"2021,""993 Wangenried"",""Secteur conomique - total"",30,110,38,72,80,18,62" -"2021,""993 Wangenried"",""Secteur primaire"",14,35,X,X,23,X,X" -"2021,""993 Wangenried"",""Secteur secondaire"",4,42,X,X,38,X,X" -"2021,""993 Wangenried"",""Secteur tertiaire"",12,33,22,11,20,11,9" -"2021,""995 Wiedlisbach"",""Secteur conomique - total"",181,1335,670,665,988,415,573" -"2021,""995 Wiedlisbach"",""Secteur primaire"",16,52,19,33,33,7,26" -"2021,""995 Wiedlisbach"",""Secteur secondaire"",40,343,99,244,296,64,232" -"2021,""995 Wiedlisbach"",""Secteur tertiaire"",125,940,552,388,659,344,315" -"2021,""1001 Doppleschwand"",""Secteur conomique - total"",72,239,106,133,143,49,94" -"2021,""1001 Doppleschwand"",""Secteur primaire"",29,83,32,51,44,14,30" -"2021,""1001 Doppleschwand"",""Secteur secondaire"",13,58,15,43,43,7,36" -"2021,""1001 Doppleschwand"",""Secteur tertiaire"",30,98,59,39,56,28,28" -"2021,""1002 Entlebuch"",""Secteur conomique - total"",379,1814,853,961,1236,452,783" -"2021,""1002 Entlebuch"",""Secteur primaire"",148,393,154,239,240,72,169" -"2021,""1002 Entlebuch"",""Secteur secondaire"",64,462,116,346,379,60,319" -"2021,""1002 Entlebuch"",""Secteur tertiaire"",167,959,583,376,616,321,296" -"2021,""1004 Flhli"",""Secteur conomique - total"",246,1095,527,568,688,279,408" -"2021,""1004 Flhli"",""Secteur primaire"",90,227,93,134,132,49,84" -"2021,""1004 Flhli"",""Secteur secondaire"",38,152,36,116,119,16,102" -"2021,""1004 Flhli"",""Secteur tertiaire"",118,716,398,318,436,214,223" -"2021,""1005 Hasle (LU)"",""Secteur conomique - total"",170,904,307,597,635,150,485" -"2021,""1005 Hasle (LU)"",""Secteur primaire"",79,244,97,147,129,43,86" -"2021,""1005 Hasle (LU)"",""Secteur secondaire"",33,332,36,296,301,22,279" -"2021,""1005 Hasle (LU)"",""Secteur tertiaire"",58,328,174,154,205,85,120" -"2021,""1007 Romoos"",""Secteur conomique - total"",103,288,127,161,165,62,103" -"2021,""1007 Romoos"",""Secteur primaire"",74,185,67,118,101,30,71" -"2021,""1007 Romoos"",""Secteur secondaire"",10,45,17,28,35,10,25" -"2021,""1007 Romoos"",""Secteur tertiaire"",19,58,43,15,28,21,7" -"2021,""1008 Schpfheim"",""Secteur conomique - total"",407,2413,1205,1208,1687,706,981" -"2021,""1008 Schpfheim"",""Secteur primaire"",155,382,140,242,260,85,175" -"2021,""1008 Schpfheim"",""Secteur secondaire"",66,645,130,515,554,86,468" -"2021,""1008 Schpfheim"",""Secteur tertiaire"",186,1386,935,451,873,534,338" -"2021,""1009 Werthenstein"",""Secteur conomique - total"",217,1883,716,1167,1490,466,1025" -"2021,""1009 Werthenstein"",""Secteur primaire"",73,172,67,105,90,26,64" -"2021,""1009 Werthenstein"",""Secteur secondaire"",49,672,174,498,603,131,472" -"2021,""1009 Werthenstein"",""Secteur tertiaire"",95,1039,475,564,797,308,488" -"2021,""1010 Escholzmatt-Marbach"",""Secteur conomique - total"",512,2367,1000,1367,1703,579,1124" -"2021,""1010 Escholzmatt-Marbach"",""Secteur primaire"",265,655,248,407,400,122,279" -"2021,""1010 Escholzmatt-Marbach"",""Secteur secondaire"",66,838,183,655,745,134,611" -"2021,""1010 Escholzmatt-Marbach"",""Secteur tertiaire"",181,874,569,305,558,324,234" -"2021,""1021 Aesch (LU)"",""Secteur conomique - total"",127,527,206,321,405,128,277" -"2021,""1021 Aesch (LU)"",""Secteur primaire"",21,64,21,43,45,14,31" -"2021,""1021 Aesch (LU)"",""Secteur secondaire"",32,268,72,196,235,52,183" -"2021,""1021 Aesch (LU)"",""Secteur tertiaire"",74,195,113,82,125,62,63" -"2021,""1023 Ballwil"",""Secteur conomique - total"",217,848,361,487,630,209,420" -"2021,""1023 Ballwil"",""Secteur primaire"",39,125,41,84,89,21,68" -"2021,""1023 Ballwil"",""Secteur secondaire"",50,297,104,193,246,72,174" -"2021,""1023 Ballwil"",""Secteur tertiaire"",128,426,216,210,295,116,179" -"2021,""1024 Emmen"",""Secteur conomique - total"",1519,17110,6674,10436,13109,4060,9049" -"2021,""1024 Emmen"",""Secteur primaire"",37,112,35,77,83,19,64" -"2021,""1024 Emmen"",""Secteur secondaire"",278,6047,1000,5047,5654,778,4876" -"2021,""1024 Emmen"",""Secteur tertiaire"",1204,10951,5639,5312,7372,3263,4109" -"2021,""1025 Ermensee"",""Secteur conomique - total"",89,389,115,274,306,66,240" -"2021,""1025 Ermensee"",""Secteur primaire"",13,40,13,27,24,7,17" -"2021,""1025 Ermensee"",""Secteur secondaire"",25,151,30,121,133,18,115" -"2021,""1025 Ermensee"",""Secteur tertiaire"",51,198,72,126,149,41,108" -"2021,""1026 Eschenbach (LU)"",""Secteur conomique - total"",273,1505,669,836,1139,409,731" -"2021,""1026 Eschenbach (LU)"",""Secteur primaire"",51,160,49,111,115,25,90" -"2021,""1026 Eschenbach (LU)"",""Secteur secondaire"",49,500,104,396,446,72,373" -"2021,""1026 Eschenbach (LU)"",""Secteur tertiaire"",173,845,516,329,579,312,267" -"2021,""1030 Hitzkirch"",""Secteur conomique - total"",497,3153,1410,1743,2340,856,1483" -"2021,""1030 Hitzkirch"",""Secteur primaire"",119,484,205,279,268,91,178" -"2021,""1030 Hitzkirch"",""Secteur secondaire"",84,1183,293,890,1075,228,847" -"2021,""1030 Hitzkirch"",""Secteur tertiaire"",294,1486,912,574,996,537,459" -"2021,""1031 Hochdorf"",""Secteur conomique - total"",600,5279,2573,2706,4035,1653,2382" -"2021,""1031 Hochdorf"",""Secteur primaire"",30,164,56,108,99,26,73" -"2021,""1031 Hochdorf"",""Secteur secondaire"",110,1889,503,1386,1693,376,1317" -"2021,""1031 Hochdorf"",""Secteur tertiaire"",460,3226,2014,1212,2243,1251,992" -"2021,""1032 Hohenrain"",""Secteur conomique - total"",248,1230,641,589,812,346,467" -"2021,""1032 Hohenrain"",""Secteur primaire"",101,330,114,216,216,56,160" -"2021,""1032 Hohenrain"",""Secteur secondaire"",33,199,47,152,171,29,142" -"2021,""1032 Hohenrain"",""Secteur tertiaire"",114,701,480,221,425,261,164" -"2021,""1033 Inwil"",""Secteur conomique - total"",221,1434,459,975,1180,293,887" -"2021,""1033 Inwil"",""Secteur primaire"",38,136,47,89,108,31,77" -"2021,""1033 Inwil"",""Secteur secondaire"",49,496,101,395,439,71,368" -"2021,""1033 Inwil"",""Secteur tertiaire"",134,802,311,491,634,191,442" -"2021,""1037 Rain"",""Secteur conomique - total"",223,970,449,521,691,252,438" -"2021,""1037 Rain"",""Secteur primaire"",43,138,46,92,98,24,75" -"2021,""1037 Rain"",""Secteur secondaire"",37,296,90,206,247,56,191" -"2021,""1037 Rain"",""Secteur tertiaire"",143,536,313,223,345,172,173" -"2021,""1039 Rmerswil"",""Secteur conomique - total"",158,653,245,408,461,129,333" -"2021,""1039 Rmerswil"",""Secteur primaire"",82,231,79,152,143,39,105" -"2021,""1039 Rmerswil"",""Secteur secondaire"",22,246,44,202,221,30,191" -"2021,""1039 Rmerswil"",""Secteur tertiaire"",54,176,122,54,97,60,37" -"2021,""1040 Rothenburg"",""Secteur conomique - total"",600,6282,2171,4111,5054,1368,3686" -"2021,""1040 Rothenburg"",""Secteur primaire"",59,162,56,106,114,31,84" -"2021,""1040 Rothenburg"",""Secteur secondaire"",101,1228,221,1007,1105,145,961" -"2021,""1040 Rothenburg"",""Secteur tertiaire"",440,4892,1894,2998,3834,1192,2641" -"2021,""1041 Schongau"",""Secteur conomique - total"",126,429,147,282,295,70,225" -"2021,""1041 Schongau"",""Secteur primaire"",52,152,49,103,86,19,68" -"2021,""1041 Schongau"",""Secteur secondaire"",21,148,23,125,133,15,118" -"2021,""1041 Schongau"",""Secteur tertiaire"",53,129,75,54,75,36,39" -"2021,""1051 Adligenswil"",""Secteur conomique - total"",337,1678,796,882,1190,464,726" -"2021,""1051 Adligenswil"",""Secteur primaire"",20,64,28,36,43,14,29" -"2021,""1051 Adligenswil"",""Secteur secondaire"",47,309,52,257,275,33,242" -"2021,""1051 Adligenswil"",""Secteur tertiaire"",270,1305,716,589,872,417,455" -"2021,""1052 Buchrain"",""Secteur conomique - total"",299,2609,820,1789,2135,498,1636" -"2021,""1052 Buchrain"",""Secteur primaire"",9,58,21,37,27,7,20" -"2021,""1052 Buchrain"",""Secteur secondaire"",74,1233,145,1088,1146,105,1041" -"2021,""1052 Buchrain"",""Secteur tertiaire"",216,1318,654,664,962,386,576" -"2021,""1053 Dierikon"",""Secteur conomique - total"",104,2999,1499,1500,2186,774,1411" -"2021,""1053 Dierikon"",""Secteur primaire"",8,36,8,28,27,5,22" -"2021,""1053 Dierikon"",""Secteur secondaire"",13,694,106,588,657,84,573" -"2021,""1053 Dierikon"",""Secteur tertiaire"",83,2269,1385,884,1502,685,817" -"2021,""1054 Ebikon"",""Secteur conomique - total"",801,7279,3400,3879,5629,2215,3414" -"2021,""1054 Ebikon"",""Secteur primaire"",17,49,18,31,28,10,17" -"2021,""1054 Ebikon"",""Secteur secondaire"",101,2365,521,1844,2150,407,1743" -"2021,""1054 Ebikon"",""Secteur tertiaire"",683,4865,2861,2004,3451,1797,1654" -"2021,""1055 Gisikon"",""Secteur conomique - total"",73,366,141,225,294,84,210" -"2021,""1055 Gisikon"",""Secteur primaire"",4,9,X,X,6,X,X" -"2021,""1055 Gisikon"",""Secteur secondaire"",17,202,X,X,184,X,X" -"2021,""1055 Gisikon"",""Secteur tertiaire"",52,155,99,56,103,56,47" -"2021,""1056 Greppen"",""Secteur conomique - total"",72,165,79,86,100,39,61" -"2021,""1056 Greppen"",""Secteur primaire"",11,28,X,X,18,X,X" -"2021,""1056 Greppen"",""Secteur secondaire"",10,32,X,X,24,X,X" -"2021,""1056 Greppen"",""Secteur tertiaire"",51,105,62,43,59,31,29" -"2021,""1057 Honau"",""Secteur conomique - total"",25,143,40,103,119,27,92" -"2021,""1057 Honau"",""Secteur primaire"",X,16,X,X,12,X,X" -"2021,""1057 Honau"",""Secteur secondaire"",X,9,X,X,6,X,X" -"2021,""1057 Honau"",""Secteur tertiaire"",17,118,34,84,101,23,78" -"2021,""1058 Horw"",""Secteur conomique - total"",861,5219,2562,2657,3528,1456,2073" -"2021,""1058 Horw"",""Secteur primaire"",28,93,42,51,52,19,33" -"2021,""1058 Horw"",""Secteur secondaire"",101,521,100,421,460,64,396" -"2021,""1058 Horw"",""Secteur tertiaire"",732,4605,2420,2185,3016,1372,1644" -"2021,""1059 Kriens"",""Secteur conomique - total"",1560,12596,5878,6718,9473,3698,5775" -"2021,""1059 Kriens"",""Secteur primaire"",47,111,38,73,63,18,46" -"2021,""1059 Kriens"",""Secteur secondaire"",227,1981,325,1656,1798,227,1571" -"2021,""1059 Kriens"",""Secteur tertiaire"",1286,10504,5515,4989,7611,3453,4158" -"2021,""1061 Luzern"",""Secteur conomique - total"",8407,81803,43620,38183,58781,27530,31251" -"2021,""1061 Luzern"",""Secteur primaire"",40,129,45,84,88,25,63" -"2021,""1061 Luzern"",""Secteur secondaire"",615,7310,1842,5468,6610,1405,5205" -"2021,""1061 Luzern"",""Secteur tertiaire"",7752,74364,41733,32631,52083,26100,25983" -"2021,""1062 Malters"",""Secteur conomique - total"",543,3931,1536,2395,3023,888,2134" -"2021,""1062 Malters"",""Secteur primaire"",111,338,132,206,223,68,155" -"2021,""1062 Malters"",""Secteur secondaire"",112,1666,365,1301,1505,263,1242" -"2021,""1062 Malters"",""Secteur tertiaire"",320,1927,1039,888,1295,558,737" -"2021,""1063 Meggen"",""Secteur conomique - total"",630,2553,1441,1112,1794,876,918" -"2021,""1063 Meggen"",""Secteur primaire"",19,44,16,28,32,11,21" -"2021,""1063 Meggen"",""Secteur secondaire"",45,196,38,158,171,24,147" -"2021,""1063 Meggen"",""Secteur tertiaire"",566,2313,1387,926,1591,842,749" -"2021,""1064 Meierskappel"",""Secteur conomique - total"",118,444,173,271,303,86,217" -"2021,""1064 Meierskappel"",""Secteur primaire"",33,115,43,72,60,17,43" -"2021,""1064 Meierskappel"",""Secteur secondaire"",14,157,27,130,142,18,124" -"2021,""1064 Meierskappel"",""Secteur tertiaire"",71,172,103,69,102,52,50" -"2021,""1065 Root"",""Secteur conomique - total"",442,5016,2044,2972,4246,1507,2739" -"2021,""1065 Root"",""Secteur primaire"",22,50,17,33,28,9,19" -"2021,""1065 Root"",""Secteur secondaire"",85,2097,602,1495,1928,486,1442" -"2021,""1065 Root"",""Secteur tertiaire"",335,2869,1425,1444,2290,1012,1278" -"2021,""1066 Schwarzenberg"",""Secteur conomique - total"",136,458,212,246,300,107,193" -"2021,""1066 Schwarzenberg"",""Secteur primaire"",52,138,46,92,83,19,64" -"2021,""1066 Schwarzenberg"",""Secteur secondaire"",18,98,19,79,81,10,71" -"2021,""1066 Schwarzenberg"",""Secteur tertiaire"",66,222,147,75,136,79,58" -"2021,""1067 Udligenswil"",""Secteur conomique - total"",155,462,215,247,324,122,202" -"2021,""1067 Udligenswil"",""Secteur primaire"",25,65,24,41,46,15,31" -"2021,""1067 Udligenswil"",""Secteur secondaire"",22,77,14,63,64,7,56" -"2021,""1067 Udligenswil"",""Secteur tertiaire"",108,320,177,143,214,100,114" -"2021,""1068 Vitznau"",""Secteur conomique - total"",134,684,309,375,512,199,313" -"2021,""1068 Vitznau"",""Secteur primaire"",22,66,X,X,35,X,X" -"2021,""1068 Vitznau"",""Secteur secondaire"",12,24,X,X,18,X,X" -"2021,""1068 Vitznau"",""Secteur tertiaire"",100,594,277,317,459,186,273" -"2021,""1069 Weggis"",""Secteur conomique - total"",405,2653,1277,1376,2016,839,1177" -"2021,""1069 Weggis"",""Secteur primaire"",32,128,46,82,82,24,58" -"2021,""1069 Weggis"",""Secteur secondaire"",58,675,151,524,620,118,501" -"2021,""1069 Weggis"",""Secteur tertiaire"",315,1850,1080,770,1314,697,618" -"2021,""1081 Beromnster"",""Secteur conomique - total"",553,2828,1249,1579,2035,723,1312" -"2021,""1081 Beromnster"",""Secteur primaire"",153,492,163,329,317,73,245" -"2021,""1081 Beromnster"",""Secteur secondaire"",95,836,219,617,738,153,584" -"2021,""1081 Beromnster"",""Secteur tertiaire"",305,1500,867,633,981,497,484" -"2021,""1082 Bron"",""Secteur conomique - total"",169,1135,360,775,927,225,702" -"2021,""1082 Bron"",""Secteur primaire"",20,53,21,32,39,13,26" -"2021,""1082 Bron"",""Secteur secondaire"",47,625,112,513,571,78,493" -"2021,""1082 Bron"",""Secteur tertiaire"",102,457,227,230,318,135,183" -"2021,""1083 Buttisholz"",""Secteur conomique - total"",297,1861,571,1290,1484,327,1157" -"2021,""1083 Buttisholz"",""Secteur primaire"",86,218,73,145,143,35,108" -"2021,""1083 Buttisholz"",""Secteur secondaire"",51,816,114,702,745,75,670" -"2021,""1083 Buttisholz"",""Secteur tertiaire"",160,827,384,443,596,217,380" -"2021,""1084 Eich"",""Secteur conomique - total"",150,576,316,260,397,183,215" -"2021,""1084 Eich"",""Secteur primaire"",24,76,29,47,51,15,36" -"2021,""1084 Eich"",""Secteur secondaire"",19,117,20,97,103,12,91" -"2021,""1084 Eich"",""Secteur tertiaire"",107,383,267,116,243,155,88" -"2021,""1085 Geuensee"",""Secteur conomique - total"",177,1063,407,656,804,233,571" -"2021,""1085 Geuensee"",""Secteur primaire"",30,85,36,49,51,17,34" -"2021,""1085 Geuensee"",""Secteur secondaire"",38,424,68,356,387,48,339" -"2021,""1085 Geuensee"",""Secteur tertiaire"",109,554,303,251,366,169,198" -"2021,""1086 Grosswangen"",""Secteur conomique - total"",308,1465,554,911,1075,299,777" -"2021,""1086 Grosswangen"",""Secteur primaire"",108,340,119,221,203,58,146" -"2021,""1086 Grosswangen"",""Secteur secondaire"",54,485,90,395,438,62,376" -"2021,""1086 Grosswangen"",""Secteur tertiaire"",146,640,345,295,434,179,254" -"2021,""1088 Hildisrieden"",""Secteur conomique - total"",160,603,294,309,407,163,245" -"2021,""1088 Hildisrieden"",""Secteur primaire"",29,100,37,63,64,18,46" -"2021,""1088 Hildisrieden"",""Secteur secondaire"",17,98,21,77,83,13,70" -"2021,""1088 Hildisrieden"",""Secteur tertiaire"",114,405,236,169,260,131,129" -"2021,""1089 Knutwil"",""Secteur conomique - total"",156,759,312,447,582,185,397" -"2021,""1089 Knutwil"",""Secteur primaire"",32,88,24,64,63,13,49" -"2021,""1089 Knutwil"",""Secteur secondaire"",31,290,63,227,257,37,220" -"2021,""1089 Knutwil"",""Secteur tertiaire"",93,381,225,156,262,134,128" -"2021,""1091 Mauensee"",""Secteur conomique - total"",81,284,129,155,203,73,130" -"2021,""1091 Mauensee"",""Secteur primaire"",25,55,18,37,40,11,29" -"2021,""1091 Mauensee"",""Secteur secondaire"",10,74,19,55,62,11,51" -"2021,""1091 Mauensee"",""Secteur tertiaire"",46,155,92,63,101,51,50" -"2021,""1093 Neuenkirch"",""Secteur conomique - total"",558,2721,1239,1482,1986,732,1254" -"2021,""1093 Neuenkirch"",""Secteur primaire"",110,349,126,223,214,57,156" -"2021,""1093 Neuenkirch"",""Secteur secondaire"",95,773,215,558,655,137,518" -"2021,""1093 Neuenkirch"",""Secteur tertiaire"",353,1599,898,701,1117,538,579" -"2021,""1094 Nottwil"",""Secteur conomique - total"",256,2971,1871,1100,2051,1190,861" -"2021,""1094 Nottwil"",""Secteur primaire"",52,143,51,92,89,22,67" -"2021,""1094 Nottwil"",""Secteur secondaire"",35,242,59,183,207,37,171" -"2021,""1094 Nottwil"",""Secteur tertiaire"",169,2586,1761,825,1755,1131,623" -"2021,""1095 Oberkirch"",""Secteur conomique - total"",304,3394,1466,1928,2519,958,1561" -"2021,""1095 Oberkirch"",""Secteur primaire"",45,132,46,86,85,25,59" -"2021,""1095 Oberkirch"",""Secteur secondaire"",29,239,57,182,205,37,168" -"2021,""1095 Oberkirch"",""Secteur tertiaire"",230,3023,1363,1660,2229,896,1334" -"2021,""1097 Rickenbach (LU)"",""Secteur conomique - total"",238,1338,545,793,1024,326,698" -"2021,""1097 Rickenbach (LU)"",""Secteur primaire"",39,97,32,65,60,14,46" -"2021,""1097 Rickenbach (LU)"",""Secteur secondaire"",59,598,131,467,548,100,448" -"2021,""1097 Rickenbach (LU)"",""Secteur tertiaire"",140,643,382,261,415,212,203" -"2021,""1098 Ruswil"",""Secteur conomique - total"",598,3300,1327,1973,2409,736,1672" -"2021,""1098 Ruswil"",""Secteur primaire"",200,657,220,437,435,113,322" -"2021,""1098 Ruswil"",""Secteur secondaire"",90,992,172,820,875,111,764" -"2021,""1098 Ruswil"",""Secteur tertiaire"",308,1651,935,716,1099,512,587" -"2021,""1099 Schenkon"",""Secteur conomique - total"",271,1523,767,756,1141,485,656" -"2021,""1099 Schenkon"",""Secteur primaire"",32,90,31,59,53,13,41" -"2021,""1099 Schenkon"",""Secteur secondaire"",34,364,104,260,324,77,246" -"2021,""1099 Schenkon"",""Secteur tertiaire"",205,1069,632,437,764,395,369" -"2021,""1100 Schlierbach"",""Secteur conomique - total"",58,205,85,120,145,47,98" -"2021,""1100 Schlierbach"",""Secteur primaire"",25,68,X,X,48,X,X" -"2021,""1100 Schlierbach"",""Secteur secondaire"",10,44,X,X,39,X,X" -"2021,""1100 Schlierbach"",""Secteur tertiaire"",23,93,59,34,59,32,27" -"2021,""1102 Sempach"",""Secteur conomique - total"",324,2034,1021,1013,1525,638,887" -"2021,""1102 Sempach"",""Secteur primaire"",31,107,32,75,79,19,59" -"2021,""1102 Sempach"",""Secteur secondaire"",43,650,222,428,582,171,411" -"2021,""1102 Sempach"",""Secteur tertiaire"",250,1277,767,510,864,448,417" -"2021,""1103 Sursee"",""Secteur conomique - total"",1153,13836,6685,7151,10575,4320,6255" -"2021,""1103 Sursee"",""Secteur primaire"",4,17,X,X,10,X,X" -"2021,""1103 Sursee"",""Secteur secondaire"",155,2602,X,X,2345,X,X" -"2021,""1103 Sursee"",""Secteur tertiaire"",994,11217,6052,5165,8220,3860,4361" -"2021,""1104 Triengen"",""Secteur conomique - total"",328,2549,1202,1347,1929,766,1163" -"2021,""1104 Triengen"",""Secteur primaire"",82,280,110,170,167,51,116" -"2021,""1104 Triengen"",""Secteur secondaire"",64,1243,457,786,1095,343,753" -"2021,""1104 Triengen"",""Secteur tertiaire"",182,1026,635,391,666,372,294" -"2021,""1107 Wolhusen"",""Secteur conomique - total"",304,2446,1506,940,1684,889,796" -"2021,""1107 Wolhusen"",""Secteur primaire"",61,158,55,103,102,26,75" -"2021,""1107 Wolhusen"",""Secteur secondaire"",42,482,165,317,418,120,298" -"2021,""1107 Wolhusen"",""Secteur tertiaire"",201,1806,1286,520,1165,742,423" -"2021,""1121 Alberswil"",""Secteur conomique - total"",56,246,117,129,173,63,110" -"2021,""1121 Alberswil"",""Secteur primaire"",11,53,11,42,43,8,35" -"2021,""1121 Alberswil"",""Secteur secondaire"",9,39,9,30,33,6,27" -"2021,""1121 Alberswil"",""Secteur tertiaire"",36,154,97,57,97,49,48" -"2021,""1122 Altbron"",""Secteur conomique - total"",94,546,163,383,440,94,346" -"2021,""1122 Altbron"",""Secteur primaire"",30,93,28,65,67,16,51" -"2021,""1122 Altbron"",""Secteur secondaire"",22,315,52,263,287,35,252" -"2021,""1122 Altbron"",""Secteur tertiaire"",42,138,83,55,86,43,43" -"2021,""1123 Altishofen"",""Secteur conomique - total"",189,2906,699,2207,2504,474,2030" -"2021,""1123 Altishofen"",""Secteur primaire"",62,195,70,125,119,30,89" -"2021,""1123 Altishofen"",""Secteur secondaire"",32,261,40,221,233,25,208" -"2021,""1123 Altishofen"",""Secteur tertiaire"",95,2450,589,1861,2153,420,1733" -"2021,""1125 Dagmersellen"",""Secteur conomique - total"",395,3510,1423,2087,2785,928,1857" -"2021,""1125 Dagmersellen"",""Secteur primaire"",83,218,72,146,127,27,100" -"2021,""1125 Dagmersellen"",""Secteur secondaire"",93,1792,505,1287,1635,403,1232" -"2021,""1125 Dagmersellen"",""Secteur tertiaire"",219,1500,846,654,1023,498,526" -"2021,""1127 Egolzwil"",""Secteur conomique - total"",94,606,243,363,462,138,324" -"2021,""1127 Egolzwil"",""Secteur primaire"",13,39,X,X,26,X,X" -"2021,""1127 Egolzwil"",""Secteur secondaire"",17,180,X,X,156,X,X" -"2021,""1127 Egolzwil"",""Secteur tertiaire"",64,387,177,210,280,95,184" -"2021,""1128 Ettiswil"",""Secteur conomique - total"",205,967,408,559,675,212,463" -"2021,""1128 Ettiswil"",""Secteur primaire"",46,149,50,99,95,23,72" -"2021,""1128 Ettiswil"",""Secteur secondaire"",44,263,46,217,223,26,197" -"2021,""1128 Ettiswil"",""Secteur tertiaire"",115,555,312,243,357,163,194" -"2021,""1129 Fischbach"",""Secteur conomique - total"",63,193,69,124,134,36,98" -"2021,""1129 Fischbach"",""Secteur primaire"",37,105,35,70,68,17,50" -"2021,""1129 Fischbach"",""Secteur secondaire"",6,34,X,X,30,X,X" -"2021,""1129 Fischbach"",""Secteur tertiaire"",20,54,X,X,36,X,X" -"2021,""1131 Grossdietwil"",""Secteur conomique - total"",88,503,248,255,372,157,215" -"2021,""1131 Grossdietwil"",""Secteur primaire"",37,117,38,79,78,19,60" -"2021,""1131 Grossdietwil"",""Secteur secondaire"",17,187,88,99,158,65,93" -"2021,""1131 Grossdietwil"",""Secteur tertiaire"",34,199,122,77,136,74,62" -"2021,""1132 Hergiswil bei Willisau"",""Secteur conomique - total"",224,881,458,423,543,227,316" -"2021,""1132 Hergiswil bei Willisau"",""Secteur primaire"",137,331,120,211,208,63,145" -"2021,""1132 Hergiswil bei Willisau"",""Secteur secondaire"",31,163,38,125,133,23,110" -"2021,""1132 Hergiswil bei Willisau"",""Secteur tertiaire"",56,387,300,87,202,141,61" -"2021,""1135 Luthern"",""Secteur conomique - total"",167,683,323,360,432,165,267" -"2021,""1135 Luthern"",""Secteur primaire"",115,293,104,189,172,47,125" -"2021,""1135 Luthern"",""Secteur secondaire"",20,154,45,109,127,27,100" -"2021,""1135 Luthern"",""Secteur tertiaire"",32,236,174,62,133,91,42" -"2021,""1136 Menznau"",""Secteur conomique - total"",262,1591,526,1065,1259,317,942" -"2021,""1136 Menznau"",""Secteur primaire"",111,291,103,188,183,50,133" -"2021,""1136 Menznau"",""Secteur secondaire"",41,721,82,639,676,61,615" -"2021,""1136 Menznau"",""Secteur tertiaire"",110,579,341,238,400,205,194" -"2021,""1137 Nebikon"",""Secteur conomique - total"",156,1114,379,735,882,214,668" -"2021,""1137 Nebikon"",""Secteur primaire"",11,30,13,17,22,8,14" -"2021,""1137 Nebikon"",""Secteur secondaire"",27,450,59,391,408,35,373" -"2021,""1137 Nebikon"",""Secteur tertiaire"",118,634,307,327,452,172,281" -"2021,""1139 Pfaffnau"",""Secteur conomique - total"",211,1729,975,754,1355,709,646" -"2021,""1139 Pfaffnau"",""Secteur primaire"",62,161,52,109,103,25,78" -"2021,""1139 Pfaffnau"",""Secteur secondaire"",35,217,55,162,190,39,152" -"2021,""1139 Pfaffnau"",""Secteur tertiaire"",114,1351,868,483,1062,646,416" -"2021,""1140 Reiden"",""Secteur conomique - total"",525,4922,1861,3061,3901,1130,2772" -"2021,""1140 Reiden"",""Secteur primaire"",76,202,59,143,129,24,104" -"2021,""1140 Reiden"",""Secteur secondaire"",108,1625,278,1347,1472,194,1279" -"2021,""1140 Reiden"",""Secteur tertiaire"",341,3095,1524,1571,2300,912,1389" -"2021,""1142 Roggliswil"",""Secteur conomique - total"",74,298,106,192,201,52,149" -"2021,""1142 Roggliswil"",""Secteur primaire"",32,80,35,45,43,17,26" -"2021,""1142 Roggliswil"",""Secteur secondaire"",11,108,9,99,89,5,84" -"2021,""1142 Roggliswil"",""Secteur tertiaire"",31,110,62,48,69,30,39" -"2021,""1143 Schtz"",""Secteur conomique - total"",296,1895,786,1109,1458,478,980" -"2021,""1143 Schtz"",""Secteur primaire"",66,181,64,117,115,32,84" -"2021,""1143 Schtz"",""Secteur secondaire"",67,673,132,541,603,91,513" -"2021,""1143 Schtz"",""Secteur tertiaire"",163,1041,590,451,740,356,384" -"2021,""1145 Ufhusen"",""Secteur conomique - total"",116,319,140,179,206,70,137" -"2021,""1145 Ufhusen"",""Secteur primaire"",58,147,64,83,98,37,61" -"2021,""1145 Ufhusen"",""Secteur secondaire"",22,58,15,43,44,7,37" -"2021,""1145 Ufhusen"",""Secteur tertiaire"",36,114,61,53,64,26,38" -"2021,""1146 Wauwil"",""Secteur conomique - total"",147,790,265,525,616,146,470" -"2021,""1146 Wauwil"",""Secteur primaire"",18,236,19,217,216,9,208" -"2021,""1146 Wauwil"",""Secteur secondaire"",29,186,41,145,161,26,135" -"2021,""1146 Wauwil"",""Secteur tertiaire"",100,368,205,163,238,111,127" -"2021,""1147 Wikon"",""Secteur conomique - total"",84,786,209,577,666,133,532" -"2021,""1147 Wikon"",""Secteur primaire"",16,43,16,27,31,10,21" -"2021,""1147 Wikon"",""Secteur secondaire"",16,477,80,397,441,60,381" -"2021,""1147 Wikon"",""Secteur tertiaire"",52,266,113,153,194,63,131" -"2021,""1150 Zell (LU)"",""Secteur conomique - total"",213,1646,654,992,1304,419,884" -"2021,""1150 Zell (LU)"",""Secteur primaire"",60,153,50,103,95,25,70" -"2021,""1150 Zell (LU)"",""Secteur secondaire"",44,781,173,608,704,126,577" -"2021,""1150 Zell (LU)"",""Secteur tertiaire"",109,712,431,281,505,268,237" -"2021,""1151 Willisau"",""Secteur conomique - total"",807,5910,2956,2954,4268,1758,2511" -"2021,""1151 Willisau"",""Secteur primaire"",201,532,189,343,316,89,227" -"2021,""1151 Willisau"",""Secteur secondaire"",118,1407,302,1105,1257,206,1051" -"2021,""1151 Willisau"",""Secteur tertiaire"",488,3971,2465,1506,2696,1463,1233" -"2021,""1201 Altdorf (UR)"",""Secteur conomique - total"",787,6735,3314,3421,4959,2027,2932" -"2021,""1201 Altdorf (UR)"",""Secteur primaire"",35,95,34,61,60,15,44" -"2021,""1201 Altdorf (UR)"",""Secteur secondaire"",85,1689,371,1318,1527,276,1252" -"2021,""1201 Altdorf (UR)"",""Secteur tertiaire"",667,4951,2909,2042,3372,1736,1636" -"2021,""1202 Andermatt"",""Secteur conomique - total"",178,1637,659,978,1347,486,861" -"2021,""1202 Andermatt"",""Secteur primaire"",16,44,17,27,21,7,14" -"2021,""1202 Andermatt"",""Secteur secondaire"",17,217,64,153,187,51,136" -"2021,""1202 Andermatt"",""Secteur tertiaire"",145,1376,578,798,1140,429,711" -"2021,""1203 Attinghausen"",""Secteur conomique - total"",105,433,174,259,295,88,207" -"2021,""1203 Attinghausen"",""Secteur primaire"",33,100,32,68,59,14,44" -"2021,""1203 Attinghausen"",""Secteur secondaire"",18,124,22,102,104,12,92" -"2021,""1203 Attinghausen"",""Secteur tertiaire"",54,209,120,89,132,62,70" -"2021,""1205 Brglen (UR)"",""Secteur conomique - total"",283,1637,766,871,1143,437,705" -"2021,""1205 Brglen (UR)"",""Secteur primaire"",99,224,87,137,119,33,86" -"2021,""1205 Brglen (UR)"",""Secteur secondaire"",51,412,71,341,364,47,317" -"2021,""1205 Brglen (UR)"",""Secteur tertiaire"",133,1001,608,393,660,357,303" -"2021,""1206 Erstfeld"",""Secteur conomique - total"",214,1414,571,843,1086,334,752" -"2021,""1206 Erstfeld"",""Secteur primaire"",35,114,32,82,71,17,54" -"2021,""1206 Erstfeld"",""Secteur secondaire"",36,405,92,313,354,60,294" -"2021,""1206 Erstfeld"",""Secteur tertiaire"",143,895,447,448,662,257,405" -"2021,""1207 Flelen"",""Secteur conomique - total"",132,1015,375,640,762,214,548" -"2021,""1207 Flelen"",""Secteur primaire"",13,41,17,24,22,7,14" -"2021,""1207 Flelen"",""Secteur secondaire"",25,290,38,252,264,24,239" -"2021,""1207 Flelen"",""Secteur tertiaire"",94,684,320,364,477,182,295" -"2021,""1208 Gschenen"",""Secteur conomique - total"",48,212,65,147,165,39,126" -"2021,""1208 Gschenen"",""Secteur primaire"",9,25,10,15,11,4,7" -"2021,""1208 Gschenen"",""Secteur secondaire"",7,71,10,61,61,4,57" -"2021,""1208 Gschenen"",""Secteur tertiaire"",32,116,45,71,92,30,61" -"2021,""1209 Gurtnellen"",""Secteur conomique - total"",61,207,89,118,138,46,92" -"2021,""1209 Gurtnellen"",""Secteur primaire"",24,51,22,29,28,12,16" -"2021,""1209 Gurtnellen"",""Secteur secondaire"",10,68,10,58,60,5,54" -"2021,""1209 Gurtnellen"",""Secteur tertiaire"",27,88,57,31,51,29,21" -"2021,""1210 Hospental"",""Secteur conomique - total"",19,41,25,16,25,13,12" -"2021,""1210 Hospental"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""1210 Hospental"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""1210 Hospental"",""Secteur tertiaire"",12,26,X,X,16,X,X" -"2021,""1211 Isenthal"",""Secteur conomique - total"",72,190,79,111,104,34,69" -"2021,""1211 Isenthal"",""Secteur primaire"",43,113,45,68,58,17,40" -"2021,""1211 Isenthal"",""Secteur secondaire"",11,21,X,X,16,X,X" -"2021,""1211 Isenthal"",""Secteur tertiaire"",18,56,X,X,30,X,X" -"2021,""1212 Realp"",""Secteur conomique - total"",14,45,19,26,26,10,16" -"2021,""1212 Realp"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""1212 Realp"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""1212 Realp"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""1213 Schattdorf"",""Secteur conomique - total"",302,3329,1416,1913,2655,914,1741" -"2021,""1213 Schattdorf"",""Secteur primaire"",39,90,32,58,51,12,38" -"2021,""1213 Schattdorf"",""Secteur secondaire"",59,1410,328,1082,1306,258,1048" -"2021,""1213 Schattdorf"",""Secteur tertiaire"",204,1829,1056,773,1298,644,655" -"2021,""1214 Seedorf (UR)"",""Secteur conomique - total"",122,806,336,470,577,167,410" -"2021,""1214 Seedorf (UR)"",""Secteur primaire"",13,36,10,26,21,4,17" -"2021,""1214 Seedorf (UR)"",""Secteur secondaire"",28,375,62,313,333,38,294" -"2021,""1214 Seedorf (UR)"",""Secteur tertiaire"",81,395,264,131,223,125,98" -"2021,""1215 Seelisberg"",""Secteur conomique - total"",72,249,117,132,160,60,100" -"2021,""1215 Seelisberg"",""Secteur primaire"",27,66,22,44,40,11,29" -"2021,""1215 Seelisberg"",""Secteur secondaire"",13,39,13,26,31,7,24" -"2021,""1215 Seelisberg"",""Secteur tertiaire"",32,144,82,62,89,41,48" -"2021,""1216 Silenen"",""Secteur conomique - total"",133,421,177,244,275,89,185" -"2021,""1216 Silenen"",""Secteur primaire"",46,114,44,70,63,19,44" -"2021,""1216 Silenen"",""Secteur secondaire"",18,97,17,80,85,11,74" -"2021,""1216 Silenen"",""Secteur tertiaire"",69,210,116,94,128,60,67" -"2021,""1217 Sisikon"",""Secteur conomique - total"",32,76,37,39,44,19,25" -"2021,""1217 Sisikon"",""Secteur primaire"",9,25,X,X,14,X,X" -"2021,""1217 Sisikon"",""Secteur secondaire"",4,7,X,X,5,X,X" -"2021,""1217 Sisikon"",""Secteur tertiaire"",19,44,25,19,25,13,12" -"2021,""1218 Spiringen"",""Secteur conomique - total"",115,321,142,179,179,62,117" -"2021,""1218 Spiringen"",""Secteur primaire"",60,146,59,87,81,28,53" -"2021,""1218 Spiringen"",""Secteur secondaire"",11,52,12,40,41,6,35" -"2021,""1218 Spiringen"",""Secteur tertiaire"",44,123,71,52,57,28,28" -"2021,""1219 Unterschchen"",""Secteur conomique - total"",64,195,101,94,96,39,57" -"2021,""1219 Unterschchen"",""Secteur primaire"",37,97,X,X,46,X,X" -"2021,""1219 Unterschchen"",""Secteur secondaire"",8,12,X,X,7,X,X" -"2021,""1219 Unterschchen"",""Secteur tertiaire"",19,86,58,28,43,22,21" -"2021,""1220 Wassen"",""Secteur conomique - total"",43,269,108,161,198,61,137" -"2021,""1220 Wassen"",""Secteur primaire"",X,34,X,X,24,X,X" -"2021,""1220 Wassen"",""Secteur secondaire"",X,52,X,X,50,X,X" -"2021,""1220 Wassen"",""Secteur tertiaire"",29,183,94,89,124,53,71" -"2021,""1301 Einsiedeln"",""Secteur conomique - total"",1363,7152,3676,3476,5171,2248,2923" -"2021,""1301 Einsiedeln"",""Secteur primaire"",191,470,164,306,285,72,213" -"2021,""1301 Einsiedeln"",""Secteur secondaire"",253,2096,671,1425,1761,452,1308" -"2021,""1301 Einsiedeln"",""Secteur tertiaire"",919,4586,2841,1745,3125,1723,1402" -"2021,""1311 Gersau"",""Secteur conomique - total"",204,633,319,314,396,167,229" -"2021,""1311 Gersau"",""Secteur primaire"",39,111,38,73,60,17,43" -"2021,""1311 Gersau"",""Secteur secondaire"",28,100,28,72,82,16,66" -"2021,""1311 Gersau"",""Secteur tertiaire"",137,422,253,169,254,134,121" -"2021,""1321 Feusisberg"",""Secteur conomique - total"",993,4119,1767,2352,3124,1090,2034" -"2021,""1321 Feusisberg"",""Secteur primaire"",57,152,50,102,87,25,62" -"2021,""1321 Feusisberg"",""Secteur secondaire"",148,900,220,680,768,131,636" -"2021,""1321 Feusisberg"",""Secteur tertiaire"",788,3067,1497,1570,2269,934,1336" -"2021,""1322 Freienbach"",""Secteur conomique - total"",2683,16189,6408,9781,12729,4220,8509" -"2021,""1322 Freienbach"",""Secteur primaire"",42,145,41,104,106,24,82" -"2021,""1322 Freienbach"",""Secteur secondaire"",301,2768,499,2269,2505,364,2141" -"2021,""1322 Freienbach"",""Secteur tertiaire"",2340,13276,5868,7408,10118,3832,6285" -"2021,""1323 Wollerau"",""Secteur conomique - total"",1199,4830,2029,2801,3770,1365,2405" -"2021,""1323 Wollerau"",""Secteur primaire"",21,67,24,43,35,11,24" -"2021,""1323 Wollerau"",""Secteur secondaire"",119,739,226,513,643,162,480" -"2021,""1323 Wollerau"",""Secteur tertiaire"",1059,4024,1779,2245,3092,1191,1901" -"2021,""1331 Kssnacht (SZ)"",""Secteur conomique - total"",1202,7144,2935,4209,5652,1874,3778" -"2021,""1331 Kssnacht (SZ)"",""Secteur primaire"",103,286,103,183,168,44,124" -"2021,""1331 Kssnacht (SZ)"",""Secteur secondaire"",186,2609,505,2104,2383,374,2008" -"2021,""1331 Kssnacht (SZ)"",""Secteur tertiaire"",913,4249,2327,1922,3102,1456,1646" -"2021,""1341 Altendorf"",""Secteur conomique - total"",808,3946,1759,2187,2884,1023,1861" -"2021,""1341 Altendorf"",""Secteur primaire"",77,204,62,142,128,28,100" -"2021,""1341 Altendorf"",""Secteur secondaire"",146,965,250,715,843,167,676" -"2021,""1341 Altendorf"",""Secteur tertiaire"",585,2777,1447,1330,1912,828,1085" -"2021,""1342 Galgenen"",""Secteur conomique - total"",376,1361,595,766,1009,362,647" -"2021,""1342 Galgenen"",""Secteur primaire"",60,150,59,91,90,30,60" -"2021,""1342 Galgenen"",""Secteur secondaire"",71,276,45,231,236,24,211" -"2021,""1342 Galgenen"",""Secteur tertiaire"",245,935,491,444,683,307,376" -"2021,""1343 Innerthal"",""Secteur conomique - total"",17,50,23,27,32,11,22" -"2021,""1343 Innerthal"",""Secteur primaire"",6,13,X,X,9,X,X" -"2021,""1343 Innerthal"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""1343 Innerthal"",""Secteur tertiaire"",11,37,X,X,24,X,X" -"2021,""1344 Lachen"",""Secteur conomique - total"",872,5594,2895,2699,4321,1923,2398" -"2021,""1344 Lachen"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""1344 Lachen"",""Secteur secondaire"",X,1498,X,X,X,X,X" -"2021,""1344 Lachen"",""Secteur tertiaire"",760,4091,2443,1648,2938,1544,1394" -"2021,""1345 Reichenburg"",""Secteur conomique - total"",284,1349,485,864,1095,319,776" -"2021,""1345 Reichenburg"",""Secteur primaire"",31,110,50,60,83,35,48" -"2021,""1345 Reichenburg"",""Secteur secondaire"",70,633,101,532,579,75,504" -"2021,""1345 Reichenburg"",""Secteur tertiaire"",183,606,334,272,433,209,224" -"2021,""1346 Schbelbach"",""Secteur conomique - total"",659,2923,1409,1514,2197,892,1306" -"2021,""1346 Schbelbach"",""Secteur primaire"",66,172,61,111,116,36,80" -"2021,""1346 Schbelbach"",""Secteur secondaire"",154,929,235,694,826,172,654" -"2021,""1346 Schbelbach"",""Secteur tertiaire"",439,1822,1113,709,1255,684,571" -"2021,""1347 Tuggen"",""Secteur conomique - total"",270,1516,500,1016,1232,318,914" -"2021,""1347 Tuggen"",""Secteur primaire"",43,118,43,75,85,28,57" -"2021,""1347 Tuggen"",""Secteur secondaire"",50,487,94,393,444,68,376" -"2021,""1347 Tuggen"",""Secteur tertiaire"",177,911,363,548,703,222,481" -"2021,""1348 Vorderthal"",""Secteur conomique - total"",99,272,110,162,179,54,125" -"2021,""1348 Vorderthal"",""Secteur primaire"",44,106,41,65,67,21,46" -"2021,""1348 Vorderthal"",""Secteur secondaire"",23,79,9,70,69,5,64" -"2021,""1348 Vorderthal"",""Secteur tertiaire"",32,87,60,27,43,29,14" -"2021,""1349 Wangen (SZ)"",""Secteur conomique - total"",468,2031,827,1204,1549,488,1062" -"2021,""1349 Wangen (SZ)"",""Secteur primaire"",44,106,37,69,69,21,49" -"2021,""1349 Wangen (SZ)"",""Secteur secondaire"",105,667,146,521,581,95,486" -"2021,""1349 Wangen (SZ)"",""Secteur tertiaire"",319,1258,644,614,899,372,527" -"2021,""1361 Alpthal"",""Secteur conomique - total"",68,189,76,113,121,38,83" -"2021,""1361 Alpthal"",""Secteur primaire"",20,44,X,X,25,X,X" -"2021,""1361 Alpthal"",""Secteur secondaire"",12,29,X,X,23,X,X" -"2021,""1361 Alpthal"",""Secteur tertiaire"",36,116,56,60,73,30,43" -"2021,""1362 Arth"",""Secteur conomique - total"",816,4187,1872,2315,3084,1099,1985" -"2021,""1362 Arth"",""Secteur primaire"",107,310,119,191,186,54,132" -"2021,""1362 Arth"",""Secteur secondaire"",148,1242,273,969,1097,178,919" -"2021,""1362 Arth"",""Secteur tertiaire"",561,2635,1480,1155,1801,868,934" -"2021,""1363 Illgau"",""Secteur conomique - total"",55,189,91,98,122,42,80" -"2021,""1363 Illgau"",""Secteur primaire"",21,60,X,X,35,X,X" -"2021,""1363 Illgau"",""Secteur secondaire"",8,39,X,X,35,X,X" -"2021,""1363 Illgau"",""Secteur tertiaire"",26,90,61,29,52,28,23" -"2021,""1364 Ingenbohl"",""Secteur conomique - total"",647,3565,1883,1682,2588,1157,1431" -"2021,""1364 Ingenbohl"",""Secteur primaire"",29,73,28,45,42,12,30" -"2021,""1364 Ingenbohl"",""Secteur secondaire"",90,707,129,578,627,87,540" -"2021,""1364 Ingenbohl"",""Secteur tertiaire"",528,2785,1726,1059,1919,1058,861" -"2021,""1365 Lauerz"",""Secteur conomique - total"",84,256,130,126,172,74,99" -"2021,""1365 Lauerz"",""Secteur primaire"",26,58,20,38,35,9,26" -"2021,""1365 Lauerz"",""Secteur secondaire"",11,63,17,46,52,10,42" -"2021,""1365 Lauerz"",""Secteur tertiaire"",47,135,93,42,85,54,30" -"2021,""1366 Morschach"",""Secteur conomique - total"",137,915,503,412,656,337,319" -"2021,""1366 Morschach"",""Secteur primaire"",36,81,25,56,52,11,40" -"2021,""1366 Morschach"",""Secteur secondaire"",20,38,9,29,24,5,19" -"2021,""1366 Morschach"",""Secteur tertiaire"",81,796,469,327,580,320,260" -"2021,""1367 Muotathal"",""Secteur conomique - total"",292,1540,635,905,1089,345,744" -"2021,""1367 Muotathal"",""Secteur primaire"",99,263,99,164,150,41,109" -"2021,""1367 Muotathal"",""Secteur secondaire"",59,655,127,528,564,81,483" -"2021,""1367 Muotathal"",""Secteur tertiaire"",134,622,409,213,375,223,152" -"2021,""1368 Oberiberg"",""Secteur conomique - total"",119,407,182,225,262,98,165" -"2021,""1368 Oberiberg"",""Secteur primaire"",29,82,X,X,45,X,X" -"2021,""1368 Oberiberg"",""Secteur secondaire"",14,46,X,X,35,X,X" -"2021,""1368 Oberiberg"",""Secteur tertiaire"",76,279,142,137,182,79,103" -"2021,""1369 Riemenstalden"",""Secteur conomique - total"",13,45,22,23,24,9,15" -"2021,""1369 Riemenstalden"",""Secteur primaire"",8,22,X,X,13,X,X" -"2021,""1369 Riemenstalden"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""1369 Riemenstalden"",""Secteur tertiaire"",5,23,X,X,12,X,X" -"2021,""1370 Rothenthurm"",""Secteur conomique - total"",229,856,338,518,630,199,431" -"2021,""1370 Rothenthurm"",""Secteur primaire"",47,119,39,80,78,20,58" -"2021,""1370 Rothenthurm"",""Secteur secondaire"",46,302,87,215,256,55,200" -"2021,""1370 Rothenthurm"",""Secteur tertiaire"",136,435,212,223,297,124,173" -"2021,""1371 Sattel"",""Secteur conomique - total"",189,637,287,350,402,141,261" -"2021,""1371 Sattel"",""Secteur primaire"",52,166,66,100,101,33,69" -"2021,""1371 Sattel"",""Secteur secondaire"",28,83,12,71,70,6,64" -"2021,""1371 Sattel"",""Secteur tertiaire"",109,388,209,179,230,102,128" -"2021,""1372 Schwyz"",""Secteur conomique - total"",1424,12964,6320,6644,9859,4036,5822" -"2021,""1372 Schwyz"",""Secteur primaire"",148,431,158,273,260,71,188" -"2021,""1372 Schwyz"",""Secteur secondaire"",189,3208,973,2235,2861,737,2124" -"2021,""1372 Schwyz"",""Secteur tertiaire"",1087,9325,5189,4136,6738,3228,3510" -"2021,""1373 Steinen"",""Secteur conomique - total"",274,1384,618,766,971,358,613" -"2021,""1373 Steinen"",""Secteur primaire"",56,162,62,100,90,26,64" -"2021,""1373 Steinen"",""Secteur secondaire"",54,441,130,311,378,88,291" -"2021,""1373 Steinen"",""Secteur tertiaire"",164,781,426,355,503,245,258" -"2021,""1374 Steinerberg"",""Secteur conomique - total"",86,336,182,154,202,92,110" -"2021,""1374 Steinerberg"",""Secteur primaire"",35,99,X,X,58,X,X" -"2021,""1374 Steinerberg"",""Secteur secondaire"",15,44,X,X,36,X,X" -"2021,""1374 Steinerberg"",""Secteur tertiaire"",36,193,139,54,108,74,35" -"2021,""1375 Unteriberg"",""Secteur conomique - total"",245,885,390,495,618,209,410" -"2021,""1375 Unteriberg"",""Secteur primaire"",52,151,66,85,88,30,58" -"2021,""1375 Unteriberg"",""Secteur secondaire"",58,252,42,210,224,26,198" -"2021,""1375 Unteriberg"",""Secteur tertiaire"",135,482,282,200,307,152,154" -"2021,""1401 Alpnach"",""Secteur conomique - total"",502,3165,1082,2083,2502,639,1863" -"2021,""1401 Alpnach"",""Secteur primaire"",71,187,54,133,124,26,98" -"2021,""1401 Alpnach"",""Secteur secondaire"",83,1094,193,901,989,135,853" -"2021,""1401 Alpnach"",""Secteur tertiaire"",348,1884,835,1049,1390,478,912" -"2021,""1402 Engelberg"",""Secteur conomique - total"",508,2600,1248,1352,1895,789,1107" -"2021,""1402 Engelberg"",""Secteur primaire"",57,154,56,98,93,27,66" -"2021,""1402 Engelberg"",""Secteur secondaire"",53,254,62,192,215,39,176" -"2021,""1402 Engelberg"",""Secteur tertiaire"",398,2192,1130,1062,1587,723,864" -"2021,""1403 Giswil"",""Secteur conomique - total"",337,1358,572,786,975,319,655" -"2021,""1403 Giswil"",""Secteur primaire"",98,292,94,198,187,46,140" -"2021,""1403 Giswil"",""Secteur secondaire"",63,386,87,299,337,60,277" -"2021,""1403 Giswil"",""Secteur tertiaire"",176,680,391,289,451,213,238" -"2021,""1404 Kerns"",""Secteur conomique - total"",494,2462,1102,1360,1781,633,1148" -"2021,""1404 Kerns"",""Secteur primaire"",140,361,138,223,220,62,158" -"2021,""1404 Kerns"",""Secteur secondaire"",86,750,191,559,642,121,521" -"2021,""1404 Kerns"",""Secteur tertiaire"",268,1351,773,578,918,450,468" -"2021,""1405 Lungern"",""Secteur conomique - total"",179,1169,381,788,922,213,709" -"2021,""1405 Lungern"",""Secteur primaire"",52,136,44,92,83,21,62" -"2021,""1405 Lungern"",""Secteur secondaire"",35,644,95,549,588,58,529" -"2021,""1405 Lungern"",""Secteur tertiaire"",92,389,242,147,252,134,117" -"2021,""1406 Sachseln"",""Secteur conomique - total"",399,3338,1637,1701,2681,1140,1541" -"2021,""1406 Sachseln"",""Secteur primaire"",69,196,64,132,132,32,101" -"2021,""1406 Sachseln"",""Secteur secondaire"",59,1801,818,983,1620,667,953" -"2021,""1406 Sachseln"",""Secteur tertiaire"",271,1341,755,586,929,441,488" -"2021,""1407 Sarnen"",""Secteur conomique - total"",1304,8705,4262,4443,6601,2743,3858" -"2021,""1407 Sarnen"",""Secteur primaire"",143,361,129,232,219,59,160" -"2021,""1407 Sarnen"",""Secteur secondaire"",154,2062,574,1488,1820,413,1407" -"2021,""1407 Sarnen"",""Secteur tertiaire"",1007,6282,3559,2723,4562,2270,2291" -"2021,""1501 Beckenried"",""Secteur conomique - total"",286,1183,597,586,794,322,472" -"2021,""1501 Beckenried"",""Secteur primaire"",45,132,45,87,75,20,55" -"2021,""1501 Beckenried"",""Secteur secondaire"",52,251,57,194,211,33,178" -"2021,""1501 Beckenried"",""Secteur tertiaire"",189,800,495,305,508,269,239" -"2021,""1502 Buochs"",""Secteur conomique - total"",400,1924,873,1051,1401,509,892" -"2021,""1502 Buochs"",""Secteur primaire"",40,114,39,75,73,19,54" -"2021,""1502 Buochs"",""Secteur secondaire"",76,485,107,378,413,63,350" -"2021,""1502 Buochs"",""Secteur tertiaire"",284,1325,727,598,916,427,488" -"2021,""1503 Dallenwil"",""Secteur conomique - total"",166,867,339,528,617,172,445" -"2021,""1503 Dallenwil"",""Secteur primaire"",40,123,42,81,79,20,59" -"2021,""1503 Dallenwil"",""Secteur secondaire"",24,282,42,240,250,25,225" -"2021,""1503 Dallenwil"",""Secteur tertiaire"",102,462,255,207,288,127,160" -"2021,""1504 Emmetten"",""Secteur conomique - total"",146,401,172,229,262,93,168" -"2021,""1504 Emmetten"",""Secteur primaire"",22,45,12,33,27,6,20" -"2021,""1504 Emmetten"",""Secteur secondaire"",26,77,14,63,64,8,56" -"2021,""1504 Emmetten"",""Secteur tertiaire"",98,279,146,133,171,79,92" -"2021,""1505 Ennetbrgen"",""Secteur conomique - total"",325,2117,993,1124,1599,636,963" -"2021,""1505 Ennetbrgen"",""Secteur primaire"",33,90,36,54,51,16,34" -"2021,""1505 Ennetbrgen"",""Secteur secondaire"",41,383,82,301,339,54,285" -"2021,""1505 Ennetbrgen"",""Secteur tertiaire"",251,1644,875,769,1209,565,643" -"2021,""1506 Ennetmoos"",""Secteur conomique - total"",161,756,223,533,597,131,466" -"2021,""1506 Ennetmoos"",""Secteur primaire"",54,147,50,97,98,27,71" -"2021,""1506 Ennetmoos"",""Secteur secondaire"",31,298,37,261,262,23,239" -"2021,""1506 Ennetmoos"",""Secteur tertiaire"",76,311,136,175,237,82,155" -"2021,""1507 Hergiswil (NW)"",""Secteur conomique - total"",771,3129,1286,1843,2347,803,1544" -"2021,""1507 Hergiswil (NW)"",""Secteur primaire"",20,50,17,33,29,8,22" -"2021,""1507 Hergiswil (NW)"",""Secteur secondaire"",77,431,82,349,385,56,330" -"2021,""1507 Hergiswil (NW)"",""Secteur tertiaire"",674,2648,1187,1461,1932,740,1192" -"2021,""1508 Oberdorf (NW)"",""Secteur conomique - total"",209,1327,444,883,1047,265,781" -"2021,""1508 Oberdorf (NW)"",""Secteur primaire"",57,170,72,98,109,36,74" -"2021,""1508 Oberdorf (NW)"",""Secteur secondaire"",37,618,97,521,553,65,489" -"2021,""1508 Oberdorf (NW)"",""Secteur tertiaire"",115,539,275,264,384,165,219" -"2021,""1509 Stans"",""Secteur conomique - total"",1045,10042,4669,5373,7811,2967,4844" -"2021,""1509 Stans"",""Secteur primaire"",27,83,22,61,63,12,51" -"2021,""1509 Stans"",""Secteur secondaire"",129,3342,589,2753,3111,443,2668" -"2021,""1509 Stans"",""Secteur tertiaire"",889,6617,4058,2559,4637,2512,2125" -"2021,""1510 Stansstad"",""Secteur conomique - total"",430,1760,740,1020,1324,444,880" -"2021,""1510 Stansstad"",""Secteur primaire"",22,57,17,40,40,8,32" -"2021,""1510 Stansstad"",""Secteur secondaire"",43,387,95,292,337,65,272" -"2021,""1510 Stansstad"",""Secteur tertiaire"",365,1316,628,688,946,371,575" -"2021,""1511 Wolfenschiessen"",""Secteur conomique - total"",207,810,321,489,582,174,408" -"2021,""1511 Wolfenschiessen"",""Secteur primaire"",74,193,75,118,107,31,76" -"2021,""1511 Wolfenschiessen"",""Secteur secondaire"",31,181,36,145,159,23,136" -"2021,""1511 Wolfenschiessen"",""Secteur tertiaire"",102,436,210,226,316,120,196" -"2021,""1630 Glarus Nord"",""Secteur conomique - total"",1413,8820,3438,5382,6972,2138,4834" -"2021,""1630 Glarus Nord"",""Secteur primaire"",147,399,144,255,261,84,177" -"2021,""1630 Glarus Nord"",""Secteur secondaire"",299,3282,620,2662,2994,426,2568" -"2021,""1630 Glarus Nord"",""Secteur tertiaire"",967,5139,2674,2465,3717,1628,2089" -"2021,""1631 Glarus Sd"",""Secteur conomique - total"",803,4740,2057,2683,3549,1253,2296" -"2021,""1631 Glarus Sd"",""Secteur primaire"",158,446,179,267,292,95,197" -"2021,""1631 Glarus Sd"",""Secteur secondaire"",165,2001,555,1446,1722,382,1339" -"2021,""1631 Glarus Sd"",""Secteur tertiaire"",480,2293,1323,970,1535,775,760" -"2021,""1632 Glarus"",""Secteur conomique - total"",1164,9012,4715,4297,6822,3076,3746" -"2021,""1632 Glarus"",""Secteur primaire"",49,143,51,92,95,28,66" -"2021,""1632 Glarus"",""Secteur secondaire"",181,2603,824,1779,2288,604,1684" -"2021,""1632 Glarus"",""Secteur tertiaire"",934,6266,3840,2426,4439,2443,1996" -"2021,""1701 Baar"",""Secteur conomique - total"",3947,26448,11148,15300,21131,7640,13491" -"2021,""1701 Baar"",""Secteur primaire"",71,216,77,139,143,38,105" -"2021,""1701 Baar"",""Secteur secondaire"",457,4293,1033,3260,3844,766,3078" -"2021,""1701 Baar"",""Secteur tertiaire"",3419,21939,10038,11901,17143,6836,10307" -"2021,""1702 Cham"",""Secteur conomique - total"",2067,12292,5216,7076,9762,3481,6281" -"2021,""1702 Cham"",""Secteur primaire"",63,182,55,127,119,28,91" -"2021,""1702 Cham"",""Secteur secondaire"",217,1876,431,1445,1676,309,1366" -"2021,""1702 Cham"",""Secteur tertiaire"",1787,10234,4730,5504,7967,3144,4823" -"2021,""1703 Hnenberg"",""Secteur conomique - total"",1201,6862,2723,4139,5236,1711,3525" -"2021,""1703 Hnenberg"",""Secteur primaire"",56,262,98,164,184,53,131" -"2021,""1703 Hnenberg"",""Secteur secondaire"",163,1256,254,1002,1120,185,936" -"2021,""1703 Hnenberg"",""Secteur tertiaire"",982,5344,2371,2973,3931,1473,2458" -"2021,""1704 Menzingen"",""Secteur conomique - total"",401,1768,888,880,1196,511,684" -"2021,""1704 Menzingen"",""Secteur primaire"",96,246,87,159,154,41,113" -"2021,""1704 Menzingen"",""Secteur secondaire"",51,193,44,149,160,26,134" -"2021,""1704 Menzingen"",""Secteur tertiaire"",254,1329,757,572,882,445,437" -"2021,""1705 Neuheim"",""Secteur conomique - total"",258,984,325,659,748,192,556" -"2021,""1705 Neuheim"",""Secteur primaire"",26,63,22,41,42,10,32" -"2021,""1705 Neuheim"",""Secteur secondaire"",43,382,72,310,344,52,292" -"2021,""1705 Neuheim"",""Secteur tertiaire"",189,539,231,308,361,129,232" -"2021,""1706 Obergeri"",""Secteur conomique - total"",543,1737,866,871,1230,508,722" -"2021,""1706 Obergeri"",""Secteur primaire"",76,200,64,136,130,32,98" -"2021,""1706 Obergeri"",""Secteur secondaire"",56,302,63,239,259,36,222" -"2021,""1706 Obergeri"",""Secteur tertiaire"",411,1235,739,496,841,440,401" -"2021,""1707 Risch"",""Secteur conomique - total"",1253,13831,5627,8204,11514,4058,7456" -"2021,""1707 Risch"",""Secteur primaire"",42,140,51,89,91,26,64" -"2021,""1707 Risch"",""Secteur secondaire"",131,4369,1387,2982,4131,1231,2900" -"2021,""1707 Risch"",""Secteur tertiaire"",1080,9322,4189,5133,7292,2801,4492" -"2021,""1708 Steinhausen"",""Secteur conomique - total"",1198,9103,4245,4858,6990,2703,4287" -"2021,""1708 Steinhausen"",""Secteur primaire"",22,53,15,38,31,6,25" -"2021,""1708 Steinhausen"",""Secteur secondaire"",147,1569,420,1149,1423,321,1103" -"2021,""1708 Steinhausen"",""Secteur tertiaire"",1029,7481,3810,3671,5536,2376,3160" -"2021,""1709 Untergeri"",""Secteur conomique - total"",698,3349,1863,1486,2420,1172,1248" -"2021,""1709 Untergeri"",""Secteur primaire"",48,138,54,84,88,29,59" -"2021,""1709 Untergeri"",""Secteur secondaire"",98,717,213,504,615,148,468" -"2021,""1709 Untergeri"",""Secteur tertiaire"",552,2494,1596,898,1716,995,722" -"2021,""1710 Walchwil"",""Secteur conomique - total"",324,1104,479,625,803,281,522" -"2021,""1710 Walchwil"",""Secteur primaire"",40,121,45,76,68,20,48" -"2021,""1710 Walchwil"",""Secteur secondaire"",28,244,41,203,217,25,193" -"2021,""1710 Walchwil"",""Secteur tertiaire"",256,739,393,346,518,236,282" -"2021,""1711 Zug"",""Secteur conomique - total"",7552,44797,18671,26126,35633,12986,22647" -"2021,""1711 Zug"",""Secteur primaire"",37,136,42,94,95,25,70" -"2021,""1711 Zug"",""Secteur secondaire"",407,5957,1495,4462,5485,1203,4282" -"2021,""1711 Zug"",""Secteur tertiaire"",7108,38704,17134,21570,30053,11758,18295" -"2021,""2008 Chtillon (FR)"",""Secteur conomique - total"",19,48,26,22,28,15,13" -"2021,""2008 Chtillon (FR)"",""Secteur primaire"",X,5,X,X,4,X,X" -"2021,""2008 Chtillon (FR)"",""Secteur secondaire"",X,16,X,X,11,X,X" -"2021,""2008 Chtillon (FR)"",""Secteur tertiaire"",13,27,X,X,13,X,X" -"2021,""2011 Cugy (FR)"",""Secteur conomique - total"",104,417,186,231,300,115,185" -"2021,""2011 Cugy (FR)"",""Secteur primaire"",22,91,23,68,51,10,41" -"2021,""2011 Cugy (FR)"",""Secteur secondaire"",19,129,41,88,114,31,83" -"2021,""2011 Cugy (FR)"",""Secteur tertiaire"",63,197,122,75,135,74,61" -"2021,""2016 Ftigny"",""Secteur conomique - total"",47,298,119,179,234,79,155" -"2021,""2016 Ftigny"",""Secteur primaire"",5,19,X,X,11,X,X" -"2021,""2016 Ftigny"",""Secteur secondaire"",6,14,X,X,13,X,X" -"2021,""2016 Ftigny"",""Secteur tertiaire"",36,265,113,152,210,77,133" -"2021,""2022 Gletterens"",""Secteur conomique - total"",72,285,141,144,211,88,123" -"2021,""2022 Gletterens"",""Secteur primaire"",6,15,X,X,10,X,X" -"2021,""2022 Gletterens"",""Secteur secondaire"",15,79,X,X,69,X,X" -"2021,""2022 Gletterens"",""Secteur tertiaire"",51,191,125,66,132,80,52" -"2021,""2025 Lully (FR)"",""Secteur conomique - total"",75,377,203,174,248,116,131" -"2021,""2025 Lully (FR)"",""Secteur primaire"",13,42,X,X,25,X,X" -"2021,""2025 Lully (FR)"",""Secteur secondaire"",7,39,X,X,35,X,X" -"2021,""2025 Lully (FR)"",""Secteur tertiaire"",55,296,189,107,188,109,79" -"2021,""2027 Mnires"",""Secteur conomique - total"",29,140,45,95,93,27,67" -"2021,""2027 Mnires"",""Secteur primaire"",8,54,X,X,25,X,X" -"2021,""2027 Mnires"",""Secteur secondaire"",5,18,X,X,17,X,X" -"2021,""2027 Mnires"",""Secteur tertiaire"",16,68,32,36,52,20,32" -"2021,""2029 Montagny (FR)"",""Secteur conomique - total"",167,586,295,291,428,184,244" -"2021,""2029 Montagny (FR)"",""Secteur primaire"",35,96,29,67,66,16,50" -"2021,""2029 Montagny (FR)"",""Secteur secondaire"",33,132,28,104,113,17,97" -"2021,""2029 Montagny (FR)"",""Secteur tertiaire"",99,358,238,120,249,151,97" -"2021,""2035 Nuvilly"",""Secteur conomique - total"",55,183,103,80,111,44,67" -"2021,""2035 Nuvilly"",""Secteur primaire"",11,32,X,X,25,X,X" -"2021,""2035 Nuvilly"",""Secteur secondaire"",9,31,X,X,28,X,X" -"2021,""2035 Nuvilly"",""Secteur tertiaire"",35,120,92,28,58,38,19" -"2021,""2038 Prvondavaux"",""Secteur conomique - total"",8,19,X,X,13,X,X" -"2021,""2038 Prvondavaux"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2038 Prvondavaux"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2038 Prvondavaux"",""Secteur tertiaire"",X,8,X,X,6,X,X" -"2021,""2041 Saint-Aubin (FR)"",""Secteur conomique - total"",132,477,222,255,323,114,209" -"2021,""2041 Saint-Aubin (FR)"",""Secteur primaire"",22,65,17,48,43,9,34" -"2021,""2041 Saint-Aubin (FR)"",""Secteur secondaire"",28,110,23,87,95,13,82" -"2021,""2041 Saint-Aubin (FR)"",""Secteur tertiaire"",82,302,182,120,184,92,93" -"2021,""2043 Svaz"",""Secteur conomique - total"",39,487,151,336,416,110,306" -"2021,""2043 Svaz"",""Secteur primaire"",6,12,X,X,9,X,X" -"2021,""2043 Svaz"",""Secteur secondaire"",8,73,X,X,64,X,X" -"2021,""2043 Svaz"",""Secteur tertiaire"",25,402,138,264,344,102,242" -"2021,""2044 Surpierre"",""Secteur conomique - total"",70,217,69,148,152,35,117" -"2021,""2044 Surpierre"",""Secteur primaire"",26,82,26,56,52,10,41" -"2021,""2044 Surpierre"",""Secteur secondaire"",15,70,10,60,63,8,55" -"2021,""2044 Surpierre"",""Secteur tertiaire"",29,65,33,32,37,17,21" -"2021,""2045 Vallon"",""Secteur conomique - total"",26,61,29,32,40,15,25" -"2021,""2045 Vallon"",""Secteur primaire"",X,21,8,13,14,4,10" -"2021,""2045 Vallon"",""Secteur secondaire"",X,5,0,5,5,0,5" -"2021,""2045 Vallon"",""Secteur tertiaire"",15,35,21,14,21,11,10" -"2021,""2050 Les Montets"",""Secteur conomique - total"",95,336,107,229,262,60,202" -"2021,""2050 Les Montets"",""Secteur primaire"",22,57,13,44,41,8,33" -"2021,""2050 Les Montets"",""Secteur secondaire"",23,123,32,91,106,19,87" -"2021,""2050 Les Montets"",""Secteur tertiaire"",50,156,62,94,115,34,81" -"2021,""2051 Delley-Portalban"",""Secteur conomique - total"",69,207,87,120,135,44,91" -"2021,""2051 Delley-Portalban"",""Secteur primaire"",11,71,X,X,35,X,X" -"2021,""2051 Delley-Portalban"",""Secteur secondaire"",9,20,X,X,17,X,X" -"2021,""2051 Delley-Portalban"",""Secteur tertiaire"",49,116,58,58,84,35,49" -"2021,""2053 Belmont-Broye"",""Secteur conomique - total"",367,2629,935,1694,2185,644,1541" -"2021,""2053 Belmont-Broye"",""Secteur primaire"",55,146,32,114,104,14,90" -"2021,""2053 Belmont-Broye"",""Secteur secondaire"",89,1124,231,893,1031,188,843" -"2021,""2053 Belmont-Broye"",""Secteur tertiaire"",223,1359,672,687,1050,441,608" -"2021,""2054 Estavayer"",""Secteur conomique - total"",701,4440,2118,2322,3336,1318,2018" -"2021,""2054 Estavayer"",""Secteur primaire"",74,236,61,175,154,31,123" -"2021,""2054 Estavayer"",""Secteur secondaire"",126,1546,315,1231,1424,238,1187" -"2021,""2054 Estavayer"",""Secteur tertiaire"",501,2658,1742,916,1758,1049,709" -"2021,""2055 Cheyres-Chbles"",""Secteur conomique - total"",118,335,137,198,240,80,160" -"2021,""2055 Cheyres-Chbles"",""Secteur primaire"",22,74,21,53,51,9,42" -"2021,""2055 Cheyres-Chbles"",""Secteur secondaire"",21,77,23,54,62,14,48" -"2021,""2055 Cheyres-Chbles"",""Secteur tertiaire"",75,184,93,91,127,57,71" -"2021,""2061 Auboranges"",""Secteur conomique - total"",26,55,18,37,34,8,26" -"2021,""2061 Auboranges"",""Secteur primaire"",6,15,X,X,10,X,X" -"2021,""2061 Auboranges"",""Secteur secondaire"",4,11,0,11,10,0,10" -"2021,""2061 Auboranges"",""Secteur tertiaire"",16,29,X,X,14,X,X" -"2021,""2063 Billens-Hennens"",""Secteur conomique - total"",48,328,231,97,248,167,80" -"2021,""2063 Billens-Hennens"",""Secteur primaire"",15,41,X,X,27,X,X" -"2021,""2063 Billens-Hennens"",""Secteur secondaire"",6,25,X,X,20,X,X" -"2021,""2063 Billens-Hennens"",""Secteur tertiaire"",27,262,210,52,201,158,43" -"2021,""2066 Chapelle (Glne)"",""Secteur conomique - total"",27,48,22,26,32,13,19" -"2021,""2066 Chapelle (Glne)"",""Secteur primaire"",5,11,X,X,7,X,X" -"2021,""2066 Chapelle (Glne)"",""Secteur secondaire"",7,12,X,X,9,X,X" -"2021,""2066 Chapelle (Glne)"",""Secteur tertiaire"",15,25,13,12,16,8,8" -"2021,""2067 Le Chtelard"",""Secteur conomique - total"",42,156,36,120,126,22,104" -"2021,""2067 Le Chtelard"",""Secteur primaire"",24,62,13,49,50,9,42" -"2021,""2067 Le Chtelard"",""Secteur secondaire"",7,48,8,40,45,6,39" -"2021,""2067 Le Chtelard"",""Secteur tertiaire"",11,46,15,31,31,8,23" -"2021,""2068 Chtonnaye"",""Secteur conomique - total"",64,179,67,112,125,35,90" -"2021,""2068 Chtonnaye"",""Secteur primaire"",17,41,X,X,26,X,X" -"2021,""2068 Chtonnaye"",""Secteur secondaire"",12,42,X,X,35,X,X" -"2021,""2068 Chtonnaye"",""Secteur tertiaire"",35,96,48,48,64,28,36" -"2021,""2072 Ecublens (FR)"",""Secteur conomique - total"",33,76,27,49,51,12,39" -"2021,""2072 Ecublens (FR)"",""Secteur primaire"",12,29,X,X,21,X,X" -"2021,""2072 Ecublens (FR)"",""Secteur secondaire"",6,12,X,X,9,X,X" -"2021,""2072 Ecublens (FR)"",""Secteur tertiaire"",15,35,17,18,21,8,13" -"2021,""2079 Grangettes"",""Secteur conomique - total"",22,56,22,34,41,12,29" -"2021,""2079 Grangettes"",""Secteur primaire"",X,20,X,X,15,X,X" -"2021,""2079 Grangettes"",""Secteur secondaire"",X,21,X,X,18,X,X" -"2021,""2079 Grangettes"",""Secteur tertiaire"",11,15,X,X,8,X,X" -"2021,""2086 Massonnens"",""Secteur conomique - total"",33,99,41,58,69,21,48" -"2021,""2086 Massonnens"",""Secteur primaire"",12,34,X,X,26,X,X" -"2021,""2086 Massonnens"",""Secteur secondaire"",6,20,X,X,18,X,X" -"2021,""2086 Massonnens"",""Secteur tertiaire"",15,45,31,14,25,17,8" -"2021,""2087 Mzires (FR)"",""Secteur conomique - total"",73,239,98,141,176,57,120" -"2021,""2087 Mzires (FR)"",""Secteur primaire"",24,63,19,44,44,9,35" -"2021,""2087 Mzires (FR)"",""Secteur secondaire"",15,106,28,78,90,18,72" -"2021,""2087 Mzires (FR)"",""Secteur tertiaire"",34,70,51,19,42,30,13" -"2021,""2089 Montet (Glne)"",""Secteur conomique - total"",15,34,12,22,23,6,16" -"2021,""2089 Montet (Glne)"",""Secteur primaire"",X,5,X,X,4,X,X" -"2021,""2089 Montet (Glne)"",""Secteur secondaire"",X,13,X,X,12,X,X" -"2021,""2089 Montet (Glne)"",""Secteur tertiaire"",8,16,X,X,6,X,X" -"2021,""2096 Romont (FR)"",""Secteur conomique - total"",466,4112,1668,2444,3308,1085,2223" -"2021,""2096 Romont (FR)"",""Secteur primaire"",21,59,13,46,43,9,34" -"2021,""2096 Romont (FR)"",""Secteur secondaire"",75,1521,232,1289,1442,186,1256" -"2021,""2096 Romont (FR)"",""Secteur tertiaire"",370,2532,1423,1109,1824,891,933" -"2021,""2097 Rue"",""Secteur conomique - total"",100,228,108,120,147,56,91" -"2021,""2097 Rue"",""Secteur primaire"",29,69,X,X,49,X,X" -"2021,""2097 Rue"",""Secteur secondaire"",13,19,X,X,14,X,X" -"2021,""2097 Rue"",""Secteur tertiaire"",58,140,83,57,84,45,39" -"2021,""2099 Siviriez"",""Secteur conomique - total"",180,623,260,363,445,143,302" -"2021,""2099 Siviriez"",""Secteur primaire"",58,164,52,112,116,24,92" -"2021,""2099 Siviriez"",""Secteur secondaire"",34,189,32,157,160,17,143" -"2021,""2099 Siviriez"",""Secteur tertiaire"",88,270,176,94,169,102,67" -"2021,""2102 Ursy"",""Secteur conomique - total"",182,1099,499,600,830,314,516" -"2021,""2102 Ursy"",""Secteur primaire"",38,100,28,72,75,13,63" -"2021,""2102 Ursy"",""Secteur secondaire"",35,490,150,340,444,120,324" -"2021,""2102 Ursy"",""Secteur tertiaire"",109,509,321,188,311,181,130" -"2021,""2113 Vuisternens-devant-Romont"",""Secteur conomique - total"",211,777,311,466,570,188,381" -"2021,""2113 Vuisternens-devant-Romont"",""Secteur primaire"",83,200,48,152,149,25,125" -"2021,""2113 Vuisternens-devant-Romont"",""Secteur secondaire"",38,181,26,155,154,13,141" -"2021,""2113 Vuisternens-devant-Romont"",""Secteur tertiaire"",90,396,237,159,266,151,116" -"2021,""2114 Villorsonnens"",""Secteur conomique - total"",101,404,148,256,318,102,217" -"2021,""2114 Villorsonnens"",""Secteur primaire"",45,122,30,92,93,17,76" -"2021,""2114 Villorsonnens"",""Secteur secondaire"",16,184,61,123,161,52,110" -"2021,""2114 Villorsonnens"",""Secteur tertiaire"",40,98,57,41,64,33,30" -"2021,""2115 Torny"",""Secteur conomique - total"",55,136,47,89,92,23,69" -"2021,""2115 Torny"",""Secteur primaire"",21,67,X,X,47,X,X" -"2021,""2115 Torny"",""Secteur secondaire"",9,19,X,X,16,X,X" -"2021,""2115 Torny"",""Secteur tertiaire"",25,50,23,27,29,11,18" -"2021,""2117 Villaz"",""Secteur conomique - total"",167,744,224,520,598,139,460" -"2021,""2117 Villaz"",""Secteur primaire"",40,96,24,72,70,14,56" -"2021,""2117 Villaz"",""Secteur secondaire"",29,267,47,220,244,35,209" -"2021,""2117 Villaz"",""Secteur tertiaire"",98,381,153,228,285,90,195" -"2021,""2121 Haut-Intyamon"",""Secteur conomique - total"",121,389,145,244,284,78,205" -"2021,""2121 Haut-Intyamon"",""Secteur primaire"",29,82,22,60,55,9,46" -"2021,""2121 Haut-Intyamon"",""Secteur secondaire"",32,156,26,130,133,13,120" -"2021,""2121 Haut-Intyamon"",""Secteur tertiaire"",60,151,97,54,96,57,40" -"2021,""2122 Pont-en-Ogoz"",""Secteur conomique - total"",122,436,179,257,325,111,213" -"2021,""2122 Pont-en-Ogoz"",""Secteur primaire"",18,55,14,41,40,8,32" -"2021,""2122 Pont-en-Ogoz"",""Secteur secondaire"",19,76,13,63,64,8,56" -"2021,""2122 Pont-en-Ogoz"",""Secteur tertiaire"",85,305,152,153,221,96,125" -"2021,""2123 Botterens"",""Secteur conomique - total"",27,151,74,77,116,47,69" -"2021,""2123 Botterens"",""Secteur primaire"",X,14,X,X,8,X,X" -"2021,""2123 Botterens"",""Secteur secondaire"",X,109,50,59,90,33,56" -"2021,""2123 Botterens"",""Secteur tertiaire"",16,28,X,X,18,X,X" -"2021,""2124 Broc"",""Secteur conomique - total"",133,989,525,464,744,342,402" -"2021,""2124 Broc"",""Secteur primaire"",4,14,X,X,10,X,X" -"2021,""2124 Broc"",""Secteur secondaire"",31,360,X,X,325,X,X" -"2021,""2124 Broc"",""Secteur tertiaire"",98,615,401,214,408,245,163" -"2021,""2125 Bulle"",""Secteur conomique - total"",1785,16494,6993,9501,13203,4731,8472" -"2021,""2125 Bulle"",""Secteur primaire"",18,51,X,X,40,X,X" -"2021,""2125 Bulle"",""Secteur secondaire"",275,5371,X,X,5054,X,X" -"2021,""2125 Bulle"",""Secteur tertiaire"",1492,11072,6051,5021,8108,3975,4134" -"2021,""2128 Chtel-sur-Montsalvens"",""Secteur conomique - total"",21,37,18,19,17,7,10" -"2021,""2128 Chtel-sur-Montsalvens"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2128 Chtel-sur-Montsalvens"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2128 Chtel-sur-Montsalvens"",""Secteur tertiaire"",16,27,15,12,10,6,4" -"2021,""2129 Corbires"",""Secteur conomique - total"",61,175,51,124,134,29,105" -"2021,""2129 Corbires"",""Secteur primaire"",11,30,11,19,20,6,14" -"2021,""2129 Corbires"",""Secteur secondaire"",11,77,8,69,70,5,65" -"2021,""2129 Corbires"",""Secteur tertiaire"",39,68,32,36,43,18,25" -"2021,""2130 Crsuz"",""Secteur conomique - total"",24,45,25,20,29,12,16" -"2021,""2130 Crsuz"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2130 Crsuz"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2130 Crsuz"",""Secteur tertiaire"",15,32,X,X,19,X,X" -"2021,""2131 Echarlens"",""Secteur conomique - total"",48,139,64,75,97,36,60" -"2021,""2131 Echarlens"",""Secteur primaire"",10,31,X,X,20,X,X" -"2021,""2131 Echarlens"",""Secteur secondaire"",8,34,X,X,28,X,X" -"2021,""2131 Echarlens"",""Secteur tertiaire"",30,74,47,27,48,28,20" -"2021,""2134 Grandvillard"",""Secteur conomique - total"",65,201,92,109,145,54,92" -"2021,""2134 Grandvillard"",""Secteur primaire"",12,43,10,33,33,5,28" -"2021,""2134 Grandvillard"",""Secteur secondaire"",14,47,16,31,36,10,26" -"2021,""2134 Grandvillard"",""Secteur tertiaire"",39,111,66,45,76,39,37" -"2021,""2135 Gruyres"",""Secteur conomique - total"",174,1194,549,645,890,343,546" -"2021,""2135 Gruyres"",""Secteur primaire"",14,45,12,33,32,4,28" -"2021,""2135 Gruyres"",""Secteur secondaire"",35,433,121,312,388,92,297" -"2021,""2135 Gruyres"",""Secteur tertiaire"",125,716,416,300,469,247,222" -"2021,""2137 Hauteville"",""Secteur conomique - total"",39,109,52,57,70,30,40" -"2021,""2137 Hauteville"",""Secteur primaire"",9,22,X,X,17,X,X" -"2021,""2137 Hauteville"",""Secteur secondaire"",8,28,X,X,19,X,X" -"2021,""2137 Hauteville"",""Secteur tertiaire"",22,59,34,25,35,19,15" -"2021,""2138 Jaun"",""Secteur conomique - total"",74,252,97,155,174,46,129" -"2021,""2138 Jaun"",""Secteur primaire"",24,63,21,42,39,8,31" -"2021,""2138 Jaun"",""Secteur secondaire"",14,73,19,54,59,8,52" -"2021,""2138 Jaun"",""Secteur tertiaire"",36,116,57,59,76,30,46" -"2021,""2140 Marsens"",""Secteur conomique - total"",110,980,596,384,733,411,322" -"2021,""2140 Marsens"",""Secteur primaire"",17,38,X,X,26,X,X" -"2021,""2140 Marsens"",""Secteur secondaire"",15,79,X,X,62,X,X" -"2021,""2140 Marsens"",""Secteur tertiaire"",78,863,568,295,644,397,248" -"2021,""2143 Morlon"",""Secteur conomique - total"",26,134,77,57,90,44,47" -"2021,""2143 Morlon"",""Secteur primaire"",X,16,X,X,14,X,X" -"2021,""2143 Morlon"",""Secteur secondaire"",X,15,X,X,13,X,X" -"2021,""2143 Morlon"",""Secteur tertiaire"",18,103,71,32,64,41,23" -"2021,""2145 Le Pquier (FR)"",""Secteur conomique - total"",56,262,65,197,212,34,178" -"2021,""2145 Le Pquier (FR)"",""Secteur primaire"",8,32,X,X,28,X,X" -"2021,""2145 Le Pquier (FR)"",""Secteur secondaire"",7,138,X,X,132,X,X" -"2021,""2145 Le Pquier (FR)"",""Secteur tertiaire"",41,92,52,40,52,27,25" -"2021,""2147 Pont-la-Ville"",""Secteur conomique - total"",46,128,59,69,90,36,54" -"2021,""2147 Pont-la-Ville"",""Secteur primaire"",15,39,X,X,X,X,X" -"2021,""2147 Pont-la-Ville"",""Secteur secondaire"",5,7,X,X,X,X,X" -"2021,""2147 Pont-la-Ville"",""Secteur tertiaire"",26,82,46,36,58,30,28" -"2021,""2148 Riaz"",""Secteur conomique - total"",159,1160,681,479,863,448,415" -"2021,""2148 Riaz"",""Secteur primaire"",12,38,X,X,26,X,X" -"2021,""2148 Riaz"",""Secteur secondaire"",24,144,X,X,122,X,X" -"2021,""2148 Riaz"",""Secteur tertiaire"",123,978,647,331,715,432,284" -"2021,""2149 La Roche"",""Secteur conomique - total"",134,719,302,417,542,177,366" -"2021,""2149 La Roche"",""Secteur primaire"",34,85,24,61,63,13,51" -"2021,""2149 La Roche"",""Secteur secondaire"",19,279,54,225,246,30,216" -"2021,""2149 La Roche"",""Secteur tertiaire"",81,355,224,131,233,134,99" -"2021,""2152 Sles"",""Secteur conomique - total"",114,514,146,368,397,78,319" -"2021,""2152 Sles"",""Secteur primaire"",46,143,37,106,113,23,90" -"2021,""2152 Sles"",""Secteur secondaire"",23,208,25,183,190,15,174" -"2021,""2152 Sles"",""Secteur tertiaire"",45,163,84,79,95,40,55" -"2021,""2153 Sorens"",""Secteur conomique - total"",78,277,88,189,217,52,166" -"2021,""2153 Sorens"",""Secteur primaire"",23,66,17,49,48,8,40" -"2021,""2153 Sorens"",""Secteur secondaire"",14,119,24,95,109,18,90" -"2021,""2153 Sorens"",""Secteur tertiaire"",41,92,47,45,60,25,36" -"2021,""2155 Vaulruz"",""Secteur conomique - total"",113,717,257,460,569,156,412" -"2021,""2155 Vaulruz"",""Secteur primaire"",23,62,17,45,44,5,39" -"2021,""2155 Vaulruz"",""Secteur secondaire"",19,209,28,181,191,18,173" -"2021,""2155 Vaulruz"",""Secteur tertiaire"",71,446,212,234,334,134,200" -"2021,""2160 Vuadens"",""Secteur conomique - total"",162,1395,450,945,1161,297,863" -"2021,""2160 Vuadens"",""Secteur primaire"",25,69,20,49,53,10,43" -"2021,""2160 Vuadens"",""Secteur secondaire"",30,887,141,746,830,109,721" -"2021,""2160 Vuadens"",""Secteur tertiaire"",107,439,289,150,278,178,100" -"2021,""2162 Bas-Intyamon"",""Secteur conomique - total"",98,764,261,503,648,180,468" -"2021,""2162 Bas-Intyamon"",""Secteur primaire"",18,51,X,X,41,X,X" -"2021,""2162 Bas-Intyamon"",""Secteur secondaire"",15,468,X,X,436,X,X" -"2021,""2162 Bas-Intyamon"",""Secteur tertiaire"",65,245,152,93,171,94,77" -"2021,""2163 Val-de-Charmey"",""Secteur conomique - total"",224,1159,533,626,863,323,540" -"2021,""2163 Val-de-Charmey"",""Secteur primaire"",38,130,26,104,100,15,86" -"2021,""2163 Val-de-Charmey"",""Secteur secondaire"",50,274,56,218,235,29,206" -"2021,""2163 Val-de-Charmey"",""Secteur tertiaire"",136,755,451,304,527,278,249" -"2021,""2173 Autigny"",""Secteur conomique - total"",56,133,56,77,88,28,60" -"2021,""2173 Autigny"",""Secteur primaire"",19,43,8,35,37,6,31" -"2021,""2173 Autigny"",""Secteur secondaire"",7,21,7,14,17,5,12" -"2021,""2173 Autigny"",""Secteur tertiaire"",30,69,41,28,33,17,17" -"2021,""2174 Avry"",""Secteur conomique - total"",211,1335,763,572,1015,521,495" -"2021,""2174 Avry"",""Secteur primaire"",11,37,11,26,31,7,24" -"2021,""2174 Avry"",""Secteur secondaire"",28,205,30,175,179,21,158" -"2021,""2174 Avry"",""Secteur tertiaire"",172,1093,722,371,805,492,313" -"2021,""2175 Belfaux"",""Secteur conomique - total"",189,910,291,619,658,163,495" -"2021,""2175 Belfaux"",""Secteur primaire"",22,65,16,49,46,7,40" -"2021,""2175 Belfaux"",""Secteur secondaire"",51,282,40,242,251,23,228" -"2021,""2175 Belfaux"",""Secteur tertiaire"",116,563,235,328,361,134,227" -"2021,""2177 Chnens"",""Secteur conomique - total"",54,233,73,160,186,45,142" -"2021,""2177 Chnens"",""Secteur primaire"",6,13,X,X,7,X,X" -"2021,""2177 Chnens"",""Secteur secondaire"",13,114,X,X,104,X,X" -"2021,""2177 Chnens"",""Secteur tertiaire"",35,106,50,56,75,30,45" -"2021,""2183 Corminboeuf"",""Secteur conomique - total"",169,1106,518,588,811,301,510" -"2021,""2183 Corminboeuf"",""Secteur primaire"",13,44,13,31,39,11,29" -"2021,""2183 Corminboeuf"",""Secteur secondaire"",29,168,22,146,148,11,137" -"2021,""2183 Corminboeuf"",""Secteur tertiaire"",127,894,483,411,624,279,345" -"2021,""2186 Cottens (FR)"",""Secteur conomique - total"",72,390,255,135,256,149,106" -"2021,""2186 Cottens (FR)"",""Secteur primaire"",13,33,X,X,26,X,X" -"2021,""2186 Cottens (FR)"",""Secteur secondaire"",10,47,X,X,38,X,X" -"2021,""2186 Cottens (FR)"",""Secteur tertiaire"",49,310,235,75,192,140,52" -"2021,""2194 Ferpicloz"",""Secteur conomique - total"",26,127,43,84,92,23,69" -"2021,""2194 Ferpicloz"",""Secteur primaire"",X,9,X,X,6,X,X" -"2021,""2194 Ferpicloz"",""Secteur secondaire"",X,60,X,X,51,X,X" -"2021,""2194 Ferpicloz"",""Secteur tertiaire"",19,58,21,37,35,11,24" -"2021,""2196 Fribourg"",""Secteur conomique - total"",3742,33638,18460,15178,23506,11483,12023" -"2021,""2196 Fribourg"",""Secteur primaire"",5,21,7,14,19,7,12" -"2021,""2196 Fribourg"",""Secteur secondaire"",265,1970,444,1526,1735,302,1433" -"2021,""2196 Fribourg"",""Secteur tertiaire"",3472,31647,18009,13638,21752,11174,10577" -"2021,""2197 Givisiez"",""Secteur conomique - total"",388,6107,2217,3890,5056,1535,3522" -"2021,""2197 Givisiez"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""2197 Givisiez"",""Secteur secondaire"",X,1037,X,X,X,X,X" -"2021,""2197 Givisiez"",""Secteur tertiaire"",316,5064,2015,3049,4114,1392,2722" -"2021,""2198 Granges-Paccot"",""Secteur conomique - total"",289,3697,1434,2263,2931,985,1946" -"2021,""2198 Granges-Paccot"",""Secteur primaire"",7,22,X,X,18,X,X" -"2021,""2198 Granges-Paccot"",""Secteur secondaire"",49,564,X,X,511,X,X" -"2021,""2198 Granges-Paccot"",""Secteur tertiaire"",233,3111,1320,1791,2403,902,1501" -"2021,""2200 Grolley"",""Secteur conomique - total"",123,885,225,660,756,141,615" -"2021,""2200 Grolley"",""Secteur primaire"",12,31,9,22,21,5,17" -"2021,""2200 Grolley"",""Secteur secondaire"",32,272,33,239,246,17,229" -"2021,""2200 Grolley"",""Secteur tertiaire"",79,582,183,399,489,119,370" -"2021,""2206 Marly"",""Secteur conomique - total"",466,2698,1275,1423,1935,784,1151" -"2021,""2206 Marly"",""Secteur primaire"",7,33,X,X,15,X,X" -"2021,""2206 Marly"",""Secteur secondaire"",73,576,X,X,510,X,X" -"2021,""2206 Marly"",""Secteur tertiaire"",386,2089,1148,941,1410,701,709" -"2021,""2208 Matran"",""Secteur conomique - total"",125,1605,538,1067,1396,391,1005" -"2021,""2208 Matran"",""Secteur primaire"",X,7,X,X,6,X,X" -"2021,""2208 Matran"",""Secteur secondaire"",X,765,X,X,725,X,X" -"2021,""2208 Matran"",""Secteur tertiaire"",96,833,419,414,666,295,370" -"2021,""2211 Neyruz (FR)"",""Secteur conomique - total"",102,306,169,137,217,102,115" -"2021,""2211 Neyruz (FR)"",""Secteur primaire"",5,12,X,X,8,X,X" -"2021,""2211 Neyruz (FR)"",""Secteur secondaire"",15,63,X,X,56,X,X" -"2021,""2211 Neyruz (FR)"",""Secteur tertiaire"",82,231,157,74,152,97,55" -"2021,""2216 Pierrafortscha"",""Secteur conomique - total"",13,42,15,27,29,7,22" -"2021,""2216 Pierrafortscha"",""Secteur primaire"",7,25,9,16,17,5,12" -"2021,""2216 Pierrafortscha"",""Secteur secondaire"",X,11,X,X,X,X,X" -"2021,""2216 Pierrafortscha"",""Secteur tertiaire"",X,6,X,X,X,X,X" -"2021,""2217 Ponthaux"",""Secteur conomique - total"",42,131,45,86,100,26,74" -"2021,""2217 Ponthaux"",""Secteur primaire"",11,32,X,X,24,X,X" -"2021,""2217 Ponthaux"",""Secteur secondaire"",8,28,X,X,24,X,X" -"2021,""2217 Ponthaux"",""Secteur tertiaire"",23,71,28,43,52,17,35" -"2021,""2220 Le Mouret"",""Secteur conomique - total"",170,920,309,611,711,182,529" -"2021,""2220 Le Mouret"",""Secteur primaire"",33,82,25,57,56,12,43" -"2021,""2220 Le Mouret"",""Secteur secondaire"",32,232,39,193,203,24,179" -"2021,""2220 Le Mouret"",""Secteur tertiaire"",105,606,245,361,452,146,306" -"2021,""2226 Treyvaux"",""Secteur conomique - total"",106,297,100,197,230,58,171" -"2021,""2226 Treyvaux"",""Secteur primaire"",30,73,20,53,56,13,44" -"2021,""2226 Treyvaux"",""Secteur secondaire"",21,70,11,59,62,7,56" -"2021,""2226 Treyvaux"",""Secteur tertiaire"",55,154,69,85,111,39,72" -"2021,""2228 Villars-sur-Glne"",""Secteur conomique - total"",711,10490,5839,4651,8427,4248,4179" -"2021,""2228 Villars-sur-Glne"",""Secteur primaire"",X,12,X,X,7,X,X" -"2021,""2228 Villars-sur-Glne"",""Secteur secondaire"",X,2273,X,X,2097,X,X" -"2021,""2228 Villars-sur-Glne"",""Secteur tertiaire"",608,8205,5112,3093,6323,3643,2680" -"2021,""2230 Villarsel-sur-Marly"",""Secteur conomique - total"",7,16,9,7,12,5,6" -"2021,""2230 Villarsel-sur-Marly"",""Secteur primaire"",X,12,X,X,X,X,X" -"2021,""2230 Villarsel-sur-Marly"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""2230 Villarsel-sur-Marly"",""Secteur tertiaire"",X,4,X,X,X,X,X" -"2021,""2233 Hauterive (FR)"",""Secteur conomique - total"",173,1272,485,787,936,300,636" -"2021,""2233 Hauterive (FR)"",""Secteur primaire"",17,99,14,85,82,10,72" -"2021,""2233 Hauterive (FR)"",""Secteur secondaire"",42,277,36,241,242,22,220" -"2021,""2233 Hauterive (FR)"",""Secteur tertiaire"",114,896,435,461,612,267,345" -"2021,""2234 La Brillaz"",""Secteur conomique - total"",75,233,110,123,164,63,100" -"2021,""2234 La Brillaz"",""Secteur primaire"",18,45,X,X,37,X,X" -"2021,""2234 La Brillaz"",""Secteur secondaire"",10,24,X,X,22,X,X" -"2021,""2234 La Brillaz"",""Secteur tertiaire"",47,164,94,70,104,53,51" -"2021,""2235 La Sonnaz"",""Secteur conomique - total"",65,231,93,138,157,46,111" -"2021,""2235 La Sonnaz"",""Secteur primaire"",16,53,13,40,42,7,35" -"2021,""2235 La Sonnaz"",""Secteur secondaire"",6,49,8,41,43,5,38" -"2021,""2235 La Sonnaz"",""Secteur tertiaire"",43,129,72,57,72,35,37" -"2021,""2236 Gibloux"",""Secteur conomique - total"",507,2961,1144,1817,2314,691,1623" -"2021,""2236 Gibloux"",""Secteur primaire"",68,174,44,130,129,21,107" -"2021,""2236 Gibloux"",""Secteur secondaire"",110,1000,180,820,905,118,787" -"2021,""2236 Gibloux"",""Secteur tertiaire"",329,1787,920,867,1280,551,728" -"2021,""2237 Prez"",""Secteur conomique - total"",132,461,228,233,308,120,188" -"2021,""2237 Prez"",""Secteur primaire"",32,102,29,73,77,16,62" -"2021,""2237 Prez"",""Secteur secondaire"",21,95,35,60,69,13,55" -"2021,""2237 Prez"",""Secteur tertiaire"",79,264,164,100,163,91,71" -"2021,""2238 Bois-d'Amont"",""Secteur conomique - total"",142,372,163,209,261,88,173" -"2021,""2238 Bois-d'Amont"",""Secteur primaire"",26,87,21,66,69,11,58" -"2021,""2238 Bois-d'Amont"",""Secteur secondaire"",23,82,18,64,65,10,55" -"2021,""2238 Bois-d'Amont"",""Secteur tertiaire"",93,203,124,79,126,66,60" -"2021,""2250 Courgevaux"",""Secteur conomique - total"",99,553,201,352,432,130,302" -"2021,""2250 Courgevaux"",""Secteur primaire"",7,12,X,X,7,X,X" -"2021,""2250 Courgevaux"",""Secteur secondaire"",30,162,X,X,137,X,X" -"2021,""2250 Courgevaux"",""Secteur tertiaire"",62,379,162,217,288,105,183" -"2021,""2254 Courtepin"",""Secteur conomique - total"",260,2649,921,1728,2275,675,1600" -"2021,""2254 Courtepin"",""Secteur primaire"",42,113,39,74,79,20,60" -"2021,""2254 Courtepin"",""Secteur secondaire"",33,1607,372,1235,1553,333,1220" -"2021,""2254 Courtepin"",""Secteur tertiaire"",185,929,510,419,643,322,321" -"2021,""2257 Cressier (FR)"",""Secteur conomique - total"",62,638,284,354,567,236,330" -"2021,""2257 Cressier (FR)"",""Secteur primaire"",8,45,12,33,29,5,24" -"2021,""2257 Cressier (FR)"",""Secteur secondaire"",17,468,199,269,442,181,262" -"2021,""2257 Cressier (FR)"",""Secteur tertiaire"",37,125,73,52,95,51,45" -"2021,""2258 Frschels"",""Secteur conomique - total"",36,105,47,58,71,24,46" -"2021,""2258 Frschels"",""Secteur primaire"",10,38,X,X,29,X,X" -"2021,""2258 Frschels"",""Secteur secondaire"",6,16,X,X,11,X,X" -"2021,""2258 Frschels"",""Secteur tertiaire"",20,51,29,22,30,14,16" -"2021,""2259 Galmiz"",""Secteur conomique - total"",41,216,94,122,179,69,109" -"2021,""2259 Galmiz"",""Secteur primaire"",14,141,59,82,123,49,74" -"2021,""2259 Galmiz"",""Secteur secondaire"",7,22,9,13,18,6,12" -"2021,""2259 Galmiz"",""Secteur tertiaire"",20,53,26,27,38,15,23" -"2021,""2260 Gempenach"",""Secteur conomique - total"",20,157,58,99,118,35,83" -"2021,""2260 Gempenach"",""Secteur primaire"",X,120,47,73,89,29,60" -"2021,""2260 Gempenach"",""Secteur secondaire"",X,16,X,X,14,X,X" -"2021,""2260 Gempenach"",""Secteur tertiaire"",10,21,X,X,15,X,X" -"2021,""2261 Greng"",""Secteur conomique - total"",26,56,24,32,37,10,26" -"2021,""2261 Greng"",""Secteur primaire"",X,11,X,X,9,X,X" -"2021,""2261 Greng"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""2261 Greng"",""Secteur tertiaire"",X,45,X,X,27,X,X" -"2021,""2262 Gurmels"",""Secteur conomique - total"",215,879,420,459,608,229,380" -"2021,""2262 Gurmels"",""Secteur primaire"",43,143,45,98,91,17,74" -"2021,""2262 Gurmels"",""Secteur secondaire"",42,240,47,193,207,26,181" -"2021,""2262 Gurmels"",""Secteur tertiaire"",130,496,328,168,311,186,125" -"2021,""2265 Kerzers"",""Secteur conomique - total"",354,2660,1100,1560,2067,704,1363" -"2021,""2265 Kerzers"",""Secteur primaire"",31,245,74,171,185,48,137" -"2021,""2265 Kerzers"",""Secteur secondaire"",67,607,215,392,529,163,367" -"2021,""2265 Kerzers"",""Secteur tertiaire"",256,1808,811,997,1352,493,859" -"2021,""2266 Kleinbsingen"",""Secteur conomique - total"",45,121,44,77,77,18,59" -"2021,""2266 Kleinbsingen"",""Secteur primaire"",10,25,X,X,14,X,X" -"2021,""2266 Kleinbsingen"",""Secteur secondaire"",11,27,X,X,22,X,X" -"2021,""2266 Kleinbsingen"",""Secteur tertiaire"",24,69,31,38,41,13,28" -"2021,""2271 Meyriez"",""Secteur conomique - total"",38,294,216,78,214,153,61" -"2021,""2271 Meyriez"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""2271 Meyriez"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""2271 Meyriez"",""Secteur tertiaire"",X,290,X,X,X,X,X" -"2021,""2272 Misery-Courtion"",""Secteur conomique - total"",112,475,233,242,323,133,189" -"2021,""2272 Misery-Courtion"",""Secteur primaire"",29,95,28,67,68,15,53" -"2021,""2272 Misery-Courtion"",""Secteur secondaire"",21,105,22,83,86,13,73" -"2021,""2272 Misery-Courtion"",""Secteur tertiaire"",62,275,183,92,168,105,63" -"2021,""2274 Muntelier"",""Secteur conomique - total"",62,493,226,267,357,142,216" -"2021,""2274 Muntelier"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""2274 Muntelier"",""Secteur secondaire"",X,159,X,X,X,X,X" -"2021,""2274 Muntelier"",""Secteur tertiaire"",52,327,162,165,210,88,122" -"2021,""2275 Murten"",""Secteur conomique - total"",759,5029,2608,2421,3729,1650,2079" -"2021,""2275 Murten"",""Secteur primaire"",66,196,72,124,117,31,86" -"2021,""2275 Murten"",""Secteur secondaire"",90,1526,401,1125,1369,307,1062" -"2021,""2275 Murten"",""Secteur tertiaire"",603,3307,2135,1172,2242,1311,931" -"2021,""2276 Ried bei Kerzers"",""Secteur conomique - total"",90,867,285,582,730,198,532" -"2021,""2276 Ried bei Kerzers"",""Secteur primaire"",32,403,123,280,350,92,258" -"2021,""2276 Ried bei Kerzers"",""Secteur secondaire"",17,183,31,152,165,19,146" -"2021,""2276 Ried bei Kerzers"",""Secteur tertiaire"",41,281,131,150,214,87,127" -"2021,""2278 Ulmiz"",""Secteur conomique - total"",38,169,102,67,116,68,48" -"2021,""2278 Ulmiz"",""Secteur primaire"",9,29,X,X,16,X,X" -"2021,""2278 Ulmiz"",""Secteur secondaire"",5,5,X,X,4,X,X" -"2021,""2278 Ulmiz"",""Secteur tertiaire"",24,135,90,45,96,61,35" -"2021,""2284 Mont-Vully"",""Secteur conomique - total"",267,1224,550,674,922,346,576" -"2021,""2284 Mont-Vully"",""Secteur primaire"",41,163,61,102,121,38,83" -"2021,""2284 Mont-Vully"",""Secteur secondaire"",39,234,76,158,190,44,146" -"2021,""2284 Mont-Vully"",""Secteur tertiaire"",187,827,413,414,611,264,347" -"2021,""2292 Brnisried"",""Secteur conomique - total"",29,85,31,54,61,18,43" -"2021,""2292 Brnisried"",""Secteur primaire"",11,24,X,X,17,X,X" -"2021,""2292 Brnisried"",""Secteur secondaire"",5,26,X,X,22,X,X" -"2021,""2292 Brnisried"",""Secteur tertiaire"",13,35,13,22,23,8,15" -"2021,""2293 Ddingen"",""Secteur conomique - total"",597,3949,1609,2340,3009,965,2044" -"2021,""2293 Ddingen"",""Secteur primaire"",72,234,78,156,147,35,112" -"2021,""2293 Ddingen"",""Secteur secondaire"",95,1283,225,1058,1163,154,1009" -"2021,""2293 Ddingen"",""Secteur tertiaire"",430,2432,1306,1126,1699,776,923" -"2021,""2294 Giffers"",""Secteur conomique - total"",112,503,279,224,348,167,181" -"2021,""2294 Giffers"",""Secteur primaire"",18,40,14,26,28,8,20" -"2021,""2294 Giffers"",""Secteur secondaire"",17,90,23,67,78,16,62" -"2021,""2294 Giffers"",""Secteur tertiaire"",77,373,242,131,242,143,99" -"2021,""2295 Bsingen"",""Secteur conomique - total"",223,974,402,572,728,229,499" -"2021,""2295 Bsingen"",""Secteur primaire"",39,118,47,71,78,21,57" -"2021,""2295 Bsingen"",""Secteur secondaire"",38,324,61,263,292,42,249" -"2021,""2295 Bsingen"",""Secteur tertiaire"",146,532,294,238,358,165,193" -"2021,""2296 Heitenried"",""Secteur conomique - total"",95,325,133,192,211,56,154" -"2021,""2296 Heitenried"",""Secteur primaire"",30,94,31,63,64,13,51" -"2021,""2296 Heitenried"",""Secteur secondaire"",17,70,11,59,58,5,53" -"2021,""2296 Heitenried"",""Secteur tertiaire"",48,161,91,70,89,39,50" -"2021,""2299 Plaffeien"",""Secteur conomique - total"",309,1673,802,871,1195,469,726" -"2021,""2299 Plaffeien"",""Secteur primaire"",66,151,56,95,98,33,65" -"2021,""2299 Plaffeien"",""Secteur secondaire"",52,512,133,379,444,90,355" -"2021,""2299 Plaffeien"",""Secteur tertiaire"",191,1010,613,397,653,347,306" -"2021,""2300 Plasselb"",""Secteur conomique - total"",66,154,60,94,101,28,73" -"2021,""2300 Plasselb"",""Secteur primaire"",16,43,X,X,27,X,X" -"2021,""2300 Plasselb"",""Secteur secondaire"",13,41,X,X,33,X,X" -"2021,""2300 Plasselb"",""Secteur tertiaire"",37,70,43,27,40,21,19" -"2021,""2301 Rechthalten"",""Secteur conomique - total"",83,221,92,129,150,51,100" -"2021,""2301 Rechthalten"",""Secteur primaire"",23,55,13,42,36,5,32" -"2021,""2301 Rechthalten"",""Secteur secondaire"",16,47,9,38,37,4,33" -"2021,""2301 Rechthalten"",""Secteur tertiaire"",44,119,70,49,77,41,35" -"2021,""2303 St. Silvester"",""Secteur conomique - total"",62,169,70,99,113,37,75" -"2021,""2303 St. Silvester"",""Secteur primaire"",19,51,X,X,33,X,X" -"2021,""2303 St. Silvester"",""Secteur secondaire"",9,16,X,X,14,X,X" -"2021,""2303 St. Silvester"",""Secteur tertiaire"",34,102,60,42,66,32,34" -"2021,""2304 St. Ursen"",""Secteur conomique - total"",109,380,134,246,272,69,203" -"2021,""2304 St. Ursen"",""Secteur primaire"",46,119,37,82,80,16,64" -"2021,""2304 St. Ursen"",""Secteur secondaire"",17,66,16,50,52,7,45" -"2021,""2304 St. Ursen"",""Secteur tertiaire"",46,195,81,114,140,47,93" -"2021,""2305 Schmitten (FR)"",""Secteur conomique - total"",238,1557,715,842,1128,406,722" -"2021,""2305 Schmitten (FR)"",""Secteur primaire"",35,91,28,63,59,11,49" -"2021,""2305 Schmitten (FR)"",""Secteur secondaire"",49,507,134,373,440,87,353" -"2021,""2305 Schmitten (FR)"",""Secteur tertiaire"",154,959,553,406,629,308,321" -"2021,""2306 Tafers"",""Secteur conomique - total"",542,3033,1611,1422,2116,934,1183" -"2021,""2306 Tafers"",""Secteur primaire"",124,333,110,223,222,50,172" -"2021,""2306 Tafers"",""Secteur secondaire"",98,727,146,581,631,88,543" -"2021,""2306 Tafers"",""Secteur tertiaire"",320,1973,1355,618,1263,796,467" -"2021,""2307 Tentlingen"",""Secteur conomique - total"",69,333,152,181,249,95,154" -"2021,""2307 Tentlingen"",""Secteur primaire"",11,22,X,X,16,X,X" -"2021,""2307 Tentlingen"",""Secteur secondaire"",14,82,X,X,69,X,X" -"2021,""2307 Tentlingen"",""Secteur tertiaire"",44,229,131,98,164,82,81" -"2021,""2308 Ueberstorf"",""Secteur conomique - total"",158,478,216,262,308,99,210" -"2021,""2308 Ueberstorf"",""Secteur primaire"",48,138,45,93,87,21,66" -"2021,""2308 Ueberstorf"",""Secteur secondaire"",24,103,20,83,86,12,74" -"2021,""2308 Ueberstorf"",""Secteur tertiaire"",86,237,151,86,135,66,69" -"2021,""2309 Wnnewil-Flamatt"",""Secteur conomique - total"",341,2379,969,1410,1836,597,1239" -"2021,""2309 Wnnewil-Flamatt"",""Secteur primaire"",44,120,42,78,77,18,59" -"2021,""2309 Wnnewil-Flamatt"",""Secteur secondaire"",80,882,163,719,799,120,679" -"2021,""2309 Wnnewil-Flamatt"",""Secteur tertiaire"",217,1377,764,613,960,459,501" -"2021,""2321 Attalens"",""Secteur conomique - total"",214,804,437,367,576,263,313" -"2021,""2321 Attalens"",""Secteur primaire"",18,43,12,31,32,6,26" -"2021,""2321 Attalens"",""Secteur secondaire"",37,206,25,181,183,14,169" -"2021,""2321 Attalens"",""Secteur tertiaire"",159,555,400,155,361,243,118" -"2021,""2323 Bossonnens"",""Secteur conomique - total"",88,479,232,247,329,131,198" -"2021,""2323 Bossonnens"",""Secteur primaire"",6,15,X,X,12,X,X" -"2021,""2323 Bossonnens"",""Secteur secondaire"",20,166,X,X,144,X,X" -"2021,""2323 Bossonnens"",""Secteur tertiaire"",62,298,176,122,173,92,81" -"2021,""2325 Chtel-Saint-Denis"",""Secteur conomique - total"",608,3876,1831,2045,2971,1205,1766" -"2021,""2325 Chtel-Saint-Denis"",""Secteur primaire"",35,97,21,76,78,14,64" -"2021,""2325 Chtel-Saint-Denis"",""Secteur secondaire"",94,1167,309,858,1050,234,816" -"2021,""2325 Chtel-Saint-Denis"",""Secteur tertiaire"",479,2612,1501,1111,1843,957,886" -"2021,""2328 Granges (Veveyse)"",""Secteur conomique - total"",66,250,65,185,208,42,165" -"2021,""2328 Granges (Veveyse)"",""Secteur primaire"",10,23,X,X,17,X,X" -"2021,""2328 Granges (Veveyse)"",""Secteur secondaire"",22,86,X,X,78,X,X" -"2021,""2328 Granges (Veveyse)"",""Secteur tertiaire"",34,141,52,89,113,35,79" -"2021,""2333 Remaufens"",""Secteur conomique - total"",68,244,88,156,189,54,135" -"2021,""2333 Remaufens"",""Secteur primaire"",13,34,9,25,25,4,20" -"2021,""2333 Remaufens"",""Secteur secondaire"",13,84,28,56,71,18,53" -"2021,""2333 Remaufens"",""Secteur tertiaire"",42,126,51,75,93,31,62" -"2021,""2335 Saint-Martin (FR)"",""Secteur conomique - total"",74,207,62,145,158,31,127" -"2021,""2335 Saint-Martin (FR)"",""Secteur primaire"",28,73,X,X,56,X,X" -"2021,""2335 Saint-Martin (FR)"",""Secteur secondaire"",13,69,X,X,63,X,X" -"2021,""2335 Saint-Martin (FR)"",""Secteur tertiaire"",33,65,44,21,38,24,15" -"2021,""2336 Semsales"",""Secteur conomique - total"",131,571,169,402,449,99,350" -"2021,""2336 Semsales"",""Secteur primaire"",23,59,13,46,46,7,38" -"2021,""2336 Semsales"",""Secteur secondaire"",35,248,42,206,216,26,190" -"2021,""2336 Semsales"",""Secteur tertiaire"",73,264,114,150,187,66,122" -"2021,""2337 Le Flon"",""Secteur conomique - total"",79,179,74,105,126,39,87" -"2021,""2337 Le Flon"",""Secteur primaire"",21,54,X,X,43,X,X" -"2021,""2337 Le Flon"",""Secteur secondaire"",12,30,X,X,24,X,X" -"2021,""2337 Le Flon"",""Secteur tertiaire"",46,95,54,41,59,30,29" -"2021,""2338 La Verrerie"",""Secteur conomique - total"",107,320,108,212,237,52,185" -"2021,""2338 La Verrerie"",""Secteur primaire"",38,117,29,88,93,13,80" -"2021,""2338 La Verrerie"",""Secteur secondaire"",15,98,15,83,82,8,74" -"2021,""2338 La Verrerie"",""Secteur tertiaire"",54,105,64,41,63,31,31" -"2021,""2401 Egerkingen"",""Secteur conomique - total"",294,3670,1639,2031,2889,1059,1830" -"2021,""2401 Egerkingen"",""Secteur primaire"",8,24,X,X,12,X,X" -"2021,""2401 Egerkingen"",""Secteur secondaire"",41,524,X,X,477,X,X" -"2021,""2401 Egerkingen"",""Secteur tertiaire"",245,3122,1528,1594,2401,982,1419" -"2021,""2402 Hrkingen"",""Secteur conomique - total"",202,3320,967,2353,2971,720,2251" -"2021,""2402 Hrkingen"",""Secteur primaire"",8,24,X,X,14,X,X" -"2021,""2402 Hrkingen"",""Secteur secondaire"",44,366,X,X,331,X,X" -"2021,""2402 Hrkingen"",""Secteur tertiaire"",150,2930,888,2042,2626,666,1960" -"2021,""2403 Kestenholz"",""Secteur conomique - total"",128,773,239,534,623,147,475" -"2021,""2403 Kestenholz"",""Secteur primaire"",19,46,10,36,34,5,30" -"2021,""2403 Kestenholz"",""Secteur secondaire"",26,235,57,178,209,42,167" -"2021,""2403 Kestenholz"",""Secteur tertiaire"",83,492,172,320,379,101,279" -"2021,""2404 Neuendorf"",""Secteur conomique - total"",132,2549,1195,1354,2030,815,1214" -"2021,""2404 Neuendorf"",""Secteur primaire"",16,55,19,36,39,8,31" -"2021,""2404 Neuendorf"",""Secteur secondaire"",25,78,17,61,63,8,55" -"2021,""2404 Neuendorf"",""Secteur tertiaire"",91,2416,1159,1257,1927,799,1128" -"2021,""2405 Niederbuchsiten"",""Secteur conomique - total"",79,715,266,449,593,187,406" -"2021,""2405 Niederbuchsiten"",""Secteur primaire"",18,76,25,51,56,13,43" -"2021,""2405 Niederbuchsiten"",""Secteur secondaire"",12,304,70,234,282,60,221" -"2021,""2405 Niederbuchsiten"",""Secteur tertiaire"",49,335,171,164,255,113,142" -"2021,""2406 Oberbuchsiten"",""Secteur conomique - total"",121,549,221,328,413,129,285" -"2021,""2406 Oberbuchsiten"",""Secteur primaire"",9,19,X,X,9,X,X" -"2021,""2406 Oberbuchsiten"",""Secteur secondaire"",26,123,X,X,105,X,X" -"2021,""2406 Oberbuchsiten"",""Secteur tertiaire"",86,407,191,216,299,112,187" -"2021,""2407 Oensingen"",""Secteur conomique - total"",466,5535,2138,3397,4290,1372,2918" -"2021,""2407 Oensingen"",""Secteur primaire"",11,86,24,62,49,9,39" -"2021,""2407 Oensingen"",""Secteur secondaire"",97,1876,459,1417,1727,360,1367" -"2021,""2407 Oensingen"",""Secteur tertiaire"",358,3573,1655,1918,2514,1003,1511" -"2021,""2408 Wolfwil"",""Secteur conomique - total"",153,804,279,525,627,163,464" -"2021,""2408 Wolfwil"",""Secteur primaire"",16,52,18,34,34,9,24" -"2021,""2408 Wolfwil"",""Secteur secondaire"",37,275,69,206,232,44,189" -"2021,""2408 Wolfwil"",""Secteur tertiaire"",100,477,192,285,361,110,251" -"2021,""2421 Aedermannsdorf"",""Secteur conomique - total"",60,178,73,105,122,38,83" -"2021,""2421 Aedermannsdorf"",""Secteur primaire"",18,40,X,X,25,X,X" -"2021,""2421 Aedermannsdorf"",""Secteur secondaire"",8,40,X,X,35,X,X" -"2021,""2421 Aedermannsdorf"",""Secteur tertiaire"",34,98,56,42,61,32,29" -"2021,""2422 Balsthal"",""Secteur conomique - total"",376,2734,1350,1384,1993,817,1176" -"2021,""2422 Balsthal"",""Secteur primaire"",12,34,12,22,23,7,16" -"2021,""2422 Balsthal"",""Secteur secondaire"",90,868,233,635,769,162,607" -"2021,""2422 Balsthal"",""Secteur tertiaire"",274,1832,1105,727,1201,648,553" -"2021,""2424 Herbetswil"",""Secteur conomique - total"",45,154,71,83,98,33,65" -"2021,""2424 Herbetswil"",""Secteur primaire"",19,51,15,36,31,7,24" -"2021,""2424 Herbetswil"",""Secteur secondaire"",11,48,21,27,41,15,25" -"2021,""2424 Herbetswil"",""Secteur tertiaire"",15,55,35,20,27,11,15" -"2021,""2425 Holderbank (SO)"",""Secteur conomique - total"",54,267,102,165,184,55,128" -"2021,""2425 Holderbank (SO)"",""Secteur primaire"",15,58,25,33,29,11,18" -"2021,""2425 Holderbank (SO)"",""Secteur secondaire"",11,126,27,99,110,20,90" -"2021,""2425 Holderbank (SO)"",""Secteur tertiaire"",28,83,50,33,45,24,20" -"2021,""2426 Laupersdorf"",""Secteur conomique - total"",121,462,210,252,323,115,209" -"2021,""2426 Laupersdorf"",""Secteur primaire"",34,97,36,61,57,15,42" -"2021,""2426 Laupersdorf"",""Secteur secondaire"",33,206,69,137,174,47,127" -"2021,""2426 Laupersdorf"",""Secteur tertiaire"",54,159,105,54,92,52,40" -"2021,""2427 Matzendorf"",""Secteur conomique - total"",108,438,188,250,285,91,193" -"2021,""2427 Matzendorf"",""Secteur primaire"",27,65,26,39,39,11,28" -"2021,""2427 Matzendorf"",""Secteur secondaire"",23,132,28,104,107,13,95" -"2021,""2427 Matzendorf"",""Secteur tertiaire"",58,241,134,107,138,68,71" -"2021,""2428 Mmliswil-Ramiswil"",""Secteur conomique - total"",182,796,360,436,551,188,362" -"2021,""2428 Mmliswil-Ramiswil"",""Secteur primaire"",73,191,69,122,137,42,95" -"2021,""2428 Mmliswil-Ramiswil"",""Secteur secondaire"",29,238,46,192,206,28,178" -"2021,""2428 Mmliswil-Ramiswil"",""Secteur tertiaire"",80,367,245,122,208,118,90" -"2021,""2430 Welschenrohr-Gnsbrunnen"",""Secteur conomique - total"",92,274,127,147,182,70,113" -"2021,""2430 Welschenrohr-Gnsbrunnen"",""Secteur primaire"",21,65,25,40,45,16,30" -"2021,""2430 Welschenrohr-Gnsbrunnen"",""Secteur secondaire"",17,100,31,69,79,18,61" -"2021,""2430 Welschenrohr-Gnsbrunnen"",""Secteur tertiaire"",54,109,71,38,58,36,22" -"2021,""2445 Biezwil"",""Secteur conomique - total"",20,79,23,56,59,13,46" -"2021,""2445 Biezwil"",""Secteur primaire"",X,26,X,X,16,X,X" -"2021,""2445 Biezwil"",""Secteur secondaire"",X,30,X,X,27,X,X" -"2021,""2445 Biezwil"",""Secteur tertiaire"",10,23,X,X,16,X,X" -"2021,""2455 Lterkofen-Ichertswil"",""Secteur conomique - total"",55,174,90,84,112,48,64" -"2021,""2455 Lterkofen-Ichertswil"",""Secteur primaire"",13,31,9,22,20,5,15" -"2021,""2455 Lterkofen-Ichertswil"",""Secteur secondaire"",8,35,11,24,26,6,20" -"2021,""2455 Lterkofen-Ichertswil"",""Secteur tertiaire"",34,108,70,38,65,37,28" -"2021,""2456 Lterswil-Gchliwil"",""Secteur conomique - total"",31,100,36,64,58,16,42" -"2021,""2456 Lterswil-Gchliwil"",""Secteur primaire"",8,18,X,X,8,X,X" -"2021,""2456 Lterswil-Gchliwil"",""Secteur secondaire"",7,15,X,X,12,X,X" -"2021,""2456 Lterswil-Gchliwil"",""Secteur tertiaire"",16,67,29,38,38,13,25" -"2021,""2457 Messen"",""Secteur conomique - total"",124,435,220,215,291,126,165" -"2021,""2457 Messen"",""Secteur primaire"",38,103,36,67,69,20,50" -"2021,""2457 Messen"",""Secteur secondaire"",15,60,17,43,48,10,39" -"2021,""2457 Messen"",""Secteur tertiaire"",71,272,167,105,173,97,77" -"2021,""2461 Schnottwil"",""Secteur conomique - total"",83,344,104,240,256,47,208" -"2021,""2461 Schnottwil"",""Secteur primaire"",22,49,14,35,33,7,26" -"2021,""2461 Schnottwil"",""Secteur secondaire"",19,171,18,153,155,8,147" -"2021,""2461 Schnottwil"",""Secteur tertiaire"",42,124,72,52,67,32,35" -"2021,""2463 Unterramsern"",""Secteur conomique - total"",21,61,22,39,41,9,32" -"2021,""2463 Unterramsern"",""Secteur primaire"",X,20,X,X,12,X,X" -"2021,""2463 Unterramsern"",""Secteur secondaire"",X,24,X,X,20,X,X" -"2021,""2463 Unterramsern"",""Secteur tertiaire"",13,17,X,X,9,X,X" -"2021,""2464 Lsslingen-Nennigkofen"",""Secteur conomique - total"",96,525,180,345,412,113,299" -"2021,""2464 Lsslingen-Nennigkofen"",""Secteur primaire"",21,64,18,46,36,6,30" -"2021,""2464 Lsslingen-Nennigkofen"",""Secteur secondaire"",14,332,90,242,302,72,230" -"2021,""2464 Lsslingen-Nennigkofen"",""Secteur tertiaire"",61,129,72,57,74,36,39" -"2021,""2465 Buchegg"",""Secteur conomique - total"",208,1098,586,512,709,313,397" -"2021,""2465 Buchegg"",""Secteur primaire"",62,209,81,128,142,44,97" -"2021,""2465 Buchegg"",""Secteur secondaire"",41,157,48,109,122,25,97" -"2021,""2465 Buchegg"",""Secteur tertiaire"",105,732,457,275,446,243,202" -"2021,""2471 Bttwil"",""Secteur conomique - total"",87,450,141,309,364,94,270" -"2021,""2471 Bttwil"",""Secteur primaire"",8,34,13,21,27,11,16" -"2021,""2471 Bttwil"",""Secteur secondaire"",16,204,35,169,185,26,158" -"2021,""2471 Bttwil"",""Secteur tertiaire"",63,212,93,119,153,57,96" -"2021,""2472 Bren (SO)"",""Secteur conomique - total"",68,170,88,82,103,47,56" -"2021,""2472 Bren (SO)"",""Secteur primaire"",11,35,X,X,24,X,X" -"2021,""2472 Bren (SO)"",""Secteur secondaire"",10,13,X,X,10,X,X" -"2021,""2472 Bren (SO)"",""Secteur tertiaire"",47,122,73,49,69,38,31" -"2021,""2473 Dornach"",""Secteur conomique - total"",494,2717,1458,1259,1926,890,1036" -"2021,""2473 Dornach"",""Secteur primaire"",X,9,X,X,4,X,X" -"2021,""2473 Dornach"",""Secteur secondaire"",X,412,X,X,364,X,X" -"2021,""2473 Dornach"",""Secteur tertiaire"",432,2296,1386,910,1558,843,715" -"2021,""2474 Gempen"",""Secteur conomique - total"",51,411,223,188,286,136,150" -"2021,""2474 Gempen"",""Secteur primaire"",10,32,X,X,21,X,X" -"2021,""2474 Gempen"",""Secteur secondaire"",8,28,X,X,25,X,X" -"2021,""2474 Gempen"",""Secteur tertiaire"",33,351,206,145,240,127,113" -"2021,""2475 Hochwald"",""Secteur conomique - total"",94,227,117,110,153,65,87" -"2021,""2475 Hochwald"",""Secteur primaire"",14,44,14,30,23,6,17" -"2021,""2475 Hochwald"",""Secteur secondaire"",12,31,9,22,27,6,21" -"2021,""2475 Hochwald"",""Secteur tertiaire"",68,152,94,58,104,54,50" -"2021,""2476 Hofstetten-Flh"",""Secteur conomique - total"",155,462,210,252,339,126,213" -"2021,""2476 Hofstetten-Flh"",""Secteur primaire"",8,27,11,16,17,4,13" -"2021,""2476 Hofstetten-Flh"",""Secteur secondaire"",25,157,40,117,141,31,110" -"2021,""2476 Hofstetten-Flh"",""Secteur tertiaire"",122,278,159,119,181,91,90" -"2021,""2477 Metzerlen-Mariastein"",""Secteur conomique - total"",70,252,122,130,169,68,101" -"2021,""2477 Metzerlen-Mariastein"",""Secteur primaire"",15,64,X,X,38,X,X" -"2021,""2477 Metzerlen-Mariastein"",""Secteur secondaire"",9,22,X,X,18,X,X" -"2021,""2477 Metzerlen-Mariastein"",""Secteur tertiaire"",46,166,86,80,114,52,62" -"2021,""2478 Nuglar-St. Pantaleon"",""Secteur conomique - total"",104,202,96,106,120,48,72" -"2021,""2478 Nuglar-St. Pantaleon"",""Secteur primaire"",15,31,11,20,12,6,7" -"2021,""2478 Nuglar-St. Pantaleon"",""Secteur secondaire"",21,47,9,38,39,5,34" -"2021,""2478 Nuglar-St. Pantaleon"",""Secteur tertiaire"",68,124,76,48,69,37,31" -"2021,""2479 Rodersdorf"",""Secteur conomique - total"",96,211,95,116,130,48,82" -"2021,""2479 Rodersdorf"",""Secteur primaire"",10,36,X,X,21,X,X" -"2021,""2479 Rodersdorf"",""Secteur secondaire"",8,38,X,X,33,X,X" -"2021,""2479 Rodersdorf"",""Secteur tertiaire"",78,137,79,58,77,41,36" -"2021,""2480 Seewen"",""Secteur conomique - total"",91,257,105,152,166,54,112" -"2021,""2480 Seewen"",""Secteur primaire"",23,63,22,41,36,11,26" -"2021,""2480 Seewen"",""Secteur secondaire"",11,58,12,46,43,5,38" -"2021,""2480 Seewen"",""Secteur tertiaire"",57,136,71,65,87,38,49" -"2021,""2481 Witterswil"",""Secteur conomique - total"",87,611,303,308,456,192,264" -"2021,""2481 Witterswil"",""Secteur primaire"",6,44,26,18,28,14,14" -"2021,""2481 Witterswil"",""Secteur secondaire"",21,163,40,123,138,26,112" -"2021,""2481 Witterswil"",""Secteur tertiaire"",60,404,237,167,291,152,138" -"2021,""2491 Hauenstein-Ifenthal"",""Secteur conomique - total"",39,86,38,48,46,18,28" -"2021,""2491 Hauenstein-Ifenthal"",""Secteur primaire"",15,37,16,21,17,6,11" -"2021,""2491 Hauenstein-Ifenthal"",""Secteur secondaire"",7,10,0,10,6,0,6" -"2021,""2491 Hauenstein-Ifenthal"",""Secteur tertiaire"",17,39,22,17,23,12,12" -"2021,""2492 Kienberg"",""Secteur conomique - total"",44,105,42,63,66,23,43" -"2021,""2492 Kienberg"",""Secteur primaire"",22,57,X,X,32,X,X" -"2021,""2492 Kienberg"",""Secteur secondaire"",5,8,X,X,6,X,X" -"2021,""2492 Kienberg"",""Secteur tertiaire"",17,40,21,19,28,14,14" -"2021,""2493 Lostorf"",""Secteur conomique - total"",213,1015,448,567,724,280,444" -"2021,""2493 Lostorf"",""Secteur primaire"",22,59,25,34,27,11,17" -"2021,""2493 Lostorf"",""Secteur secondaire"",40,291,75,216,257,50,207" -"2021,""2493 Lostorf"",""Secteur tertiaire"",151,665,348,317,440,219,221" -"2021,""2495 Niedergsgen"",""Secteur conomique - total"",182,1221,495,726,984,327,657" -"2021,""2495 Niedergsgen"",""Secteur primaire"",10,33,12,21,25,8,17" -"2021,""2495 Niedergsgen"",""Secteur secondaire"",51,501,87,414,459,63,395" -"2021,""2495 Niedergsgen"",""Secteur tertiaire"",121,687,396,291,501,255,246" -"2021,""2497 Obergsgen"",""Secteur conomique - total"",114,557,273,284,396,161,236" -"2021,""2497 Obergsgen"",""Secteur primaire"",9,23,X,X,12,X,X" -"2021,""2497 Obergsgen"",""Secteur secondaire"",18,123,X,X,103,X,X" -"2021,""2497 Obergsgen"",""Secteur tertiaire"",87,411,243,168,281,145,135" -"2021,""2499 Stsslingen"",""Secteur conomique - total"",72,215,100,115,136,51,85" -"2021,""2499 Stsslingen"",""Secteur primaire"",22,52,22,30,26,10,17" -"2021,""2499 Stsslingen"",""Secteur secondaire"",7,33,12,21,24,7,17" -"2021,""2499 Stsslingen"",""Secteur tertiaire"",43,130,66,64,86,34,52" -"2021,""2500 Trimbach"",""Secteur conomique - total"",294,1838,845,993,1414,565,849" -"2021,""2500 Trimbach"",""Secteur primaire"",11,39,8,31,25,5,19" -"2021,""2500 Trimbach"",""Secteur secondaire"",57,677,247,430,612,204,408" -"2021,""2500 Trimbach"",""Secteur tertiaire"",226,1122,590,532,777,356,422" -"2021,""2501 Winznau"",""Secteur conomique - total"",96,341,144,197,235,82,153" -"2021,""2501 Winznau"",""Secteur primaire"",7,28,X,X,17,X,X" -"2021,""2501 Winznau"",""Secteur secondaire"",22,51,X,X,38,X,X" -"2021,""2501 Winznau"",""Secteur tertiaire"",67,262,127,135,180,75,104" -"2021,""2502 Wisen (SO)"",""Secteur conomique - total"",31,91,46,45,58,28,30" -"2021,""2502 Wisen (SO)"",""Secteur primaire"",12,26,X,X,15,X,X" -"2021,""2502 Wisen (SO)"",""Secteur secondaire"",4,6,X,X,4,X,X" -"2021,""2502 Wisen (SO)"",""Secteur tertiaire"",15,59,34,25,40,21,19" -"2021,""2503 Erlinsbach (SO)"",""Secteur conomique - total"",165,658,348,310,455,200,255" -"2021,""2503 Erlinsbach (SO)"",""Secteur primaire"",16,41,19,22,23,8,15" -"2021,""2503 Erlinsbach (SO)"",""Secteur secondaire"",27,99,17,82,85,10,75" -"2021,""2503 Erlinsbach (SO)"",""Secteur tertiaire"",122,518,312,206,347,182,165" -"2021,""2511 Aeschi (SO)"",""Secteur conomique - total"",69,300,158,142,179,76,103" -"2021,""2511 Aeschi (SO)"",""Secteur primaire"",16,51,16,35,33,7,27" -"2021,""2511 Aeschi (SO)"",""Secteur secondaire"",13,61,14,47,51,8,43" -"2021,""2511 Aeschi (SO)"",""Secteur tertiaire"",40,188,128,60,94,62,33" -"2021,""2513 Biberist"",""Secteur conomique - total"",479,3315,1726,1589,2489,1100,1389" -"2021,""2513 Biberist"",""Secteur primaire"",19,55,18,37,37,10,27" -"2021,""2513 Biberist"",""Secteur secondaire"",96,734,209,525,642,147,494" -"2021,""2513 Biberist"",""Secteur tertiaire"",364,2526,1499,1027,1811,943,868" -"2021,""2514 Bolken"",""Secteur conomique - total"",31,68,42,26,37,19,18" -"2021,""2514 Bolken"",""Secteur primaire"",X,16,X,X,8,X,X" -"2021,""2514 Bolken"",""Secteur secondaire"",X,7,X,X,6,X,X" -"2021,""2514 Bolken"",""Secteur tertiaire"",24,45,31,14,23,14,8" -"2021,""2516 Deitingen"",""Secteur conomique - total"",177,959,390,569,735,250,485" -"2021,""2516 Deitingen"",""Secteur primaire"",22,72,25,47,48,13,35" -"2021,""2516 Deitingen"",""Secteur secondaire"",34,364,95,269,310,66,244" -"2021,""2516 Deitingen"",""Secteur tertiaire"",121,523,270,253,378,171,206" -"2021,""2517 Derendingen"",""Secteur conomique - total"",321,2081,1061,1020,1521,671,850" -"2021,""2517 Derendingen"",""Secteur primaire"",11,26,9,17,19,6,13" -"2021,""2517 Derendingen"",""Secteur secondaire"",64,563,188,375,479,138,341" -"2021,""2517 Derendingen"",""Secteur tertiaire"",246,1492,864,628,1022,527,495" -"2021,""2518 Etziken"",""Secteur conomique - total"",53,336,120,216,273,73,200" -"2021,""2518 Etziken"",""Secteur primaire"",9,29,12,17,19,6,13" -"2021,""2518 Etziken"",""Secteur secondaire"",16,205,57,148,186,42,144" -"2021,""2518 Etziken"",""Secteur tertiaire"",28,102,51,51,69,25,43" -"2021,""2519 Gerlafingen"",""Secteur conomique - total"",241,1649,620,1029,1308,378,930" -"2021,""2519 Gerlafingen"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""2519 Gerlafingen"",""Secteur secondaire"",40,701,61,640,666,43,623" -"2021,""2519 Gerlafingen"",""Secteur tertiaire"",201,948,559,389,642,335,307" -"2021,""2520 Halten"",""Secteur conomique - total"",49,159,75,84,103,41,62" -"2021,""2520 Halten"",""Secteur primaire"",10,37,X,X,26,X,X" -"2021,""2520 Halten"",""Secteur secondaire"",4,13,X,X,9,X,X" -"2021,""2520 Halten"",""Secteur tertiaire"",35,109,62,47,68,33,34" -"2021,""2523 Horriwil"",""Secteur conomique - total"",42,188,52,136,153,31,122" -"2021,""2523 Horriwil"",""Secteur primaire"",7,18,X,X,13,X,X" -"2021,""2523 Horriwil"",""Secteur secondaire"",10,106,X,X,99,X,X" -"2021,""2523 Horriwil"",""Secteur tertiaire"",25,64,36,28,41,20,22" -"2021,""2524 Hniken"",""Secteur conomique - total"",9,25,X,X,15,X,X" -"2021,""2524 Hniken"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2524 Hniken"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2524 Hniken"",""Secteur tertiaire"",6,20,X,X,11,X,X" -"2021,""2525 Kriegstetten"",""Secteur conomique - total"",85,496,322,174,329,195,134" -"2021,""2525 Kriegstetten"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""2525 Kriegstetten"",""Secteur secondaire"",17,49,X,X,44,X,X" -"2021,""2525 Kriegstetten"",""Secteur tertiaire"",68,447,X,X,285,X,X" -"2021,""2526 Lohn-Ammannsegg"",""Secteur conomique - total"",181,913,439,474,692,270,422" -"2021,""2526 Lohn-Ammannsegg"",""Secteur primaire"",5,17,X,X,12,X,X" -"2021,""2526 Lohn-Ammannsegg"",""Secteur secondaire"",34,307,X,X,278,X,X" -"2021,""2526 Lohn-Ammannsegg"",""Secteur tertiaire"",142,589,357,232,402,212,190" -"2021,""2527 Luterbach"",""Secteur conomique - total"",184,1936,562,1374,1651,391,1259" -"2021,""2527 Luterbach"",""Secteur primaire"",5,13,X,X,4,X,X" -"2021,""2527 Luterbach"",""Secteur secondaire"",36,308,X,X,276,X,X" -"2021,""2527 Luterbach"",""Secteur tertiaire"",143,1615,512,1103,1370,360,1010" -"2021,""2528 Obergerlafingen"",""Secteur conomique - total"",106,545,209,336,416,126,290" -"2021,""2528 Obergerlafingen"",""Secteur primaire"",4,12,X,X,9,X,X" -"2021,""2528 Obergerlafingen"",""Secteur secondaire"",25,228,X,X,199,X,X" -"2021,""2528 Obergerlafingen"",""Secteur tertiaire"",77,305,147,158,209,83,126" -"2021,""2529 Oekingen"",""Secteur conomique - total"",30,90,44,46,57,21,36" -"2021,""2529 Oekingen"",""Secteur primaire"",4,15,X,X,11,X,X" -"2021,""2529 Oekingen"",""Secteur secondaire"",8,13,X,X,8,X,X" -"2021,""2529 Oekingen"",""Secteur tertiaire"",18,62,38,24,37,19,18" -"2021,""2530 Recherswil"",""Secteur conomique - total"",129,596,286,310,375,147,228" -"2021,""2530 Recherswil"",""Secteur primaire"",8,38,19,19,19,7,12" -"2021,""2530 Recherswil"",""Secteur secondaire"",34,150,25,125,129,14,115" -"2021,""2530 Recherswil"",""Secteur tertiaire"",87,408,242,166,227,126,101" -"2021,""2532 Subingen"",""Secteur conomique - total"",187,2951,1777,1174,1649,775,874" -"2021,""2532 Subingen"",""Secteur primaire"",12,41,11,30,28,5,22" -"2021,""2532 Subingen"",""Secteur secondaire"",35,365,47,318,341,32,308" -"2021,""2532 Subingen"",""Secteur tertiaire"",140,2545,1719,826,1281,737,544" -"2021,""2534 Zuchwil"",""Secteur conomique - total"",403,5774,2361,3413,4705,1645,3059" -"2021,""2534 Zuchwil"",""Secteur primaire"",X,8,X,X,6,X,X" -"2021,""2534 Zuchwil"",""Secteur secondaire"",X,1751,X,X,1631,X,X" -"2021,""2534 Zuchwil"",""Secteur tertiaire"",329,4015,1997,2018,3068,1344,1724" -"2021,""2535 Drei Hfe"",""Secteur conomique - total"",34,78,36,42,42,13,28" -"2021,""2535 Drei Hfe"",""Secteur primaire"",9,26,X,X,15,X,X" -"2021,""2535 Drei Hfe"",""Secteur secondaire"",7,9,X,X,7,X,X" -"2021,""2535 Drei Hfe"",""Secteur tertiaire"",18,43,24,19,20,9,11" -"2021,""2541 Balm bei Gnsberg"",""Secteur conomique - total"",27,98,37,61,54,15,38" -"2021,""2541 Balm bei Gnsberg"",""Secteur primaire"",X,20,X,X,13,X,X" -"2021,""2541 Balm bei Gnsberg"",""Secteur secondaire"",X,14,X,X,12,X,X" -"2021,""2541 Balm bei Gnsberg"",""Secteur tertiaire"",18,64,29,35,29,10,19" -"2021,""2542 Bellach"",""Secteur conomique - total"",275,2366,782,1584,1952,497,1455" -"2021,""2542 Bellach"",""Secteur primaire"",16,39,10,29,26,6,20" -"2021,""2542 Bellach"",""Secteur secondaire"",73,1295,211,1084,1195,156,1039" -"2021,""2542 Bellach"",""Secteur tertiaire"",186,1032,561,471,732,336,396" -"2021,""2543 Bettlach"",""Secteur conomique - total"",251,2137,861,1276,1751,600,1151" -"2021,""2543 Bettlach"",""Secteur primaire"",20,57,20,37,33,9,24" -"2021,""2543 Bettlach"",""Secteur secondaire"",53,1241,362,879,1152,305,848" -"2021,""2543 Bettlach"",""Secteur tertiaire"",178,839,479,360,566,286,280" -"2021,""2544 Feldbrunnen-St. Niklaus"",""Secteur conomique - total"",83,254,136,118,172,76,96" -"2021,""2544 Feldbrunnen-St. Niklaus"",""Secteur primaire"",X,7,X,X,5,X,X" -"2021,""2544 Feldbrunnen-St. Niklaus"",""Secteur secondaire"",X,34,X,X,29,X,X" -"2021,""2544 Feldbrunnen-St. Niklaus"",""Secteur tertiaire"",68,213,123,90,138,68,70" -"2021,""2545 Flumenthal"",""Secteur conomique - total"",64,383,143,240,292,87,205" -"2021,""2545 Flumenthal"",""Secteur primaire"",6,15,X,X,6,X,X" -"2021,""2545 Flumenthal"",""Secteur secondaire"",13,78,X,X,67,X,X" -"2021,""2545 Flumenthal"",""Secteur tertiaire"",45,290,124,166,218,78,140" -"2021,""2546 Grenchen"",""Secteur conomique - total"",1034,10832,4873,5959,8531,3325,5206" -"2021,""2546 Grenchen"",""Secteur primaire"",30,102,37,65,64,17,47" -"2021,""2546 Grenchen"",""Secteur secondaire"",219,5293,1692,3601,4895,1429,3466" -"2021,""2546 Grenchen"",""Secteur tertiaire"",785,5437,3144,2293,3572,1879,1693" -"2021,""2547 Gnsberg"",""Secteur conomique - total"",67,206,88,118,140,49,91" -"2021,""2547 Gnsberg"",""Secteur primaire"",9,25,X,X,13,X,X" -"2021,""2547 Gnsberg"",""Secteur secondaire"",14,63,X,X,52,X,X" -"2021,""2547 Gnsberg"",""Secteur tertiaire"",44,118,68,50,75,39,36" -"2021,""2548 Hubersdorf"",""Secteur conomique - total"",39,120,59,61,64,26,38" -"2021,""2548 Hubersdorf"",""Secteur primaire"",5,12,X,X,8,X,X" -"2021,""2548 Hubersdorf"",""Secteur secondaire"",6,11,X,X,8,X,X" -"2021,""2548 Hubersdorf"",""Secteur tertiaire"",28,97,53,44,48,23,25" -"2021,""2549 Kammersrohr"",""Secteur conomique - total"",X,13,X,X,7,X,X" -"2021,""2549 Kammersrohr"",""Secteur primaire"",X,9,X,X,X,X,X" -"2021,""2549 Kammersrohr"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""2549 Kammersrohr"",""Secteur tertiaire"",X,4,X,X,X,X,X" -"2021,""2550 Langendorf"",""Secteur conomique - total"",190,1461,875,586,899,471,428" -"2021,""2550 Langendorf"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""2550 Langendorf"",""Secteur secondaire"",X,166,X,X,X,X,X" -"2021,""2550 Langendorf"",""Secteur tertiaire"",163,1291,838,453,752,449,304" -"2021,""2551 Lommiswil"",""Secteur conomique - total"",81,195,107,88,123,56,67" -"2021,""2551 Lommiswil"",""Secteur primaire"",15,38,16,22,22,6,16" -"2021,""2551 Lommiswil"",""Secteur secondaire"",10,33,14,19,27,9,18" -"2021,""2551 Lommiswil"",""Secteur tertiaire"",56,124,77,47,75,42,33" -"2021,""2553 Oberdorf (SO)"",""Secteur conomique - total"",97,499,317,182,310,175,135" -"2021,""2553 Oberdorf (SO)"",""Secteur primaire"",12,39,12,27,28,7,22" -"2021,""2553 Oberdorf (SO)"",""Secteur secondaire"",9,35,17,18,25,9,16" -"2021,""2553 Oberdorf (SO)"",""Secteur tertiaire"",76,425,288,137,257,159,98" -"2021,""2554 Riedholz"",""Secteur conomique - total"",124,443,200,243,317,117,200" -"2021,""2554 Riedholz"",""Secteur primaire"",12,31,X,X,20,X,X" -"2021,""2554 Riedholz"",""Secteur secondaire"",20,96,X,X,86,X,X" -"2021,""2554 Riedholz"",""Secteur tertiaire"",92,316,173,143,211,102,109" -"2021,""2555 Rttenen"",""Secteur conomique - total"",93,248,122,126,173,68,105" -"2021,""2555 Rttenen"",""Secteur primaire"",8,20,7,13,16,4,11" -"2021,""2555 Rttenen"",""Secteur secondaire"",25,64,12,52,56,9,47" -"2021,""2555 Rttenen"",""Secteur tertiaire"",60,164,103,61,102,55,47" -"2021,""2556 Selzach"",""Secteur conomique - total"",203,1792,813,979,1440,573,866" -"2021,""2556 Selzach"",""Secteur primaire"",34,127,61,66,54,17,37" -"2021,""2556 Selzach"",""Secteur secondaire"",52,1011,368,643,935,316,619" -"2021,""2556 Selzach"",""Secteur tertiaire"",117,654,384,270,451,241,210" -"2021,""2571 Boningen"",""Secteur conomique - total"",40,213,66,147,165,37,128" -"2021,""2571 Boningen"",""Secteur primaire"",7,28,13,15,19,8,11" -"2021,""2571 Boningen"",""Secteur secondaire"",10,89,9,80,83,5,78" -"2021,""2571 Boningen"",""Secteur tertiaire"",23,96,44,52,64,24,40" -"2021,""2572 Dniken"",""Secteur conomique - total"",229,2533,654,1879,2195,437,1758" -"2021,""2572 Dniken"",""Secteur primaire"",11,32,10,22,22,6,17" -"2021,""2572 Dniken"",""Secteur secondaire"",53,1488,230,1258,1393,172,1222" -"2021,""2572 Dniken"",""Secteur tertiaire"",165,1013,414,599,779,260,520" -"2021,""2573 Dulliken"",""Secteur conomique - total"",256,1486,635,851,1127,394,734" -"2021,""2573 Dulliken"",""Secteur primaire"",10,27,X,X,16,X,X" -"2021,""2573 Dulliken"",""Secteur secondaire"",68,458,X,X,403,X,X" -"2021,""2573 Dulliken"",""Secteur tertiaire"",178,1001,516,485,708,310,398" -"2021,""2574 Eppenberg-Wschnau"",""Secteur conomique - total"",28,301,50,251,264,32,232" -"2021,""2574 Eppenberg-Wschnau"",""Secteur primaire"",5,12,X,X,7,X,X" -"2021,""2574 Eppenberg-Wschnau"",""Secteur secondaire"",6,176,X,X,166,X,X" -"2021,""2574 Eppenberg-Wschnau"",""Secteur tertiaire"",17,113,35,78,92,24,68" -"2021,""2575 Fulenbach"",""Secteur conomique - total"",125,809,278,531,645,167,478" -"2021,""2575 Fulenbach"",""Secteur primaire"",13,47,14,33,34,6,28" -"2021,""2575 Fulenbach"",""Secteur secondaire"",26,252,42,210,226,25,200" -"2021,""2575 Fulenbach"",""Secteur tertiaire"",86,510,222,288,385,135,249" -"2021,""2576 Gretzenbach"",""Secteur conomique - total"",167,925,365,560,714,217,498" -"2021,""2576 Gretzenbach"",""Secteur primaire"",11,37,16,21,20,7,13" -"2021,""2576 Gretzenbach"",""Secteur secondaire"",42,446,99,347,406,74,332" -"2021,""2576 Gretzenbach"",""Secteur tertiaire"",114,442,250,192,289,136,153" -"2021,""2578 Gunzgen"",""Secteur conomique - total"",96,789,261,528,664,182,481" -"2021,""2578 Gunzgen"",""Secteur primaire"",9,34,X,X,21,X,X" -"2021,""2578 Gunzgen"",""Secteur secondaire"",22,236,X,X,214,X,X" -"2021,""2578 Gunzgen"",""Secteur tertiaire"",65,519,202,317,428,141,287" -"2021,""2579 Hgendorf"",""Secteur conomique - total"",286,3202,1220,1982,2615,825,1790" -"2021,""2579 Hgendorf"",""Secteur primaire"",11,28,8,20,20,5,15" -"2021,""2579 Hgendorf"",""Secteur secondaire"",43,472,110,362,416,77,339" -"2021,""2579 Hgendorf"",""Secteur tertiaire"",232,2702,1102,1600,2179,743,1436" -"2021,""2580 Kappel (SO)"",""Secteur conomique - total"",149,609,319,290,418,179,239" -"2021,""2580 Kappel (SO)"",""Secteur primaire"",7,20,X,X,12,X,X" -"2021,""2580 Kappel (SO)"",""Secteur secondaire"",28,171,X,X,133,X,X" -"2021,""2580 Kappel (SO)"",""Secteur tertiaire"",114,418,269,149,273,152,121" -"2021,""2581 Olten"",""Secteur conomique - total"",1725,22751,10766,11985,17477,7178,10298" -"2021,""2581 Olten"",""Secteur primaire"",X,8,X,X,6,X,X" -"2021,""2581 Olten"",""Secteur secondaire"",X,2360,X,X,2190,X,X" -"2021,""2581 Olten"",""Secteur tertiaire"",1590,20383,10187,10196,15281,6707,8574" -"2021,""2582 Rickenbach (SO)"",""Secteur conomique - total"",77,651,161,490,555,104,451" -"2021,""2582 Rickenbach (SO)"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2582 Rickenbach (SO)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2582 Rickenbach (SO)"",""Secteur tertiaire"",62,418,131,287,335,83,252" -"2021,""2583 Schnenwerd"",""Secteur conomique - total"",370,2328,1152,1176,1757,736,1021" -"2021,""2583 Schnenwerd"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""2583 Schnenwerd"",""Secteur secondaire"",X,766,X,X,X,X,X" -"2021,""2583 Schnenwerd"",""Secteur tertiaire"",315,1558,X,X,1056,X,X" -"2021,""2584 Starrkirch-Wil"",""Secteur conomique - total"",72,182,86,96,106,40,66" -"2021,""2584 Starrkirch-Wil"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""2584 Starrkirch-Wil"",""Secteur secondaire"",X,31,X,X,X,X,X" -"2021,""2584 Starrkirch-Wil"",""Secteur tertiaire"",60,146,77,69,79,36,43" -"2021,""2585 Walterswil (SO)"",""Secteur conomique - total"",52,247,94,153,193,59,135" -"2021,""2585 Walterswil (SO)"",""Secteur primaire"",16,35,12,23,22,6,16" -"2021,""2585 Walterswil (SO)"",""Secteur secondaire"",5,81,8,73,76,6,70" -"2021,""2585 Walterswil (SO)"",""Secteur tertiaire"",31,131,74,57,96,47,49" -"2021,""2586 Wangen bei Olten"",""Secteur conomique - total"",220,2532,1300,1232,1905,817,1087" -"2021,""2586 Wangen bei Olten"",""Secteur primaire"",6,20,X,X,15,X,X" -"2021,""2586 Wangen bei Olten"",""Secteur secondaire"",30,341,X,X,314,X,X" -"2021,""2586 Wangen bei Olten"",""Secteur tertiaire"",184,2171,1188,983,1576,724,852" -"2021,""2601 Solothurn"",""Secteur conomique - total"",2212,22627,12315,10312,16589,7888,8701" -"2021,""2601 Solothurn"",""Secteur primaire"",5,25,X,X,21,X,X" -"2021,""2601 Solothurn"",""Secteur secondaire"",184,2913,X,X,2564,X,X" -"2021,""2601 Solothurn"",""Secteur tertiaire"",2023,19689,11537,8152,14004,7334,6670" -"2021,""2611 Brschwil"",""Secteur conomique - total"",53,123,49,74,81,25,56" -"2021,""2611 Brschwil"",""Secteur primaire"",16,44,X,X,25,X,X" -"2021,""2611 Brschwil"",""Secteur secondaire"",17,38,X,X,33,X,X" -"2021,""2611 Brschwil"",""Secteur tertiaire"",20,41,29,12,23,16,7" -"2021,""2612 Beinwil (SO)"",""Secteur conomique - total"",49,135,54,81,89,30,60" -"2021,""2612 Beinwil (SO)"",""Secteur primaire"",30,84,29,55,58,17,41" -"2021,""2612 Beinwil (SO)"",""Secteur secondaire"",X,7,X,X,6,X,X" -"2021,""2612 Beinwil (SO)"",""Secteur tertiaire"",X,44,X,X,25,X,X" -"2021,""2613 Breitenbach"",""Secteur conomique - total"",256,1803,997,806,1310,619,691" -"2021,""2613 Breitenbach"",""Secteur primaire"",8,25,10,15,21,7,14" -"2021,""2613 Breitenbach"",""Secteur secondaire"",39,481,113,368,435,81,353" -"2021,""2613 Breitenbach"",""Secteur tertiaire"",209,1297,874,423,855,531,323" -"2021,""2614 Bsserach"",""Secteur conomique - total"",150,677,253,424,516,141,375" -"2021,""2614 Bsserach"",""Secteur primaire"",12,30,8,22,21,4,17" -"2021,""2614 Bsserach"",""Secteur secondaire"",48,280,68,212,232,39,193" -"2021,""2614 Bsserach"",""Secteur tertiaire"",90,367,177,190,263,98,165" -"2021,""2615 Erschwil"",""Secteur conomique - total"",66,406,101,305,337,58,279" -"2021,""2615 Erschwil"",""Secteur primaire"",10,25,9,16,14,4,10" -"2021,""2615 Erschwil"",""Secteur secondaire"",15,275,28,247,259,21,238" -"2021,""2615 Erschwil"",""Secteur tertiaire"",41,106,64,42,64,33,31" -"2021,""2616 Fehren"",""Secteur conomique - total"",39,82,37,45,44,18,25" -"2021,""2616 Fehren"",""Secteur primaire"",X,21,X,X,X,X,X" -"2021,""2616 Fehren"",""Secteur secondaire"",X,6,X,X,X,X,X" -"2021,""2616 Fehren"",""Secteur tertiaire"",28,55,28,27,31,15,16" -"2021,""2617 Grindel"",""Secteur conomique - total"",22,60,25,35,29,10,19" -"2021,""2617 Grindel"",""Secteur primaire"",5,12,X,X,7,X,X" -"2021,""2617 Grindel"",""Secteur secondaire"",5,8,X,X,5,X,X" -"2021,""2617 Grindel"",""Secteur tertiaire"",12,40,18,22,16,7,9" -"2021,""2618 Himmelried"",""Secteur conomique - total"",63,134,58,76,81,29,52" -"2021,""2618 Himmelried"",""Secteur primaire"",10,31,X,X,21,X,X" -"2021,""2618 Himmelried"",""Secteur secondaire"",7,16,X,X,13,X,X" -"2021,""2618 Himmelried"",""Secteur tertiaire"",46,87,44,43,48,22,27" -"2021,""2619 Kleinltzel"",""Secteur conomique - total"",101,364,128,236,274,72,201" -"2021,""2619 Kleinltzel"",""Secteur primaire"",22,59,19,40,39,9,30" -"2021,""2619 Kleinltzel"",""Secteur secondaire"",19,192,43,149,174,33,141" -"2021,""2619 Kleinltzel"",""Secteur tertiaire"",60,113,66,47,61,30,31" -"2021,""2620 Meltingen"",""Secteur conomique - total"",43,125,65,60,80,36,43" -"2021,""2620 Meltingen"",""Secteur primaire"",11,25,X,X,14,X,X" -"2021,""2620 Meltingen"",""Secteur secondaire"",9,17,X,X,12,X,X" -"2021,""2620 Meltingen"",""Secteur tertiaire"",23,83,54,29,53,32,21" -"2021,""2621 Nunningen"",""Secteur conomique - total"",138,624,261,363,447,145,302" -"2021,""2621 Nunningen"",""Secteur primaire"",20,42,X,X,19,X,X" -"2021,""2621 Nunningen"",""Secteur secondaire"",30,240,X,X,210,X,X" -"2021,""2621 Nunningen"",""Secteur tertiaire"",88,342,193,149,218,104,114" -"2021,""2622 Zullwil"",""Secteur conomique - total"",39,87,30,57,60,14,46" -"2021,""2622 Zullwil"",""Secteur primaire"",5,15,X,X,9,X,X" -"2021,""2622 Zullwil"",""Secteur secondaire"",14,38,X,X,31,X,X" -"2021,""2622 Zullwil"",""Secteur tertiaire"",20,34,20,14,20,9,10" -"2021,""2701 Basel"",""Secteur conomique - total"",16438,187788,89225,98563,147828,63107,84721" -"2021,""2701 Basel"",""Secteur primaire"",15,46,15,31,40,14,27" -"2021,""2701 Basel"",""Secteur secondaire"",1370,33072,11553,21519,30948,10185,20763" -"2021,""2701 Basel"",""Secteur tertiaire"",15053,154670,77657,77013,116840,52909,63932" -"2021,""2702 Bettingen"",""Secteur conomique - total"",58,317,164,153,205,96,109" -"2021,""2702 Bettingen"",""Secteur primaire"",X,11,X,X,6,X,X" -"2021,""2702 Bettingen"",""Secteur secondaire"",X,14,X,X,11,X,X" -"2021,""2702 Bettingen"",""Secteur tertiaire"",50,292,157,135,188,93,95" -"2021,""2703 Riehen"",""Secteur conomique - total"",1006,4897,2825,2072,3405,1747,1658" -"2021,""2703 Riehen"",""Secteur primaire"",9,35,11,24,24,5,19" -"2021,""2703 Riehen"",""Secteur secondaire"",105,556,120,436,486,78,408" -"2021,""2703 Riehen"",""Secteur tertiaire"",892,4306,2694,1612,2895,1664,1232" -"2021,""2761 Aesch (BL)"",""Secteur conomique - total"",635,5300,2078,3222,4358,1443,2915" -"2021,""2761 Aesch (BL)"",""Secteur primaire"",13,81,36,45,53,18,34" -"2021,""2761 Aesch (BL)"",""Secteur secondaire"",118,1892,382,1510,1782,316,1466" -"2021,""2761 Aesch (BL)"",""Secteur tertiaire"",504,3327,1660,1667,2523,1109,1414" -"2021,""2762 Allschwil"",""Secteur conomique - total"",1240,12851,5911,6940,10508,4266,6242" -"2021,""2762 Allschwil"",""Secteur primaire"",18,61,19,42,42,9,33" -"2021,""2762 Allschwil"",""Secteur secondaire"",208,2718,522,2196,2519,411,2108" -"2021,""2762 Allschwil"",""Secteur tertiaire"",1014,10072,5370,4702,7946,3846,4100" -"2021,""2763 Arlesheim"",""Secteur conomique - total"",690,6337,2996,3341,4895,1973,2922" -"2021,""2763 Arlesheim"",""Secteur primaire"",5,20,11,9,13,6,7" -"2021,""2763 Arlesheim"",""Secteur secondaire"",75,1571,478,1093,1423,371,1052" -"2021,""2763 Arlesheim"",""Secteur tertiaire"",610,4746,2507,2239,3459,1595,1863" -"2021,""2764 Biel-Benken"",""Secteur conomique - total"",222,1080,443,637,814,271,543" -"2021,""2764 Biel-Benken"",""Secteur primaire"",13,73,34,39,59,25,34" -"2021,""2764 Biel-Benken"",""Secteur secondaire"",38,363,84,279,329,61,268" -"2021,""2764 Biel-Benken"",""Secteur tertiaire"",171,644,325,319,426,184,242" -"2021,""2765 Binningen"",""Secteur conomique - total"",921,5326,3152,2174,3772,2041,1730" -"2021,""2765 Binningen"",""Secteur primaire"",5,12,X,X,10,X,X" -"2021,""2765 Binningen"",""Secteur secondaire"",81,308,X,X,253,X,X" -"2021,""2765 Binningen"",""Secteur tertiaire"",835,5006,3077,1929,3509,1997,1512" -"2021,""2766 Birsfelden"",""Secteur conomique - total"",532,4237,1544,2693,3436,1022,2414" -"2021,""2766 Birsfelden"",""Secteur primaire"",X,8,0,8,8,0,8" -"2021,""2766 Birsfelden"",""Secteur secondaire"",X,1483,296,1187,1377,233,1144" -"2021,""2766 Birsfelden"",""Secteur tertiaire"",437,2746,1248,1498,2052,789,1263" -"2021,""2767 Bottmingen"",""Secteur conomique - total"",313,1695,935,760,1219,573,646" -"2021,""2767 Bottmingen"",""Secteur primaire"",5,48,21,27,38,14,24" -"2021,""2767 Bottmingen"",""Secteur secondaire"",28,259,54,205,235,43,192" -"2021,""2767 Bottmingen"",""Secteur tertiaire"",280,1388,860,528,946,516,430" -"2021,""2768 Ettingen"",""Secteur conomique - total"",280,1206,533,673,924,339,585" -"2021,""2768 Ettingen"",""Secteur primaire"",16,58,10,48,38,6,32" -"2021,""2768 Ettingen"",""Secteur secondaire"",42,442,109,333,405,90,315" -"2021,""2768 Ettingen"",""Secteur tertiaire"",222,706,414,292,482,243,238" -"2021,""2769 Mnchenstein"",""Secteur conomique - total"",1012,12315,5183,7132,9318,3282,6036" -"2021,""2769 Mnchenstein"",""Secteur primaire"",6,26,X,X,18,X,X" -"2021,""2769 Mnchenstein"",""Secteur secondaire"",179,2149,X,X,1956,X,X" -"2021,""2769 Mnchenstein"",""Secteur tertiaire"",827,10140,4818,5322,7344,3027,4317" -"2021,""2770 Muttenz"",""Secteur conomique - total"",1266,13183,4885,8298,10661,3218,7442" -"2021,""2770 Muttenz"",""Secteur primaire"",11,38,11,27,22,5,18" -"2021,""2770 Muttenz"",""Secteur secondaire"",217,3504,511,2993,3288,391,2897" -"2021,""2770 Muttenz"",""Secteur tertiaire"",1038,9641,4363,5278,7350,2823,4527" -"2021,""2771 Oberwil (BL)"",""Secteur conomique - total"",709,3980,1924,2056,2986,1241,1745" -"2021,""2771 Oberwil (BL)"",""Secteur primaire"",11,58,20,38,44,10,33" -"2021,""2771 Oberwil (BL)"",""Secteur secondaire"",86,328,70,258,283,45,238" -"2021,""2771 Oberwil (BL)"",""Secteur tertiaire"",612,3594,1834,1760,2660,1187,1473" -"2021,""2772 Pfeffingen"",""Secteur conomique - total"",118,347,174,173,245,102,143" -"2021,""2772 Pfeffingen"",""Secteur primaire"",6,20,X,X,16,X,X" -"2021,""2772 Pfeffingen"",""Secteur secondaire"",6,14,X,X,12,X,X" -"2021,""2772 Pfeffingen"",""Secteur tertiaire"",106,313,163,150,217,96,121" -"2021,""2773 Reinach (BL)"",""Secteur conomique - total"",1250,11634,4497,7137,9438,3058,6379" -"2021,""2773 Reinach (BL)"",""Secteur primaire"",5,17,8,9,10,5,5" -"2021,""2773 Reinach (BL)"",""Secteur secondaire"",163,3261,494,2767,3080,392,2688" -"2021,""2773 Reinach (BL)"",""Secteur tertiaire"",1082,8356,3995,4361,6348,2661,3686" -"2021,""2774 Schnenbuch"",""Secteur conomique - total"",94,418,197,221,308,125,183" -"2021,""2774 Schnenbuch"",""Secteur primaire"",8,16,X,X,11,X,X" -"2021,""2774 Schnenbuch"",""Secteur secondaire"",18,65,X,X,51,X,X" -"2021,""2774 Schnenbuch"",""Secteur tertiaire"",68,337,177,160,246,114,132" -"2021,""2775 Therwil"",""Secteur conomique - total"",547,3283,1526,1757,2382,982,1400" -"2021,""2775 Therwil"",""Secteur primaire"",14,99,35,64,69,19,50" -"2021,""2775 Therwil"",""Secteur secondaire"",74,534,115,419,485,88,397" -"2021,""2775 Therwil"",""Secteur tertiaire"",459,2650,1376,1274,1828,875,953" -"2021,""2781 Blauen"",""Secteur conomique - total"",42,129,87,42,73,42,31" -"2021,""2781 Blauen"",""Secteur primaire"",6,16,X,X,9,X,X" -"2021,""2781 Blauen"",""Secteur secondaire"",8,48,X,X,29,X,X" -"2021,""2781 Blauen"",""Secteur tertiaire"",28,65,51,14,36,26,10" -"2021,""2782 Brislach"",""Secteur conomique - total"",101,376,120,256,282,66,216" -"2021,""2782 Brislach"",""Secteur primaire"",12,40,14,26,29,9,20" -"2021,""2782 Brislach"",""Secteur secondaire"",22,169,24,145,151,14,137" -"2021,""2782 Brislach"",""Secteur tertiaire"",67,167,82,85,102,44,59" -"2021,""2783 Burg im Leimental"",""Secteur conomique - total"",22,34,13,21,19,6,13" -"2021,""2783 Burg im Leimental"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2783 Burg im Leimental"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2783 Burg im Leimental"",""Secteur tertiaire"",13,20,X,X,12,X,X" -"2021,""2784 Dittingen"",""Secteur conomique - total"",70,203,68,135,142,35,107" -"2021,""2784 Dittingen"",""Secteur primaire"",9,24,X,X,10,X,X" -"2021,""2784 Dittingen"",""Secteur secondaire"",15,67,X,X,57,X,X" -"2021,""2784 Dittingen"",""Secteur tertiaire"",46,112,43,69,75,23,52" -"2021,""2785 Duggingen"",""Secteur conomique - total"",117,634,215,419,500,125,375" -"2021,""2785 Duggingen"",""Secteur primaire"",10,23,11,12,12,5,7" -"2021,""2785 Duggingen"",""Secteur secondaire"",20,283,34,249,266,25,241" -"2021,""2785 Duggingen"",""Secteur tertiaire"",87,328,170,158,223,96,127" -"2021,""2786 Grellingen"",""Secteur conomique - total"",105,356,125,231,257,70,187" -"2021,""2786 Grellingen"",""Secteur primaire"",5,14,X,X,7,X,X" -"2021,""2786 Grellingen"",""Secteur secondaire"",25,151,X,X,130,X,X" -"2021,""2786 Grellingen"",""Secteur tertiaire"",75,191,100,91,120,56,64" -"2021,""2787 Laufen"",""Secteur conomique - total"",523,4396,2010,2386,3459,1340,2118" -"2021,""2787 Laufen"",""Secteur primaire"",8,17,X,X,12,X,X" -"2021,""2787 Laufen"",""Secteur secondaire"",66,1586,X,X,1477,X,X" -"2021,""2787 Laufen"",""Secteur tertiaire"",449,2793,1639,1154,1969,1046,923" -"2021,""2788 Liesberg"",""Secteur conomique - total"",71,668,197,471,569,135,433" -"2021,""2788 Liesberg"",""Secteur primaire"",11,28,12,16,18,7,11" -"2021,""2788 Liesberg"",""Secteur secondaire"",16,471,94,377,442,76,366" -"2021,""2788 Liesberg"",""Secteur tertiaire"",44,169,91,78,109,52,57" -"2021,""2789 Nenzlingen"",""Secteur conomique - total"",36,90,25,65,67,12,55" -"2021,""2789 Nenzlingen"",""Secteur primaire"",7,16,X,X,9,X,X" -"2021,""2789 Nenzlingen"",""Secteur secondaire"",9,45,X,X,42,X,X" -"2021,""2789 Nenzlingen"",""Secteur tertiaire"",20,29,18,11,15,8,7" -"2021,""2790 Roggenburg"",""Secteur conomique - total"",34,59,29,30,37,16,21" -"2021,""2790 Roggenburg"",""Secteur primaire"",10,26,X,X,18,X,X" -"2021,""2790 Roggenburg"",""Secteur secondaire"",5,6,X,X,5,X,X" -"2021,""2790 Roggenburg"",""Secteur tertiaire"",19,27,19,8,14,10,5" -"2021,""2791 Rschenz"",""Secteur conomique - total"",106,276,135,141,183,72,110" -"2021,""2791 Rschenz"",""Secteur primaire"",7,26,X,X,18,X,X" -"2021,""2791 Rschenz"",""Secteur secondaire"",20,47,X,X,37,X,X" -"2021,""2791 Rschenz"",""Secteur tertiaire"",79,203,116,87,127,63,64" -"2021,""2792 Wahlen"",""Secteur conomique - total"",84,228,108,120,140,56,84" -"2021,""2792 Wahlen"",""Secteur primaire"",16,38,X,X,24,X,X" -"2021,""2792 Wahlen"",""Secteur secondaire"",8,11,X,X,8,X,X" -"2021,""2792 Wahlen"",""Secteur tertiaire"",60,179,94,85,107,50,57" -"2021,""2793 Zwingen"",""Secteur conomique - total"",189,1072,366,706,862,224,638" -"2021,""2793 Zwingen"",""Secteur primaire"",5,11,X,X,8,X,X" -"2021,""2793 Zwingen"",""Secteur secondaire"",52,546,X,X,498,X,X" -"2021,""2793 Zwingen"",""Secteur tertiaire"",132,515,266,249,356,159,197" -"2021,""2821 Arisdorf"",""Secteur conomique - total"",115,491,196,295,368,114,254" -"2021,""2821 Arisdorf"",""Secteur primaire"",23,70,28,42,42,15,26" -"2021,""2821 Arisdorf"",""Secteur secondaire"",16,133,18,115,120,13,107" -"2021,""2821 Arisdorf"",""Secteur tertiaire"",76,288,150,138,206,86,120" -"2021,""2822 Augst"",""Secteur conomique - total"",98,779,230,549,660,158,502" -"2021,""2822 Augst"",""Secteur primaire"",7,26,9,17,18,5,14" -"2021,""2822 Augst"",""Secteur secondaire"",22,492,77,415,456,60,396" -"2021,""2822 Augst"",""Secteur tertiaire"",69,261,144,117,185,93,92" -"2021,""2823 Bubendorf"",""Secteur conomique - total"",318,3324,1286,2038,2814,933,1881" -"2021,""2823 Bubendorf"",""Secteur primaire"",17,50,20,30,29,8,20" -"2021,""2823 Bubendorf"",""Secteur secondaire"",54,2040,539,1501,1898,455,1443" -"2021,""2823 Bubendorf"",""Secteur tertiaire"",247,1234,727,507,887,470,417" -"2021,""2824 Frenkendorf"",""Secteur conomique - total"",288,2265,996,1269,1789,670,1119" -"2021,""2824 Frenkendorf"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""2824 Frenkendorf"",""Secteur secondaire"",X,808,X,X,X,X,X" -"2021,""2824 Frenkendorf"",""Secteur tertiaire"",229,1452,X,X,1036,X,X" -"2021,""2825 Fllinsdorf"",""Secteur conomique - total"",280,2111,788,1323,1698,522,1175" -"2021,""2825 Fllinsdorf"",""Secteur primaire"",10,49,18,31,30,12,19" -"2021,""2825 Fllinsdorf"",""Secteur secondaire"",49,696,100,596,664,83,580" -"2021,""2825 Fllinsdorf"",""Secteur tertiaire"",221,1366,670,696,1004,428,576" -"2021,""2826 Giebenach"",""Secteur conomique - total"",59,206,66,140,150,38,113" -"2021,""2826 Giebenach"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""2826 Giebenach"",""Secteur secondaire"",X,86,X,X,X,X,X" -"2021,""2826 Giebenach"",""Secteur tertiaire"",43,115,X,X,80,X,X" -"2021,""2827 Hersberg"",""Secteur conomique - total"",23,34,20,14,22,12,10" -"2021,""2827 Hersberg"",""Secteur primaire"",X,9,X,X,8,X,X" -"2021,""2827 Hersberg"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""2827 Hersberg"",""Secteur tertiaire"",X,25,X,X,14,X,X" -"2021,""2828 Lausen"",""Secteur conomique - total"",304,1799,739,1060,1433,479,954" -"2021,""2828 Lausen"",""Secteur primaire"",6,16,X,X,11,X,X" -"2021,""2828 Lausen"",""Secteur secondaire"",72,664,X,X,608,X,X" -"2021,""2828 Lausen"",""Secteur tertiaire"",226,1119,585,534,814,362,452" -"2021,""2829 Liestal"",""Secteur conomique - total"",1516,17269,9004,8265,12695,5775,6921" -"2021,""2829 Liestal"",""Secteur primaire"",17,64,25,39,44,11,33" -"2021,""2829 Liestal"",""Secteur secondaire"",176,2123,492,1631,1884,344,1539" -"2021,""2829 Liestal"",""Secteur tertiaire"",1323,15082,8487,6595,10768,5419,5348" -"2021,""2830 Lupsingen"",""Secteur conomique - total"",77,153,87,66,90,44,46" -"2021,""2830 Lupsingen"",""Secteur primaire"",4,12,X,X,6,X,X" -"2021,""2830 Lupsingen"",""Secteur secondaire"",5,8,X,X,7,X,X" -"2021,""2830 Lupsingen"",""Secteur tertiaire"",68,133,79,54,78,40,38" -"2021,""2831 Pratteln"",""Secteur conomique - total"",1220,15108,5366,9742,12608,3755,8853" -"2021,""2831 Pratteln"",""Secteur primaire"",14,41,10,31,29,5,24" -"2021,""2831 Pratteln"",""Secteur secondaire"",206,4078,733,3345,3828,577,3251" -"2021,""2831 Pratteln"",""Secteur tertiaire"",1000,10989,4623,6366,8751,3173,5578" -"2021,""2832 Ramlinsburg"",""Secteur conomique - total"",46,131,75,56,63,32,31" -"2021,""2832 Ramlinsburg"",""Secteur primaire"",9,18,X,X,11,X,X" -"2021,""2832 Ramlinsburg"",""Secteur secondaire"",4,6,X,X,4,X,X" -"2021,""2832 Ramlinsburg"",""Secteur tertiaire"",33,107,67,40,48,28,20" -"2021,""2833 Seltisberg"",""Secteur conomique - total"",66,227,133,94,152,75,78" -"2021,""2833 Seltisberg"",""Secteur primaire"",4,8,X,X,5,X,X" -"2021,""2833 Seltisberg"",""Secteur secondaire"",12,45,X,X,39,X,X" -"2021,""2833 Seltisberg"",""Secteur tertiaire"",50,174,123,51,108,70,38" -"2021,""2834 Ziefen"",""Secteur conomique - total"",113,466,160,306,360,92,268" -"2021,""2834 Ziefen"",""Secteur primaire"",17,46,14,32,29,6,23" -"2021,""2834 Ziefen"",""Secteur secondaire"",22,249,53,196,223,37,187" -"2021,""2834 Ziefen"",""Secteur tertiaire"",74,171,93,78,108,50,59" -"2021,""2841 Anwil"",""Secteur conomique - total"",44,106,65,41,58,26,32" -"2021,""2841 Anwil"",""Secteur primaire"",12,39,15,24,X,X,X" -"2021,""2841 Anwil"",""Secteur secondaire"",4,4,X,X,X,X,X" -"2021,""2841 Anwil"",""Secteur tertiaire"",28,63,X,X,31,X,X" -"2021,""2842 Bckten"",""Secteur conomique - total"",64,519,205,314,407,141,266" -"2021,""2842 Bckten"",""Secteur primaire"",7,12,X,X,7,X,X" -"2021,""2842 Bckten"",""Secteur secondaire"",12,334,119,215,289,94,195" -"2021,""2842 Bckten"",""Secteur tertiaire"",45,173,X,X,112,X,X" -"2021,""2843 Buckten"",""Secteur conomique - total"",59,279,91,188,213,52,160" -"2021,""2843 Buckten"",""Secteur primaire"",8,23,X,X,14,X,X" -"2021,""2843 Buckten"",""Secteur secondaire"",12,122,X,X,114,X,X" -"2021,""2843 Buckten"",""Secteur tertiaire"",39,134,67,67,85,36,49" -"2021,""2844 Buus"",""Secteur conomique - total"",87,236,104,132,149,53,95" -"2021,""2844 Buus"",""Secteur primaire"",27,92,33,59,53,14,39" -"2021,""2844 Buus"",""Secteur secondaire"",18,47,10,37,37,5,32" -"2021,""2844 Buus"",""Secteur tertiaire"",42,97,61,36,58,34,24" -"2021,""2845 Diepflingen"",""Secteur conomique - total"",40,194,87,107,139,43,96" -"2021,""2845 Diepflingen"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""2845 Diepflingen"",""Secteur secondaire"",16,76,18,58,64,11,54" -"2021,""2845 Diepflingen"",""Secteur tertiaire"",24,118,69,49,75,32,43" -"2021,""2846 Gelterkinden"",""Secteur conomique - total"",499,2435,1307,1128,1695,773,922" -"2021,""2846 Gelterkinden"",""Secteur primaire"",17,43,13,30,24,5,19" -"2021,""2846 Gelterkinden"",""Secteur secondaire"",93,400,96,304,339,57,281" -"2021,""2846 Gelterkinden"",""Secteur tertiaire"",389,1992,1198,794,1332,711,621" -"2021,""2847 Hfelfingen"",""Secteur conomique - total"",27,123,77,46,78,47,31" -"2021,""2847 Hfelfingen"",""Secteur primaire"",14,35,X,X,X,X,X" -"2021,""2847 Hfelfingen"",""Secteur secondaire"",X,5,X,X,X,X,X" -"2021,""2847 Hfelfingen"",""Secteur tertiaire"",X,83,61,22,55,39,16" -"2021,""2848 Hemmiken"",""Secteur conomique - total"",21,51,26,25,32,13,19" -"2021,""2848 Hemmiken"",""Secteur primaire"",9,26,X,X,17,X,X" -"2021,""2848 Hemmiken"",""Secteur secondaire"",4,8,X,X,6,X,X" -"2021,""2848 Hemmiken"",""Secteur tertiaire"",8,17,X,X,9,X,X" -"2021,""2849 Itingen"",""Secteur conomique - total"",121,1042,467,575,871,339,532" -"2021,""2849 Itingen"",""Secteur primaire"",6,16,X,X,8,X,X" -"2021,""2849 Itingen"",""Secteur secondaire"",24,364,X,X,339,X,X" -"2021,""2849 Itingen"",""Secteur tertiaire"",91,662,315,347,524,205,319" -"2021,""2850 Knerkinden"",""Secteur conomique - total"",21,29,X,X,21,X,X" -"2021,""2850 Knerkinden"",""Secteur primaire"",X,7,X,X,5,X,X" -"2021,""2850 Knerkinden"",""Secteur secondaire"",X,6,X,X,5,X,X" -"2021,""2850 Knerkinden"",""Secteur tertiaire"",13,16,X,X,12,X,X" -"2021,""2851 Kilchberg (BL)"",""Secteur conomique - total"",6,X,X,X,7,X,X" -"2021,""2851 Kilchberg (BL)"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""2851 Kilchberg (BL)"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""2851 Kilchberg (BL)"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""2852 Lufelfingen"",""Secteur conomique - total"",107,458,240,218,323,149,174" -"2021,""2852 Lufelfingen"",""Secteur primaire"",20,49,12,37,30,7,23" -"2021,""2852 Lufelfingen"",""Secteur secondaire"",19,174,75,99,137,49,88" -"2021,""2852 Lufelfingen"",""Secteur tertiaire"",68,235,153,82,156,94,63" -"2021,""2853 Maisprach"",""Secteur conomique - total"",64,218,75,143,162,43,119" -"2021,""2853 Maisprach"",""Secteur primaire"",18,62,20,42,39,10,30" -"2021,""2853 Maisprach"",""Secteur secondaire"",14,81,12,69,71,6,65" -"2021,""2853 Maisprach"",""Secteur tertiaire"",32,75,43,32,52,27,25" -"2021,""2854 Nusshof"",""Secteur conomique - total"",25,77,28,49,54,16,38" -"2021,""2854 Nusshof"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""2854 Nusshof"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""2854 Nusshof"",""Secteur tertiaire"",20,47,22,25,30,12,18" -"2021,""2855 Oltingen"",""Secteur conomique - total"",57,148,59,89,95,29,66" -"2021,""2855 Oltingen"",""Secteur primaire"",19,56,21,35,34,11,23" -"2021,""2855 Oltingen"",""Secteur secondaire"",11,38,8,30,31,5,27" -"2021,""2855 Oltingen"",""Secteur tertiaire"",27,54,30,24,30,13,16" -"2021,""2856 Ormalingen"",""Secteur conomique - total"",141,829,357,472,659,227,432" -"2021,""2856 Ormalingen"",""Secteur primaire"",17,67,26,41,49,17,32" -"2021,""2856 Ormalingen"",""Secteur secondaire"",33,316,46,270,290,30,260" -"2021,""2856 Ormalingen"",""Secteur tertiaire"",91,446,285,161,320,181,140" -"2021,""2857 Rickenbach (BL)"",""Secteur conomique - total"",50,118,62,56,67,29,38" -"2021,""2857 Rickenbach (BL)"",""Secteur primaire"",X,37,15,22,21,6,15" -"2021,""2857 Rickenbach (BL)"",""Secteur secondaire"",X,16,8,8,12,5,7" -"2021,""2857 Rickenbach (BL)"",""Secteur tertiaire"",33,65,39,26,34,18,16" -"2021,""2858 Rothenfluh"",""Secteur conomique - total"",66,175,71,104,118,36,82" -"2021,""2858 Rothenfluh"",""Secteur primaire"",17,48,X,X,28,X,X" -"2021,""2858 Rothenfluh"",""Secteur secondaire"",13,52,X,X,43,X,X" -"2021,""2858 Rothenfluh"",""Secteur tertiaire"",36,75,46,29,46,24,22" -"2021,""2859 Rmlingen"",""Secteur conomique - total"",29,149,46,103,114,25,89" -"2021,""2859 Rmlingen"",""Secteur primaire"",6,15,X,X,9,X,X" -"2021,""2859 Rmlingen"",""Secteur secondaire"",8,87,X,X,77,X,X" -"2021,""2859 Rmlingen"",""Secteur tertiaire"",15,47,27,20,28,15,13" -"2021,""2860 Rnenberg"",""Secteur conomique - total"",52,147,75,72,90,42,48" -"2021,""2860 Rnenberg"",""Secteur primaire"",11,32,12,20,15,4,11" -"2021,""2860 Rnenberg"",""Secteur secondaire"",8,28,7,21,25,5,20" -"2021,""2860 Rnenberg"",""Secteur tertiaire"",33,87,56,31,50,32,18" -"2021,""2861 Sissach"",""Secteur conomique - total"",654,4250,1853,2397,3273,1171,2102" -"2021,""2861 Sissach"",""Secteur primaire"",22,101,40,61,48,14,33" -"2021,""2861 Sissach"",""Secteur secondaire"",79,1369,290,1079,1245,211,1034" -"2021,""2861 Sissach"",""Secteur tertiaire"",553,2780,1523,1257,1980,946,1035" -"2021,""2862 Tecknau"",""Secteur conomique - total"",32,142,43,99,107,21,86" -"2021,""2862 Tecknau"",""Secteur primaire"",X,6,X,X,4,X,X" -"2021,""2862 Tecknau"",""Secteur secondaire"",X,93,X,X,80,X,X" -"2021,""2862 Tecknau"",""Secteur tertiaire"",18,43,X,X,23,X,X" -"2021,""2863 Tenniken"",""Secteur conomique - total"",64,396,125,271,324,80,244" -"2021,""2863 Tenniken"",""Secteur primaire"",12,22,X,X,10,X,X" -"2021,""2863 Tenniken"",""Secteur secondaire"",11,244,X,X,228,X,X" -"2021,""2863 Tenniken"",""Secteur tertiaire"",41,130,74,56,86,43,42" -"2021,""2864 Thrnen"",""Secteur conomique - total"",48,289,147,142,207,84,123" -"2021,""2864 Thrnen"",""Secteur primaire"",7,23,11,12,13,6,8" -"2021,""2864 Thrnen"",""Secteur secondaire"",12,111,18,93,97,10,87" -"2021,""2864 Thrnen"",""Secteur tertiaire"",29,155,118,37,98,69,29" -"2021,""2865 Wenslingen"",""Secteur conomique - total"",54,185,102,83,116,55,61" -"2021,""2865 Wenslingen"",""Secteur primaire"",12,31,X,X,19,X,X" -"2021,""2865 Wenslingen"",""Secteur secondaire"",11,21,X,X,16,X,X" -"2021,""2865 Wenslingen"",""Secteur tertiaire"",31,133,91,42,81,50,31" -"2021,""2866 Wintersingen"",""Secteur conomique - total"",62,144,64,80,83,29,54" -"2021,""2866 Wintersingen"",""Secteur primaire"",19,53,X,X,29,X,X" -"2021,""2866 Wintersingen"",""Secteur secondaire"",9,19,X,X,17,X,X" -"2021,""2866 Wintersingen"",""Secteur tertiaire"",34,72,38,34,37,16,21" -"2021,""2867 Wittinsburg"",""Secteur conomique - total"",42,146,63,83,105,35,70" -"2021,""2867 Wittinsburg"",""Secteur primaire"",6,18,X,X,10,X,X" -"2021,""2867 Wittinsburg"",""Secteur secondaire"",10,55,X,X,50,X,X" -"2021,""2867 Wittinsburg"",""Secteur tertiaire"",26,73,49,24,45,27,18" -"2021,""2868 Zeglingen"",""Secteur conomique - total"",41,109,48,61,69,22,46" -"2021,""2868 Zeglingen"",""Secteur primaire"",21,42,X,X,27,X,X" -"2021,""2868 Zeglingen"",""Secteur secondaire"",6,21,X,X,17,X,X" -"2021,""2868 Zeglingen"",""Secteur tertiaire"",14,46,30,16,26,14,12" -"2021,""2869 Zunzgen"",""Secteur conomique - total"",129,541,262,279,373,150,223" -"2021,""2869 Zunzgen"",""Secteur primaire"",14,92,49,43,52,24,28" -"2021,""2869 Zunzgen"",""Secteur secondaire"",25,130,19,111,109,12,97" -"2021,""2869 Zunzgen"",""Secteur tertiaire"",90,319,194,125,212,114,98" -"2021,""2881 Arboldswil"",""Secteur conomique - total"",35,90,45,45,57,25,32" -"2021,""2881 Arboldswil"",""Secteur primaire"",8,17,X,X,9,X,X" -"2021,""2881 Arboldswil"",""Secteur secondaire"",5,8,X,X,6,X,X" -"2021,""2881 Arboldswil"",""Secteur tertiaire"",22,65,37,28,41,20,21" -"2021,""2882 Bennwil"",""Secteur conomique - total"",62,196,62,134,146,32,114" -"2021,""2882 Bennwil"",""Secteur primaire"",18,43,13,30,27,5,22" -"2021,""2882 Bennwil"",""Secteur secondaire"",13,94,13,81,87,10,77" -"2021,""2882 Bennwil"",""Secteur tertiaire"",31,59,36,23,32,17,15" -"2021,""2883 Bretzwil"",""Secteur conomique - total"",74,178,82,96,111,41,70" -"2021,""2883 Bretzwil"",""Secteur primaire"",26,68,X,X,39,X,X" -"2021,""2883 Bretzwil"",""Secteur secondaire"",8,24,X,X,21,X,X" -"2021,""2883 Bretzwil"",""Secteur tertiaire"",40,86,49,37,51,26,25" -"2021,""2884 Diegten"",""Secteur conomique - total"",125,464,186,278,319,104,215" -"2021,""2884 Diegten"",""Secteur primaire"",29,121,43,78,74,22,52" -"2021,""2884 Diegten"",""Secteur secondaire"",24,106,17,89,88,9,79" -"2021,""2884 Diegten"",""Secteur tertiaire"",72,237,126,111,157,73,85" -"2021,""2885 Eptingen"",""Secteur conomique - total"",67,334,80,254,256,45,212" -"2021,""2885 Eptingen"",""Secteur primaire"",27,73,23,50,43,10,33" -"2021,""2885 Eptingen"",""Secteur secondaire"",11,82,10,72,70,6,64" -"2021,""2885 Eptingen"",""Secteur tertiaire"",29,179,47,132,143,28,115" -"2021,""2886 Hlstein"",""Secteur conomique - total"",146,917,353,564,734,240,495" -"2021,""2886 Hlstein"",""Secteur primaire"",11,31,13,18,20,7,13" -"2021,""2886 Hlstein"",""Secteur secondaire"",37,517,162,355,456,124,332" -"2021,""2886 Hlstein"",""Secteur tertiaire"",98,369,178,191,259,110,149" -"2021,""2887 Lampenberg"",""Secteur conomique - total"",33,69,40,29,35,17,19" -"2021,""2887 Lampenberg"",""Secteur primaire"",9,21,X,X,X,X,X" -"2021,""2887 Lampenberg"",""Secteur secondaire"",4,5,X,X,X,X,X" -"2021,""2887 Lampenberg"",""Secteur tertiaire"",20,43,X,X,21,X,X" -"2021,""2888 Langenbruck"",""Secteur conomique - total"",83,371,178,193,241,97,144" -"2021,""2888 Langenbruck"",""Secteur primaire"",28,71,X,X,47,X,X" -"2021,""2888 Langenbruck"",""Secteur secondaire"",10,30,X,X,26,X,X" -"2021,""2888 Langenbruck"",""Secteur tertiaire"",45,270,149,121,168,83,86" -"2021,""2889 Lauwil"",""Secteur conomique - total"",26,84,37,47,56,18,38" -"2021,""2889 Lauwil"",""Secteur primaire"",9,24,X,X,14,X,X" -"2021,""2889 Lauwil"",""Secteur secondaire"",5,25,X,X,22,X,X" -"2021,""2889 Lauwil"",""Secteur tertiaire"",12,35,22,13,20,10,10" -"2021,""2890 Liedertswil"",""Secteur conomique - total"",13,91,22,69,81,16,65" -"2021,""2890 Liedertswil"",""Secteur primaire"",X,7,X,X,6,X,X" -"2021,""2890 Liedertswil"",""Secteur secondaire"",X,53,X,X,50,X,X" -"2021,""2890 Liedertswil"",""Secteur tertiaire"",7,31,13,18,25,10,16" -"2021,""2891 Niederdorf"",""Secteur conomique - total"",121,866,424,442,655,265,390" -"2021,""2891 Niederdorf"",""Secteur primaire"",11,29,11,18,21,6,15" -"2021,""2891 Niederdorf"",""Secteur secondaire"",31,254,46,208,227,27,200" -"2021,""2891 Niederdorf"",""Secteur tertiaire"",79,583,367,216,408,232,176" -"2021,""2892 Oberdorf (BL)"",""Secteur conomique - total"",147,849,409,440,649,261,388" -"2021,""2892 Oberdorf (BL)"",""Secteur primaire"",11,25,8,17,17,5,13" -"2021,""2892 Oberdorf (BL)"",""Secteur secondaire"",25,249,81,168,220,61,159" -"2021,""2892 Oberdorf (BL)"",""Secteur tertiaire"",111,575,320,255,412,196,216" -"2021,""2893 Reigoldswil"",""Secteur conomique - total"",135,521,283,238,357,169,188" -"2021,""2893 Reigoldswil"",""Secteur primaire"",24,70,22,48,42,12,30" -"2021,""2893 Reigoldswil"",""Secteur secondaire"",25,90,20,70,74,12,62" -"2021,""2893 Reigoldswil"",""Secteur tertiaire"",86,361,241,120,241,145,96" -"2021,""2894 Titterten"",""Secteur conomique - total"",39,133,44,89,82,21,61" -"2021,""2894 Titterten"",""Secteur primaire"",10,28,X,X,16,X,X" -"2021,""2894 Titterten"",""Secteur secondaire"",5,17,X,X,15,X,X" -"2021,""2894 Titterten"",""Secteur tertiaire"",24,88,32,56,51,16,35" -"2021,""2895 Waldenburg"",""Secteur conomique - total"",77,357,127,230,281,82,198" -"2021,""2895 Waldenburg"",""Secteur primaire"",9,39,10,29,24,5,19" -"2021,""2895 Waldenburg"",""Secteur secondaire"",16,208,59,149,187,45,141" -"2021,""2895 Waldenburg"",""Secteur tertiaire"",52,110,58,52,70,31,38" -"2021,""2901 Gchlingen"",""Secteur conomique - total"",69,220,81,139,138,40,98" -"2021,""2901 Gchlingen"",""Secteur primaire"",21,78,25,53,46,11,35" -"2021,""2901 Gchlingen"",""Secteur secondaire"",10,36,13,23,28,8,20" -"2021,""2901 Gchlingen"",""Secteur tertiaire"",38,106,43,63,64,21,43" -"2021,""2903 Lhningen"",""Secteur conomique - total"",92,309,142,167,211,69,141" -"2021,""2903 Lhningen"",""Secteur primaire"",18,61,24,37,35,9,26" -"2021,""2903 Lhningen"",""Secteur secondaire"",18,113,23,90,102,14,88" -"2021,""2903 Lhningen"",""Secteur tertiaire"",56,135,95,40,74,47,27" -"2021,""2904 Neunkirch"",""Secteur conomique - total"",176,924,402,522,713,246,467" -"2021,""2904 Neunkirch"",""Secteur primaire"",20,68,21,47,55,14,41" -"2021,""2904 Neunkirch"",""Secteur secondaire"",32,334,53,281,306,37,269" -"2021,""2904 Neunkirch"",""Secteur tertiaire"",124,522,328,194,352,195,158" -"2021,""2914 Bttenhardt"",""Secteur conomique - total"",24,89,37,52,52,14,38" -"2021,""2914 Bttenhardt"",""Secteur primaire"",X,38,X,X,18,X,X" -"2021,""2914 Bttenhardt"",""Secteur secondaire"",X,22,X,X,20,X,X" -"2021,""2914 Bttenhardt"",""Secteur tertiaire"",12,29,X,X,15,X,X" -"2021,""2915 Drflingen"",""Secteur conomique - total"",73,241,85,156,166,40,126" -"2021,""2915 Drflingen"",""Secteur primaire"",18,54,21,33,39,12,27" -"2021,""2915 Drflingen"",""Secteur secondaire"",11,75,7,68,70,5,66" -"2021,""2915 Drflingen"",""Secteur tertiaire"",44,112,57,55,57,23,34" -"2021,""2917 Lohn (SH)"",""Secteur conomique - total"",55,164,69,95,97,29,69" -"2021,""2917 Lohn (SH)"",""Secteur primaire"",6,20,X,X,10,X,X" -"2021,""2917 Lohn (SH)"",""Secteur secondaire"",12,56,X,X,46,X,X" -"2021,""2917 Lohn (SH)"",""Secteur tertiaire"",37,88,53,35,41,23,19" -"2021,""2919 Stetten (SH)"",""Secteur conomique - total"",60,178,103,75,121,59,62" -"2021,""2919 Stetten (SH)"",""Secteur primaire"",8,21,X,X,13,X,X" -"2021,""2919 Stetten (SH)"",""Secteur secondaire"",6,11,0,11,10,0,10" -"2021,""2919 Stetten (SH)"",""Secteur tertiaire"",46,146,X,X,98,X,X" -"2021,""2920 Thayngen"",""Secteur conomique - total"",443,2576,1109,1467,2069,756,1313" -"2021,""2920 Thayngen"",""Secteur primaire"",57,176,65,111,118,34,84" -"2021,""2920 Thayngen"",""Secteur secondaire"",79,799,254,545,719,197,522" -"2021,""2920 Thayngen"",""Secteur tertiaire"",307,1601,790,811,1232,525,707" -"2021,""2931 Bargen (SH)"",""Secteur conomique - total"",32,83,39,44,57,22,34" -"2021,""2931 Bargen (SH)"",""Secteur primaire"",9,25,X,X,16,X,X" -"2021,""2931 Bargen (SH)"",""Secteur secondaire"",4,12,X,X,8,X,X" -"2021,""2931 Bargen (SH)"",""Secteur tertiaire"",19,46,27,19,32,17,15" -"2021,""2932 Beringen"",""Secteur conomique - total"",282,2527,873,1654,2138,590,1548" -"2021,""2932 Beringen"",""Secteur primaire"",22,60,23,37,38,9,29" -"2021,""2932 Beringen"",""Secteur secondaire"",65,1539,319,1220,1428,255,1173" -"2021,""2932 Beringen"",""Secteur tertiaire"",195,928,531,397,672,326,346" -"2021,""2933 Buchberg"",""Secteur conomique - total"",85,264,123,141,175,63,112" -"2021,""2933 Buchberg"",""Secteur primaire"",23,57,21,36,31,10,22" -"2021,""2933 Buchberg"",""Secteur secondaire"",7,58,15,43,50,9,42" -"2021,""2933 Buchberg"",""Secteur tertiaire"",55,149,87,62,93,44,48" -"2021,""2936 Merishausen"",""Secteur conomique - total"",63,189,76,113,130,41,89" -"2021,""2936 Merishausen"",""Secteur primaire"",10,34,12,22,19,6,14" -"2021,""2936 Merishausen"",""Secteur secondaire"",9,46,11,35,38,6,32" -"2021,""2936 Merishausen"",""Secteur tertiaire"",44,109,53,56,72,29,44" -"2021,""2937 Neuhausen am Rheinfall"",""Secteur conomique - total"",699,5607,2461,3146,4422,1637,2785" -"2021,""2937 Neuhausen am Rheinfall"",""Secteur primaire"",7,40,16,24,22,8,15" -"2021,""2937 Neuhausen am Rheinfall"",""Secteur secondaire"",121,1506,437,1069,1383,349,1034" -"2021,""2937 Neuhausen am Rheinfall"",""Secteur tertiaire"",571,4061,2008,2053,3016,1281,1736" -"2021,""2938 Rdlingen"",""Secteur conomique - total"",70,210,98,112,133,45,88" -"2021,""2938 Rdlingen"",""Secteur primaire"",15,47,13,34,31,6,25" -"2021,""2938 Rdlingen"",""Secteur secondaire"",14,46,11,35,38,6,32" -"2021,""2938 Rdlingen"",""Secteur tertiaire"",41,117,74,43,63,32,31" -"2021,""2939 Schaffhausen"",""Secteur conomique - total"",3072,27991,14084,13907,21762,9461,12301" -"2021,""2939 Schaffhausen"",""Secteur primaire"",28,100,21,79,75,9,66" -"2021,""2939 Schaffhausen"",""Secteur secondaire"",348,6674,2153,4521,6208,1816,4392" -"2021,""2939 Schaffhausen"",""Secteur tertiaire"",2696,21217,11910,9307,15478,7636,7843" -"2021,""2951 Beggingen"",""Secteur conomique - total"",58,136,68,68,80,30,50" -"2021,""2951 Beggingen"",""Secteur primaire"",18,56,X,X,35,X,X" -"2021,""2951 Beggingen"",""Secteur secondaire"",7,17,X,X,13,X,X" -"2021,""2951 Beggingen"",""Secteur tertiaire"",33,63,50,13,33,23,9" -"2021,""2952 Schleitheim"",""Secteur conomique - total"",150,686,265,421,539,160,379" -"2021,""2952 Schleitheim"",""Secteur primaire"",33,91,27,64,65,13,52" -"2021,""2952 Schleitheim"",""Secteur secondaire"",36,260,47,213,234,33,200" -"2021,""2952 Schleitheim"",""Secteur tertiaire"",81,335,191,144,241,114,127" -"2021,""2953 Siblingen"",""Secteur conomique - total"",71,186,93,93,121,45,76" -"2021,""2953 Siblingen"",""Secteur primaire"",20,51,17,34,31,7,24" -"2021,""2953 Siblingen"",""Secteur secondaire"",10,36,7,29,32,4,27" -"2021,""2953 Siblingen"",""Secteur tertiaire"",41,99,69,30,58,33,25" -"2021,""2961 Buch (SH)"",""Secteur conomique - total"",28,73,23,50,42,11,31" -"2021,""2961 Buch (SH)"",""Secteur primaire"",8,21,X,X,14,X,X" -"2021,""2961 Buch (SH)"",""Secteur secondaire"",5,7,X,X,6,X,X" -"2021,""2961 Buch (SH)"",""Secteur tertiaire"",15,45,16,29,23,7,15" -"2021,""2962 Hemishofen"",""Secteur conomique - total"",45,120,49,71,82,25,57" -"2021,""2962 Hemishofen"",""Secteur primaire"",10,55,X,X,45,X,X" -"2021,""2962 Hemishofen"",""Secteur secondaire"",9,11,X,X,8,X,X" -"2021,""2962 Hemishofen"",""Secteur tertiaire"",26,54,X,X,29,X,X" -"2021,""2963 Ramsen"",""Secteur conomique - total"",145,760,327,433,598,224,374" -"2021,""2963 Ramsen"",""Secteur primaire"",30,89,34,55,65,22,43" -"2021,""2963 Ramsen"",""Secteur secondaire"",29,184,36,148,165,24,140" -"2021,""2963 Ramsen"",""Secteur tertiaire"",86,487,257,230,368,177,190" -"2021,""2964 Stein am Rhein"",""Secteur conomique - total"",327,1784,835,949,1369,533,837" -"2021,""2964 Stein am Rhein"",""Secteur primaire"",12,31,13,18,18,6,12" -"2021,""2964 Stein am Rhein"",""Secteur secondaire"",45,562,119,443,521,90,430" -"2021,""2964 Stein am Rhein"",""Secteur tertiaire"",270,1191,703,488,830,436,394" -"2021,""2971 Hallau"",""Secteur conomique - total"",209,983,439,544,683,241,442" -"2021,""2971 Hallau"",""Secteur primaire"",47,221,91,130,119,36,83" -"2021,""2971 Hallau"",""Secteur secondaire"",45,396,122,274,333,83,249" -"2021,""2971 Hallau"",""Secteur tertiaire"",117,366,226,140,231,122,110" -"2021,""2972 Oberhallau"",""Secteur conomique - total"",49,131,62,69,87,37,50" -"2021,""2972 Oberhallau"",""Secteur primaire"",26,82,34,48,55,22,34" -"2021,""2972 Oberhallau"",""Secteur secondaire"",6,11,X,X,10,X,X" -"2021,""2972 Oberhallau"",""Secteur tertiaire"",17,38,X,X,22,X,X" -"2021,""2973 Trasadingen"",""Secteur conomique - total"",62,245,133,112,161,79,82" -"2021,""2973 Trasadingen"",""Secteur primaire"",20,54,22,32,30,8,23" -"2021,""2973 Trasadingen"",""Secteur secondaire"",4,96,58,38,80,44,36" -"2021,""2973 Trasadingen"",""Secteur tertiaire"",38,95,53,42,51,27,24" -"2021,""2974 Wilchingen"",""Secteur conomique - total"",175,882,416,466,626,234,391" -"2021,""2974 Wilchingen"",""Secteur primaire"",60,195,89,106,107,38,68" -"2021,""2974 Wilchingen"",""Secteur secondaire"",34,268,45,223,233,24,209" -"2021,""2974 Wilchingen"",""Secteur tertiaire"",81,419,282,137,286,172,114" -"2021,""3001 Herisau"",""Secteur conomique - total"",1394,10028,4564,5464,7810,2929,4881" -"2021,""3001 Herisau"",""Secteur primaire"",81,221,96,125,143,47,96" -"2021,""3001 Herisau"",""Secteur secondaire"",245,3030,773,2257,2799,617,2182" -"2021,""3001 Herisau"",""Secteur tertiaire"",1068,6777,3695,3082,4868,2265,2603" -"2021,""3002 Hundwil"",""Secteur conomique - total"",117,561,301,260,391,177,215" -"2021,""3002 Hundwil"",""Secteur primaire"",58,151,56,95,101,30,71" -"2021,""3002 Hundwil"",""Secteur secondaire"",15,51,9,42,45,5,40" -"2021,""3002 Hundwil"",""Secteur tertiaire"",44,359,236,123,246,143,103" -"2021,""3003 Schnengrund"",""Secteur conomique - total"",48,156,74,82,116,44,72" -"2021,""3003 Schnengrund"",""Secteur primaire"",19,44,X,X,32,X,X" -"2021,""3003 Schnengrund"",""Secteur secondaire"",9,20,X,X,17,X,X" -"2021,""3003 Schnengrund"",""Secteur tertiaire"",20,92,55,37,67,34,33" -"2021,""3004 Schwellbrunn"",""Secteur conomique - total"",164,594,278,316,430,158,272" -"2021,""3004 Schwellbrunn"",""Secteur primaire"",65,149,61,88,99,31,68" -"2021,""3004 Schwellbrunn"",""Secteur secondaire"",20,129,13,116,119,9,111" -"2021,""3004 Schwellbrunn"",""Secteur tertiaire"",79,316,204,112,212,118,94" -"2021,""3005 Stein (AR)"",""Secteur conomique - total"",132,504,234,270,372,138,235" -"2021,""3005 Stein (AR)"",""Secteur primaire"",37,84,29,55,60,17,42" -"2021,""3005 Stein (AR)"",""Secteur secondaire"",28,135,18,117,120,10,110" -"2021,""3005 Stein (AR)"",""Secteur tertiaire"",67,285,187,98,193,110,82" -"2021,""3006 Urnsch"",""Secteur conomique - total"",225,1026,506,520,735,296,438" -"2021,""3006 Urnsch"",""Secteur primaire"",86,213,76,137,149,45,103" -"2021,""3006 Urnsch"",""Secteur secondaire"",45,249,61,188,210,38,172" -"2021,""3006 Urnsch"",""Secteur tertiaire"",94,564,369,195,376,213,164" -"2021,""3007 Waldstatt"",""Secteur conomique - total"",149,1003,379,624,811,242,569" -"2021,""3007 Waldstatt"",""Secteur primaire"",25,56,22,34,36,11,25" -"2021,""3007 Waldstatt"",""Secteur secondaire"",30,594,114,480,550,87,463" -"2021,""3007 Waldstatt"",""Secteur tertiaire"",94,353,243,110,225,144,81" -"2021,""3021 Bhler"",""Secteur conomique - total"",157,765,351,414,580,213,367" -"2021,""3021 Bhler"",""Secteur primaire"",21,49,19,30,28,8,20" -"2021,""3021 Bhler"",""Secteur secondaire"",36,354,107,247,311,78,233" -"2021,""3021 Bhler"",""Secteur tertiaire"",100,362,225,137,241,128,113" -"2021,""3022 Gais"",""Secteur conomique - total"",296,1378,754,624,951,431,520" -"2021,""3022 Gais"",""Secteur primaire"",41,102,35,67,76,19,57" -"2021,""3022 Gais"",""Secteur secondaire"",46,313,57,256,267,32,235" -"2021,""3022 Gais"",""Secteur tertiaire"",209,963,662,301,607,380,228" -"2021,""3023 Speicher"",""Secteur conomique - total"",314,1417,812,605,1018,509,509" -"2021,""3023 Speicher"",""Secteur primaire"",22,54,21,33,37,10,27" -"2021,""3023 Speicher"",""Secteur secondaire"",53,234,80,154,206,61,145" -"2021,""3023 Speicher"",""Secteur tertiaire"",239,1129,711,418,775,438,338" -"2021,""3024 Teufen (AR)"",""Secteur conomique - total"",666,2868,1471,1397,2086,906,1180" -"2021,""3024 Teufen (AR)"",""Secteur primaire"",54,122,36,86,74,15,59" -"2021,""3024 Teufen (AR)"",""Secteur secondaire"",78,548,158,390,484,113,371" -"2021,""3024 Teufen (AR)"",""Secteur tertiaire"",534,2198,1277,921,1527,778,750" -"2021,""3025 Trogen"",""Secteur conomique - total"",189,962,478,484,700,296,403" -"2021,""3025 Trogen"",""Secteur primaire"",23,52,18,34,35,8,27" -"2021,""3025 Trogen"",""Secteur secondaire"",30,171,32,139,148,20,128" -"2021,""3025 Trogen"",""Secteur tertiaire"",136,739,428,311,517,268,249" -"2021,""3031 Grub (AR)"",""Secteur conomique - total"",75,272,158,114,184,92,92" -"2021,""3031 Grub (AR)"",""Secteur primaire"",16,43,18,25,28,12,16" -"2021,""3031 Grub (AR)"",""Secteur secondaire"",15,38,8,30,34,5,29" -"2021,""3031 Grub (AR)"",""Secteur tertiaire"",44,191,132,59,122,75,47" -"2021,""3032 Heiden"",""Secteur conomique - total"",360,2714,1337,1377,2100,885,1215" -"2021,""3032 Heiden"",""Secteur primaire"",32,79,26,53,53,17,36" -"2021,""3032 Heiden"",""Secteur secondaire"",42,832,204,628,768,164,604" -"2021,""3032 Heiden"",""Secteur tertiaire"",286,1803,1107,696,1279,704,575" -"2021,""3033 Lutzenberg"",""Secteur conomique - total"",122,316,153,163,218,89,129" -"2021,""3033 Lutzenberg"",""Secteur primaire"",14,28,9,19,15,4,10" -"2021,""3033 Lutzenberg"",""Secteur secondaire"",21,49,16,33,36,7,30" -"2021,""3033 Lutzenberg"",""Secteur tertiaire"",87,239,128,111,167,78,89" -"2021,""3034 Rehetobel"",""Secteur conomique - total"",148,538,326,212,369,196,172" -"2021,""3034 Rehetobel"",""Secteur primaire"",22,47,19,28,29,10,19" -"2021,""3034 Rehetobel"",""Secteur secondaire"",34,94,31,63,75,17,58" -"2021,""3034 Rehetobel"",""Secteur tertiaire"",92,397,276,121,264,170,95" -"2021,""3035 Reute (AR)"",""Secteur conomique - total"",63,207,123,84,139,74,65" -"2021,""3035 Reute (AR)"",""Secteur primaire"",13,25,8,17,15,4,11" -"2021,""3035 Reute (AR)"",""Secteur secondaire"",13,43,16,27,35,11,25" -"2021,""3035 Reute (AR)"",""Secteur tertiaire"",37,139,99,40,89,59,30" -"2021,""3036 Wald (AR)"",""Secteur conomique - total"",92,311,113,198,234,64,170" -"2021,""3036 Wald (AR)"",""Secteur primaire"",25,58,22,36,41,12,28" -"2021,""3036 Wald (AR)"",""Secteur secondaire"",19,133,15,118,122,10,112" -"2021,""3036 Wald (AR)"",""Secteur tertiaire"",48,120,76,44,71,42,30" -"2021,""3037 Walzenhausen"",""Secteur conomique - total"",191,1029,478,551,754,289,465" -"2021,""3037 Walzenhausen"",""Secteur primaire"",19,46,15,31,26,6,21" -"2021,""3037 Walzenhausen"",""Secteur secondaire"",45,332,93,239,298,72,226" -"2021,""3037 Walzenhausen"",""Secteur tertiaire"",127,651,370,281,430,211,219" -"2021,""3038 Wolfhalden"",""Secteur conomique - total"",163,631,281,350,484,178,306" -"2021,""3038 Wolfhalden"",""Secteur primaire"",23,52,19,33,31,8,23" -"2021,""3038 Wolfhalden"",""Secteur secondaire"",29,304,102,202,272,77,195" -"2021,""3038 Wolfhalden"",""Secteur tertiaire"",111,275,160,115,181,92,89" -"2021,""3101 Appenzell"",""Secteur conomique - total"",756,4738,2177,2561,3574,1331,2243" -"2021,""3101 Appenzell"",""Secteur primaire"",74,183,63,120,119,30,89" -"2021,""3101 Appenzell"",""Secteur secondaire"",122,1468,406,1062,1289,290,999" -"2021,""3101 Appenzell"",""Secteur tertiaire"",560,3087,1708,1379,2165,1011,1155" -"2021,""3102 Gonten"",""Secteur conomique - total"",181,758,383,375,521,224,297" -"2021,""3102 Gonten"",""Secteur primaire"",75,176,63,113,122,36,86" -"2021,""3102 Gonten"",""Secteur secondaire"",29,185,72,113,153,47,106" -"2021,""3102 Gonten"",""Secteur tertiaire"",77,397,248,149,247,141,106" -"2021,""3103 Rte"",""Secteur conomique - total"",344,1385,643,742,1022,397,625" -"2021,""3103 Rte"",""Secteur primaire"",119,272,91,181,182,45,137" -"2021,""3103 Rte"",""Secteur secondaire"",52,513,192,321,436,137,299" -"2021,""3103 Rte"",""Secteur tertiaire"",173,600,360,240,404,215,189" -"2021,""3104 Schlatt-Haslen"",""Secteur conomique - total"",156,400,170,230,273,89,184" -"2021,""3104 Schlatt-Haslen"",""Secteur primaire"",89,193,67,126,124,32,92" -"2021,""3104 Schlatt-Haslen"",""Secteur secondaire"",21,71,15,56,62,9,52" -"2021,""3104 Schlatt-Haslen"",""Secteur tertiaire"",46,136,88,48,88,48,40" -"2021,""3105 Schwende"",""Secteur conomique - total"",238,1200,631,569,856,398,457" -"2021,""3105 Schwende"",""Secteur primaire"",42,105,38,67,64,22,43" -"2021,""3105 Schwende"",""Secteur secondaire"",30,199,60,139,153,32,121" -"2021,""3105 Schwende"",""Secteur tertiaire"",166,896,533,363,639,344,294" -"2021,""3111 Oberegg"",""Secteur conomique - total"",180,739,264,475,566,147,418" -"2021,""3111 Oberegg"",""Secteur primaire"",49,110,46,64,72,22,50" -"2021,""3111 Oberegg"",""Secteur secondaire"",43,355,64,291,314,37,277" -"2021,""3111 Oberegg"",""Secteur tertiaire"",88,274,154,120,180,89,91" -"2021,""3201 Hggenschwil"",""Secteur conomique - total"",109,359,134,225,262,71,191" -"2021,""3201 Hggenschwil"",""Secteur primaire"",39,111,38,73,81,20,61" -"2021,""3201 Hggenschwil"",""Secteur secondaire"",16,96,17,79,86,11,75" -"2021,""3201 Hggenschwil"",""Secteur tertiaire"",54,152,79,73,95,40,55" -"2021,""3202 Muolen"",""Secteur conomique - total"",118,417,150,267,311,81,229" -"2021,""3202 Muolen"",""Secteur primaire"",53,134,40,94,91,19,72" -"2021,""3202 Muolen"",""Secteur secondaire"",22,72,22,50,55,11,44" -"2021,""3202 Muolen"",""Secteur tertiaire"",43,211,88,123,164,52,113" -"2021,""3203 St. Gallen"",""Secteur conomique - total"",7174,86366,42978,43388,63167,27068,36099" -"2021,""3203 St. Gallen"",""Secteur primaire"",59,159,53,106,107,27,80" -"2021,""3203 St. Gallen"",""Secteur secondaire"",786,11794,2857,8937,10859,2226,8633" -"2021,""3203 St. Gallen"",""Secteur tertiaire"",6329,74413,40068,34345,52201,24815,27386" -"2021,""3204 Wittenbach"",""Secteur conomique - total"",464,3528,1524,2004,2818,985,1833" -"2021,""3204 Wittenbach"",""Secteur primaire"",35,89,23,66,64,11,52" -"2021,""3204 Wittenbach"",""Secteur secondaire"",102,1131,233,898,1030,171,860" -"2021,""3204 Wittenbach"",""Secteur tertiaire"",327,2308,1268,1040,1724,803,921" -"2021,""3211 Berg (SG)"",""Secteur conomique - total"",60,137,70,67,100,42,57" -"2021,""3211 Berg (SG)"",""Secteur primaire"",20,54,X,X,41,X,X" -"2021,""3211 Berg (SG)"",""Secteur secondaire"",8,10,X,X,7,X,X" -"2021,""3211 Berg (SG)"",""Secteur tertiaire"",32,73,43,30,51,24,27" -"2021,""3212 Eggersriet"",""Secteur conomique - total"",132,324,145,179,207,72,135" -"2021,""3212 Eggersriet"",""Secteur primaire"",32,78,X,X,43,X,X" -"2021,""3212 Eggersriet"",""Secteur secondaire"",22,33,X,X,19,X,X" -"2021,""3212 Eggersriet"",""Secteur tertiaire"",78,213,107,106,146,59,87" -"2021,""3213 Goldach"",""Secteur conomique - total"",485,4442,1872,2570,3624,1267,2357" -"2021,""3213 Goldach"",""Secteur primaire"",9,74,34,40,38,12,25" -"2021,""3213 Goldach"",""Secteur secondaire"",90,1886,389,1497,1744,302,1442" -"2021,""3213 Goldach"",""Secteur tertiaire"",386,2482,1449,1033,1842,953,889" -"2021,""3214 Mrschwil"",""Secteur conomique - total"",273,1173,521,652,838,289,549" -"2021,""3214 Mrschwil"",""Secteur primaire"",32,100,30,70,70,13,57" -"2021,""3214 Mrschwil"",""Secteur secondaire"",53,283,94,189,244,63,181" -"2021,""3214 Mrschwil"",""Secteur tertiaire"",188,790,397,393,525,213,312" -"2021,""3215 Rorschach"",""Secteur conomique - total"",733,5183,2475,2708,3877,1563,2314" -"2021,""3215 Rorschach"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""3215 Rorschach"",""Secteur secondaire"",106,1134,298,836,1032,228,804" -"2021,""3215 Rorschach"",""Secteur tertiaire"",627,4049,2177,1872,2845,1335,1510" -"2021,""3216 Rorschacherberg"",""Secteur conomique - total"",298,1913,1115,798,1268,576,692" -"2021,""3216 Rorschacherberg"",""Secteur primaire"",15,48,15,33,30,6,24" -"2021,""3216 Rorschacherberg"",""Secteur secondaire"",55,359,51,308,330,32,297" -"2021,""3216 Rorschacherberg"",""Secteur tertiaire"",228,1506,1049,457,908,538,370" -"2021,""3217 Steinach"",""Secteur conomique - total"",211,2101,735,1366,1788,508,1280" -"2021,""3217 Steinach"",""Secteur primaire"",20,103,37,66,66,17,49" -"2021,""3217 Steinach"",""Secteur secondaire"",47,1365,315,1050,1279,256,1023" -"2021,""3217 Steinach"",""Secteur tertiaire"",144,633,383,250,443,234,208" -"2021,""3218 Tbach"",""Secteur conomique - total"",123,779,318,461,627,223,404" -"2021,""3218 Tbach"",""Secteur primaire"",9,21,X,X,15,X,X" -"2021,""3218 Tbach"",""Secteur secondaire"",28,292,X,X,258,X,X" -"2021,""3218 Tbach"",""Secteur tertiaire"",86,466,229,237,355,159,196" -"2021,""3219 Untereggen"",""Secteur conomique - total"",94,280,94,186,210,55,155" -"2021,""3219 Untereggen"",""Secteur primaire"",25,58,16,42,40,9,31" -"2021,""3219 Untereggen"",""Secteur secondaire"",17,73,13,60,64,7,57" -"2021,""3219 Untereggen"",""Secteur tertiaire"",52,149,65,84,107,39,68" -"2021,""3231 Au (SG)"",""Secteur conomique - total"",635,4950,2063,2887,3967,1321,2646" -"2021,""3231 Au (SG)"",""Secteur primaire"",11,27,9,18,21,5,16" -"2021,""3231 Au (SG)"",""Secteur secondaire"",106,2007,372,1635,1876,286,1590" -"2021,""3231 Au (SG)"",""Secteur tertiaire"",518,2916,1682,1234,2069,1029,1040" -"2021,""3232 Balgach"",""Secteur conomique - total"",342,4396,1548,2848,3772,1103,2670" -"2021,""3232 Balgach"",""Secteur primaire"",19,73,21,52,54,12,42" -"2021,""3232 Balgach"",""Secteur secondaire"",70,2746,717,2029,2563,597,1966" -"2021,""3232 Balgach"",""Secteur tertiaire"",253,1577,810,767,1155,494,661" -"2021,""3233 Berneck"",""Secteur conomique - total"",297,2216,910,1306,1839,631,1208" -"2021,""3233 Berneck"",""Secteur primaire"",22,71,25,46,47,17,31" -"2021,""3233 Berneck"",""Secteur secondaire"",73,961,289,672,875,229,646" -"2021,""3233 Berneck"",""Secteur tertiaire"",202,1184,596,588,917,385,531" -"2021,""3234 Diepoldsau"",""Secteur conomique - total"",513,3595,1604,1991,2773,987,1786" -"2021,""3234 Diepoldsau"",""Secteur primaire"",28,196,120,76,93,45,48" -"2021,""3234 Diepoldsau"",""Secteur secondaire"",121,1461,474,987,1301,352,949" -"2021,""3234 Diepoldsau"",""Secteur tertiaire"",364,1938,1010,928,1378,590,788" -"2021,""3235 Rheineck"",""Secteur conomique - total"",280,1604,684,920,1269,437,832" -"2021,""3235 Rheineck"",""Secteur primaire"",X,18,10,8,15,7,8" -"2021,""3235 Rheineck"",""Secteur secondaire"",X,663,177,486,598,128,469" -"2021,""3235 Rheineck"",""Secteur tertiaire"",214,923,497,426,657,302,355" -"2021,""3236 St. Margrethen"",""Secteur conomique - total"",452,4560,1571,2989,3911,1099,2811" -"2021,""3236 St. Margrethen"",""Secteur primaire"",10,38,17,21,23,8,15" -"2021,""3236 St. Margrethen"",""Secteur secondaire"",99,2295,334,1961,2164,272,1893" -"2021,""3236 St. Margrethen"",""Secteur tertiaire"",343,2227,1220,1007,1723,820,903" -"2021,""3237 Thal"",""Secteur conomique - total"",523,3653,1385,2268,3032,968,2065" -"2021,""3237 Thal"",""Secteur primaire"",24,71,23,48,46,9,37" -"2021,""3237 Thal"",""Secteur secondaire"",125,1532,427,1105,1403,337,1067" -"2021,""3237 Thal"",""Secteur tertiaire"",374,2050,935,1115,1583,622,961" -"2021,""3238 Widnau"",""Secteur conomique - total"",690,4981,1965,3016,4011,1249,2762" -"2021,""3238 Widnau"",""Secteur primaire"",5,11,X,X,8,X,X" -"2021,""3238 Widnau"",""Secteur secondaire"",156,1586,X,X,1441,X,X" -"2021,""3238 Widnau"",""Secteur tertiaire"",529,3384,1643,1741,2562,1019,1543" -"2021,""3251 Altsttten"",""Secteur conomique - total"",985,7453,3509,3944,5819,2250,3569" -"2021,""3251 Altsttten"",""Secteur primaire"",106,348,123,225,234,67,167" -"2021,""3251 Altsttten"",""Secteur secondaire"",185,2614,659,1955,2386,498,1888" -"2021,""3251 Altsttten"",""Secteur tertiaire"",694,4491,2727,1764,3199,1685,1514" -"2021,""3252 Eichberg"",""Secteur conomique - total"",99,271,114,157,184,59,125" -"2021,""3252 Eichberg"",""Secteur primaire"",16,39,14,25,24,8,16" -"2021,""3252 Eichberg"",""Secteur secondaire"",25,83,19,64,67,8,58" -"2021,""3252 Eichberg"",""Secteur tertiaire"",58,149,81,68,94,44,50" -"2021,""3253 Marbach (SG)"",""Secteur conomique - total"",152,720,345,375,547,216,331" -"2021,""3253 Marbach (SG)"",""Secteur primaire"",18,103,52,51,72,35,38" -"2021,""3253 Marbach (SG)"",""Secteur secondaire"",28,179,39,140,158,24,134" -"2021,""3253 Marbach (SG)"",""Secteur tertiaire"",106,438,254,184,317,158,159" -"2021,""3254 Oberriet (SG)"",""Secteur conomique - total"",665,5248,1795,3453,4356,1139,3217" -"2021,""3254 Oberriet (SG)"",""Secteur primaire"",94,289,94,195,193,49,145" -"2021,""3254 Oberriet (SG)"",""Secteur secondaire"",178,2641,596,2045,2409,426,1983" -"2021,""3254 Oberriet (SG)"",""Secteur tertiaire"",393,2318,1105,1213,1754,664,1089" -"2021,""3255 Rebstein"",""Secteur conomique - total"",270,1652,845,807,1226,517,709" -"2021,""3255 Rebstein"",""Secteur primaire"",11,26,X,X,15,X,X" -"2021,""3255 Rebstein"",""Secteur secondaire"",45,436,X,X,369,X,X" -"2021,""3255 Rebstein"",""Secteur tertiaire"",214,1190,690,500,842,412,431" -"2021,""3256 Rthi (SG)"",""Secteur conomique - total"",177,1201,448,753,984,282,702" -"2021,""3256 Rthi (SG)"",""Secteur primaire"",14,40,10,30,27,6,22" -"2021,""3256 Rthi (SG)"",""Secteur secondaire"",57,757,228,529,665,158,507" -"2021,""3256 Rthi (SG)"",""Secteur tertiaire"",106,404,210,194,292,118,173" -"2021,""3271 Buchs (SG)"",""Secteur conomique - total"",967,7984,3612,4372,6210,2364,3846" -"2021,""3271 Buchs (SG)"",""Secteur primaire"",29,99,31,68,76,20,56" -"2021,""3271 Buchs (SG)"",""Secteur secondaire"",138,1856,450,1406,1702,362,1340" -"2021,""3271 Buchs (SG)"",""Secteur tertiaire"",800,6029,3131,2898,4432,1981,2450" -"2021,""3272 Gams"",""Secteur conomique - total"",261,1246,518,728,950,314,636" -"2021,""3272 Gams"",""Secteur primaire"",64,158,55,103,103,26,77" -"2021,""3272 Gams"",""Secteur secondaire"",52,503,128,375,449,92,357" -"2021,""3272 Gams"",""Secteur tertiaire"",145,585,335,250,397,196,202" -"2021,""3273 Grabs"",""Secteur conomique - total"",448,3654,1895,1759,2862,1264,1597" -"2021,""3273 Grabs"",""Secteur primaire"",80,219,80,139,146,40,106" -"2021,""3273 Grabs"",""Secteur secondaire"",76,1229,255,974,1123,187,936" -"2021,""3273 Grabs"",""Secteur tertiaire"",292,2206,1560,646,1593,1037,556" -"2021,""3274 Sennwald"",""Secteur conomique - total"",425,4239,1288,2951,3660,905,2755" -"2021,""3274 Sennwald"",""Secteur primaire"",70,187,53,134,126,25,101" -"2021,""3274 Sennwald"",""Secteur secondaire"",88,2611,464,2147,2470,384,2087" -"2021,""3274 Sennwald"",""Secteur tertiaire"",267,1441,771,670,1064,497,567" -"2021,""3275 Sevelen"",""Secteur conomique - total"",304,2184,811,1373,1818,565,1253" -"2021,""3275 Sevelen"",""Secteur primaire"",38,116,39,77,85,23,63" -"2021,""3275 Sevelen"",""Secteur secondaire"",66,1181,280,901,1100,228,872" -"2021,""3275 Sevelen"",""Secteur tertiaire"",200,887,492,395,633,314,318" -"2021,""3276 Wartau"",""Secteur conomique - total"",366,2269,904,1365,1821,582,1239" -"2021,""3276 Wartau"",""Secteur primaire"",51,212,73,139,168,52,116" -"2021,""3276 Wartau"",""Secteur secondaire"",61,948,122,826,891,91,801" -"2021,""3276 Wartau"",""Secteur tertiaire"",254,1109,709,400,761,439,322" -"2021,""3291 Bad Ragaz"",""Secteur conomique - total"",506,3517,1849,1668,2738,1260,1478" -"2021,""3291 Bad Ragaz"",""Secteur primaire"",20,92,31,61,66,18,49" -"2021,""3291 Bad Ragaz"",""Secteur secondaire"",73,855,308,547,780,254,526" -"2021,""3291 Bad Ragaz"",""Secteur tertiaire"",413,2570,1510,1060,1892,988,904" -"2021,""3292 Flums"",""Secteur conomique - total"",422,2489,949,1540,1871,554,1316" -"2021,""3292 Flums"",""Secteur primaire"",121,255,80,175,166,44,123" -"2021,""3292 Flums"",""Secteur secondaire"",79,945,165,780,816,97,719" -"2021,""3292 Flums"",""Secteur tertiaire"",222,1289,704,585,888,414,474" -"2021,""3293 Mels"",""Secteur conomique - total"",608,3525,1760,1765,2638,1085,1553" -"2021,""3293 Mels"",""Secteur primaire"",101,296,104,192,196,54,142" -"2021,""3293 Mels"",""Secteur secondaire"",108,804,188,616,697,118,579" -"2021,""3293 Mels"",""Secteur tertiaire"",399,2425,1468,957,1745,913,832" -"2021,""3294 Pffers"",""Secteur conomique - total"",143,1432,920,512,1021,608,413" -"2021,""3294 Pffers"",""Secteur primaire"",42,201,92,109,140,57,83" -"2021,""3294 Pffers"",""Secteur secondaire"",22,58,12,46,46,4,42" -"2021,""3294 Pffers"",""Secteur tertiaire"",79,1173,816,357,835,547,288" -"2021,""3295 Quarten"",""Secteur conomique - total"",250,1225,536,689,917,329,588" -"2021,""3295 Quarten"",""Secteur primaire"",47,114,39,75,78,23,55" -"2021,""3295 Quarten"",""Secteur secondaire"",45,222,40,182,187,16,171" -"2021,""3295 Quarten"",""Secteur tertiaire"",158,889,457,432,652,290,363" -"2021,""3296 Sargans"",""Secteur conomique - total"",470,4311,1669,2642,3382,1058,2324" -"2021,""3296 Sargans"",""Secteur primaire"",25,78,33,45,44,12,32" -"2021,""3296 Sargans"",""Secteur secondaire"",66,1164,218,946,1082,173,909" -"2021,""3296 Sargans"",""Secteur tertiaire"",379,3069,1418,1651,2256,872,1384" -"2021,""3297 Vilters-Wangs"",""Secteur conomique - total"",286,1832,891,941,1411,573,838" -"2021,""3297 Vilters-Wangs"",""Secteur primaire"",36,91,34,57,59,19,40" -"2021,""3297 Vilters-Wangs"",""Secteur secondaire"",58,517,165,352,449,114,335" -"2021,""3297 Vilters-Wangs"",""Secteur tertiaire"",192,1224,692,532,903,440,463" -"2021,""3298 Walenstadt"",""Secteur conomique - total"",382,2253,1228,1025,1654,761,893" -"2021,""3298 Walenstadt"",""Secteur primaire"",46,124,38,86,85,22,63" -"2021,""3298 Walenstadt"",""Secteur secondaire"",67,468,85,383,409,44,366" -"2021,""3298 Walenstadt"",""Secteur tertiaire"",269,1661,1105,556,1160,695,465" -"2021,""3311 Amden"",""Secteur conomique - total"",169,564,258,306,387,145,243" -"2021,""3311 Amden"",""Secteur primaire"",44,111,39,72,67,18,49" -"2021,""3311 Amden"",""Secteur secondaire"",18,69,12,57,60,7,54" -"2021,""3311 Amden"",""Secteur tertiaire"",107,384,207,177,260,120,140" -"2021,""3312 Benken (SG)"",""Secteur conomique - total"",238,1219,470,749,960,297,664" -"2021,""3312 Benken (SG)"",""Secteur primaire"",70,220,78,142,150,42,108" -"2021,""3312 Benken (SG)"",""Secteur secondaire"",47,597,166,431,537,125,412" -"2021,""3312 Benken (SG)"",""Secteur tertiaire"",121,402,226,176,274,130,144" -"2021,""3313 Kaltbrunn"",""Secteur conomique - total"",347,1754,768,986,1322,462,860" -"2021,""3313 Kaltbrunn"",""Secteur primaire"",51,131,42,89,82,21,61" -"2021,""3313 Kaltbrunn"",""Secteur secondaire"",77,741,165,576,649,107,542" -"2021,""3313 Kaltbrunn"",""Secteur tertiaire"",219,882,561,321,591,334,257" -"2021,""3315 Schnis"",""Secteur conomique - total"",308,1403,694,709,985,400,584" -"2021,""3315 Schnis"",""Secteur primaire"",94,233,81,152,140,36,104" -"2021,""3315 Schnis"",""Secteur secondaire"",56,437,125,312,379,92,287" -"2021,""3315 Schnis"",""Secteur tertiaire"",158,733,488,245,466,272,193" -"2021,""3316 Weesen"",""Secteur conomique - total"",117,470,285,185,309,161,148" -"2021,""3316 Weesen"",""Secteur primaire"",9,23,8,15,16,4,11" -"2021,""3316 Weesen"",""Secteur secondaire"",12,31,8,23,27,6,21" -"2021,""3316 Weesen"",""Secteur tertiaire"",96,416,269,147,267,152,115" -"2021,""3338 Schmerikon"",""Secteur conomique - total"",221,1702,686,1016,1361,443,917" -"2021,""3338 Schmerikon"",""Secteur primaire"",11,22,X,X,16,X,X" -"2021,""3338 Schmerikon"",""Secteur secondaire"",44,699,X,X,581,X,X" -"2021,""3338 Schmerikon"",""Secteur tertiaire"",166,981,427,554,764,273,491" -"2021,""3339 Uznach"",""Secteur conomique - total"",456,3583,1989,1594,2680,1274,1406" -"2021,""3339 Uznach"",""Secteur primaire"",20,42,15,27,26,8,18" -"2021,""3339 Uznach"",""Secteur secondaire"",78,891,228,663,813,176,636" -"2021,""3339 Uznach"",""Secteur tertiaire"",358,2650,1746,904,1842,1089,752" -"2021,""3340 Rapperswil-Jona"",""Secteur conomique - total"",2091,18011,7988,10023,13622,5036,8586" -"2021,""3340 Rapperswil-Jona"",""Secteur primaire"",34,79,23,56,59,14,44" -"2021,""3340 Rapperswil-Jona"",""Secteur secondaire"",225,3278,677,2601,3018,516,2501" -"2021,""3340 Rapperswil-Jona"",""Secteur tertiaire"",1832,14654,7288,7366,10546,4505,6041" -"2021,""3341 Gommiswald"",""Secteur conomique - total"",413,1458,697,761,1012,393,620" -"2021,""3341 Gommiswald"",""Secteur primaire"",85,225,76,149,132,32,100" -"2021,""3341 Gommiswald"",""Secteur secondaire"",67,440,133,307,379,89,290" -"2021,""3341 Gommiswald"",""Secteur tertiaire"",261,793,488,305,501,271,230" -"2021,""3342 Eschenbach (SG)"",""Secteur conomique - total"",739,4166,1640,2526,3243,1028,2215" -"2021,""3342 Eschenbach (SG)"",""Secteur primaire"",151,403,138,265,242,69,173" -"2021,""3342 Eschenbach (SG)"",""Secteur secondaire"",151,1925,480,1445,1740,358,1382" -"2021,""3342 Eschenbach (SG)"",""Secteur tertiaire"",437,1838,1022,816,1261,601,660" -"2021,""3352 Ebnat-Kappel"",""Secteur conomique - total"",369,2264,1158,1106,1693,733,961" -"2021,""3352 Ebnat-Kappel"",""Secteur primaire"",78,176,60,116,109,30,79" -"2021,""3352 Ebnat-Kappel"",""Secteur secondaire"",74,1072,443,629,920,328,592" -"2021,""3352 Ebnat-Kappel"",""Secteur tertiaire"",217,1016,655,361,664,374,290" -"2021,""3359 Wildhaus-Alt St. Johann"",""Secteur conomique - total"",316,1555,734,821,1129,420,709" -"2021,""3359 Wildhaus-Alt St. Johann"",""Secteur primaire"",92,237,97,140,157,47,110" -"2021,""3359 Wildhaus-Alt St. Johann"",""Secteur secondaire"",45,299,67,232,258,39,219" -"2021,""3359 Wildhaus-Alt St. Johann"",""Secteur tertiaire"",179,1019,570,449,714,334,380" -"2021,""3360 Nesslau"",""Secteur conomique - total"",429,1859,916,943,1283,520,763" -"2021,""3360 Nesslau"",""Secteur primaire"",157,397,148,249,262,71,192" -"2021,""3360 Nesslau"",""Secteur secondaire"",77,337,116,221,267,69,198" -"2021,""3360 Nesslau"",""Secteur tertiaire"",195,1125,652,473,754,381,373" -"2021,""3372 Hemberg"",""Secteur conomique - total"",112,325,164,161,213,90,123" -"2021,""3372 Hemberg"",""Secteur primaire"",60,130,49,81,85,27,59" -"2021,""3372 Hemberg"",""Secteur secondaire"",12,47,16,31,36,9,27" -"2021,""3372 Hemberg"",""Secteur tertiaire"",40,148,99,49,91,54,38" -"2021,""3374 Lichtensteig"",""Secteur conomique - total"",144,580,350,230,369,185,183" -"2021,""3374 Lichtensteig"",""Secteur primaire"",4,8,X,X,4,X,X" -"2021,""3374 Lichtensteig"",""Secteur secondaire"",20,203,X,X,164,X,X" -"2021,""3374 Lichtensteig"",""Secteur tertiaire"",120,369,X,X,200,X,X" -"2021,""3375 Oberhelfenschwil"",""Secteur conomique - total"",114,485,205,280,367,121,246" -"2021,""3375 Oberhelfenschwil"",""Secteur primaire"",39,96,40,56,67,24,44" -"2021,""3375 Oberhelfenschwil"",""Secteur secondaire"",25,207,47,160,187,35,153" -"2021,""3375 Oberhelfenschwil"",""Secteur tertiaire"",50,182,118,64,112,63,50" -"2021,""3378 Neckertal"",""Secteur conomique - total"",409,1568,763,805,1071,418,653" -"2021,""3378 Neckertal"",""Secteur primaire"",136,336,119,217,226,61,165" -"2021,""3378 Neckertal"",""Secteur secondaire"",73,367,89,278,301,51,250" -"2021,""3378 Neckertal"",""Secteur tertiaire"",200,865,555,310,545,307,238" -"2021,""3379 Wattwil"",""Secteur conomique - total"",760,4800,2377,2423,3585,1473,2112" -"2021,""3379 Wattwil"",""Secteur primaire"",157,335,124,211,229,70,159" -"2021,""3379 Wattwil"",""Secteur secondaire"",131,1530,359,1171,1362,244,1119" -"2021,""3379 Wattwil"",""Secteur tertiaire"",472,2935,1894,1041,1994,1160,835" -"2021,""3392 Kirchberg (SG)"",""Secteur conomique - total"",707,5133,1853,3280,4242,1216,3026" -"2021,""3392 Kirchberg (SG)"",""Secteur primaire"",161,392,116,276,258,56,202" -"2021,""3392 Kirchberg (SG)"",""Secteur secondaire"",159,2668,635,2033,2453,484,1969" -"2021,""3392 Kirchberg (SG)"",""Secteur tertiaire"",387,2073,1102,971,1531,676,855" -"2021,""3393 Ltisburg"",""Secteur conomique - total"",153,694,248,446,517,138,379" -"2021,""3393 Ltisburg"",""Secteur primaire"",47,128,39,89,88,20,68" -"2021,""3393 Ltisburg"",""Secteur secondaire"",40,243,38,205,210,20,190" -"2021,""3393 Ltisburg"",""Secteur tertiaire"",66,323,171,152,219,98,121" -"2021,""3394 Mosnang"",""Secteur conomique - total"",305,1192,559,633,808,292,516" -"2021,""3394 Mosnang"",""Secteur primaire"",140,330,119,211,205,55,150" -"2021,""3394 Mosnang"",""Secteur secondaire"",51,339,88,251,270,41,229" -"2021,""3394 Mosnang"",""Secteur tertiaire"",114,523,352,171,333,196,137" -"2021,""3395 Btschwil-Ganterschwil"",""Secteur conomique - total"",410,2481,1114,1367,1905,684,1221" -"2021,""3395 Btschwil-Ganterschwil"",""Secteur primaire"",95,227,63,164,162,32,130" -"2021,""3395 Btschwil-Ganterschwil"",""Secteur secondaire"",92,807,164,643,720,105,615" -"2021,""3395 Btschwil-Ganterschwil"",""Secteur tertiaire"",223,1447,887,560,1023,547,475" -"2021,""3401 Degersheim"",""Secteur conomique - total"",279,1810,816,994,1381,497,883" -"2021,""3401 Degersheim"",""Secteur primaire"",40,114,39,75,81,19,63" -"2021,""3401 Degersheim"",""Secteur secondaire"",63,824,200,624,745,152,593" -"2021,""3401 Degersheim"",""Secteur tertiaire"",176,872,577,295,554,327,227" -"2021,""3402 Flawil"",""Secteur conomique - total"",607,4108,1856,2252,3158,1145,2013" -"2021,""3402 Flawil"",""Secteur primaire"",35,96,34,62,63,17,45" -"2021,""3402 Flawil"",""Secteur secondaire"",142,1739,428,1311,1570,317,1253" -"2021,""3402 Flawil"",""Secteur tertiaire"",430,2273,1394,879,1525,810,715" -"2021,""3405 Jonschwil"",""Secteur conomique - total"",251,2302,872,1430,1965,630,1335" -"2021,""3405 Jonschwil"",""Secteur primaire"",39,99,35,64,66,17,48" -"2021,""3405 Jonschwil"",""Secteur secondaire"",64,745,166,579,674,119,555" -"2021,""3405 Jonschwil"",""Secteur tertiaire"",148,1458,671,787,1226,493,732" -"2021,""3407 Oberuzwil"",""Secteur conomique - total"",442,2256,984,1272,1689,594,1095" -"2021,""3407 Oberuzwil"",""Secteur primaire"",63,171,58,113,117,34,83" -"2021,""3407 Oberuzwil"",""Secteur secondaire"",90,727,166,561,656,119,537" -"2021,""3407 Oberuzwil"",""Secteur tertiaire"",289,1358,760,598,917,441,475" -"2021,""3408 Uzwil"",""Secteur conomique - total"",680,6766,2492,4274,5594,1704,3890" -"2021,""3408 Uzwil"",""Secteur primaire"",33,87,31,56,55,15,41" -"2021,""3408 Uzwil"",""Secteur secondaire"",131,3547,626,2921,3348,519,2830" -"2021,""3408 Uzwil"",""Secteur tertiaire"",516,3132,1835,1297,2191,1171,1020" -"2021,""3422 Niederbren"",""Secteur conomique - total"",147,698,247,451,495,122,372" -"2021,""3422 Niederbren"",""Secteur primaire"",59,210,77,133,129,29,100" -"2021,""3422 Niederbren"",""Secteur secondaire"",31,264,45,219,229,26,203" -"2021,""3422 Niederbren"",""Secteur tertiaire"",57,224,125,99,137,67,69" -"2021,""3423 Niederhelfenschwil"",""Secteur conomique - total"",240,858,376,482,605,206,399" -"2021,""3423 Niederhelfenschwil"",""Secteur primaire"",73,203,72,131,130,37,94" -"2021,""3423 Niederhelfenschwil"",""Secteur secondaire"",48,256,52,204,217,28,189" -"2021,""3423 Niederhelfenschwil"",""Secteur tertiaire"",119,399,252,147,258,141,116" -"2021,""3424 Oberbren"",""Secteur conomique - total"",370,3420,1089,2331,2878,698,2179" -"2021,""3424 Oberbren"",""Secteur primaire"",67,199,78,121,135,37,98" -"2021,""3424 Oberbren"",""Secteur secondaire"",93,1180,228,952,1068,159,909" -"2021,""3424 Oberbren"",""Secteur tertiaire"",210,2041,783,1258,1674,502,1173" -"2021,""3426 Zuzwil (SG)"",""Secteur conomique - total"",360,2045,876,1169,1568,532,1036" -"2021,""3426 Zuzwil (SG)"",""Secteur primaire"",20,58,14,44,44,7,38" -"2021,""3426 Zuzwil (SG)"",""Secteur secondaire"",84,749,149,600,665,94,571" -"2021,""3426 Zuzwil (SG)"",""Secteur tertiaire"",256,1238,713,525,859,432,427" -"2021,""3427 Wil (SG)"",""Secteur conomique - total"",1836,15936,7663,8273,12282,4970,7312" -"2021,""3427 Wil (SG)"",""Secteur primaire"",55,145,41,104,102,24,78" -"2021,""3427 Wil (SG)"",""Secteur secondaire"",243,3548,981,2567,3225,745,2480" -"2021,""3427 Wil (SG)"",""Secteur tertiaire"",1538,12243,6641,5602,8955,4202,4754" -"2021,""3441 Andwil (SG)"",""Secteur conomique - total"",134,571,201,370,424,99,326" -"2021,""3441 Andwil (SG)"",""Secteur primaire"",28,81,21,60,60,10,51" -"2021,""3441 Andwil (SG)"",""Secteur secondaire"",34,290,54,236,251,29,221" -"2021,""3441 Andwil (SG)"",""Secteur tertiaire"",72,200,126,74,113,60,53" -"2021,""3442 Gaiserwald"",""Secteur conomique - total"",459,2510,1283,1227,1811,738,1073" -"2021,""3442 Gaiserwald"",""Secteur primaire"",30,93,40,53,64,21,44" -"2021,""3442 Gaiserwald"",""Secteur secondaire"",76,536,123,413,462,78,385" -"2021,""3442 Gaiserwald"",""Secteur tertiaire"",353,1881,1120,761,1284,640,645" -"2021,""3443 Gossau (SG)"",""Secteur conomique - total"",1264,13642,5462,8180,10922,3432,7490" -"2021,""3443 Gossau (SG)"",""Secteur primaire"",90,285,92,193,194,47,147" -"2021,""3443 Gossau (SG)"",""Secteur secondaire"",237,4420,867,3553,4078,652,3426" -"2021,""3443 Gossau (SG)"",""Secteur tertiaire"",937,8937,4503,4434,6650,2734,3917" -"2021,""3444 Waldkirch"",""Secteur conomique - total"",324,1487,614,873,1080,334,746" -"2021,""3444 Waldkirch"",""Secteur primaire"",108,291,93,198,194,43,151" -"2021,""3444 Waldkirch"",""Secteur secondaire"",61,448,75,373,398,46,352" -"2021,""3444 Waldkirch"",""Secteur tertiaire"",155,748,446,302,488,245,243" -"2021,""3506 Vaz/Obervaz"",""Secteur conomique - total"",352,2813,1276,1537,2241,888,1353" -"2021,""3506 Vaz/Obervaz"",""Secteur primaire"",34,84,31,53,56,16,40" -"2021,""3506 Vaz/Obervaz"",""Secteur secondaire"",47,347,52,295,311,30,281" -"2021,""3506 Vaz/Obervaz"",""Secteur tertiaire"",271,2382,1193,1189,1874,842,1032" -"2021,""3513 Lantsch/Lenz"",""Secteur conomique - total"",56,202,100,102,145,60,86" -"2021,""3513 Lantsch/Lenz"",""Secteur primaire"",6,19,X,X,14,X,X" -"2021,""3513 Lantsch/Lenz"",""Secteur secondaire"",6,15,X,X,14,X,X" -"2021,""3513 Lantsch/Lenz"",""Secteur tertiaire"",44,168,91,77,118,55,63" -"2021,""3514 Schmitten (GR)"",""Secteur conomique - total"",11,53,15,38,43,8,35" -"2021,""3514 Schmitten (GR)"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""3514 Schmitten (GR)"",""Secteur secondaire"",X,38,X,X,34,X,X" -"2021,""3514 Schmitten (GR)"",""Secteur tertiaire"",7,11,X,X,X,X,X" -"2021,""3542 Albula/Alvra"",""Secteur conomique - total"",169,709,325,384,462,175,288" -"2021,""3542 Albula/Alvra"",""Secteur primaire"",42,102,43,59,58,21,37" -"2021,""3542 Albula/Alvra"",""Secteur secondaire"",27,92,23,69,75,10,65" -"2021,""3542 Albula/Alvra"",""Secteur tertiaire"",100,515,259,256,330,144,186" -"2021,""3543 Surses"",""Secteur conomique - total"",309,1569,690,879,1164,413,750" -"2021,""3543 Surses"",""Secteur primaire"",60,185,64,121,124,31,92" -"2021,""3543 Surses"",""Secteur secondaire"",57,355,75,280,322,54,268" -"2021,""3543 Surses"",""Secteur tertiaire"",192,1029,551,478,718,328,391" -"2021,""3544 Bergn Filisur"",""Secteur conomique - total"",120,572,261,311,423,155,268" -"2021,""3544 Bergn Filisur"",""Secteur primaire"",22,126,36,90,93,18,76" -"2021,""3544 Bergn Filisur"",""Secteur secondaire"",20,76,19,57,66,11,55" -"2021,""3544 Bergn Filisur"",""Secteur tertiaire"",78,370,206,164,263,126,137" -"2021,""3551 Brusio"",""Secteur conomique - total"",134,899,386,513,696,260,437" -"2021,""3551 Brusio"",""Secteur primaire"",25,177,53,124,98,20,78" -"2021,""3551 Brusio"",""Secteur secondaire"",33,411,174,237,376,151,225" -"2021,""3551 Brusio"",""Secteur tertiaire"",76,311,159,152,223,89,134" -"2021,""3561 Poschiavo"",""Secteur conomique - total"",434,2264,932,1332,1651,529,1122" -"2021,""3561 Poschiavo"",""Secteur primaire"",65,198,71,127,106,29,77" -"2021,""3561 Poschiavo"",""Secteur secondaire"",93,643,113,530,562,62,500" -"2021,""3561 Poschiavo"",""Secteur tertiaire"",276,1423,748,675,983,438,545" -"2021,""3572 Falera"",""Secteur conomique - total"",48,238,84,154,194,53,141" -"2021,""3572 Falera"",""Secteur primaire"",10,26,8,18,22,4,17" -"2021,""3572 Falera"",""Secteur secondaire"",5,75,9,66,69,5,64" -"2021,""3572 Falera"",""Secteur tertiaire"",33,137,67,70,103,44,60" -"2021,""3575 Laax"",""Secteur conomique - total"",198,1274,525,749,929,313,617" -"2021,""3575 Laax"",""Secteur primaire"",11,22,8,14,14,4,10" -"2021,""3575 Laax"",""Secteur secondaire"",32,132,33,99,108,17,91" -"2021,""3575 Laax"",""Secteur tertiaire"",155,1120,484,636,807,292,516" -"2021,""3581 Sagogn"",""Secteur conomique - total"",52,121,60,61,81,32,50" -"2021,""3581 Sagogn"",""Secteur primaire"",4,12,X,X,8,X,X" -"2021,""3581 Sagogn"",""Secteur secondaire"",11,21,X,X,18,X,X" -"2021,""3581 Sagogn"",""Secteur tertiaire"",37,88,52,36,56,28,28" -"2021,""3582 Schluein"",""Secteur conomique - total"",79,329,122,207,246,73,174" -"2021,""3582 Schluein"",""Secteur primaire"",5,11,X,X,7,X,X" -"2021,""3582 Schluein"",""Secteur secondaire"",18,71,X,X,61,X,X" -"2021,""3582 Schluein"",""Secteur tertiaire"",56,247,107,140,179,64,115" -"2021,""3603 Vals"",""Secteur conomique - total"",111,706,299,407,565,204,361" -"2021,""3603 Vals"",""Secteur primaire"",27,72,28,44,44,14,30" -"2021,""3603 Vals"",""Secteur secondaire"",18,183,33,150,163,23,140" -"2021,""3603 Vals"",""Secteur tertiaire"",66,451,238,213,358,167,191" -"2021,""3618 Lumnezia"",""Secteur conomique - total"",229,842,378,464,598,219,379" -"2021,""3618 Lumnezia"",""Secteur primaire"",97,242,84,158,156,42,113" -"2021,""3618 Lumnezia"",""Secteur secondaire"",31,171,24,147,146,9,137" -"2021,""3618 Lumnezia"",""Secteur tertiaire"",101,429,270,159,297,168,129" -"2021,""3619 Ilanz/Glion"",""Secteur conomique - total"",509,3294,1658,1636,2426,1027,1399" -"2021,""3619 Ilanz/Glion"",""Secteur primaire"",72,182,74,108,110,35,75" -"2021,""3619 Ilanz/Glion"",""Secteur secondaire"",63,529,77,452,481,49,432" -"2021,""3619 Ilanz/Glion"",""Secteur tertiaire"",374,2583,1507,1076,1835,943,892" -"2021,""3633 Frstenau"",""Secteur conomique - total"",27,196,140,56,132,85,47" -"2021,""3633 Frstenau"",""Secteur primaire"",4,13,X,X,8,X,X" -"2021,""3633 Frstenau"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""3633 Frstenau"",""Secteur tertiaire"",23,183,X,X,124,X,X" -"2021,""3637 Rothenbrunnen"",""Secteur conomique - total"",28,518,319,199,326,176,150" -"2021,""3637 Rothenbrunnen"",""Secteur primaire"",4,13,X,X,8,X,X" -"2021,""3637 Rothenbrunnen"",""Secteur secondaire"",7,27,X,X,22,X,X" -"2021,""3637 Rothenbrunnen"",""Secteur tertiaire"",17,478,309,169,296,171,125" -"2021,""3638 Scharans"",""Secteur conomique - total"",63,392,233,159,277,147,131" -"2021,""3638 Scharans"",""Secteur primaire"",11,31,X,X,17,X,X" -"2021,""3638 Scharans"",""Secteur secondaire"",6,46,X,X,42,X,X" -"2021,""3638 Scharans"",""Secteur tertiaire"",46,315,214,101,218,137,81" -"2021,""3640 Sils im Domleschg"",""Secteur conomique - total"",77,339,102,237,271,52,219" -"2021,""3640 Sils im Domleschg"",""Secteur primaire"",5,11,X,X,8,X,X" -"2021,""3640 Sils im Domleschg"",""Secteur secondaire"",26,207,X,X,191,X,X" -"2021,""3640 Sils im Domleschg"",""Secteur tertiaire"",46,121,70,51,73,34,39" -"2021,""3661 Cazis"",""Secteur conomique - total"",190,1516,726,790,1098,419,680" -"2021,""3661 Cazis"",""Secteur primaire"",41,122,39,83,84,17,67" -"2021,""3661 Cazis"",""Secteur secondaire"",40,308,43,265,276,24,252" -"2021,""3661 Cazis"",""Secteur tertiaire"",109,1086,644,442,738,377,360" -"2021,""3662 Flerden"",""Secteur conomique - total"",32,81,42,39,43,18,25" -"2021,""3662 Flerden"",""Secteur primaire"",14,38,16,22,22,7,15" -"2021,""3662 Flerden"",""Secteur secondaire"",4,5,X,X,X,X,X" -"2021,""3662 Flerden"",""Secteur tertiaire"",14,38,X,X,X,X,X" -"2021,""3663 Masein"",""Secteur conomique - total"",41,121,58,63,75,24,50" -"2021,""3663 Masein"",""Secteur primaire"",X,27,X,X,21,X,X" -"2021,""3663 Masein"",""Secteur secondaire"",X,14,X,X,11,X,X" -"2021,""3663 Masein"",""Secteur tertiaire"",31,80,47,33,43,20,23" -"2021,""3668 Thusis"",""Secteur conomique - total"",335,2363,1226,1137,1761,756,1004" -"2021,""3668 Thusis"",""Secteur primaire"",11,30,11,19,25,7,17" -"2021,""3668 Thusis"",""Secteur secondaire"",41,461,92,369,413,59,354" -"2021,""3668 Thusis"",""Secteur tertiaire"",283,1872,1123,749,1323,690,633" -"2021,""3669 Tschappina"",""Secteur conomique - total"",26,94,38,56,50,17,33" -"2021,""3669 Tschappina"",""Secteur primaire"",15,38,15,23,21,6,15" -"2021,""3669 Tschappina"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""3669 Tschappina"",""Secteur tertiaire"",11,56,23,33,30,12,18" -"2021,""3670 Urmein"",""Secteur conomique - total"",22,50,22,28,29,10,20" -"2021,""3670 Urmein"",""Secteur primaire"",9,25,10,15,16,4,11" -"2021,""3670 Urmein"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""3670 Urmein"",""Secteur tertiaire"",13,25,12,13,14,5,9" -"2021,""3672 Safiental"",""Secteur conomique - total"",153,420,181,239,277,96,181" -"2021,""3672 Safiental"",""Secteur primaire"",72,189,X,X,118,X,X" -"2021,""3672 Safiental"",""Secteur secondaire"",14,27,X,X,22,X,X" -"2021,""3672 Safiental"",""Secteur tertiaire"",67,204,106,98,137,60,77" -"2021,""3673 Domleschg"",""Secteur conomique - total"",188,504,237,267,333,121,212" -"2021,""3673 Domleschg"",""Secteur primaire"",48,149,57,92,96,27,69" -"2021,""3673 Domleschg"",""Secteur secondaire"",30,71,20,51,51,7,44" -"2021,""3673 Domleschg"",""Secteur tertiaire"",110,284,160,124,186,87,99" -"2021,""3681 Avers"",""Secteur conomique - total"",37,128,49,79,86,22,64" -"2021,""3681 Avers"",""Secteur primaire"",X,43,X,X,26,X,X" -"2021,""3681 Avers"",""Secteur secondaire"",X,13,X,X,12,X,X" -"2021,""3681 Avers"",""Secteur tertiaire"",22,72,30,42,48,14,34" -"2021,""3695 Sufers"",""Secteur conomique - total"",22,81,24,57,61,11,49" -"2021,""3695 Sufers"",""Secteur primaire"",8,26,X,X,16,X,X" -"2021,""3695 Sufers"",""Secteur secondaire"",5,29,X,X,27,X,X" -"2021,""3695 Sufers"",""Secteur tertiaire"",9,26,X,X,18,X,X" -"2021,""3701 Andeer"",""Secteur conomique - total"",85,475,249,226,328,142,186" -"2021,""3701 Andeer"",""Secteur primaire"",13,40,11,29,25,4,21" -"2021,""3701 Andeer"",""Secteur secondaire"",18,87,15,72,73,6,67" -"2021,""3701 Andeer"",""Secteur tertiaire"",54,348,223,125,230,132,98" -"2021,""3711 Rongellen"",""Secteur conomique - total"",6,17,X,X,10,X,X" -"2021,""3711 Rongellen"",""Secteur primaire"",X,6,X,X,4,X,X" -"2021,""3711 Rongellen"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""3711 Rongellen"",""Secteur tertiaire"",X,11,X,X,6,X,X" -"2021,""3712 Zillis-Reischen"",""Secteur conomique - total"",44,189,63,126,145,33,111" -"2021,""3712 Zillis-Reischen"",""Secteur primaire"",8,26,12,14,17,7,10" -"2021,""3712 Zillis-Reischen"",""Secteur secondaire"",10,105,14,91,95,9,86" -"2021,""3712 Zillis-Reischen"",""Secteur tertiaire"",26,58,37,21,33,17,16" -"2021,""3713 Ferrera"",""Secteur conomique - total"",9,37,X,X,31,X,X" -"2021,""3713 Ferrera"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""3713 Ferrera"",""Secteur secondaire"",X,19,0,19,16,0,16" -"2021,""3713 Ferrera"",""Secteur tertiaire"",4,14,X,X,X,X,X" -"2021,""3714 Rheinwald"",""Secteur conomique - total"",91,337,138,199,239,80,159" -"2021,""3714 Rheinwald"",""Secteur primaire"",38,89,34,55,59,17,42" -"2021,""3714 Rheinwald"",""Secteur secondaire"",12,46,17,29,34,9,25" -"2021,""3714 Rheinwald"",""Secteur tertiaire"",41,202,87,115,145,54,91" -"2021,""3715 Muntogna da Schons"",""Secteur conomique - total"",72,246,101,145,159,54,105" -"2021,""3715 Muntogna da Schons"",""Secteur primaire"",36,113,X,X,X,X,X" -"2021,""3715 Muntogna da Schons"",""Secteur secondaire"",4,5,X,X,X,X,X" -"2021,""3715 Muntogna da Schons"",""Secteur tertiaire"",32,128,58,70,91,34,57" -"2021,""3721 Bonaduz"",""Secteur conomique - total"",182,1755,660,1095,1446,444,1002" -"2021,""3721 Bonaduz"",""Secteur primaire"",12,69,18,51,51,11,41" -"2021,""3721 Bonaduz"",""Secteur secondaire"",25,1035,264,771,972,226,747" -"2021,""3721 Bonaduz"",""Secteur tertiaire"",145,651,378,273,422,208,214" -"2021,""3722 Domat/Ems"",""Secteur conomique - total"",397,3861,1386,2475,3215,908,2307" -"2021,""3722 Domat/Ems"",""Secteur primaire"",12,41,15,26,27,9,18" -"2021,""3722 Domat/Ems"",""Secteur secondaire"",70,2061,444,1617,1938,357,1580" -"2021,""3722 Domat/Ems"",""Secteur tertiaire"",315,1759,927,832,1250,542,708" -"2021,""3723 Rhzns"",""Secteur conomique - total"",81,401,123,278,326,66,260" -"2021,""3723 Rhzns"",""Secteur primaire"",7,19,X,X,13,X,X" -"2021,""3723 Rhzns"",""Secteur secondaire"",19,223,X,X,208,X,X" -"2021,""3723 Rhzns"",""Secteur tertiaire"",55,159,93,66,104,49,56" -"2021,""3731 Felsberg"",""Secteur conomique - total"",124,496,196,300,378,109,269" -"2021,""3731 Felsberg"",""Secteur primaire"",10,27,X,X,19,X,X" -"2021,""3731 Felsberg"",""Secteur secondaire"",34,208,X,X,186,X,X" -"2021,""3731 Felsberg"",""Secteur tertiaire"",80,261,155,106,174,87,87" -"2021,""3732 Flims"",""Secteur conomique - total"",353,1799,823,976,1422,559,863" -"2021,""3732 Flims"",""Secteur primaire"",16,39,16,23,22,8,15" -"2021,""3732 Flims"",""Secteur secondaire"",43,326,52,274,283,28,255" -"2021,""3732 Flims"",""Secteur tertiaire"",294,1434,755,679,1117,523,594" -"2021,""3733 Tamins"",""Secteur conomique - total"",88,261,112,149,183,58,125" -"2021,""3733 Tamins"",""Secteur primaire"",10,32,9,23,25,5,20" -"2021,""3733 Tamins"",""Secteur secondaire"",18,95,20,75,79,10,69" -"2021,""3733 Tamins"",""Secteur tertiaire"",60,134,83,51,79,43,36" -"2021,""3734 Trin"",""Secteur conomique - total"",116,344,139,205,257,80,177" -"2021,""3734 Trin"",""Secteur primaire"",13,48,11,37,32,5,27" -"2021,""3734 Trin"",""Secteur secondaire"",19,109,16,93,101,12,89" -"2021,""3734 Trin"",""Secteur tertiaire"",84,187,112,75,125,64,61" -"2021,""3746 Zernez"",""Secteur conomique - total"",189,973,408,565,734,255,479" -"2021,""3746 Zernez"",""Secteur primaire"",30,90,32,58,53,17,36" -"2021,""3746 Zernez"",""Secteur secondaire"",31,218,38,180,190,23,167" -"2021,""3746 Zernez"",""Secteur tertiaire"",128,665,338,327,491,216,276" -"2021,""3752 Samnaun"",""Secteur conomique - total"",145,1159,516,643,931,364,567" -"2021,""3752 Samnaun"",""Secteur primaire"",18,39,X,X,23,X,X" -"2021,""3752 Samnaun"",""Secteur secondaire"",11,48,X,X,42,X,X" -"2021,""3752 Samnaun"",""Secteur tertiaire"",116,1072,493,579,865,351,514" -"2021,""3762 Scuol"",""Secteur conomique - total"",623,3351,1666,1685,2451,1007,1445" -"2021,""3762 Scuol"",""Secteur primaire"",75,220,86,134,147,44,104" -"2021,""3762 Scuol"",""Secteur secondaire"",75,512,88,424,448,47,401" -"2021,""3762 Scuol"",""Secteur tertiaire"",473,2619,1492,1127,1856,916,940" -"2021,""3764 Valsot"",""Secteur conomique - total"",110,421,133,288,330,73,257" -"2021,""3764 Valsot"",""Secteur primaire"",33,107,36,71,80,20,60" -"2021,""3764 Valsot"",""Secteur secondaire"",28,161,24,137,140,12,128" -"2021,""3764 Valsot"",""Secteur tertiaire"",49,153,73,80,110,41,69" -"2021,""3781 Bever"",""Secteur conomique - total"",69,335,127,208,265,83,181" -"2021,""3781 Bever"",""Secteur primaire"",5,12,X,X,9,X,X" -"2021,""3781 Bever"",""Secteur secondaire"",8,107,X,X,91,X,X" -"2021,""3781 Bever"",""Secteur tertiaire"",56,216,107,109,164,72,92" -"2021,""3782 Celerina/Schlarigna"",""Secteur conomique - total"",172,983,347,636,787,233,554" -"2021,""3782 Celerina/Schlarigna"",""Secteur primaire"",8,40,13,27,31,7,24" -"2021,""3782 Celerina/Schlarigna"",""Secteur secondaire"",18,148,12,136,137,6,131" -"2021,""3782 Celerina/Schlarigna"",""Secteur tertiaire"",146,795,322,473,619,220,399" -"2021,""3783 Madulain"",""Secteur conomique - total"",29,70,29,41,51,19,32" -"2021,""3783 Madulain"",""Secteur primaire"",X,16,X,X,X,X,X" -"2021,""3783 Madulain"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""3783 Madulain"",""Secteur tertiaire"",23,50,21,29,37,14,23" -"2021,""3784 Pontresina"",""Secteur conomique - total"",228,1912,743,1169,1613,548,1066" -"2021,""3784 Pontresina"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""3784 Pontresina"",""Secteur secondaire"",X,349,X,X,X,X,X" -"2021,""3784 Pontresina"",""Secteur tertiaire"",201,1558,700,858,1286,521,765" -"2021,""3785 La Punt Chamues-ch"",""Secteur conomique - total"",78,235,95,140,178,55,123" -"2021,""3785 La Punt Chamues-ch"",""Secteur primaire"",7,20,X,X,16,X,X" -"2021,""3785 La Punt Chamues-ch"",""Secteur secondaire"",12,49,X,X,43,X,X" -"2021,""3785 La Punt Chamues-ch"",""Secteur tertiaire"",59,166,82,84,119,49,71" -"2021,""3786 Samedan"",""Secteur conomique - total"",374,2896,1290,1606,2254,854,1399" -"2021,""3786 Samedan"",""Secteur primaire"",9,24,X,X,18,X,X" -"2021,""3786 Samedan"",""Secteur secondaire"",41,396,X,X,356,X,X" -"2021,""3786 Samedan"",""Secteur tertiaire"",324,2476,1247,1229,1879,832,1047" -"2021,""3787 St. Moritz"",""Secteur conomique - total"",836,7497,3063,4434,6187,2199,3988" -"2021,""3787 St. Moritz"",""Secteur primaire"",5,20,X,X,16,X,X" -"2021,""3787 St. Moritz"",""Secteur secondaire"",79,972,X,X,920,X,X" -"2021,""3787 St. Moritz"",""Secteur tertiaire"",752,6505,2946,3559,5251,2115,3136" -"2021,""3788 S-chanf"",""Secteur conomique - total"",91,318,104,214,236,62,174" -"2021,""3788 S-chanf"",""Secteur primaire"",17,40,11,29,26,6,21" -"2021,""3788 S-chanf"",""Secteur secondaire"",13,135,17,118,117,12,105" -"2021,""3788 S-chanf"",""Secteur tertiaire"",61,143,76,67,93,45,48" -"2021,""3789 Sils im Engadin/Segl"",""Secteur conomique - total"",102,995,377,618,835,278,558" -"2021,""3789 Sils im Engadin/Segl"",""Secteur primaire"",8,33,X,X,20,X,X" -"2021,""3789 Sils im Engadin/Segl"",""Secteur secondaire"",14,152,X,X,143,X,X" -"2021,""3789 Sils im Engadin/Segl"",""Secteur tertiaire"",80,810,350,460,673,262,411" -"2021,""3790 Silvaplana"",""Secteur conomique - total"",155,987,398,589,799,283,516" -"2021,""3790 Silvaplana"",""Secteur primaire"",5,19,X,X,17,X,X" -"2021,""3790 Silvaplana"",""Secteur secondaire"",11,46,X,X,41,X,X" -"2021,""3790 Silvaplana"",""Secteur tertiaire"",139,922,388,534,741,278,464" -"2021,""3791 Zuoz"",""Secteur conomique - total"",137,825,363,462,650,249,401" -"2021,""3791 Zuoz"",""Secteur primaire"",8,27,8,19,18,4,14" -"2021,""3791 Zuoz"",""Secteur secondaire"",20,161,26,135,143,13,130" -"2021,""3791 Zuoz"",""Secteur tertiaire"",109,637,329,308,489,232,258" -"2021,""3792 Bregaglia"",""Secteur conomique - total"",247,1141,484,657,831,271,561" -"2021,""3792 Bregaglia"",""Secteur primaire"",31,98,31,67,66,14,51" -"2021,""3792 Bregaglia"",""Secteur secondaire"",59,412,67,345,361,35,326" -"2021,""3792 Bregaglia"",""Secteur tertiaire"",157,631,386,245,405,221,184" -"2021,""3804 Buseno"",""Secteur conomique - total"",6,17,X,X,6,X,X" -"2021,""3804 Buseno"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""3804 Buseno"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""3804 Buseno"",""Secteur tertiaire"",X,8,X,X,X,X,X" -"2021,""3805 Castaneda"",""Secteur conomique - total"",33,108,63,45,69,39,30" -"2021,""3805 Castaneda"",""Secteur primaire"",6,11,X,X,6,X,X" -"2021,""3805 Castaneda"",""Secteur secondaire"",5,5,X,X,4,X,X" -"2021,""3805 Castaneda"",""Secteur tertiaire"",22,92,X,X,59,X,X" -"2021,""3808 Rossa"",""Secteur conomique - total"",16,27,10,17,18,7,12" -"2021,""3808 Rossa"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""3808 Rossa"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""3808 Rossa"",""Secteur tertiaire"",9,16,X,X,11,X,X" -"2021,""3810 Santa Maria in Calanca"",""Secteur conomique - total"",20,25,14,11,11,6,6" -"2021,""3810 Santa Maria in Calanca"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""3810 Santa Maria in Calanca"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""3810 Santa Maria in Calanca"",""Secteur tertiaire"",14,16,X,X,8,X,X" -"2021,""3821 Lostallo"",""Secteur conomique - total"",85,290,94,196,223,53,170" -"2021,""3821 Lostallo"",""Secteur primaire"",13,63,22,41,44,14,29" -"2021,""3821 Lostallo"",""Secteur secondaire"",28,120,19,101,103,10,93" -"2021,""3821 Lostallo"",""Secteur tertiaire"",44,107,53,54,76,29,47" -"2021,""3822 Mesocco"",""Secteur conomique - total"",169,593,228,365,458,146,312" -"2021,""3822 Mesocco"",""Secteur primaire"",12,42,10,32,30,5,25" -"2021,""3822 Mesocco"",""Secteur secondaire"",31,137,22,115,124,14,110" -"2021,""3822 Mesocco"",""Secteur tertiaire"",126,414,196,218,304,127,177" -"2021,""3823 Soazza"",""Secteur conomique - total"",46,115,31,84,87,17,70" -"2021,""3823 Soazza"",""Secteur primaire"",4,13,X,X,7,X,X" -"2021,""3823 Soazza"",""Secteur secondaire"",16,46,X,X,37,X,X" -"2021,""3823 Soazza"",""Secteur tertiaire"",26,56,19,37,43,10,33" -"2021,""3831 Cama"",""Secteur conomique - total"",66,258,134,124,183,84,99" -"2021,""3831 Cama"",""Secteur primaire"",8,20,X,X,10,X,X" -"2021,""3831 Cama"",""Secteur secondaire"",11,48,X,X,44,X,X" -"2021,""3831 Cama"",""Secteur tertiaire"",47,190,126,64,129,80,49" -"2021,""3832 Grono"",""Secteur conomique - total"",268,1104,423,681,853,262,592" -"2021,""3832 Grono"",""Secteur primaire"",15,30,9,21,15,5,11" -"2021,""3832 Grono"",""Secteur secondaire"",50,346,37,309,319,25,294" -"2021,""3832 Grono"",""Secteur tertiaire"",203,728,377,351,519,232,287" -"2021,""3834 Roveredo (GR)"",""Secteur conomique - total"",338,1108,448,660,804,249,556" -"2021,""3834 Roveredo (GR)"",""Secteur primaire"",20,50,18,32,29,9,20" -"2021,""3834 Roveredo (GR)"",""Secteur secondaire"",54,277,31,246,245,18,227" -"2021,""3834 Roveredo (GR)"",""Secteur tertiaire"",264,781,399,382,530,222,308" -"2021,""3835 San Vittore"",""Secteur conomique - total"",119,545,153,392,453,100,353" -"2021,""3835 San Vittore"",""Secteur primaire"",11,21,X,X,13,X,X" -"2021,""3835 San Vittore"",""Secteur secondaire"",33,380,91,289,338,64,274" -"2021,""3835 San Vittore"",""Secteur tertiaire"",75,144,X,X,102,X,X" -"2021,""3837 Calanca"",""Secteur conomique - total"",35,129,42,87,92,23,69" -"2021,""3837 Calanca"",""Secteur primaire"",14,34,14,20,24,8,16" -"2021,""3837 Calanca"",""Secteur secondaire"",6,60,9,51,47,4,42" -"2021,""3837 Calanca"",""Secteur tertiaire"",15,35,19,16,21,10,11" -"2021,""3847 Val Mstair"",""Secteur conomique - total"",242,1248,569,679,887,322,565" -"2021,""3847 Val Mstair"",""Secteur primaire"",50,155,43,112,99,16,83" -"2021,""3847 Val Mstair"",""Secteur secondaire"",42,337,56,281,283,33,250" -"2021,""3847 Val Mstair"",""Secteur tertiaire"",150,756,470,286,504,273,231" -"2021,""3851 Davos"",""Secteur conomique - total"",1097,8800,4013,4787,6908,2748,4159" -"2021,""3851 Davos"",""Secteur primaire"",71,204,77,127,137,40,97" -"2021,""3851 Davos"",""Secteur secondaire"",134,1028,190,838,915,120,794" -"2021,""3851 Davos"",""Secteur tertiaire"",892,7568,3746,3822,5856,2588,3268" -"2021,""3861 Fideris"",""Secteur conomique - total"",62,195,85,110,135,43,92" -"2021,""3861 Fideris"",""Secteur primaire"",18,52,20,32,32,10,22" -"2021,""3861 Fideris"",""Secteur secondaire"",17,56,12,44,45,5,40" -"2021,""3861 Fideris"",""Secteur tertiaire"",27,87,53,34,58,28,30" -"2021,""3862 Furna"",""Secteur conomique - total"",38,86,33,53,58,15,42" -"2021,""3862 Furna"",""Secteur primaire"",18,57,17,40,40,8,32" -"2021,""3862 Furna"",""Secteur secondaire"",9,10,X,X,7,X,X" -"2021,""3862 Furna"",""Secteur tertiaire"",11,19,X,X,11,X,X" -"2021,""3863 Jenaz"",""Secteur conomique - total"",101,390,195,195,281,111,169" -"2021,""3863 Jenaz"",""Secteur primaire"",24,61,25,36,39,13,25" -"2021,""3863 Jenaz"",""Secteur secondaire"",32,169,47,122,139,26,113" -"2021,""3863 Jenaz"",""Secteur tertiaire"",45,160,123,37,103,72,31" -"2021,""3871 Klosters"",""Secteur conomique - total"",502,2367,1050,1317,1758,626,1132" -"2021,""3871 Klosters"",""Secteur primaire"",80,207,83,124,111,36,75" -"2021,""3871 Klosters"",""Secteur secondaire"",80,575,94,481,510,51,459" -"2021,""3871 Klosters"",""Secteur tertiaire"",342,1585,873,712,1136,539,598" -"2021,""3881 Conters im Prttigau"",""Secteur conomique - total"",33,91,39,52,51,16,35" -"2021,""3881 Conters im Prttigau"",""Secteur primaire"",X,19,X,X,9,X,X" -"2021,""3881 Conters im Prttigau"",""Secteur secondaire"",X,12,X,X,10,X,X" -"2021,""3881 Conters im Prttigau"",""Secteur tertiaire"",20,60,29,31,32,12,20" -"2021,""3882 Kblis"",""Secteur conomique - total"",105,559,237,322,443,147,296" -"2021,""3882 Kblis"",""Secteur primaire"",12,40,14,26,29,7,22" -"2021,""3882 Kblis"",""Secteur secondaire"",24,237,48,189,215,33,182" -"2021,""3882 Kblis"",""Secteur tertiaire"",69,282,175,107,198,106,92" -"2021,""3891 Luzein"",""Secteur conomique - total"",178,495,211,284,324,106,218" -"2021,""3891 Luzein"",""Secteur primaire"",68,164,64,100,94,31,64" -"2021,""3891 Luzein"",""Secteur secondaire"",30,100,19,81,85,11,74" -"2021,""3891 Luzein"",""Secteur tertiaire"",80,231,128,103,145,65,81" -"2021,""3901 Chur"",""Secteur conomique - total"",3846,33787,17011,16776,25187,10834,14353" -"2021,""3901 Chur"",""Secteur primaire"",36,155,48,107,108,31,76" -"2021,""3901 Chur"",""Secteur secondaire"",369,3691,725,2966,3357,505,2852" -"2021,""3901 Chur"",""Secteur tertiaire"",3441,29941,16238,13703,21723,10298,11425" -"2021,""3911 Churwalden"",""Secteur conomique - total"",200,976,447,529,678,251,427" -"2021,""3911 Churwalden"",""Secteur primaire"",37,98,31,67,63,16,47" -"2021,""3911 Churwalden"",""Secteur secondaire"",27,206,42,164,172,21,151" -"2021,""3911 Churwalden"",""Secteur tertiaire"",136,672,374,298,443,213,230" -"2021,""3921 Arosa"",""Secteur conomique - total"",445,2911,1194,1717,2259,834,1425" -"2021,""3921 Arosa"",""Secteur primaire"",47,128,51,77,84,25,59" -"2021,""3921 Arosa"",""Secteur secondaire"",51,312,55,257,265,35,230" -"2021,""3921 Arosa"",""Secteur tertiaire"",347,2471,1088,1383,1910,774,1136" -"2021,""3932 Tschiertschen-Praden"",""Secteur conomique - total"",40,123,55,68,86,32,54" -"2021,""3932 Tschiertschen-Praden"",""Secteur primaire"",9,20,X,X,14,X,X" -"2021,""3932 Tschiertschen-Praden"",""Secteur secondaire"",5,12,X,X,10,X,X" -"2021,""3932 Tschiertschen-Praden"",""Secteur tertiaire"",26,91,44,47,63,25,37" -"2021,""3945 Trimmis"",""Secteur conomique - total"",222,1170,302,868,961,178,783" -"2021,""3945 Trimmis"",""Secteur primaire"",29,68,29,39,51,19,32" -"2021,""3945 Trimmis"",""Secteur secondaire"",54,617,88,529,562,58,505" -"2021,""3945 Trimmis"",""Secteur tertiaire"",139,485,185,300,348,101,247" -"2021,""3946 Untervaz"",""Secteur conomique - total"",168,930,257,673,769,147,622" -"2021,""3946 Untervaz"",""Secteur primaire"",19,91,27,64,69,15,54" -"2021,""3946 Untervaz"",""Secteur secondaire"",43,335,48,287,300,26,274" -"2021,""3946 Untervaz"",""Secteur tertiaire"",106,504,182,322,400,106,293" -"2021,""3947 Zizers"",""Secteur conomique - total"",301,2113,1014,1099,1582,607,975" -"2021,""3947 Zizers"",""Secteur primaire"",20,60,27,33,35,12,23" -"2021,""3947 Zizers"",""Secteur secondaire"",52,688,154,534,625,111,514" -"2021,""3947 Zizers"",""Secteur tertiaire"",229,1365,833,532,922,485,437" -"2021,""3951 Flsch"",""Secteur conomique - total"",80,325,180,145,213,106,107" -"2021,""3951 Flsch"",""Secteur primaire"",24,106,X,X,63,X,X" -"2021,""3951 Flsch"",""Secteur secondaire"",6,10,X,X,4,X,X" -"2021,""3951 Flsch"",""Secteur tertiaire"",50,209,131,78,146,85,61" -"2021,""3952 Jenins"",""Secteur conomique - total"",91,289,132,157,200,77,123" -"2021,""3952 Jenins"",""Secteur primaire"",33,110,X,X,67,X,X" -"2021,""3952 Jenins"",""Secteur secondaire"",11,17,X,X,14,X,X" -"2021,""3952 Jenins"",""Secteur tertiaire"",47,162,78,84,120,50,69" -"2021,""3953 Maienfeld"",""Secteur conomique - total"",347,2058,864,1194,1597,518,1078" -"2021,""3953 Maienfeld"",""Secteur primaire"",54,168,65,103,119,37,82" -"2021,""3953 Maienfeld"",""Secteur secondaire"",54,630,70,560,581,44,537" -"2021,""3953 Maienfeld"",""Secteur tertiaire"",239,1260,729,531,897,437,460" -"2021,""3954 Malans"",""Secteur conomique - total"",239,894,340,554,667,186,481" -"2021,""3954 Malans"",""Secteur primaire"",40,150,70,80,81,28,53" -"2021,""3954 Malans"",""Secteur secondaire"",41,246,29,217,228,20,208" -"2021,""3954 Malans"",""Secteur tertiaire"",158,498,241,257,358,138,220" -"2021,""3955 Landquart"",""Secteur conomique - total"",658,6023,2395,3628,4952,1620,3331" -"2021,""3955 Landquart"",""Secteur primaire"",27,139,61,78,112,44,68" -"2021,""3955 Landquart"",""Secteur secondaire"",107,2210,436,1774,2043,337,1706" -"2021,""3955 Landquart"",""Secteur tertiaire"",524,3674,1898,1776,2797,1240,1557" -"2021,""3961 Grsch"",""Secteur conomique - total"",170,1278,334,944,1079,212,868" -"2021,""3961 Grsch"",""Secteur primaire"",38,108,43,65,69,22,46" -"2021,""3961 Grsch"",""Secteur secondaire"",19,727,95,632,691,77,614" -"2021,""3961 Grsch"",""Secteur tertiaire"",113,443,196,247,319,112,207" -"2021,""3962 Schiers"",""Secteur conomique - total"",229,1558,842,716,1112,513,599" -"2021,""3962 Schiers"",""Secteur primaire"",40,97,36,61,56,19,38" -"2021,""3962 Schiers"",""Secteur secondaire"",40,351,102,249,296,68,228" -"2021,""3962 Schiers"",""Secteur tertiaire"",149,1110,704,406,759,426,333" -"2021,""3972 Seewis im Prttigau"",""Secteur conomique - total"",108,534,241,293,413,154,259" -"2021,""3972 Seewis im Prttigau"",""Secteur primaire"",31,82,28,54,55,16,40" -"2021,""3972 Seewis im Prttigau"",""Secteur secondaire"",25,228,58,170,213,47,166" -"2021,""3972 Seewis im Prttigau"",""Secteur tertiaire"",52,224,155,69,144,91,53" -"2021,""3981 Breil/Brigels"",""Secteur conomique - total"",175,742,320,422,550,185,366" -"2021,""3981 Breil/Brigels"",""Secteur primaire"",50,138,58,80,86,27,59" -"2021,""3981 Breil/Brigels"",""Secteur secondaire"",25,147,34,113,131,21,110" -"2021,""3981 Breil/Brigels"",""Secteur tertiaire"",100,457,228,229,333,136,196" -"2021,""3982 Disentis/Mustr"",""Secteur conomique - total"",193,1200,526,674,912,317,595" -"2021,""3982 Disentis/Mustr"",""Secteur primaire"",30,76,29,47,49,15,34" -"2021,""3982 Disentis/Mustr"",""Secteur secondaire"",24,295,54,241,266,36,230" -"2021,""3982 Disentis/Mustr"",""Secteur tertiaire"",139,829,443,386,597,267,330" -"2021,""3983 Medel (Lucmagn)"",""Secteur conomique - total"",51,165,67,98,112,36,76" -"2021,""3983 Medel (Lucmagn)"",""Secteur primaire"",20,56,X,X,35,X,X" -"2021,""3983 Medel (Lucmagn)"",""Secteur secondaire"",6,16,X,X,11,X,X" -"2021,""3983 Medel (Lucmagn)"",""Secteur tertiaire"",25,93,45,48,65,25,40" -"2021,""3985 Sumvitg"",""Secteur conomique - total"",106,476,192,284,347,105,242" -"2021,""3985 Sumvitg"",""Secteur primaire"",36,88,32,56,49,12,37" -"2021,""3985 Sumvitg"",""Secteur secondaire"",17,154,21,133,139,11,128" -"2021,""3985 Sumvitg"",""Secteur tertiaire"",53,234,139,95,158,81,77" -"2021,""3986 Tujetsch"",""Secteur conomique - total"",133,576,243,333,443,152,291" -"2021,""3986 Tujetsch"",""Secteur primaire"",15,33,14,19,21,6,16" -"2021,""3986 Tujetsch"",""Secteur secondaire"",24,154,44,110,129,30,100" -"2021,""3986 Tujetsch"",""Secteur tertiaire"",94,389,185,204,292,116,175" -"2021,""3987 Trun"",""Secteur conomique - total"",103,594,309,285,421,180,241" -"2021,""3987 Trun"",""Secteur primaire"",24,71,22,49,48,11,37" -"2021,""3987 Trun"",""Secteur secondaire"",21,116,15,101,99,5,94" -"2021,""3987 Trun"",""Secteur tertiaire"",58,407,272,135,274,163,110" -"2021,""3988 Obersaxen Mundaun"",""Secteur conomique - total"",139,629,263,366,470,152,317" -"2021,""3988 Obersaxen Mundaun"",""Secteur primaire"",42,101,41,60,72,24,48" -"2021,""3988 Obersaxen Mundaun"",""Secteur secondaire"",11,133,19,114,123,12,111" -"2021,""3988 Obersaxen Mundaun"",""Secteur tertiaire"",86,395,203,192,275,116,159" -"2021,""4001 Aarau"",""Secteur conomique - total"",2670,35644,19408,16236,25739,12688,13051" -"2021,""4001 Aarau"",""Secteur primaire"",10,28,10,18,19,5,14" -"2021,""4001 Aarau"",""Secteur secondaire"",181,2885,746,2139,2608,586,2021" -"2021,""4001 Aarau"",""Secteur tertiaire"",2479,32731,18652,14079,23112,12096,11016" -"2021,""4002 Biberstein"",""Secteur conomique - total"",90,294,161,133,173,87,86" -"2021,""4002 Biberstein"",""Secteur primaire"",4,20,X,X,13,X,X" -"2021,""4002 Biberstein"",""Secteur secondaire"",9,11,X,X,9,X,X" -"2021,""4002 Biberstein"",""Secteur tertiaire"",77,263,151,112,151,81,69" -"2021,""4003 Buchs (AG)"",""Secteur conomique - total"",388,5202,2383,2819,4216,1641,2575" -"2021,""4003 Buchs (AG)"",""Secteur primaire"",X,12,X,X,10,X,X" -"2021,""4003 Buchs (AG)"",""Secteur secondaire"",X,2309,X,X,2084,X,X" -"2021,""4003 Buchs (AG)"",""Secteur tertiaire"",317,2881,1567,1314,2122,979,1143" -"2021,""4004 Densbren"",""Secteur conomique - total"",70,422,175,247,312,101,211" -"2021,""4004 Densbren"",""Secteur primaire"",20,58,27,31,33,11,22" -"2021,""4004 Densbren"",""Secteur secondaire"",10,126,39,87,112,29,83" -"2021,""4004 Densbren"",""Secteur tertiaire"",40,238,109,129,167,61,106" -"2021,""4005 Erlinsbach (AG)"",""Secteur conomique - total"",169,1196,809,387,831,519,312" -"2021,""4005 Erlinsbach (AG)"",""Secteur primaire"",20,58,20,38,35,8,27" -"2021,""4005 Erlinsbach (AG)"",""Secteur secondaire"",25,105,20,85,88,10,78" -"2021,""4005 Erlinsbach (AG)"",""Secteur tertiaire"",124,1033,769,264,708,501,207" -"2021,""4006 Grnichen"",""Secteur conomique - total"",403,2908,1401,1507,2206,897,1309" -"2021,""4006 Grnichen"",""Secteur primaire"",30,64,19,45,35,9,26" -"2021,""4006 Grnichen"",""Secteur secondaire"",80,1341,476,865,1180,352,827" -"2021,""4006 Grnichen"",""Secteur tertiaire"",293,1503,906,597,991,536,456" -"2021,""4007 Hirschthal"",""Secteur conomique - total"",95,815,208,607,704,148,556" -"2021,""4007 Hirschthal"",""Secteur primaire"",7,58,21,37,50,19,31" -"2021,""4007 Hirschthal"",""Secteur secondaire"",20,254,49,205,234,40,195" -"2021,""4007 Hirschthal"",""Secteur tertiaire"",68,503,138,365,420,89,331" -"2021,""4008 Kttigen"",""Secteur conomique - total"",350,1415,740,675,983,463,520" -"2021,""4008 Kttigen"",""Secteur primaire"",13,73,23,50,37,12,25" -"2021,""4008 Kttigen"",""Secteur secondaire"",49,309,93,216,269,70,200" -"2021,""4008 Kttigen"",""Secteur tertiaire"",288,1033,624,409,676,381,295" -"2021,""4009 Muhen"",""Secteur conomique - total"",242,1467,745,722,1005,416,589" -"2021,""4009 Muhen"",""Secteur primaire"",18,70,38,32,35,13,21" -"2021,""4009 Muhen"",""Secteur secondaire"",44,230,37,193,209,24,185" -"2021,""4009 Muhen"",""Secteur tertiaire"",180,1167,670,497,761,378,383" -"2021,""4010 Oberentfelden"",""Secteur conomique - total"",460,3771,1527,2244,2980,990,1990" -"2021,""4010 Oberentfelden"",""Secteur primaire"",8,26,10,16,13,5,9" -"2021,""4010 Oberentfelden"",""Secteur secondaire"",89,1250,239,1011,1136,177,959" -"2021,""4010 Oberentfelden"",""Secteur tertiaire"",363,2495,1278,1217,1830,808,1022" -"2021,""4012 Suhr"",""Secteur conomique - total"",473,5158,2322,2836,4111,1598,2514" -"2021,""4012 Suhr"",""Secteur primaire"",10,36,17,19,25,9,16" -"2021,""4012 Suhr"",""Secteur secondaire"",77,1030,205,825,925,135,790" -"2021,""4012 Suhr"",""Secteur tertiaire"",386,4092,2100,1992,3162,1454,1708" -"2021,""4013 Unterentfelden"",""Secteur conomique - total"",236,2515,1313,1202,1846,783,1063" -"2021,""4013 Unterentfelden"",""Secteur primaire"",4,25,X,X,22,X,X" -"2021,""4013 Unterentfelden"",""Secteur secondaire"",31,684,X,X,638,X,X" -"2021,""4013 Unterentfelden"",""Secteur tertiaire"",201,1806,1181,625,1186,678,507" -"2021,""4021 Baden"",""Secteur conomique - total"",2442,29227,13739,15488,22754,9124,13630" -"2021,""4021 Baden"",""Secteur primaire"",16,70,22,48,53,14,39" -"2021,""4021 Baden"",""Secteur secondaire"",202,6682,1325,5357,6319,1105,5214" -"2021,""4021 Baden"",""Secteur tertiaire"",2224,22475,12392,10083,16382,8006,8377" -"2021,""4022 Bellikon"",""Secteur conomique - total"",85,752,511,241,586,382,203" -"2021,""4022 Bellikon"",""Secteur primaire"",10,23,X,X,17,X,X" -"2021,""4022 Bellikon"",""Secteur secondaire"",10,26,X,X,16,X,X" -"2021,""4022 Bellikon"",""Secteur tertiaire"",65,703,495,208,553,373,180" -"2021,""4023 Bergdietikon"",""Secteur conomique - total"",200,1092,339,753,892,213,679" -"2021,""4023 Bergdietikon"",""Secteur primaire"",21,47,16,31,22,6,16" -"2021,""4023 Bergdietikon"",""Secteur secondaire"",34,482,62,420,457,49,408" -"2021,""4023 Bergdietikon"",""Secteur tertiaire"",145,563,261,302,413,158,255" -"2021,""4024 Birmenstorf (AG)"",""Secteur conomique - total"",172,1087,408,679,835,242,593" -"2021,""4024 Birmenstorf (AG)"",""Secteur primaire"",14,127,36,91,98,19,79" -"2021,""4024 Birmenstorf (AG)"",""Secteur secondaire"",31,305,96,209,259,64,195" -"2021,""4024 Birmenstorf (AG)"",""Secteur tertiaire"",127,655,276,379,478,159,319" -"2021,""4026 Ennetbaden"",""Secteur conomique - total"",208,803,418,385,571,256,315" -"2021,""4026 Ennetbaden"",""Secteur primaire"",4,16,X,X,11,X,X" -"2021,""4026 Ennetbaden"",""Secteur secondaire"",11,26,X,X,18,X,X" -"2021,""4026 Ennetbaden"",""Secteur tertiaire"",193,761,402,359,541,247,294" -"2021,""4027 Fislisbach"",""Secteur conomique - total"",260,1407,788,619,1027,497,529" -"2021,""4027 Fislisbach"",""Secteur primaire"",5,11,X,X,7,X,X" -"2021,""4027 Fislisbach"",""Secteur secondaire"",49,346,X,X,307,X,X" -"2021,""4027 Fislisbach"",""Secteur tertiaire"",206,1050,699,351,712,433,279" -"2021,""4028 Freienwil"",""Secteur conomique - total"",62,143,76,67,78,32,46" -"2021,""4028 Freienwil"",""Secteur primaire"",10,27,X,X,13,X,X" -"2021,""4028 Freienwil"",""Secteur secondaire"",4,7,X,X,5,X,X" -"2021,""4028 Freienwil"",""Secteur tertiaire"",48,109,64,45,59,27,32" -"2021,""4029 Gebenstorf"",""Secteur conomique - total"",288,1913,800,1113,1444,496,948" -"2021,""4029 Gebenstorf"",""Secteur primaire"",13,36,15,21,20,7,13" -"2021,""4029 Gebenstorf"",""Secteur secondaire"",62,582,110,472,531,80,450" -"2021,""4029 Gebenstorf"",""Secteur tertiaire"",213,1295,675,620,894,409,485" -"2021,""4030 Killwangen"",""Secteur conomique - total"",116,616,220,396,492,136,356" -"2021,""4030 Killwangen"",""Secteur primaire"",4,13,X,X,6,X,X" -"2021,""4030 Killwangen"",""Secteur secondaire"",21,340,X,X,316,X,X" -"2021,""4030 Killwangen"",""Secteur tertiaire"",91,263,X,X,170,X,X" -"2021,""4031 Knten"",""Secteur conomique - total"",113,477,204,273,347,119,228" -"2021,""4031 Knten"",""Secteur primaire"",15,55,18,37,36,8,28" -"2021,""4031 Knten"",""Secteur secondaire"",17,146,27,119,129,20,109" -"2021,""4031 Knten"",""Secteur tertiaire"",81,276,159,117,182,92,90" -"2021,""4032 Mgenwil"",""Secteur conomique - total"",189,3030,1150,1880,2596,861,1735" -"2021,""4032 Mgenwil"",""Secteur primaire"",6,20,X,X,13,X,X" -"2021,""4032 Mgenwil"",""Secteur secondaire"",31,493,X,X,437,X,X" -"2021,""4032 Mgenwil"",""Secteur tertiaire"",152,2517,956,1561,2146,710,1437" -"2021,""4033 Mellingen"",""Secteur conomique - total"",355,1970,968,1002,1472,602,870" -"2021,""4033 Mellingen"",""Secteur primaire"",6,25,10,15,14,5,9" -"2021,""4033 Mellingen"",""Secteur secondaire"",60,526,139,387,470,100,370" -"2021,""4033 Mellingen"",""Secteur tertiaire"",289,1419,819,600,989,497,491" -"2021,""4034 Neuenhof"",""Secteur conomique - total"",369,2404,995,1409,1876,649,1227" -"2021,""4034 Neuenhof"",""Secteur primaire"",4,6,X,X,X,X,X" -"2021,""4034 Neuenhof"",""Secteur secondaire"",83,641,X,X,X,X,X" -"2021,""4034 Neuenhof"",""Secteur tertiaire"",282,1757,853,904,1311,555,756" -"2021,""4035 Niederrohrdorf"",""Secteur conomique - total"",243,847,457,390,599,270,329" -"2021,""4035 Niederrohrdorf"",""Secteur primaire"",8,21,9,12,15,6,9" -"2021,""4035 Niederrohrdorf"",""Secteur secondaire"",30,118,28,90,103,19,84" -"2021,""4035 Niederrohrdorf"",""Secteur tertiaire"",205,708,420,288,482,245,236" -"2021,""4037 Oberrohrdorf"",""Secteur conomique - total"",196,793,411,382,559,245,313" -"2021,""4037 Oberrohrdorf"",""Secteur primaire"",12,18,X,X,7,X,X" -"2021,""4037 Oberrohrdorf"",""Secteur secondaire"",27,182,X,X,158,X,X" -"2021,""4037 Oberrohrdorf"",""Secteur tertiaire"",157,593,366,227,394,220,173" -"2021,""4038 Obersiggenthal"",""Secteur conomique - total"",383,2023,1097,926,1440,678,762" -"2021,""4038 Obersiggenthal"",""Secteur primaire"",16,32,X,X,21,X,X" -"2021,""4038 Obersiggenthal"",""Secteur secondaire"",59,350,X,X,288,X,X" -"2021,""4038 Obersiggenthal"",""Secteur tertiaire"",308,1641,1003,638,1131,623,507" -"2021,""4039 Remetschwil"",""Secteur conomique - total"",127,552,191,361,419,108,310" -"2021,""4039 Remetschwil"",""Secteur primaire"",16,43,19,24,25,9,16" -"2021,""4039 Remetschwil"",""Secteur secondaire"",26,177,32,145,152,20,132" -"2021,""4039 Remetschwil"",""Secteur tertiaire"",85,332,140,192,241,79,162" -"2021,""4040 Spreitenbach"",""Secteur conomique - total"",787,8512,3839,4673,6931,2711,4220" -"2021,""4040 Spreitenbach"",""Secteur primaire"",13,34,11,23,25,4,20" -"2021,""4040 Spreitenbach"",""Secteur secondaire"",124,1220,269,951,1098,196,902" -"2021,""4040 Spreitenbach"",""Secteur tertiaire"",650,7258,3559,3699,5808,2511,3298" -"2021,""4041 Stetten (AG)"",""Secteur conomique - total"",143,952,325,627,787,222,564" -"2021,""4041 Stetten (AG)"",""Secteur primaire"",17,62,18,44,46,10,36" -"2021,""4041 Stetten (AG)"",""Secteur secondaire"",31,587,155,432,538,125,412" -"2021,""4041 Stetten (AG)"",""Secteur tertiaire"",95,303,152,151,203,87,116" -"2021,""4042 Turgi"",""Secteur conomique - total"",139,757,315,442,579,190,389" -"2021,""4042 Turgi"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""4042 Turgi"",""Secteur secondaire"",19,317,49,268,296,37,258" -"2021,""4042 Turgi"",""Secteur tertiaire"",120,440,266,174,283,153,130" -"2021,""4044 Untersiggenthal"",""Secteur conomique - total"",307,2701,932,1769,2272,619,1653" -"2021,""4044 Untersiggenthal"",""Secteur primaire"",12,51,25,26,35,14,21" -"2021,""4044 Untersiggenthal"",""Secteur secondaire"",63,1635,294,1341,1546,241,1304" -"2021,""4044 Untersiggenthal"",""Secteur tertiaire"",232,1015,613,402,692,363,328" -"2021,""4045 Wettingen"",""Secteur conomique - total"",1278,7876,3803,4073,5890,2394,3496" -"2021,""4045 Wettingen"",""Secteur primaire"",20,90,52,38,52,24,29" -"2021,""4045 Wettingen"",""Secteur secondaire"",155,1513,300,1213,1368,211,1157" -"2021,""4045 Wettingen"",""Secteur tertiaire"",1103,6273,3451,2822,4470,2160,2311" -"2021,""4046 Wohlenschwil"",""Secteur conomique - total"",102,372,165,207,282,100,182" -"2021,""4046 Wohlenschwil"",""Secteur primaire"",8,58,22,36,49,17,31" -"2021,""4046 Wohlenschwil"",""Secteur secondaire"",13,62,9,53,56,5,51" -"2021,""4046 Wohlenschwil"",""Secteur tertiaire"",81,252,134,118,178,78,100" -"2021,""4047 Wrenlingen"",""Secteur conomique - total"",299,3731,1337,2394,3197,947,2251" -"2021,""4047 Wrenlingen"",""Secteur primaire"",14,55,18,37,41,11,30" -"2021,""4047 Wrenlingen"",""Secteur secondaire"",71,1343,259,1084,1256,205,1051" -"2021,""4047 Wrenlingen"",""Secteur tertiaire"",214,2333,1060,1273,1900,730,1170" -"2021,""4048 Wrenlos"",""Secteur conomique - total"",388,2179,1108,1071,1655,733,923" -"2021,""4048 Wrenlos"",""Secteur primaire"",20,67,28,39,43,14,29" -"2021,""4048 Wrenlos"",""Secteur secondaire"",53,716,263,453,644,214,430" -"2021,""4048 Wrenlos"",""Secteur tertiaire"",315,1396,817,579,968,504,464" -"2021,""4049 Ehrendingen"",""Secteur conomique - total"",273,927,516,411,623,290,333" -"2021,""4049 Ehrendingen"",""Secteur primaire"",25,68,26,42,38,13,25" -"2021,""4049 Ehrendingen"",""Secteur secondaire"",50,168,43,125,135,22,113" -"2021,""4049 Ehrendingen"",""Secteur tertiaire"",198,691,447,244,450,255,195" -"2021,""4061 Arni (AG)"",""Secteur conomique - total"",120,304,139,165,211,76,134" -"2021,""4061 Arni (AG)"",""Secteur primaire"",6,14,X,X,8,X,X" -"2021,""4061 Arni (AG)"",""Secteur secondaire"",20,93,X,X,76,X,X" -"2021,""4061 Arni (AG)"",""Secteur tertiaire"",94,197,112,85,127,61,66" -"2021,""4062 Berikon"",""Secteur conomique - total"",352,1573,846,727,1113,527,586" -"2021,""4062 Berikon"",""Secteur primaire"",11,30,8,22,20,5,15" -"2021,""4062 Berikon"",""Secteur secondaire"",31,139,36,103,115,23,91" -"2021,""4062 Berikon"",""Secteur tertiaire"",310,1404,802,602,978,498,480" -"2021,""4063 Bremgarten (AG)"",""Secteur conomique - total"",655,4770,2300,2470,3625,1464,2161" -"2021,""4063 Bremgarten (AG)"",""Secteur primaire"",15,53,23,30,35,13,22" -"2021,""4063 Bremgarten (AG)"",""Secteur secondaire"",109,1084,172,912,996,123,873" -"2021,""4063 Bremgarten (AG)"",""Secteur tertiaire"",531,3633,2105,1528,2594,1328,1266" -"2021,""4064 Bttikon"",""Secteur conomique - total"",61,212,91,121,150,50,100" -"2021,""4064 Bttikon"",""Secteur primaire"",7,23,8,15,13,4,9" -"2021,""4064 Bttikon"",""Secteur secondaire"",6,65,14,51,56,8,48" -"2021,""4064 Bttikon"",""Secteur tertiaire"",48,124,69,55,82,39,43" -"2021,""4065 Dottikon"",""Secteur conomique - total"",206,1482,514,968,1223,342,881" -"2021,""4065 Dottikon"",""Secteur primaire"",8,35,13,22,26,7,19" -"2021,""4065 Dottikon"",""Secteur secondaire"",42,913,179,734,862,148,715" -"2021,""4065 Dottikon"",""Secteur tertiaire"",156,534,322,212,335,187,148" -"2021,""4066 Eggenwil"",""Secteur conomique - total"",59,168,79,89,109,41,68" -"2021,""4066 Eggenwil"",""Secteur primaire"",7,35,9,26,24,5,19" -"2021,""4066 Eggenwil"",""Secteur secondaire"",5,39,15,24,28,10,19" -"2021,""4066 Eggenwil"",""Secteur tertiaire"",47,94,55,39,56,26,30" -"2021,""4067 Fischbach-Gslikon"",""Secteur conomique - total"",98,411,235,176,285,142,142" -"2021,""4067 Fischbach-Gslikon"",""Secteur primaire"",9,25,8,17,14,4,10" -"2021,""4067 Fischbach-Gslikon"",""Secteur secondaire"",19,198,116,82,144,72,72" -"2021,""4067 Fischbach-Gslikon"",""Secteur tertiaire"",70,188,111,77,126,66,61" -"2021,""4068 Hgglingen"",""Secteur conomique - total"",161,779,323,456,637,232,405" -"2021,""4068 Hgglingen"",""Secteur primaire"",28,82,25,57,50,11,39" -"2021,""4068 Hgglingen"",""Secteur secondaire"",33,406,131,275,381,117,265" -"2021,""4068 Hgglingen"",""Secteur tertiaire"",100,291,167,124,205,104,101" -"2021,""4071 Jonen"",""Secteur conomique - total"",126,605,309,296,421,189,233" -"2021,""4071 Jonen"",""Secteur primaire"",21,66,27,39,41,15,26" -"2021,""4071 Jonen"",""Secteur secondaire"",21,164,78,86,140,58,82" -"2021,""4071 Jonen"",""Secteur tertiaire"",84,375,204,171,240,116,124" -"2021,""4072 Niederwil (AG)"",""Secteur conomique - total"",187,1336,718,618,989,452,537" -"2021,""4072 Niederwil (AG)"",""Secteur primaire"",18,76,33,43,44,18,26" -"2021,""4072 Niederwil (AG)"",""Secteur secondaire"",33,394,82,312,362,60,302" -"2021,""4072 Niederwil (AG)"",""Secteur tertiaire"",136,866,603,263,583,375,209" -"2021,""4073 Oberlunkhofen"",""Secteur conomique - total"",121,441,233,208,284,128,156" -"2021,""4073 Oberlunkhofen"",""Secteur primaire"",10,37,12,25,24,7,17" -"2021,""4073 Oberlunkhofen"",""Secteur secondaire"",15,60,12,48,46,7,38" -"2021,""4073 Oberlunkhofen"",""Secteur tertiaire"",96,344,209,135,214,114,100" -"2021,""4074 Oberwil-Lieli"",""Secteur conomique - total"",174,513,236,277,360,138,223" -"2021,""4074 Oberwil-Lieli"",""Secteur primaire"",14,76,28,48,47,14,33" -"2021,""4074 Oberwil-Lieli"",""Secteur secondaire"",20,91,18,73,80,12,68" -"2021,""4074 Oberwil-Lieli"",""Secteur tertiaire"",140,346,190,156,234,112,122" -"2021,""4075 Rudolfstetten-Friedlisberg"",""Secteur conomique - total"",243,935,379,556,718,231,487" -"2021,""4075 Rudolfstetten-Friedlisberg"",""Secteur primaire"",10,30,12,18,19,6,14" -"2021,""4075 Rudolfstetten-Friedlisberg"",""Secteur secondaire"",58,303,57,246,263,36,227" -"2021,""4075 Rudolfstetten-Friedlisberg"",""Secteur tertiaire"",175,602,310,292,436,189,247" -"2021,""4076 Sarmenstorf"",""Secteur conomique - total"",189,735,388,347,522,232,290" -"2021,""4076 Sarmenstorf"",""Secteur primaire"",21,62,21,41,38,12,26" -"2021,""4076 Sarmenstorf"",""Secteur secondaire"",31,197,54,143,176,37,139" -"2021,""4076 Sarmenstorf"",""Secteur tertiaire"",137,476,313,163,307,182,125" -"2021,""4077 Tgerig"",""Secteur conomique - total"",65,203,121,82,132,63,69" -"2021,""4077 Tgerig"",""Secteur primaire"",6,18,X,X,12,X,X" -"2021,""4077 Tgerig"",""Secteur secondaire"",9,20,X,X,16,X,X" -"2021,""4077 Tgerig"",""Secteur tertiaire"",50,165,108,57,104,57,47" -"2021,""4078 Uezwil"",""Secteur conomique - total"",37,91,39,52,54,17,38" -"2021,""4078 Uezwil"",""Secteur primaire"",15,36,X,X,20,X,X" -"2021,""4078 Uezwil"",""Secteur secondaire"",5,17,X,X,15,X,X" -"2021,""4078 Uezwil"",""Secteur tertiaire"",17,38,23,15,19,10,10" -"2021,""4079 Unterlunkhofen"",""Secteur conomique - total"",85,262,122,140,178,64,114" -"2021,""4079 Unterlunkhofen"",""Secteur primaire"",15,43,13,30,28,6,21" -"2021,""4079 Unterlunkhofen"",""Secteur secondaire"",17,105,35,70,87,22,64" -"2021,""4079 Unterlunkhofen"",""Secteur tertiaire"",53,114,74,40,63,35,28" -"2021,""4080 Villmergen"",""Secteur conomique - total"",496,3926,1456,2470,3246,987,2260" -"2021,""4080 Villmergen"",""Secteur primaire"",25,79,24,55,57,11,46" -"2021,""4080 Villmergen"",""Secteur secondaire"",122,1500,307,1193,1372,231,1141" -"2021,""4080 Villmergen"",""Secteur tertiaire"",349,2347,1125,1222,1818,745,1073" -"2021,""4081 Widen"",""Secteur conomique - total"",189,921,547,374,655,344,310" -"2021,""4081 Widen"",""Secteur primaire"",6,15,X,X,9,X,X" -"2021,""4081 Widen"",""Secteur secondaire"",24,134,X,X,113,X,X" -"2021,""4081 Widen"",""Secteur tertiaire"",159,772,509,263,533,321,212" -"2021,""4082 Wohlen (AG)"",""Secteur conomique - total"",1085,8622,3904,4718,6600,2528,4072" -"2021,""4082 Wohlen (AG)"",""Secteur primaire"",17,57,18,39,39,12,27" -"2021,""4082 Wohlen (AG)"",""Secteur secondaire"",178,1775,350,1425,1626,260,1366" -"2021,""4082 Wohlen (AG)"",""Secteur tertiaire"",890,6790,3536,3254,4935,2255,2680" -"2021,""4083 Zufikon"",""Secteur conomique - total"",202,1199,413,786,939,250,688" -"2021,""4083 Zufikon"",""Secteur primaire"",9,19,X,X,10,X,X" -"2021,""4083 Zufikon"",""Secteur secondaire"",35,269,X,X,250,X,X" -"2021,""4083 Zufikon"",""Secteur tertiaire"",158,911,361,550,679,214,465" -"2021,""4084 Islisberg"",""Secteur conomique - total"",40,75,41,34,44,20,24" -"2021,""4084 Islisberg"",""Secteur primaire"",7,22,X,X,15,X,X" -"2021,""4084 Islisberg"",""Secteur secondaire"",6,7,X,X,5,X,X" -"2021,""4084 Islisberg"",""Secteur tertiaire"",27,46,31,15,24,15,9" -"2021,""4091 Auenstein"",""Secteur conomique - total"",93,294,132,162,209,73,136" -"2021,""4091 Auenstein"",""Secteur primaire"",8,15,X,X,7,X,X" -"2021,""4091 Auenstein"",""Secteur secondaire"",16,123,X,X,105,X,X" -"2021,""4091 Auenstein"",""Secteur tertiaire"",69,156,X,X,96,X,X" -"2021,""4092 Birr"",""Secteur conomique - total"",180,1997,471,1526,1694,298,1396" -"2021,""4092 Birr"",""Secteur primaire"",6,29,8,21,25,6,19" -"2021,""4092 Birr"",""Secteur secondaire"",36,911,79,832,880,65,816" -"2021,""4092 Birr"",""Secteur tertiaire"",138,1057,384,673,789,228,562" -"2021,""4093 Birrhard"",""Secteur conomique - total"",61,260,71,189,202,37,165" -"2021,""4093 Birrhard"",""Secteur primaire"",10,37,9,28,25,5,20" -"2021,""4093 Birrhard"",""Secteur secondaire"",14,131,14,117,122,8,113" -"2021,""4093 Birrhard"",""Secteur tertiaire"",37,92,48,44,55,23,32" -"2021,""4094 Bzen"",""Secteur conomique - total"",62,197,113,84,131,64,67" -"2021,""4094 Bzen"",""Secteur primaire"",12,37,17,20,24,10,14" -"2021,""4094 Bzen"",""Secteur secondaire"",12,36,12,24,28,7,22" -"2021,""4094 Bzen"",""Secteur tertiaire"",38,124,84,40,79,47,31" -"2021,""4095 Brugg"",""Secteur conomique - total"",1063,9938,5023,4915,7531,3285,4245" -"2021,""4095 Brugg"",""Secteur primaire"",6,24,X,X,14,X,X" -"2021,""4095 Brugg"",""Secteur secondaire"",106,1662,X,X,1544,X,X" -"2021,""4095 Brugg"",""Secteur tertiaire"",951,8252,4660,3592,5973,3001,2972" -"2021,""4096 Effingen"",""Secteur conomique - total"",52,218,103,115,164,69,95" -"2021,""4096 Effingen"",""Secteur primaire"",12,40,15,25,24,9,16" -"2021,""4096 Effingen"",""Secteur secondaire"",9,22,7,15,19,4,15" -"2021,""4096 Effingen"",""Secteur tertiaire"",31,156,81,75,121,57,64" -"2021,""4097 Elfingen"",""Secteur conomique - total"",25,79,21,58,57,12,45" -"2021,""4097 Elfingen"",""Secteur primaire"",X,25,X,X,14,X,X" -"2021,""4097 Elfingen"",""Secteur secondaire"",X,10,X,X,8,X,X" -"2021,""4097 Elfingen"",""Secteur tertiaire"",15,44,X,X,35,X,X" -"2021,""4099 Habsburg"",""Secteur conomique - total"",18,63,35,28,41,18,23" -"2021,""4099 Habsburg"",""Secteur primaire"",X,8,X,X,6,X,X" -"2021,""4099 Habsburg"",""Secteur secondaire"",X,6,X,X,5,X,X" -"2021,""4099 Habsburg"",""Secteur tertiaire"",14,49,31,18,30,16,14" -"2021,""4100 Hausen (AG)"",""Secteur conomique - total"",170,1718,1121,597,977,543,434" -"2021,""4100 Hausen (AG)"",""Secteur primaire"",4,19,11,8,14,8,6" -"2021,""4100 Hausen (AG)"",""Secteur secondaire"",29,156,34,122,136,20,116" -"2021,""4100 Hausen (AG)"",""Secteur tertiaire"",137,1543,1076,467,827,515,313" -"2021,""4104 Lupfig"",""Secteur conomique - total"",232,2965,990,1975,2464,683,1782" -"2021,""4104 Lupfig"",""Secteur primaire"",16,62,23,39,42,12,30" -"2021,""4104 Lupfig"",""Secteur secondaire"",51,652,120,532,605,95,511" -"2021,""4104 Lupfig"",""Secteur tertiaire"",165,2251,847,1404,1817,576,1241" -"2021,""4105 Mandach"",""Secteur conomique - total"",32,87,40,47,44,20,24" -"2021,""4105 Mandach"",""Secteur primaire"",13,37,X,X,19,X,X" -"2021,""4105 Mandach"",""Secteur secondaire"",7,8,X,X,4,X,X" -"2021,""4105 Mandach"",""Secteur tertiaire"",12,42,X,X,21,X,X" -"2021,""4106 Mnthal"",""Secteur conomique - total"",29,94,31,63,62,12,49" -"2021,""4106 Mnthal"",""Secteur primaire"",8,18,X,X,6,X,X" -"2021,""4106 Mnthal"",""Secteur secondaire"",8,37,X,X,33,X,X" -"2021,""4106 Mnthal"",""Secteur tertiaire"",13,39,22,17,22,9,13" -"2021,""4107 Mlligen"",""Secteur conomique - total"",56,180,79,101,126,43,83" -"2021,""4107 Mlligen"",""Secteur primaire"",4,15,X,X,10,X,X" -"2021,""4107 Mlligen"",""Secteur secondaire"",13,70,X,X,59,X,X" -"2021,""4107 Mlligen"",""Secteur tertiaire"",39,95,64,31,58,36,22" -"2021,""4110 Remigen"",""Secteur conomique - total"",71,312,130,182,240,81,160" -"2021,""4110 Remigen"",""Secteur primaire"",13,57,27,30,43,20,24" -"2021,""4110 Remigen"",""Secteur secondaire"",16,119,14,105,113,9,104" -"2021,""4110 Remigen"",""Secteur tertiaire"",42,136,89,47,84,52,32" -"2021,""4111 Riniken"",""Secteur conomique - total"",79,278,121,157,176,63,114" -"2021,""4111 Riniken"",""Secteur primaire"",9,29,9,20,16,5,11" -"2021,""4111 Riniken"",""Secteur secondaire"",12,53,8,45,47,4,42" -"2021,""4111 Riniken"",""Secteur tertiaire"",58,196,104,92,113,53,61" -"2021,""4112 Rfenach"",""Secteur conomique - total"",58,227,140,87,143,82,61" -"2021,""4112 Rfenach"",""Secteur primaire"",16,46,X,X,25,X,X" -"2021,""4112 Rfenach"",""Secteur secondaire"",6,21,X,X,14,X,X" -"2021,""4112 Rfenach"",""Secteur tertiaire"",36,160,122,38,103,74,29" -"2021,""4117 Thalheim (AG)"",""Secteur conomique - total"",68,262,108,154,174,51,123" -"2021,""4117 Thalheim (AG)"",""Secteur primaire"",24,60,21,39,29,10,19" -"2021,""4117 Thalheim (AG)"",""Secteur secondaire"",8,68,10,58,62,6,56" -"2021,""4117 Thalheim (AG)"",""Secteur tertiaire"",36,134,77,57,83,35,47" -"2021,""4120 Veltheim (AG)"",""Secteur conomique - total"",108,640,236,404,469,126,343" -"2021,""4120 Veltheim (AG)"",""Secteur primaire"",16,60,13,47,46,7,39" -"2021,""4120 Veltheim (AG)"",""Secteur secondaire"",19,217,37,180,197,26,170" -"2021,""4120 Veltheim (AG)"",""Secteur tertiaire"",73,363,186,177,227,93,133" -"2021,""4121 Villigen"",""Secteur conomique - total"",110,1590,493,1097,1405,363,1042" -"2021,""4121 Villigen"",""Secteur primaire"",15,48,15,33,33,7,26" -"2021,""4121 Villigen"",""Secteur secondaire"",12,132,59,73,113,44,69" -"2021,""4121 Villigen"",""Secteur tertiaire"",83,1410,419,991,1260,313,947" -"2021,""4122 Villnachern"",""Secteur conomique - total"",77,247,97,150,175,51,124" -"2021,""4122 Villnachern"",""Secteur primaire"",10,34,X,X,20,X,X" -"2021,""4122 Villnachern"",""Secteur secondaire"",10,99,X,X,86,X,X" -"2021,""4122 Villnachern"",""Secteur tertiaire"",57,114,75,39,69,41,29" -"2021,""4123 Windisch"",""Secteur conomique - total"",376,5000,2779,2221,3698,1904,1793" -"2021,""4123 Windisch"",""Secteur primaire"",X,10,X,X,6,X,X" -"2021,""4123 Windisch"",""Secteur secondaire"",X,297,X,X,263,X,X" -"2021,""4123 Windisch"",""Secteur tertiaire"",326,4693,2710,1983,3429,1858,1571" -"2021,""4124 Bzberg"",""Secteur conomique - total"",121,298,152,146,177,78,99" -"2021,""4124 Bzberg"",""Secteur primaire"",44,102,39,63,49,15,34" -"2021,""4124 Bzberg"",""Secteur secondaire"",13,28,12,16,20,7,13" -"2021,""4124 Bzberg"",""Secteur tertiaire"",64,168,101,67,108,56,51" -"2021,""4125 Schinznach"",""Secteur conomique - total"",186,1457,620,837,1069,376,693" -"2021,""4125 Schinznach"",""Secteur primaire"",29,186,66,120,140,45,95" -"2021,""4125 Schinznach"",""Secteur secondaire"",36,413,61,352,381,42,340" -"2021,""4125 Schinznach"",""Secteur tertiaire"",121,858,493,365,548,289,259" -"2021,""4131 Beinwil am See"",""Secteur conomique - total"",252,975,512,463,667,283,384" -"2021,""4131 Beinwil am See"",""Secteur primaire"",10,25,X,X,13,X,X" -"2021,""4131 Beinwil am See"",""Secteur secondaire"",46,202,X,X,175,X,X" -"2021,""4131 Beinwil am See"",""Secteur tertiaire"",196,748,455,293,480,248,231" -"2021,""4132 Birrwil"",""Secteur conomique - total"",81,205,103,102,142,58,84" -"2021,""4132 Birrwil"",""Secteur primaire"",8,17,X,X,8,X,X" -"2021,""4132 Birrwil"",""Secteur secondaire"",11,30,X,X,26,X,X" -"2021,""4132 Birrwil"",""Secteur tertiaire"",62,158,91,67,108,53,55" -"2021,""4133 Burg (AG)"",""Secteur conomique - total"",44,342,118,224,291,81,210" -"2021,""4133 Burg (AG)"",""Secteur primaire"",X,13,X,X,12,X,X" -"2021,""4133 Burg (AG)"",""Secteur secondaire"",X,234,59,175,221,51,170" -"2021,""4133 Burg (AG)"",""Secteur tertiaire"",30,95,X,X,59,X,X" -"2021,""4134 Drrensch"",""Secteur conomique - total"",91,914,312,602,779,233,546" -"2021,""4134 Drrensch"",""Secteur primaire"",11,25,X,X,11,X,X" -"2021,""4134 Drrensch"",""Secteur secondaire"",18,213,X,X,195,X,X" -"2021,""4134 Drrensch"",""Secteur tertiaire"",62,676,268,408,573,205,368" -"2021,""4135 Gontenschwil"",""Secteur conomique - total"",165,1015,469,546,768,301,467" -"2021,""4135 Gontenschwil"",""Secteur primaire"",29,82,29,53,49,16,33" -"2021,""4135 Gontenschwil"",""Secteur secondaire"",40,402,120,282,352,86,266" -"2021,""4135 Gontenschwil"",""Secteur tertiaire"",96,531,320,211,366,198,168" -"2021,""4136 Holziken"",""Secteur conomique - total"",77,273,127,146,200,76,124" -"2021,""4136 Holziken"",""Secteur primaire"",10,27,9,18,16,4,12" -"2021,""4136 Holziken"",""Secteur secondaire"",15,76,18,58,68,13,55" -"2021,""4136 Holziken"",""Secteur tertiaire"",52,170,100,70,116,59,57" -"2021,""4137 Leimbach (AG)"",""Secteur conomique - total"",42,133,48,85,98,26,72" -"2021,""4137 Leimbach (AG)"",""Secteur primaire"",7,20,X,X,13,X,X" -"2021,""4137 Leimbach (AG)"",""Secteur secondaire"",13,64,X,X,58,X,X" -"2021,""4137 Leimbach (AG)"",""Secteur tertiaire"",22,49,29,20,27,13,14" -"2021,""4138 Leutwil"",""Secteur conomique - total"",63,175,65,110,127,34,93" -"2021,""4138 Leutwil"",""Secteur primaire"",14,33,15,18,22,9,13" -"2021,""4138 Leutwil"",""Secteur secondaire"",12,76,16,60,66,9,57" -"2021,""4138 Leutwil"",""Secteur tertiaire"",37,66,34,32,39,16,23" -"2021,""4139 Menziken"",""Secteur conomique - total"",313,1914,1026,888,1384,632,752" -"2021,""4139 Menziken"",""Secteur primaire"",9,22,X,X,15,X,X" -"2021,""4139 Menziken"",""Secteur secondaire"",57,391,X,X,349,X,X" -"2021,""4139 Menziken"",""Secteur tertiaire"",247,1501,947,554,1019,581,438" -"2021,""4140 Oberkulm"",""Secteur conomique - total"",151,1002,469,533,765,301,464" -"2021,""4140 Oberkulm"",""Secteur primaire"",33,75,25,50,38,10,28" -"2021,""4140 Oberkulm"",""Secteur secondaire"",29,556,203,353,485,145,340" -"2021,""4140 Oberkulm"",""Secteur tertiaire"",89,371,241,130,242,147,96" -"2021,""4141 Reinach (AG)"",""Secteur conomique - total"",568,3762,1841,1921,2807,1133,1675" -"2021,""4141 Reinach (AG)"",""Secteur primaire"",20,54,13,41,36,8,28" -"2021,""4141 Reinach (AG)"",""Secteur secondaire"",113,1259,258,1001,1117,173,944" -"2021,""4141 Reinach (AG)"",""Secteur tertiaire"",435,2449,1570,879,1654,952,703" -"2021,""4142 Schlossrued"",""Secteur conomique - total"",93,346,121,225,246,60,187" -"2021,""4142 Schlossrued"",""Secteur primaire"",35,81,27,54,46,12,33" -"2021,""4142 Schlossrued"",""Secteur secondaire"",10,148,25,123,134,15,119" -"2021,""4142 Schlossrued"",""Secteur tertiaire"",48,117,69,48,67,32,35" -"2021,""4143 Schmiedrued"",""Secteur conomique - total"",104,374,150,224,244,77,168" -"2021,""4143 Schmiedrued"",""Secteur primaire"",43,104,39,65,52,15,37" -"2021,""4143 Schmiedrued"",""Secteur secondaire"",16,113,23,90,103,18,85" -"2021,""4143 Schmiedrued"",""Secteur tertiaire"",45,157,88,69,90,44,45" -"2021,""4144 Schftland"",""Secteur conomique - total"",327,1799,933,866,1331,584,747" -"2021,""4144 Schftland"",""Secteur primaire"",8,18,X,X,9,X,X" -"2021,""4144 Schftland"",""Secteur secondaire"",68,462,X,X,391,X,X" -"2021,""4144 Schftland"",""Secteur tertiaire"",251,1319,796,523,931,503,428" -"2021,""4145 Teufenthal (AG)"",""Secteur conomique - total"",90,357,148,209,256,82,173" -"2021,""4145 Teufenthal (AG)"",""Secteur primaire"",10,26,9,17,16,4,12" -"2021,""4145 Teufenthal (AG)"",""Secteur secondaire"",18,99,23,76,86,15,71" -"2021,""4145 Teufenthal (AG)"",""Secteur tertiaire"",62,232,116,116,154,63,90" -"2021,""4146 Unterkulm"",""Secteur conomique - total"",221,1136,475,661,862,290,573" -"2021,""4146 Unterkulm"",""Secteur primaire"",27,65,25,40,33,10,24" -"2021,""4146 Unterkulm"",""Secteur secondaire"",29,421,96,325,394,79,315" -"2021,""4146 Unterkulm"",""Secteur tertiaire"",165,650,354,296,435,201,234" -"2021,""4147 Zetzwil"",""Secteur conomique - total"",88,626,395,231,441,251,190" -"2021,""4147 Zetzwil"",""Secteur primaire"",16,37,15,22,20,8,13" -"2021,""4147 Zetzwil"",""Secteur secondaire"",23,157,58,99,132,36,96" -"2021,""4147 Zetzwil"",""Secteur tertiaire"",49,432,322,110,289,207,82" -"2021,""4161 Eiken"",""Secteur conomique - total"",131,1259,419,840,1082,291,790" -"2021,""4161 Eiken"",""Secteur primaire"",8,23,X,X,14,X,X" -"2021,""4161 Eiken"",""Secteur secondaire"",28,589,X,X,562,X,X" -"2021,""4161 Eiken"",""Secteur tertiaire"",95,647,311,336,505,208,297" -"2021,""4163 Frick"",""Secteur conomique - total"",471,4130,1926,2204,3185,1248,1937" -"2021,""4163 Frick"",""Secteur primaire"",12,63,34,29,39,20,19" -"2021,""4163 Frick"",""Secteur secondaire"",48,925,139,786,863,102,761" -"2021,""4163 Frick"",""Secteur tertiaire"",411,3142,1753,1389,2283,1126,1157" -"2021,""4164 Gansingen"",""Secteur conomique - total"",85,173,74,99,98,35,63" -"2021,""4164 Gansingen"",""Secteur primaire"",29,73,X,X,38,X,X" -"2021,""4164 Gansingen"",""Secteur secondaire"",10,11,X,X,7,X,X" -"2021,""4164 Gansingen"",""Secteur tertiaire"",46,89,48,41,53,23,30" -"2021,""4165 Gipf-Oberfrick"",""Secteur conomique - total"",229,815,400,415,539,215,324" -"2021,""4165 Gipf-Oberfrick"",""Secteur primaire"",31,102,27,75,57,14,43" -"2021,""4165 Gipf-Oberfrick"",""Secteur secondaire"",31,179,46,133,146,28,119" -"2021,""4165 Gipf-Oberfrick"",""Secteur tertiaire"",167,534,327,207,336,174,162" -"2021,""4166 Herznach"",""Secteur conomique - total"",99,361,188,173,248,114,134" -"2021,""4166 Herznach"",""Secteur primaire"",19,51,18,33,31,9,22" -"2021,""4166 Herznach"",""Secteur secondaire"",22,139,67,72,114,49,65" -"2021,""4166 Herznach"",""Secteur tertiaire"",58,171,103,68,103,56,47" -"2021,""4167 Hornussen"",""Secteur conomique - total"",53,176,66,110,129,36,94" -"2021,""4167 Hornussen"",""Secteur primaire"",12,45,15,30,29,7,21" -"2021,""4167 Hornussen"",""Secteur secondaire"",15,58,9,49,52,6,46" -"2021,""4167 Hornussen"",""Secteur tertiaire"",26,73,42,31,48,22,26" -"2021,""4169 Kaisten"",""Secteur conomique - total"",154,908,288,620,725,159,566" -"2021,""4169 Kaisten"",""Secteur primaire"",29,81,29,52,54,13,41" -"2021,""4169 Kaisten"",""Secteur secondaire"",25,475,46,429,450,33,418" -"2021,""4169 Kaisten"",""Secteur tertiaire"",100,352,213,139,221,113,108" -"2021,""4170 Laufenburg"",""Secteur conomique - total"",258,2291,991,1300,1812,634,1178" -"2021,""4170 Laufenburg"",""Secteur primaire"",26,92,35,57,51,13,37" -"2021,""4170 Laufenburg"",""Secteur secondaire"",44,879,138,741,822,97,725" -"2021,""4170 Laufenburg"",""Secteur tertiaire"",188,1320,818,502,939,523,416" -"2021,""4172 Mnchwilen (AG)"",""Secteur conomique - total"",65,614,231,383,519,154,365" -"2021,""4172 Mnchwilen (AG)"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""4172 Mnchwilen (AG)"",""Secteur secondaire"",X,405,X,X,396,X,X" -"2021,""4172 Mnchwilen (AG)"",""Secteur tertiaire"",45,204,X,X,X,X,X" -"2021,""4173 Oberhof"",""Secteur conomique - total"",51,128,52,76,84,25,59" -"2021,""4173 Oberhof"",""Secteur primaire"",23,61,X,X,35,X,X" -"2021,""4173 Oberhof"",""Secteur secondaire"",8,29,X,X,27,X,X" -"2021,""4173 Oberhof"",""Secteur tertiaire"",20,38,23,15,22,12,10" -"2021,""4175 Oeschgen"",""Secteur conomique - total"",72,301,133,168,224,79,145" -"2021,""4175 Oeschgen"",""Secteur primaire"",7,23,11,12,17,8,10" -"2021,""4175 Oeschgen"",""Secteur secondaire"",17,78,12,66,69,7,62" -"2021,""4175 Oeschgen"",""Secteur tertiaire"",48,200,110,90,138,65,73" -"2021,""4176 Schwaderloch"",""Secteur conomique - total"",45,241,70,171,194,36,158" -"2021,""4176 Schwaderloch"",""Secteur primaire"",5,13,X,X,6,X,X" -"2021,""4176 Schwaderloch"",""Secteur secondaire"",10,153,X,X,143,X,X" -"2021,""4176 Schwaderloch"",""Secteur tertiaire"",30,75,X,X,45,X,X" -"2021,""4177 Sisseln"",""Secteur conomique - total"",84,1168,320,848,1061,240,821" -"2021,""4177 Sisseln"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""4177 Sisseln"",""Secteur secondaire"",X,915,190,725,882,164,719" -"2021,""4177 Sisseln"",""Secteur tertiaire"",65,246,X,X,X,X,X" -"2021,""4179 Ueken"",""Secteur conomique - total"",54,125,71,54,71,27,44" -"2021,""4179 Ueken"",""Secteur primaire"",9,43,X,X,22,X,X" -"2021,""4179 Ueken"",""Secteur secondaire"",11,21,X,X,15,X,X" -"2021,""4179 Ueken"",""Secteur tertiaire"",34,61,42,19,34,18,16" -"2021,""4181 Wittnau"",""Secteur conomique - total"",99,271,108,163,190,58,131" -"2021,""4181 Wittnau"",""Secteur primaire"",13,43,19,24,24,10,14" -"2021,""4181 Wittnau"",""Secteur secondaire"",30,111,24,87,94,14,80" -"2021,""4181 Wittnau"",""Secteur tertiaire"",56,117,65,52,72,35,37" -"2021,""4182 Wlflinswil"",""Secteur conomique - total"",86,310,131,179,203,61,142" -"2021,""4182 Wlflinswil"",""Secteur primaire"",32,104,49,55,53,19,34" -"2021,""4182 Wlflinswil"",""Secteur secondaire"",15,83,21,62,69,12,57" -"2021,""4182 Wlflinswil"",""Secteur tertiaire"",39,123,61,62,81,30,51" -"2021,""4183 Zeihen"",""Secteur conomique - total"",83,267,122,145,178,62,116" -"2021,""4183 Zeihen"",""Secteur primaire"",27,77,X,X,43,X,X" -"2021,""4183 Zeihen"",""Secteur secondaire"",11,65,X,X,58,X,X" -"2021,""4183 Zeihen"",""Secteur tertiaire"",45,125,87,38,77,47,31" -"2021,""4184 Mettauertal"",""Secteur conomique - total"",185,754,293,461,535,161,374" -"2021,""4184 Mettauertal"",""Secteur primaire"",51,125,45,80,65,20,46" -"2021,""4184 Mettauertal"",""Secteur secondaire"",39,317,80,237,276,55,221" -"2021,""4184 Mettauertal"",""Secteur tertiaire"",95,312,168,144,193,86,107" -"2021,""4191 Ammerswil"",""Secteur conomique - total"",49,131,53,78,96,27,69" -"2021,""4191 Ammerswil"",""Secteur primaire"",6,43,8,35,39,6,33" -"2021,""4191 Ammerswil"",""Secteur secondaire"",11,31,9,22,26,5,20" -"2021,""4191 Ammerswil"",""Secteur tertiaire"",32,57,36,21,31,16,15" -"2021,""4192 Boniswil"",""Secteur conomique - total"",84,209,92,117,142,49,94" -"2021,""4192 Boniswil"",""Secteur primaire"",5,7,X,X,X,X,X" -"2021,""4192 Boniswil"",""Secteur secondaire"",20,62,X,X,X,X,X" -"2021,""4192 Boniswil"",""Secteur tertiaire"",59,140,76,64,87,40,47" -"2021,""4193 Brunegg"",""Secteur conomique - total"",61,412,153,259,347,112,234" -"2021,""4193 Brunegg"",""Secteur primaire"",4,14,8,6,11,6,5" -"2021,""4193 Brunegg"",""Secteur secondaire"",14,116,21,95,103,13,90" -"2021,""4193 Brunegg"",""Secteur tertiaire"",43,282,124,158,233,93,140" -"2021,""4194 Dintikon"",""Secteur conomique - total"",136,1212,415,797,1043,308,736" -"2021,""4194 Dintikon"",""Secteur primaire"",10,59,21,38,36,8,27" -"2021,""4194 Dintikon"",""Secteur secondaire"",31,213,56,157,184,39,145" -"2021,""4194 Dintikon"",""Secteur tertiaire"",95,940,338,602,823,260,563" -"2021,""4195 Egliswil"",""Secteur conomique - total"",115,438,154,284,340,88,252" -"2021,""4195 Egliswil"",""Secteur primaire"",13,32,14,18,20,8,12" -"2021,""4195 Egliswil"",""Secteur secondaire"",28,216,33,183,194,21,173" -"2021,""4195 Egliswil"",""Secteur tertiaire"",74,190,107,83,127,60,67" -"2021,""4196 Fahrwangen"",""Secteur conomique - total"",158,781,303,478,580,179,401" -"2021,""4196 Fahrwangen"",""Secteur primaire"",16,39,10,29,22,5,17" -"2021,""4196 Fahrwangen"",""Secteur secondaire"",29,292,79,213,256,53,203" -"2021,""4196 Fahrwangen"",""Secteur tertiaire"",113,450,214,236,302,122,180" -"2021,""4197 Hallwil"",""Secteur conomique - total"",76,296,129,167,219,72,147" -"2021,""4197 Hallwil"",""Secteur primaire"",5,15,X,X,12,X,X" -"2021,""4197 Hallwil"",""Secteur secondaire"",18,117,X,X,99,X,X" -"2021,""4197 Hallwil"",""Secteur tertiaire"",53,164,92,72,108,50,58" -"2021,""4198 Hendschiken"",""Secteur conomique - total"",91,563,241,322,428,152,277" -"2021,""4198 Hendschiken"",""Secteur primaire"",13,30,13,17,14,5,9" -"2021,""4198 Hendschiken"",""Secteur secondaire"",18,71,21,50,59,12,47" -"2021,""4198 Hendschiken"",""Secteur tertiaire"",60,462,207,255,355,135,221" -"2021,""4199 Holderbank (AG)"",""Secteur conomique - total"",82,730,223,507,638,163,475" -"2021,""4199 Holderbank (AG)"",""Secteur primaire"",X,7,X,X,5,X,X" -"2021,""4199 Holderbank (AG)"",""Secteur secondaire"",X,74,X,X,70,X,X" -"2021,""4199 Holderbank (AG)"",""Secteur tertiaire"",67,649,216,433,564,159,405" -"2021,""4200 Hunzenschwil"",""Secteur conomique - total"",283,2157,697,1460,1779,464,1315" -"2021,""4200 Hunzenschwil"",""Secteur primaire"",9,31,7,24,25,4,21" -"2021,""4200 Hunzenschwil"",""Secteur secondaire"",56,548,115,433,502,89,413" -"2021,""4200 Hunzenschwil"",""Secteur tertiaire"",218,1578,575,1003,1251,370,881" -"2021,""4201 Lenzburg"",""Secteur conomique - total"",983,9640,4116,5524,7618,2760,4859" -"2021,""4201 Lenzburg"",""Secteur primaire"",10,24,10,14,13,5,8" -"2021,""4201 Lenzburg"",""Secteur secondaire"",115,2372,614,1758,2166,480,1686" -"2021,""4201 Lenzburg"",""Secteur tertiaire"",858,7244,3492,3752,5439,2275,3164" -"2021,""4202 Meisterschwanden"",""Secteur conomique - total"",216,1273,646,627,937,415,523" -"2021,""4202 Meisterschwanden"",""Secteur primaire"",9,26,11,15,17,8,9" -"2021,""4202 Meisterschwanden"",""Secteur secondaire"",31,333,74,259,300,53,247" -"2021,""4202 Meisterschwanden"",""Secteur tertiaire"",176,914,561,353,620,354,266" -"2021,""4203 Mriken-Wildegg"",""Secteur conomique - total"",293,1617,743,874,1164,432,732" -"2021,""4203 Mriken-Wildegg"",""Secteur primaire"",9,30,9,21,20,5,16" -"2021,""4203 Mriken-Wildegg"",""Secteur secondaire"",54,468,84,384,406,53,353" -"2021,""4203 Mriken-Wildegg"",""Secteur tertiaire"",230,1119,650,469,737,374,363" -"2021,""4204 Niederlenz"",""Secteur conomique - total"",214,1698,666,1032,1348,424,924" -"2021,""4204 Niederlenz"",""Secteur primaire"",X,10,X,X,6,X,X" -"2021,""4204 Niederlenz"",""Secteur secondaire"",X,617,X,X,575,X,X" -"2021,""4204 Niederlenz"",""Secteur tertiaire"",176,1071,529,542,767,317,451" -"2021,""4205 Othmarsingen"",""Secteur conomique - total"",188,1202,367,835,1022,243,779" -"2021,""4205 Othmarsingen"",""Secteur primaire"",8,29,X,X,22,X,X" -"2021,""4205 Othmarsingen"",""Secteur secondaire"",36,377,X,X,339,X,X" -"2021,""4205 Othmarsingen"",""Secteur tertiaire"",144,796,273,523,662,179,483" -"2021,""4206 Rupperswil"",""Secteur conomique - total"",310,1990,777,1213,1569,489,1080" -"2021,""4206 Rupperswil"",""Secteur primaire"",8,20,7,13,14,4,10" -"2021,""4206 Rupperswil"",""Secteur secondaire"",73,815,160,655,747,114,634" -"2021,""4206 Rupperswil"",""Secteur tertiaire"",229,1155,610,545,807,371,436" -"2021,""4207 Schafisheim"",""Secteur conomique - total"",196,4123,1268,2855,3487,837,2650" -"2021,""4207 Schafisheim"",""Secteur primaire"",13,46,22,24,28,13,15" -"2021,""4207 Schafisheim"",""Secteur secondaire"",35,548,99,449,509,78,431" -"2021,""4207 Schafisheim"",""Secteur tertiaire"",148,3529,1147,2382,2950,746,2204" -"2021,""4208 Seengen"",""Secteur conomique - total"",251,1355,685,670,958,396,562" -"2021,""4208 Seengen"",""Secteur primaire"",20,100,54,46,58,22,37" -"2021,""4208 Seengen"",""Secteur secondaire"",41,228,67,161,192,44,148" -"2021,""4208 Seengen"",""Secteur tertiaire"",190,1027,564,463,707,330,377" -"2021,""4209 Seon"",""Secteur conomique - total"",365,3003,1431,1572,2324,951,1373" -"2021,""4209 Seon"",""Secteur primaire"",20,69,22,47,48,11,37" -"2021,""4209 Seon"",""Secteur secondaire"",69,702,128,574,634,86,548" -"2021,""4209 Seon"",""Secteur tertiaire"",276,2232,1281,951,1643,854,789" -"2021,""4210 Staufen"",""Secteur conomique - total"",177,801,460,341,537,279,259" -"2021,""4210 Staufen"",""Secteur primaire"",5,16,X,X,13,X,X" -"2021,""4210 Staufen"",""Secteur secondaire"",23,91,X,X,76,X,X" -"2021,""4210 Staufen"",""Secteur tertiaire"",149,694,431,263,448,262,187" -"2021,""4221 Abtwil"",""Secteur conomique - total"",59,177,71,106,119,35,84" -"2021,""4221 Abtwil"",""Secteur primaire"",17,48,15,33,30,6,24" -"2021,""4221 Abtwil"",""Secteur secondaire"",12,58,9,49,46,5,41" -"2021,""4221 Abtwil"",""Secteur tertiaire"",30,71,47,24,44,25,19" -"2021,""4222 Aristau"",""Secteur conomique - total"",109,371,223,148,172,61,111" -"2021,""4222 Aristau"",""Secteur primaire"",31,84,27,57,50,10,40" -"2021,""4222 Aristau"",""Secteur secondaire"",19,58,15,43,45,6,39" -"2021,""4222 Aristau"",""Secteur tertiaire"",59,229,181,48,78,46,32" -"2021,""4223 Auw"",""Secteur conomique - total"",140,611,253,358,437,141,297" -"2021,""4223 Auw"",""Secteur primaire"",37,103,34,69,63,15,49" -"2021,""4223 Auw"",""Secteur secondaire"",23,213,37,176,178,20,158" -"2021,""4223 Auw"",""Secteur tertiaire"",80,295,182,113,196,106,90" -"2021,""4224 Beinwil (Freiamt)"",""Secteur conomique - total"",125,418,192,226,277,100,177" -"2021,""4224 Beinwil (Freiamt)"",""Secteur primaire"",44,132,X,X,76,X,X" -"2021,""4224 Beinwil (Freiamt)"",""Secteur secondaire"",13,55,X,X,48,X,X" -"2021,""4224 Beinwil (Freiamt)"",""Secteur tertiaire"",68,231,141,90,153,78,75" -"2021,""4226 Besenbren"",""Secteur conomique - total"",46,137,56,81,97,30,67" -"2021,""4226 Besenbren"",""Secteur primaire"",12,28,11,17,14,4,10" -"2021,""4226 Besenbren"",""Secteur secondaire"",13,34,8,26,29,5,24" -"2021,""4226 Besenbren"",""Secteur tertiaire"",21,75,37,38,53,20,33" -"2021,""4227 Bettwil"",""Secteur conomique - total"",46,237,79,158,178,41,137" -"2021,""4227 Bettwil"",""Secteur primaire"",13,47,15,32,30,6,24" -"2021,""4227 Bettwil"",""Secteur secondaire"",5,106,12,94,97,7,89" -"2021,""4227 Bettwil"",""Secteur tertiaire"",28,84,52,32,51,27,24" -"2021,""4228 Boswil"",""Secteur conomique - total"",217,1432,509,923,1135,313,822" -"2021,""4228 Boswil"",""Secteur primaire"",39,117,47,70,76,23,53" -"2021,""4228 Boswil"",""Secteur secondaire"",45,514,86,428,481,68,413" -"2021,""4228 Boswil"",""Secteur tertiaire"",133,801,376,425,578,222,356" -"2021,""4229 Bnzen"",""Secteur conomique - total"",99,295,131,164,197,75,122" -"2021,""4229 Bnzen"",""Secteur primaire"",22,66,20,46,34,11,23" -"2021,""4229 Bnzen"",""Secteur secondaire"",17,78,34,44,63,21,42" -"2021,""4229 Bnzen"",""Secteur tertiaire"",60,151,77,74,99,43,57" -"2021,""4230 Buttwil"",""Secteur conomique - total"",81,207,82,125,131,40,92" -"2021,""4230 Buttwil"",""Secteur primaire"",10,28,X,X,17,X,X" -"2021,""4230 Buttwil"",""Secteur secondaire"",14,31,X,X,25,X,X" -"2021,""4230 Buttwil"",""Secteur tertiaire"",57,148,67,81,90,33,58" -"2021,""4231 Dietwil"",""Secteur conomique - total"",69,194,77,117,138,41,97" -"2021,""4231 Dietwil"",""Secteur primaire"",18,64,X,X,46,X,X" -"2021,""4231 Dietwil"",""Secteur secondaire"",11,30,X,X,28,X,X" -"2021,""4231 Dietwil"",""Secteur tertiaire"",40,100,55,45,64,29,35" -"2021,""4232 Geltwil"",""Secteur conomique - total"",22,63,31,32,40,16,24" -"2021,""4232 Geltwil"",""Secteur primaire"",10,26,X,X,18,X,X" -"2021,""4232 Geltwil"",""Secteur secondaire"",X,11,X,X,8,X,X" -"2021,""4232 Geltwil"",""Secteur tertiaire"",X,26,19,7,14,9,5" -"2021,""4233 Kallern"",""Secteur conomique - total"",44,102,55,47,58,29,30" -"2021,""4233 Kallern"",""Secteur primaire"",14,41,X,X,22,X,X" -"2021,""4233 Kallern"",""Secteur secondaire"",6,10,X,X,8,X,X" -"2021,""4233 Kallern"",""Secteur tertiaire"",24,51,37,14,29,19,10" -"2021,""4234 Merenschwand"",""Secteur conomique - total"",284,1610,593,1017,1277,380,897" -"2021,""4234 Merenschwand"",""Secteur primaire"",45,152,50,102,94,23,71" -"2021,""4234 Merenschwand"",""Secteur secondaire"",69,761,176,585,684,128,556" -"2021,""4234 Merenschwand"",""Secteur tertiaire"",170,697,367,330,499,229,270" -"2021,""4235 Mhlau"",""Secteur conomique - total"",108,346,140,206,237,71,166" -"2021,""4235 Mhlau"",""Secteur primaire"",26,89,30,59,54,12,42" -"2021,""4235 Mhlau"",""Secteur secondaire"",21,117,28,89,97,16,81" -"2021,""4235 Mhlau"",""Secteur tertiaire"",61,140,82,58,86,42,43" -"2021,""4236 Muri (AG)"",""Secteur conomique - total"",663,5688,2988,2700,4279,1961,2318" -"2021,""4236 Muri (AG)"",""Secteur primaire"",46,152,51,101,95,24,71" -"2021,""4236 Muri (AG)"",""Secteur secondaire"",103,1622,447,1175,1461,342,1119" -"2021,""4236 Muri (AG)"",""Secteur tertiaire"",514,3914,2490,1424,2723,1596,1128" -"2021,""4237 Oberrti"",""Secteur conomique - total"",94,433,164,269,327,92,234" -"2021,""4237 Oberrti"",""Secteur primaire"",22,56,19,37,35,7,28" -"2021,""4237 Oberrti"",""Secteur secondaire"",17,125,25,100,115,19,96" -"2021,""4237 Oberrti"",""Secteur tertiaire"",55,252,120,132,177,66,110" -"2021,""4238 Rottenschwil"",""Secteur conomique - total"",72,221,90,131,153,48,105" -"2021,""4238 Rottenschwil"",""Secteur primaire"",10,33,12,21,21,6,16" -"2021,""4238 Rottenschwil"",""Secteur secondaire"",14,61,14,47,53,10,43" -"2021,""4238 Rottenschwil"",""Secteur tertiaire"",48,127,64,63,80,33,46" -"2021,""4239 Sins"",""Secteur conomique - total"",396,2392,943,1449,1814,568,1245" -"2021,""4239 Sins"",""Secteur primaire"",84,263,93,170,167,38,128" -"2021,""4239 Sins"",""Secteur secondaire"",77,1028,209,819,906,148,758" -"2021,""4239 Sins"",""Secteur tertiaire"",235,1101,641,460,741,383,359" -"2021,""4240 Waltenschwil"",""Secteur conomique - total"",159,621,248,373,444,133,311" -"2021,""4240 Waltenschwil"",""Secteur primaire"",18,56,18,38,37,9,28" -"2021,""4240 Waltenschwil"",""Secteur secondaire"",22,135,37,98,117,26,91" -"2021,""4240 Waltenschwil"",""Secteur tertiaire"",119,430,193,237,291,99,192" -"2021,""4251 Hellikon"",""Secteur conomique - total"",65,132,55,77,87,26,60" -"2021,""4251 Hellikon"",""Secteur primaire"",21,56,X,X,33,X,X" -"2021,""4251 Hellikon"",""Secteur secondaire"",13,28,X,X,24,X,X" -"2021,""4251 Hellikon"",""Secteur tertiaire"",31,48,32,16,30,16,13" -"2021,""4252 Kaiseraugst"",""Secteur conomique - total"",233,6510,2635,3875,5962,2226,3736" -"2021,""4252 Kaiseraugst"",""Secteur primaire"",4,10,X,X,8,X,X" -"2021,""4252 Kaiseraugst"",""Secteur secondaire"",48,4832,1718,3114,4613,1550,3063" -"2021,""4252 Kaiseraugst"",""Secteur tertiaire"",181,1668,X,X,1341,X,X" -"2021,""4253 Magden"",""Secteur conomique - total"",207,714,331,383,511,191,319" -"2021,""4253 Magden"",""Secteur primaire"",16,43,15,28,25,6,19" -"2021,""4253 Magden"",""Secteur secondaire"",27,192,36,156,171,23,147" -"2021,""4253 Magden"",""Secteur tertiaire"",164,479,280,199,315,162,153" -"2021,""4254 Mhlin"",""Secteur conomique - total"",605,4424,1874,2550,3595,1253,2342" -"2021,""4254 Mhlin"",""Secteur primaire"",39,130,55,75,83,24,59" -"2021,""4254 Mhlin"",""Secteur secondaire"",88,1030,222,808,945,176,769" -"2021,""4254 Mhlin"",""Secteur tertiaire"",478,3264,1597,1667,2568,1054,1515" -"2021,""4255 Mumpf"",""Secteur conomique - total"",74,370,170,200,252,91,162" -"2021,""4255 Mumpf"",""Secteur primaire"",5,16,X,X,9,X,X" -"2021,""4255 Mumpf"",""Secteur secondaire"",16,81,X,X,77,X,X" -"2021,""4255 Mumpf"",""Secteur tertiaire"",53,273,159,114,166,85,81" -"2021,""4256 Obermumpf"",""Secteur conomique - total"",61,140,72,68,83,33,50" -"2021,""4256 Obermumpf"",""Secteur primaire"",10,33,X,X,18,X,X" -"2021,""4256 Obermumpf"",""Secteur secondaire"",11,18,X,X,13,X,X" -"2021,""4256 Obermumpf"",""Secteur tertiaire"",40,89,53,36,52,25,27" -"2021,""4257 Olsberg"",""Secteur conomique - total"",26,105,57,48,66,34,32" -"2021,""4257 Olsberg"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""4257 Olsberg"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""4257 Olsberg"",""Secteur tertiaire"",15,72,45,27,50,29,21" -"2021,""4258 Rheinfelden"",""Secteur conomique - total"",969,8494,4517,3977,6422,2988,3434" -"2021,""4258 Rheinfelden"",""Secteur primaire"",5,14,X,X,12,X,X" -"2021,""4258 Rheinfelden"",""Secteur secondaire"",109,1363,X,X,1257,X,X" -"2021,""4258 Rheinfelden"",""Secteur tertiaire"",855,7117,4254,2863,5153,2789,2364" -"2021,""4259 Schupfart"",""Secteur conomique - total"",69,180,83,97,110,42,67" -"2021,""4259 Schupfart"",""Secteur primaire"",17,51,X,X,26,X,X" -"2021,""4259 Schupfart"",""Secteur secondaire"",11,32,X,X,28,X,X" -"2021,""4259 Schupfart"",""Secteur tertiaire"",41,97,57,40,56,31,25" -"2021,""4260 Stein (AG)"",""Secteur conomique - total"",187,3464,1285,2179,3020,994,2026" -"2021,""4260 Stein (AG)"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""4260 Stein (AG)"",""Secteur secondaire"",X,2068,613,1455,1965,533,1431" -"2021,""4260 Stein (AG)"",""Secteur tertiaire"",160,1392,X,X,X,X,X" -"2021,""4261 Wallbach"",""Secteur conomique - total"",123,748,184,564,625,107,518" -"2021,""4261 Wallbach"",""Secteur primaire"",8,24,X,X,12,X,X" -"2021,""4261 Wallbach"",""Secteur secondaire"",24,472,X,X,442,X,X" -"2021,""4261 Wallbach"",""Secteur tertiaire"",91,252,120,132,171,66,105" -"2021,""4262 Wegenstetten"",""Secteur conomique - total"",68,205,103,102,137,54,83" -"2021,""4262 Wegenstetten"",""Secteur primaire"",15,48,21,27,33,13,20" -"2021,""4262 Wegenstetten"",""Secteur secondaire"",11,42,10,32,36,6,30" -"2021,""4262 Wegenstetten"",""Secteur tertiaire"",42,115,72,43,68,34,34" -"2021,""4263 Zeiningen"",""Secteur conomique - total"",170,579,263,316,416,153,263" -"2021,""4263 Zeiningen"",""Secteur primaire"",23,70,20,50,46,9,37" -"2021,""4263 Zeiningen"",""Secteur secondaire"",27,98,23,75,84,13,70" -"2021,""4263 Zeiningen"",""Secteur tertiaire"",120,411,220,191,286,131,156" -"2021,""4264 Zuzgen"",""Secteur conomique - total"",72,250,111,139,172,58,114" -"2021,""4264 Zuzgen"",""Secteur primaire"",18,51,17,34,32,8,25" -"2021,""4264 Zuzgen"",""Secteur secondaire"",8,33,11,22,30,8,22" -"2021,""4264 Zuzgen"",""Secteur tertiaire"",46,166,83,83,110,42,68" -"2021,""4271 Aarburg"",""Secteur conomique - total"",418,3535,1486,2049,2854,1018,1836" -"2021,""4271 Aarburg"",""Secteur primaire"",5,40,17,23,36,15,21" -"2021,""4271 Aarburg"",""Secteur secondaire"",59,996,199,797,937,160,777" -"2021,""4271 Aarburg"",""Secteur tertiaire"",354,2499,1270,1229,1881,842,1039" -"2021,""4273 Bottenwil"",""Secteur conomique - total"",67,150,70,80,94,33,60" -"2021,""4273 Bottenwil"",""Secteur primaire"",16,32,X,X,16,X,X" -"2021,""4273 Bottenwil"",""Secteur secondaire"",17,44,X,X,37,X,X" -"2021,""4273 Bottenwil"",""Secteur tertiaire"",34,74,51,23,41,26,15" -"2021,""4274 Brittnau"",""Secteur conomique - total"",235,764,347,417,518,186,332" -"2021,""4274 Brittnau"",""Secteur primaire"",50,128,36,92,77,14,63" -"2021,""4274 Brittnau"",""Secteur secondaire"",33,218,56,162,186,35,152" -"2021,""4274 Brittnau"",""Secteur tertiaire"",152,418,255,163,255,138,117" -"2021,""4275 Kirchleerau"",""Secteur conomique - total"",69,275,112,163,198,62,136" -"2021,""4275 Kirchleerau"",""Secteur primaire"",16,54,21,33,36,12,25" -"2021,""4275 Kirchleerau"",""Secteur secondaire"",17,90,20,70,79,13,65" -"2021,""4275 Kirchleerau"",""Secteur tertiaire"",36,131,71,60,83,37,46" -"2021,""4276 Klliken"",""Secteur conomique - total"",291,1632,723,909,1233,447,786" -"2021,""4276 Klliken"",""Secteur primaire"",13,48,18,30,34,11,23" -"2021,""4276 Klliken"",""Secteur secondaire"",65,371,61,310,317,30,288" -"2021,""4276 Klliken"",""Secteur tertiaire"",213,1213,644,569,881,406,475" -"2021,""4277 Moosleerau"",""Secteur conomique - total"",64,374,108,266,295,64,231" -"2021,""4277 Moosleerau"",""Secteur primaire"",9,19,X,X,11,X,X" -"2021,""4277 Moosleerau"",""Secteur secondaire"",16,216,X,X,198,X,X" -"2021,""4277 Moosleerau"",""Secteur tertiaire"",39,139,79,60,86,44,43" -"2021,""4279 Murgenthal"",""Secteur conomique - total"",200,890,387,503,667,231,436" -"2021,""4279 Murgenthal"",""Secteur primaire"",27,58,16,42,34,7,27" -"2021,""4279 Murgenthal"",""Secteur secondaire"",41,300,65,235,271,46,225" -"2021,""4279 Murgenthal"",""Secteur tertiaire"",132,532,306,226,362,178,185" -"2021,""4280 Oftringen"",""Secteur conomique - total"",709,5688,2334,3354,4626,1612,3014" -"2021,""4280 Oftringen"",""Secteur primaire"",31,91,33,58,60,19,41" -"2021,""4280 Oftringen"",""Secteur secondaire"",132,1503,334,1169,1369,248,1121" -"2021,""4280 Oftringen"",""Secteur tertiaire"",546,4094,1967,2127,3197,1344,1852" -"2021,""4281 Reitnau"",""Secteur conomique - total"",144,605,225,380,429,119,309" -"2021,""4281 Reitnau"",""Secteur primaire"",39,128,53,75,82,31,51" -"2021,""4281 Reitnau"",""Secteur secondaire"",27,216,34,182,196,22,174" -"2021,""4281 Reitnau"",""Secteur tertiaire"",78,261,138,123,151,67,84" -"2021,""4282 Rothrist"",""Secteur conomique - total"",587,5198,2096,3102,4132,1370,2762" -"2021,""4282 Rothrist"",""Secteur primaire"",23,51,16,35,30,7,23" -"2021,""4282 Rothrist"",""Secteur secondaire"",116,1572,340,1232,1434,247,1186" -"2021,""4282 Rothrist"",""Secteur tertiaire"",448,3575,1740,1835,2668,1116,1553" -"2021,""4283 Safenwil"",""Secteur conomique - total"",260,1725,654,1071,1383,423,960" -"2021,""4283 Safenwil"",""Secteur primaire"",15,42,13,29,28,6,22" -"2021,""4283 Safenwil"",""Secteur secondaire"",57,319,70,249,278,47,230" -"2021,""4283 Safenwil"",""Secteur tertiaire"",188,1364,571,793,1077,370,707" -"2021,""4284 Staffelbach"",""Secteur conomique - total"",92,375,150,225,280,84,196" -"2021,""4284 Staffelbach"",""Secteur primaire"",24,73,30,43,51,16,35" -"2021,""4284 Staffelbach"",""Secteur secondaire"",12,150,25,125,132,15,118" -"2021,""4284 Staffelbach"",""Secteur tertiaire"",56,152,95,57,96,53,43" -"2021,""4285 Strengelbach"",""Secteur conomique - total"",196,1405,697,708,945,406,539" -"2021,""4285 Strengelbach"",""Secteur primaire"",13,35,13,22,23,7,16" -"2021,""4285 Strengelbach"",""Secteur secondaire"",40,307,69,238,272,47,225" -"2021,""4285 Strengelbach"",""Secteur tertiaire"",143,1063,615,448,650,352,298" -"2021,""4286 Uerkheim"",""Secteur conomique - total"",108,369,152,217,256,83,172" -"2021,""4286 Uerkheim"",""Secteur primaire"",34,75,29,46,42,13,29" -"2021,""4286 Uerkheim"",""Secteur secondaire"",22,107,23,84,90,15,76" -"2021,""4286 Uerkheim"",""Secteur tertiaire"",52,187,100,87,124,56,68" -"2021,""4287 Vordemwald"",""Secteur conomique - total"",113,581,357,224,393,209,184" -"2021,""4287 Vordemwald"",""Secteur primaire"",17,41,17,24,24,9,15" -"2021,""4287 Vordemwald"",""Secteur secondaire"",19,147,59,88,126,42,84" -"2021,""4287 Vordemwald"",""Secteur tertiaire"",77,393,281,112,243,157,86" -"2021,""4288 Wiliberg"",""Secteur conomique - total"",14,47,21,26,32,11,21" -"2021,""4288 Wiliberg"",""Secteur primaire"",X,13,X,X,7,X,X" -"2021,""4288 Wiliberg"",""Secteur secondaire"",X,8,X,X,7,X,X" -"2021,""4288 Wiliberg"",""Secteur tertiaire"",6,26,15,11,19,9,10" -"2021,""4289 Zofingen"",""Secteur conomique - total"",1122,10851,5352,5499,8127,3295,4832" -"2021,""4289 Zofingen"",""Secteur primaire"",22,63,16,47,41,5,36" -"2021,""4289 Zofingen"",""Secteur secondaire"",142,3400,631,2769,3182,486,2696" -"2021,""4289 Zofingen"",""Secteur tertiaire"",958,7388,4705,2683,4904,2804,2100" -"2021,""4301 Baldingen"",""Secteur conomique - total"",24,52,17,35,28,8,20" -"2021,""4301 Baldingen"",""Secteur primaire"",8,23,X,X,15,X,X" -"2021,""4301 Baldingen"",""Secteur secondaire"",4,6,X,X,4,X,X" -"2021,""4301 Baldingen"",""Secteur tertiaire"",12,23,X,X,8,X,X" -"2021,""4302 Bbikon"",""Secteur conomique - total"",23,82,29,53,48,13,35" -"2021,""4302 Bbikon"",""Secteur primaire"",10,26,10,16,15,4,10" -"2021,""4302 Bbikon"",""Secteur secondaire"",4,27,7,20,22,4,18" -"2021,""4302 Bbikon"",""Secteur tertiaire"",9,29,12,17,11,4,7" -"2021,""4303 Bttstein"",""Secteur conomique - total"",215,1752,627,1125,1375,381,994" -"2021,""4303 Bttstein"",""Secteur primaire"",13,54,20,34,39,14,25" -"2021,""4303 Bttstein"",""Secteur secondaire"",59,757,122,635,702,88,614" -"2021,""4303 Bttstein"",""Secteur tertiaire"",143,941,485,456,634,279,356" -"2021,""4304 Dttingen"",""Secteur conomique - total"",238,2291,732,1559,1881,452,1428" -"2021,""4304 Dttingen"",""Secteur primaire"",10,44,18,26,22,6,16" -"2021,""4304 Dttingen"",""Secteur secondaire"",54,1228,138,1090,1153,97,1056" -"2021,""4304 Dttingen"",""Secteur tertiaire"",174,1019,576,443,706,349,357" -"2021,""4305 Endingen"",""Secteur conomique - total"",175,810,375,435,566,213,354" -"2021,""4305 Endingen"",""Secteur primaire"",31,85,29,56,54,14,40" -"2021,""4305 Endingen"",""Secteur secondaire"",27,222,58,164,193,39,154" -"2021,""4305 Endingen"",""Secteur tertiaire"",117,503,288,215,319,160,159" -"2021,""4306 Fisibach"",""Secteur conomique - total"",41,182,72,110,126,37,89" -"2021,""4306 Fisibach"",""Secteur primaire"",12,32,15,17,18,6,12" -"2021,""4306 Fisibach"",""Secteur secondaire"",7,70,12,58,65,9,56" -"2021,""4306 Fisibach"",""Secteur tertiaire"",22,80,45,35,43,22,21" -"2021,""4307 Full-Reuenthal"",""Secteur conomique - total"",52,170,81,89,98,38,60" -"2021,""4307 Full-Reuenthal"",""Secteur primaire"",14,52,21,31,27,9,18" -"2021,""4307 Full-Reuenthal"",""Secteur secondaire"",8,26,11,15,19,6,12" -"2021,""4307 Full-Reuenthal"",""Secteur tertiaire"",30,92,49,43,53,23,30" -"2021,""4308 Kaiserstuhl"",""Secteur conomique - total"",35,107,49,58,74,29,45" -"2021,""4308 Kaiserstuhl"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""4308 Kaiserstuhl"",""Secteur secondaire"",5,12,X,X,11,X,X" -"2021,""4308 Kaiserstuhl"",""Secteur tertiaire"",30,95,X,X,63,X,X" -"2021,""4309 Klingnau"",""Secteur conomique - total"",181,975,401,574,745,243,502" -"2021,""4309 Klingnau"",""Secteur primaire"",10,32,10,22,20,5,15" -"2021,""4309 Klingnau"",""Secteur secondaire"",40,336,78,258,303,54,249" -"2021,""4309 Klingnau"",""Secteur tertiaire"",131,607,313,294,423,184,238" -"2021,""4310 Koblenz"",""Secteur conomique - total"",92,477,219,258,382,151,231" -"2021,""4310 Koblenz"",""Secteur primaire"",4,28,20,8,24,17,7" -"2021,""4310 Koblenz"",""Secteur secondaire"",28,196,56,140,176,44,132" -"2021,""4310 Koblenz"",""Secteur tertiaire"",60,253,143,110,182,90,92" -"2021,""4311 Leibstadt"",""Secteur conomique - total"",93,1081,238,843,933,149,784" -"2021,""4311 Leibstadt"",""Secteur primaire"",19,57,22,35,31,8,23" -"2021,""4311 Leibstadt"",""Secteur secondaire"",25,684,85,599,650,66,585" -"2021,""4311 Leibstadt"",""Secteur tertiaire"",49,340,131,209,252,75,177" -"2021,""4312 Lengnau (AG)"",""Secteur conomique - total"",193,1177,599,578,794,327,467" -"2021,""4312 Lengnau (AG)"",""Secteur primaire"",37,105,32,73,71,17,54" -"2021,""4312 Lengnau (AG)"",""Secteur secondaire"",34,420,172,248,356,123,233" -"2021,""4312 Lengnau (AG)"",""Secteur tertiaire"",122,652,395,257,367,187,180" -"2021,""4313 Leuggern"",""Secteur conomique - total"",185,1353,745,608,977,469,507" -"2021,""4313 Leuggern"",""Secteur primaire"",37,116,44,72,67,21,46" -"2021,""4313 Leuggern"",""Secteur secondaire"",36,377,126,251,324,87,236" -"2021,""4313 Leuggern"",""Secteur tertiaire"",112,860,575,285,587,361,225" -"2021,""4314 Mellikon"",""Secteur conomique - total"",24,139,37,102,109,20,89" -"2021,""4314 Mellikon"",""Secteur primaire"",X,11,X,X,6,X,X" -"2021,""4314 Mellikon"",""Secteur secondaire"",X,72,X,X,67,X,X" -"2021,""4314 Mellikon"",""Secteur tertiaire"",15,56,X,X,36,X,X" -"2021,""4315 Rekingen (AG)"",""Secteur conomique - total"",51,442,122,320,345,68,278" -"2021,""4315 Rekingen (AG)"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""4315 Rekingen (AG)"",""Secteur secondaire"",X,135,X,X,X,X,X" -"2021,""4315 Rekingen (AG)"",""Secteur tertiaire"",35,303,111,192,218,60,157" -"2021,""4316 Rietheim"",""Secteur conomique - total"",35,176,66,110,124,35,89" -"2021,""4316 Rietheim"",""Secteur primaire"",5,15,X,X,11,X,X" -"2021,""4316 Rietheim"",""Secteur secondaire"",7,18,X,X,13,X,X" -"2021,""4316 Rietheim"",""Secteur tertiaire"",23,143,54,89,100,28,72" -"2021,""4317 Rmikon"",""Secteur conomique - total"",24,63,23,40,37,10,26" -"2021,""4317 Rmikon"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""4317 Rmikon"",""Secteur secondaire"",X,9,X,X,X,X,X" -"2021,""4317 Rmikon"",""Secteur tertiaire"",17,47,X,X,26,X,X" -"2021,""4318 Schneisingen"",""Secteur conomique - total"",110,354,153,201,240,79,161" -"2021,""4318 Schneisingen"",""Secteur primaire"",20,68,21,47,39,7,32" -"2021,""4318 Schneisingen"",""Secteur secondaire"",19,84,13,71,73,6,67" -"2021,""4318 Schneisingen"",""Secteur tertiaire"",71,202,119,83,128,65,62" -"2021,""4319 Siglistorf"",""Secteur conomique - total"",44,182,60,122,125,28,97" -"2021,""4319 Siglistorf"",""Secteur primaire"",7,18,X,X,12,X,X" -"2021,""4319 Siglistorf"",""Secteur secondaire"",10,64,X,X,58,X,X" -"2021,""4319 Siglistorf"",""Secteur tertiaire"",27,100,48,52,55,22,34" -"2021,""4320 Tegerfelden"",""Secteur conomique - total"",88,459,169,290,359,96,263" -"2021,""4320 Tegerfelden"",""Secteur primaire"",16,68,23,45,48,11,38" -"2021,""4320 Tegerfelden"",""Secteur secondaire"",18,217,35,182,199,23,176" -"2021,""4320 Tegerfelden"",""Secteur tertiaire"",54,174,111,63,112,62,49" -"2021,""4322 Wislikofen"",""Secteur conomique - total"",38,161,53,108,110,26,83" -"2021,""4322 Wislikofen"",""Secteur primaire"",16,43,X,X,24,X,X" -"2021,""4322 Wislikofen"",""Secteur secondaire"",7,51,X,X,45,X,X" -"2021,""4322 Wislikofen"",""Secteur tertiaire"",15,67,37,30,41,20,21" -"2021,""4323 Bad Zurzach"",""Secteur conomique - total"",321,2993,1727,1266,2229,1163,1067" -"2021,""4323 Bad Zurzach"",""Secteur primaire"",6,11,X,X,8,X,X" -"2021,""4323 Bad Zurzach"",""Secteur secondaire"",45,408,X,X,362,X,X" -"2021,""4323 Bad Zurzach"",""Secteur tertiaire"",270,2574,1655,919,1860,1116,743" -"2021,""4401 Arbon"",""Secteur conomique - total"",882,6755,3208,3547,5188,1978,3210" -"2021,""4401 Arbon"",""Secteur primaire"",11,47,13,34,26,5,21" -"2021,""4401 Arbon"",""Secteur secondaire"",115,1837,311,1526,1702,232,1470" -"2021,""4401 Arbon"",""Secteur tertiaire"",756,4871,2884,1987,3460,1740,1720" -"2021,""4406 Dozwil"",""Secteur conomique - total"",39,243,95,148,188,60,129" -"2021,""4406 Dozwil"",""Secteur primaire"",5,20,X,X,15,X,X" -"2021,""4406 Dozwil"",""Secteur secondaire"",7,111,X,X,101,X,X" -"2021,""4406 Dozwil"",""Secteur tertiaire"",27,112,65,47,73,37,35" -"2021,""4411 Egnach"",""Secteur conomique - total"",384,1988,915,1073,1429,532,897" -"2021,""4411 Egnach"",""Secteur primaire"",100,363,138,225,238,76,163" -"2021,""4411 Egnach"",""Secteur secondaire"",76,548,119,429,462,70,392" -"2021,""4411 Egnach"",""Secteur tertiaire"",208,1077,658,419,729,387,342" -"2021,""4416 Hefenhofen"",""Secteur conomique - total"",114,731,221,510,592,134,459" -"2021,""4416 Hefenhofen"",""Secteur primaire"",25,71,24,47,50,11,39" -"2021,""4416 Hefenhofen"",""Secteur secondaire"",26,468,116,352,408,77,331" -"2021,""4416 Hefenhofen"",""Secteur tertiaire"",63,192,81,111,134,45,88" -"2021,""4421 Horn"",""Secteur conomique - total"",223,1232,638,594,947,421,526" -"2021,""4421 Horn"",""Secteur primaire"",X,12,X,X,10,X,X" -"2021,""4421 Horn"",""Secteur secondaire"",X,355,X,X,321,X,X" -"2021,""4421 Horn"",""Secteur tertiaire"",185,865,523,342,616,328,287" -"2021,""4426 Kesswil"",""Secteur conomique - total"",94,416,169,247,306,97,209" -"2021,""4426 Kesswil"",""Secteur primaire"",15,63,21,42,48,11,36" -"2021,""4426 Kesswil"",""Secteur secondaire"",23,174,68,106,140,44,96" -"2021,""4426 Kesswil"",""Secteur tertiaire"",56,179,80,99,118,42,77" -"2021,""4431 Roggwil (TG)"",""Secteur conomique - total"",240,1615,670,945,1272,418,854" -"2021,""4431 Roggwil (TG)"",""Secteur primaire"",44,176,65,111,111,32,79" -"2021,""4431 Roggwil (TG)"",""Secteur secondaire"",42,733,213,520,658,159,499" -"2021,""4431 Roggwil (TG)"",""Secteur tertiaire"",154,706,392,314,502,227,276" -"2021,""4436 Romanshorn"",""Secteur conomique - total"",705,5923,2782,3141,4472,1766,2706" -"2021,""4436 Romanshorn"",""Secteur primaire"",23,67,24,43,44,12,31" -"2021,""4436 Romanshorn"",""Secteur secondaire"",99,1911,537,1374,1764,451,1312" -"2021,""4436 Romanshorn"",""Secteur tertiaire"",583,3945,2221,1724,2665,1302,1363" -"2021,""4441 Salmsach"",""Secteur conomique - total"",73,429,183,246,335,110,225" -"2021,""4441 Salmsach"",""Secteur primaire"",10,147,32,115,137,26,111" -"2021,""4441 Salmsach"",""Secteur secondaire"",16,93,21,72,79,12,67" -"2021,""4441 Salmsach"",""Secteur tertiaire"",47,189,130,59,119,73,46" -"2021,""4446 Sommeri"",""Secteur conomique - total"",72,491,282,209,296,147,149" -"2021,""4446 Sommeri"",""Secteur primaire"",17,47,15,32,28,7,21" -"2021,""4446 Sommeri"",""Secteur secondaire"",17,89,28,61,74,16,58" -"2021,""4446 Sommeri"",""Secteur tertiaire"",38,355,239,116,195,124,71" -"2021,""4451 Uttwil"",""Secteur conomique - total"",132,357,169,188,248,91,157" -"2021,""4451 Uttwil"",""Secteur primaire"",15,52,13,39,37,6,31" -"2021,""4451 Uttwil"",""Secteur secondaire"",18,34,8,26,29,5,24" -"2021,""4451 Uttwil"",""Secteur tertiaire"",99,271,148,123,182,80,103" -"2021,""4461 Amriswil"",""Secteur conomique - total"",1020,6662,3337,3325,5038,2125,2913" -"2021,""4461 Amriswil"",""Secteur primaire"",77,230,82,148,146,40,106" -"2021,""4461 Amriswil"",""Secteur secondaire"",183,1981,582,1399,1768,437,1331" -"2021,""4461 Amriswil"",""Secteur tertiaire"",760,4451,2673,1778,3123,1647,1476" -"2021,""4471 Bischofszell"",""Secteur conomique - total"",408,3437,1346,2091,2792,873,1919" -"2021,""4471 Bischofszell"",""Secteur primaire"",32,80,21,59,56,10,47" -"2021,""4471 Bischofszell"",""Secteur secondaire"",74,1667,346,1321,1545,269,1276" -"2021,""4471 Bischofszell"",""Secteur tertiaire"",302,1690,979,711,1191,594,596" -"2021,""4476 Erlen"",""Secteur conomique - total"",229,1307,489,818,1023,279,745" -"2021,""4476 Erlen"",""Secteur primaire"",47,179,65,114,120,32,88" -"2021,""4476 Erlen"",""Secteur secondaire"",39,536,93,443,496,69,428" -"2021,""4476 Erlen"",""Secteur tertiaire"",143,592,331,261,407,178,229" -"2021,""4486 Hauptwil-Gottshaus"",""Secteur conomique - total"",182,615,219,396,454,119,335" -"2021,""4486 Hauptwil-Gottshaus"",""Secteur primaire"",51,147,48,99,109,25,83" -"2021,""4486 Hauptwil-Gottshaus"",""Secteur secondaire"",37,195,26,169,172,16,157" -"2021,""4486 Hauptwil-Gottshaus"",""Secteur tertiaire"",94,273,145,128,173,78,95" -"2021,""4495 Hohentannen"",""Secteur conomique - total"",75,266,79,187,190,37,152" -"2021,""4495 Hohentannen"",""Secteur primaire"",35,105,29,76,65,13,53" -"2021,""4495 Hohentannen"",""Secteur secondaire"",10,98,10,88,89,5,84" -"2021,""4495 Hohentannen"",""Secteur tertiaire"",30,63,40,23,35,20,15" -"2021,""4501 Kradolf-Schnenberg"",""Secteur conomique - total"",227,1095,451,644,843,263,580" -"2021,""4501 Kradolf-Schnenberg"",""Secteur primaire"",33,79,33,46,53,17,36" -"2021,""4501 Kradolf-Schnenberg"",""Secteur secondaire"",44,437,98,339,387,64,324" -"2021,""4501 Kradolf-Schnenberg"",""Secteur tertiaire"",150,579,320,259,402,182,221" -"2021,""4506 Sulgen"",""Secteur conomique - total"",285,2509,969,1540,2042,623,1419" -"2021,""4506 Sulgen"",""Secteur primaire"",32,102,29,73,69,13,55" -"2021,""4506 Sulgen"",""Secteur secondaire"",64,1459,374,1085,1338,290,1047" -"2021,""4506 Sulgen"",""Secteur tertiaire"",189,948,566,382,635,319,317" -"2021,""4511 Zihlschlacht-Sitterdorf"",""Secteur conomique - total"",184,1441,827,614,1084,574,510" -"2021,""4511 Zihlschlacht-Sitterdorf"",""Secteur primaire"",39,129,45,84,81,23,58" -"2021,""4511 Zihlschlacht-Sitterdorf"",""Secteur secondaire"",43,212,72,140,178,52,127" -"2021,""4511 Zihlschlacht-Sitterdorf"",""Secteur tertiaire"",102,1100,710,390,824,499,325" -"2021,""4536 Basadingen-Schlattingen"",""Secteur conomique - total"",143,731,306,425,581,205,375" -"2021,""4536 Basadingen-Schlattingen"",""Secteur primaire"",34,310,117,193,268,98,170" -"2021,""4536 Basadingen-Schlattingen"",""Secteur secondaire"",37,239,71,168,203,47,155" -"2021,""4536 Basadingen-Schlattingen"",""Secteur tertiaire"",72,182,118,64,110,60,50" -"2021,""4545 Diessenhofen"",""Secteur conomique - total"",277,1867,879,988,1472,580,893" -"2021,""4545 Diessenhofen"",""Secteur primaire"",18,66,24,42,48,16,32" -"2021,""4545 Diessenhofen"",""Secteur secondaire"",64,702,178,524,637,135,502" -"2021,""4545 Diessenhofen"",""Secteur tertiaire"",195,1099,677,422,787,429,358" -"2021,""4546 Schlatt (TG)"",""Secteur conomique - total"",148,561,212,349,411,115,296" -"2021,""4546 Schlatt (TG)"",""Secteur primaire"",29,105,38,67,70,18,52" -"2021,""4546 Schlatt (TG)"",""Secteur secondaire"",32,202,42,160,174,23,151" -"2021,""4546 Schlatt (TG)"",""Secteur tertiaire"",87,254,132,122,167,74,93" -"2021,""4551 Aadorf"",""Secteur conomique - total"",592,3807,1685,2122,3014,1092,1923" -"2021,""4551 Aadorf"",""Secteur primaire"",45,115,41,74,79,21,58" -"2021,""4551 Aadorf"",""Secteur secondaire"",100,1473,328,1145,1353,247,1105" -"2021,""4551 Aadorf"",""Secteur tertiaire"",447,2219,1316,903,1583,823,760" -"2021,""4561 Felben-Wellhausen"",""Secteur conomique - total"",172,1007,339,668,803,200,603" -"2021,""4561 Felben-Wellhausen"",""Secteur primaire"",10,84,37,47,44,17,27" -"2021,""4561 Felben-Wellhausen"",""Secteur secondaire"",43,479,73,406,441,49,392" -"2021,""4561 Felben-Wellhausen"",""Secteur tertiaire"",119,444,229,215,319,134,185" -"2021,""4566 Frauenfeld"",""Secteur conomique - total"",2182,21936,10388,11548,17071,6846,10225" -"2021,""4566 Frauenfeld"",""Secteur primaire"",46,119,42,77,77,22,55" -"2021,""4566 Frauenfeld"",""Secteur secondaire"",263,4357,1106,3251,3995,858,3136" -"2021,""4566 Frauenfeld"",""Secteur tertiaire"",1873,17460,9240,8220,13000,5966,7033" -"2021,""4571 Gachnang"",""Secteur conomique - total"",303,1509,645,864,1198,425,773" -"2021,""4571 Gachnang"",""Secteur primaire"",29,85,36,49,56,19,38" -"2021,""4571 Gachnang"",""Secteur secondaire"",57,432,107,325,388,80,308" -"2021,""4571 Gachnang"",""Secteur tertiaire"",217,992,502,490,753,326,427" -"2021,""4590 Httlingen"",""Secteur conomique - total"",65,253,122,131,150,50,100" -"2021,""4590 Httlingen"",""Secteur primaire"",30,133,74,59,63,26,36" -"2021,""4590 Httlingen"",""Secteur secondaire"",10,57,X,X,50,X,X" -"2021,""4590 Httlingen"",""Secteur tertiaire"",25,63,X,X,38,X,X" -"2021,""4591 Matzingen"",""Secteur conomique - total"",190,1123,485,638,866,292,574" -"2021,""4591 Matzingen"",""Secteur primaire"",22,53,21,32,35,11,24" -"2021,""4591 Matzingen"",""Secteur secondaire"",42,512,135,377,449,93,356" -"2021,""4591 Matzingen"",""Secteur tertiaire"",126,558,329,229,382,188,194" -"2021,""4601 Neunforn"",""Secteur conomique - total"",103,392,161,231,273,85,188" -"2021,""4601 Neunforn"",""Secteur primaire"",37,114,47,67,70,21,49" -"2021,""4601 Neunforn"",""Secteur secondaire"",22,142,46,96,125,33,92" -"2021,""4601 Neunforn"",""Secteur tertiaire"",44,136,68,68,79,31,48" -"2021,""4606 Stettfurt"",""Secteur conomique - total"",78,434,190,244,341,130,211" -"2021,""4606 Stettfurt"",""Secteur primaire"",17,162,60,102,151,53,97" -"2021,""4606 Stettfurt"",""Secteur secondaire"",11,52,13,39,45,8,38" -"2021,""4606 Stettfurt"",""Secteur tertiaire"",50,220,117,103,145,69,76" -"2021,""4611 Thundorf"",""Secteur conomique - total"",138,438,177,261,304,89,215" -"2021,""4611 Thundorf"",""Secteur primaire"",49,140,51,89,91,23,68" -"2021,""4611 Thundorf"",""Secteur secondaire"",27,145,28,117,127,16,111" -"2021,""4611 Thundorf"",""Secteur tertiaire"",62,153,98,55,87,51,36" -"2021,""4616 Uesslingen-Buch"",""Secteur conomique - total"",130,405,188,217,268,97,171" -"2021,""4616 Uesslingen-Buch"",""Secteur primaire"",54,157,54,103,104,28,77" -"2021,""4616 Uesslingen-Buch"",""Secteur secondaire"",15,73,11,62,62,6,55" -"2021,""4616 Uesslingen-Buch"",""Secteur tertiaire"",61,175,123,52,102,63,39" -"2021,""4621 Warth-Weiningen"",""Secteur conomique - total"",92,604,293,311,417,174,243" -"2021,""4621 Warth-Weiningen"",""Secteur primaire"",15,82,29,53,43,10,33" -"2021,""4621 Warth-Weiningen"",""Secteur secondaire"",14,114,18,96,100,10,90" -"2021,""4621 Warth-Weiningen"",""Secteur tertiaire"",63,408,246,162,274,154,120" -"2021,""4641 Altnau"",""Secteur conomique - total"",190,923,424,499,660,249,411" -"2021,""4641 Altnau"",""Secteur primaire"",27,118,40,78,75,23,52" -"2021,""4641 Altnau"",""Secteur secondaire"",30,198,64,134,169,45,124" -"2021,""4641 Altnau"",""Secteur tertiaire"",133,607,320,287,416,181,235" -"2021,""4643 Bottighofen"",""Secteur conomique - total"",253,907,420,487,674,261,413" -"2021,""4643 Bottighofen"",""Secteur primaire"",4,5,X,X,X,X,X" -"2021,""4643 Bottighofen"",""Secteur secondaire"",26,63,X,X,X,X,X" -"2021,""4643 Bottighofen"",""Secteur tertiaire"",223,839,398,441,622,247,375" -"2021,""4646 Ermatingen"",""Secteur conomique - total"",315,1064,491,573,758,275,484" -"2021,""4646 Ermatingen"",""Secteur primaire"",20,45,19,26,23,9,14" -"2021,""4646 Ermatingen"",""Secteur secondaire"",54,273,52,221,237,28,209" -"2021,""4646 Ermatingen"",""Secteur tertiaire"",241,746,420,326,498,238,260" -"2021,""4651 Gottlieben"",""Secteur conomique - total"",28,112,51,61,94,39,54" -"2021,""4651 Gottlieben"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""4651 Gottlieben"",""Secteur secondaire"",5,49,22,27,43,17,26" -"2021,""4651 Gottlieben"",""Secteur tertiaire"",23,63,29,34,51,23,29" -"2021,""4656 Gttingen"",""Secteur conomique - total"",167,654,304,350,466,175,292" -"2021,""4656 Gttingen"",""Secteur primaire"",33,108,37,71,72,16,56" -"2021,""4656 Gttingen"",""Secteur secondaire"",39,221,70,151,191,53,138" -"2021,""4656 Gttingen"",""Secteur tertiaire"",95,325,197,128,203,106,98" -"2021,""4666 Kemmental"",""Secteur conomique - total"",255,854,335,519,614,187,427" -"2021,""4666 Kemmental"",""Secteur primaire"",82,226,70,156,156,37,120" -"2021,""4666 Kemmental"",""Secteur secondaire"",43,238,58,180,204,39,164" -"2021,""4666 Kemmental"",""Secteur tertiaire"",130,390,207,183,254,111,143" -"2021,""4671 Kreuzlingen"",""Secteur conomique - total"",1739,12249,5745,6504,9593,3809,5783" -"2021,""4671 Kreuzlingen"",""Secteur primaire"",10,27,7,20,19,4,15" -"2021,""4671 Kreuzlingen"",""Secteur secondaire"",186,3009,657,2352,2787,515,2271" -"2021,""4671 Kreuzlingen"",""Secteur tertiaire"",1543,9213,5081,4132,6787,3290,3498" -"2021,""4681 Langrickenbach"",""Secteur conomique - total"",116,358,144,214,232,67,165" -"2021,""4681 Langrickenbach"",""Secteur primaire"",52,175,X,X,108,X,X" -"2021,""4681 Langrickenbach"",""Secteur secondaire"",12,45,X,X,37,X,X" -"2021,""4681 Langrickenbach"",""Secteur tertiaire"",52,138,75,63,87,38,49" -"2021,""4683 Lengwil"",""Secteur conomique - total"",124,902,419,483,627,246,381" -"2021,""4683 Lengwil"",""Secteur primaire"",30,105,40,65,65,18,46" -"2021,""4683 Lengwil"",""Secteur secondaire"",26,189,51,138,161,32,129" -"2021,""4683 Lengwil"",""Secteur tertiaire"",68,608,328,280,402,196,206" -"2021,""4691 Mnsterlingen"",""Secteur conomique - total"",211,3254,2316,938,2326,1563,762" -"2021,""4691 Mnsterlingen"",""Secteur primaire"",12,41,19,22,29,11,17" -"2021,""4691 Mnsterlingen"",""Secteur secondaire"",21,52,17,35,42,10,32" -"2021,""4691 Mnsterlingen"",""Secteur tertiaire"",178,3161,2280,881,2255,1542,714" -"2021,""4696 Tgerwilen"",""Secteur conomique - total"",442,3614,1598,2016,2832,1026,1806" -"2021,""4696 Tgerwilen"",""Secteur primaire"",25,217,67,150,173,49,124" -"2021,""4696 Tgerwilen"",""Secteur secondaire"",63,704,186,518,633,138,495" -"2021,""4696 Tgerwilen"",""Secteur tertiaire"",354,2693,1345,1348,2026,839,1187" -"2021,""4701 Wldi"",""Secteur conomique - total"",118,411,177,234,311,107,203" -"2021,""4701 Wldi"",""Secteur primaire"",39,95,28,67,73,17,55" -"2021,""4701 Wldi"",""Secteur secondaire"",19,75,15,60,64,9,55" -"2021,""4701 Wldi"",""Secteur tertiaire"",60,241,134,107,174,82,93" -"2021,""4711 Affeltrangen"",""Secteur conomique - total"",246,1282,470,812,1041,323,718" -"2021,""4711 Affeltrangen"",""Secteur primaire"",62,169,56,113,116,26,90" -"2021,""4711 Affeltrangen"",""Secteur secondaire"",54,699,214,485,650,184,466" -"2021,""4711 Affeltrangen"",""Secteur tertiaire"",130,414,200,214,276,113,163" -"2021,""4716 Bettwiesen"",""Secteur conomique - total"",80,323,104,219,246,52,194" -"2021,""4716 Bettwiesen"",""Secteur primaire"",13,32,12,20,26,7,19" -"2021,""4716 Bettwiesen"",""Secteur secondaire"",18,163,22,141,148,11,137" -"2021,""4716 Bettwiesen"",""Secteur tertiaire"",49,128,70,58,73,35,38" -"2021,""4721 Bichelsee-Balterswil"",""Secteur conomique - total"",224,942,398,544,708,227,481" -"2021,""4721 Bichelsee-Balterswil"",""Secteur primaire"",36,89,24,65,64,11,54" -"2021,""4721 Bichelsee-Balterswil"",""Secteur secondaire"",49,334,96,238,286,64,222" -"2021,""4721 Bichelsee-Balterswil"",""Secteur tertiaire"",139,519,278,241,357,152,205" -"2021,""4723 Braunau"",""Secteur conomique - total"",89,291,94,197,202,41,161" -"2021,""4723 Braunau"",""Secteur primaire"",35,109,39,70,65,16,49" -"2021,""4723 Braunau"",""Secteur secondaire"",16,35,8,27,28,4,24" -"2021,""4723 Braunau"",""Secteur tertiaire"",38,147,47,100,109,21,88" -"2021,""4724 Eschlikon"",""Secteur conomique - total"",323,1834,683,1151,1450,404,1046" -"2021,""4724 Eschlikon"",""Secteur primaire"",15,43,14,29,32,8,24" -"2021,""4724 Eschlikon"",""Secteur secondaire"",69,814,147,667,735,99,636" -"2021,""4724 Eschlikon"",""Secteur tertiaire"",239,977,522,455,684,297,387" -"2021,""4726 Fischingen"",""Secteur conomique - total"",246,1484,696,788,1070,407,662" -"2021,""4726 Fischingen"",""Secteur primaire"",84,220,80,140,139,41,98" -"2021,""4726 Fischingen"",""Secteur secondaire"",56,486,113,373,424,73,351" -"2021,""4726 Fischingen"",""Secteur tertiaire"",106,778,503,275,507,294,213" -"2021,""4741 Lommis"",""Secteur conomique - total"",97,465,138,327,357,76,281" -"2021,""4741 Lommis"",""Secteur primaire"",21,55,20,35,35,9,26" -"2021,""4741 Lommis"",""Secteur secondaire"",17,207,21,186,193,12,180" -"2021,""4741 Lommis"",""Secteur tertiaire"",59,203,97,106,130,55,74" -"2021,""4746 Mnchwilen (TG)"",""Secteur conomique - total"",365,2705,1272,1433,2110,829,1281" -"2021,""4746 Mnchwilen (TG)"",""Secteur primaire"",25,78,27,51,50,13,37" -"2021,""4746 Mnchwilen (TG)"",""Secteur secondaire"",85,1001,219,782,924,177,747" -"2021,""4746 Mnchwilen (TG)"",""Secteur tertiaire"",255,1626,1026,600,1136,639,497" -"2021,""4751 Rickenbach (TG)"",""Secteur conomique - total"",163,990,477,513,746,289,457" -"2021,""4751 Rickenbach (TG)"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""4751 Rickenbach (TG)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""4751 Rickenbach (TG)"",""Secteur tertiaire"",134,762,457,305,536,278,258" -"2021,""4756 Schnholzerswilen"",""Secteur conomique - total"",114,362,144,218,249,74,175" -"2021,""4756 Schnholzerswilen"",""Secteur primaire"",54,162,61,101,112,30,82" -"2021,""4756 Schnholzerswilen"",""Secteur secondaire"",18,43,9,34,33,5,28" -"2021,""4756 Schnholzerswilen"",""Secteur tertiaire"",42,157,74,83,104,39,65" -"2021,""4761 Sirnach"",""Secteur conomique - total"",544,4040,2033,2007,3071,1281,1790" -"2021,""4761 Sirnach"",""Secteur primaire"",37,103,31,72,72,17,55" -"2021,""4761 Sirnach"",""Secteur secondaire"",105,1054,267,787,941,186,755" -"2021,""4761 Sirnach"",""Secteur tertiaire"",402,2883,1735,1148,2058,1078,980" -"2021,""4776 Tobel-Tgerschen"",""Secteur conomique - total"",119,751,324,427,577,194,384" -"2021,""4776 Tobel-Tgerschen"",""Secteur primaire"",21,59,20,39,35,8,28" -"2021,""4776 Tobel-Tgerschen"",""Secteur secondaire"",25,149,30,119,133,19,114" -"2021,""4776 Tobel-Tgerschen"",""Secteur tertiaire"",73,543,274,269,409,167,242" -"2021,""4781 Wngi"",""Secteur conomique - total"",366,2088,880,1208,1600,541,1060" -"2021,""4781 Wngi"",""Secteur primaire"",51,155,52,103,107,27,80" -"2021,""4781 Wngi"",""Secteur secondaire"",83,842,238,604,742,169,572" -"2021,""4781 Wngi"",""Secteur tertiaire"",232,1091,590,501,752,344,408" -"2021,""4786 Wilen (TG)"",""Secteur conomique - total"",130,551,305,246,388,180,208" -"2021,""4786 Wilen (TG)"",""Secteur primaire"",6,12,X,X,9,X,X" -"2021,""4786 Wilen (TG)"",""Secteur secondaire"",23,87,X,X,67,X,X" -"2021,""4786 Wilen (TG)"",""Secteur tertiaire"",101,452,268,184,311,162,150" -"2021,""4791 Wuppenau"",""Secteur conomique - total"",123,416,155,261,298,84,214" -"2021,""4791 Wuppenau"",""Secteur primaire"",46,133,45,88,88,22,66" -"2021,""4791 Wuppenau"",""Secteur secondaire"",17,110,31,79,93,20,73" -"2021,""4791 Wuppenau"",""Secteur tertiaire"",60,173,79,94,117,42,75" -"2021,""4801 Berlingen"",""Secteur conomique - total"",79,342,209,133,243,139,104" -"2021,""4801 Berlingen"",""Secteur primaire"",5,17,X,X,5,X,X" -"2021,""4801 Berlingen"",""Secteur secondaire"",8,24,X,X,22,X,X" -"2021,""4801 Berlingen"",""Secteur tertiaire"",66,301,197,104,215,134,81" -"2021,""4806 Eschenz"",""Secteur conomique - total"",141,640,254,386,481,152,330" -"2021,""4806 Eschenz"",""Secteur primaire"",33,90,34,56,57,15,42" -"2021,""4806 Eschenz"",""Secteur secondaire"",26,233,39,194,211,28,183" -"2021,""4806 Eschenz"",""Secteur tertiaire"",82,317,181,136,214,109,105" -"2021,""4811 Herdern"",""Secteur conomique - total"",95,347,177,170,219,99,120" -"2021,""4811 Herdern"",""Secteur primaire"",37,105,36,69,68,17,51" -"2021,""4811 Herdern"",""Secteur secondaire"",12,26,15,11,17,7,9" -"2021,""4811 Herdern"",""Secteur tertiaire"",46,216,126,90,135,75,60" -"2021,""4816 Homburg"",""Secteur conomique - total"",183,912,299,613,665,152,513" -"2021,""4816 Homburg"",""Secteur primaire"",91,260,86,174,158,35,123" -"2021,""4816 Homburg"",""Secteur secondaire"",25,352,59,293,320,43,277" -"2021,""4816 Homburg"",""Secteur tertiaire"",67,300,154,146,187,74,113" -"2021,""4821 Httwilen"",""Secteur conomique - total"",146,740,296,444,531,158,372" -"2021,""4821 Httwilen"",""Secteur primaire"",44,140,50,90,81,21,60" -"2021,""4821 Httwilen"",""Secteur secondaire"",25,216,37,179,195,23,172" -"2021,""4821 Httwilen"",""Secteur tertiaire"",77,384,209,175,254,115,140" -"2021,""4826 Mammern"",""Secteur conomique - total"",61,489,302,187,347,203,144" -"2021,""4826 Mammern"",""Secteur primaire"",9,61,X,X,37,X,X" -"2021,""4826 Mammern"",""Secteur secondaire"",8,14,X,X,10,X,X" -"2021,""4826 Mammern"",""Secteur tertiaire"",44,414,282,132,300,192,109" -"2021,""4831 Mllheim"",""Secteur conomique - total"",217,1329,565,764,1033,341,692" -"2021,""4831 Mllheim"",""Secteur primaire"",23,63,22,41,41,10,31" -"2021,""4831 Mllheim"",""Secteur secondaire"",38,515,94,421,466,62,404" -"2021,""4831 Mllheim"",""Secteur tertiaire"",156,751,449,302,526,269,257" -"2021,""4841 Pfyn"",""Secteur conomique - total"",176,793,286,507,598,163,435" -"2021,""4841 Pfyn"",""Secteur primaire"",34,112,44,68,73,21,52" -"2021,""4841 Pfyn"",""Secteur secondaire"",34,140,54,86,118,37,81" -"2021,""4841 Pfyn"",""Secteur tertiaire"",108,541,188,353,406,104,302" -"2021,""4846 Raperswilen"",""Secteur conomique - total"",62,167,59,108,119,30,89" -"2021,""4846 Raperswilen"",""Secteur primaire"",25,74,X,X,51,X,X" -"2021,""4846 Raperswilen"",""Secteur secondaire"",8,34,X,X,31,X,X" -"2021,""4846 Raperswilen"",""Secteur tertiaire"",29,59,36,23,37,19,18" -"2021,""4851 Salenstein"",""Secteur conomique - total"",154,582,298,284,380,164,216" -"2021,""4851 Salenstein"",""Secteur primaire"",14,59,26,33,32,9,22" -"2021,""4851 Salenstein"",""Secteur secondaire"",20,52,11,41,43,5,39" -"2021,""4851 Salenstein"",""Secteur tertiaire"",120,471,261,210,305,150,155" -"2021,""4864 Steckborn"",""Secteur conomique - total"",284,1549,822,727,1138,514,624" -"2021,""4864 Steckborn"",""Secteur primaire"",17,54,13,41,30,7,23" -"2021,""4864 Steckborn"",""Secteur secondaire"",29,486,177,309,435,139,296" -"2021,""4864 Steckborn"",""Secteur tertiaire"",238,1009,632,377,673,368,305" -"2021,""4871 Wagenhausen"",""Secteur conomique - total"",127,411,184,227,275,92,182" -"2021,""4871 Wagenhausen"",""Secteur primaire"",26,67,20,47,42,9,33" -"2021,""4871 Wagenhausen"",""Secteur secondaire"",21,123,32,91,103,18,85" -"2021,""4871 Wagenhausen"",""Secteur tertiaire"",80,221,132,89,130,66,64" -"2021,""4881 Amlikon-Bissegg"",""Secteur conomique - total"",125,470,203,267,326,100,226" -"2021,""4881 Amlikon-Bissegg"",""Secteur primaire"",47,132,45,87,86,22,65" -"2021,""4881 Amlikon-Bissegg"",""Secteur secondaire"",18,131,34,97,106,14,92" -"2021,""4881 Amlikon-Bissegg"",""Secteur tertiaire"",60,207,124,83,135,65,70" -"2021,""4891 Berg (TG)"",""Secteur conomique - total"",256,1669,923,746,1073,447,626" -"2021,""4891 Berg (TG)"",""Secteur primaire"",41,176,62,114,97,23,75" -"2021,""4891 Berg (TG)"",""Secteur secondaire"",57,351,62,289,311,37,275" -"2021,""4891 Berg (TG)"",""Secteur tertiaire"",158,1142,799,343,664,388,277" -"2021,""4901 Birwinken"",""Secteur conomique - total"",123,398,150,248,286,81,205" -"2021,""4901 Birwinken"",""Secteur primaire"",47,165,56,109,125,32,93" -"2021,""4901 Birwinken"",""Secteur secondaire"",21,66,13,53,53,7,46" -"2021,""4901 Birwinken"",""Secteur tertiaire"",55,167,81,86,108,43,65" -"2021,""4911 Brglen (TG)"",""Secteur conomique - total"",253,1463,556,907,1110,314,796" -"2021,""4911 Brglen (TG)"",""Secteur primaire"",31,97,27,70,63,12,50" -"2021,""4911 Brglen (TG)"",""Secteur secondaire"",49,387,86,301,340,56,283" -"2021,""4911 Brglen (TG)"",""Secteur tertiaire"",173,979,443,536,708,245,462" -"2021,""4921 Bussnang"",""Secteur conomique - total"",183,3362,697,2665,3025,477,2548" -"2021,""4921 Bussnang"",""Secteur primaire"",63,283,85,198,217,43,174" -"2021,""4921 Bussnang"",""Secteur secondaire"",46,2481,289,2192,2364,234,2131" -"2021,""4921 Bussnang"",""Secteur tertiaire"",74,598,323,275,444,201,244" -"2021,""4941 Mrstetten"",""Secteur conomique - total"",223,1204,470,734,941,278,663" -"2021,""4941 Mrstetten"",""Secteur primaire"",44,142,72,70,83,33,50" -"2021,""4941 Mrstetten"",""Secteur secondaire"",37,297,96,201,258,69,189" -"2021,""4941 Mrstetten"",""Secteur tertiaire"",142,765,302,463,600,176,424" -"2021,""4946 Weinfelden"",""Secteur conomique - total"",1029,10157,4745,5412,7638,2994,4643" -"2021,""4946 Weinfelden"",""Secteur primaire"",34,116,44,72,71,21,51" -"2021,""4946 Weinfelden"",""Secteur secondaire"",136,1783,337,1446,1632,239,1393" -"2021,""4946 Weinfelden"",""Secteur tertiaire"",859,8258,4364,3894,5934,2735,3199" -"2021,""4951 Wigoltingen"",""Secteur conomique - total"",193,987,364,623,773,219,554" -"2021,""4951 Wigoltingen"",""Secteur primaire"",51,201,89,112,132,46,86" -"2021,""4951 Wigoltingen"",""Secteur secondaire"",29,431,68,363,395,48,347" -"2021,""4951 Wigoltingen"",""Secteur tertiaire"",113,355,207,148,246,125,120" -"2021,""5001 Arbedo-Castione"",""Secteur conomique - total"",379,2934,882,2052,2387,535,1851" -"2021,""5001 Arbedo-Castione"",""Secteur primaire"",6,23,9,14,18,6,12" -"2021,""5001 Arbedo-Castione"",""Secteur secondaire"",62,680,63,617,644,42,602" -"2021,""5001 Arbedo-Castione"",""Secteur tertiaire"",311,2231,810,1421,1725,488,1237" -"2021,""5002 Bellinzona"",""Secteur conomique - total"",3647,28644,13126,15518,22633,9032,13601" -"2021,""5002 Bellinzona"",""Secteur primaire"",117,411,108,303,276,68,209" -"2021,""5002 Bellinzona"",""Secteur secondaire"",453,3132,509,2623,2917,373,2544" -"2021,""5002 Bellinzona"",""Secteur tertiaire"",3077,25101,12509,12592,19440,8592,10848" -"2021,""5003 Cadenazzo"",""Secteur conomique - total"",325,2005,550,1455,1681,363,1317" -"2021,""5003 Cadenazzo"",""Secteur primaire"",20,87,25,62,62,16,46" -"2021,""5003 Cadenazzo"",""Secteur secondaire"",54,515,38,477,488,26,462" -"2021,""5003 Cadenazzo"",""Secteur tertiaire"",251,1403,487,916,1131,322,809" -"2021,""5009 Isone"",""Secteur conomique - total"",33,146,40,106,128,28,100" -"2021,""5009 Isone"",""Secteur primaire"",X,20,9,11,13,4,9" -"2021,""5009 Isone"",""Secteur secondaire"",X,19,11,8,19,11,8" -"2021,""5009 Isone"",""Secteur tertiaire"",23,107,20,87,97,14,83" -"2021,""5010 Lumino"",""Secteur conomique - total"",95,372,99,273,318,63,256" -"2021,""5010 Lumino"",""Secteur primaire"",X,10,X,X,7,X,X" -"2021,""5010 Lumino"",""Secteur secondaire"",X,182,X,X,171,X,X" -"2021,""5010 Lumino"",""Secteur tertiaire"",70,180,70,110,140,43,97" -"2021,""5017 Sant'Antonino"",""Secteur conomique - total"",248,2338,829,1509,1967,578,1389" -"2021,""5017 Sant'Antonino"",""Secteur primaire"",19,77,22,55,59,14,45" -"2021,""5017 Sant'Antonino"",""Secteur secondaire"",36,508,104,404,472,79,394" -"2021,""5017 Sant'Antonino"",""Secteur tertiaire"",193,1753,703,1050,1436,486,950" -"2021,""5048 Acquarossa"",""Secteur conomique - total"",206,810,421,389,592,264,327" -"2021,""5048 Acquarossa"",""Secteur primaire"",41,97,34,63,60,16,44" -"2021,""5048 Acquarossa"",""Secteur secondaire"",40,152,15,137,141,9,132" -"2021,""5048 Acquarossa"",""Secteur tertiaire"",125,561,372,189,390,239,151" -"2021,""5049 Blenio"",""Secteur conomique - total"",187,667,239,428,503,138,365" -"2021,""5049 Blenio"",""Secteur primaire"",38,124,38,86,85,21,64" -"2021,""5049 Blenio"",""Secteur secondaire"",39,176,27,149,155,14,141" -"2021,""5049 Blenio"",""Secteur tertiaire"",110,367,174,193,264,103,160" -"2021,""5050 Serravalle"",""Secteur conomique - total"",162,592,224,368,437,122,316" -"2021,""5050 Serravalle"",""Secteur primaire"",47,111,43,68,58,19,40" -"2021,""5050 Serravalle"",""Secteur secondaire"",30,246,34,212,229,23,205" -"2021,""5050 Serravalle"",""Secteur tertiaire"",85,235,147,88,150,79,71" -"2021,""5061 Airolo"",""Secteur conomique - total"",143,859,278,581,725,195,530" -"2021,""5061 Airolo"",""Secteur primaire"",21,52,11,41,35,5,30" -"2021,""5061 Airolo"",""Secteur secondaire"",24,297,46,251,277,34,244" -"2021,""5061 Airolo"",""Secteur tertiaire"",98,510,221,289,412,156,256" -"2021,""5063 Bedretto"",""Secteur conomique - total"",20,53,20,33,35,13,22" -"2021,""5063 Bedretto"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5063 Bedretto"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5063 Bedretto"",""Secteur tertiaire"",X,47,X,X,34,X,X" -"2021,""5064 Bodio"",""Secteur conomique - total"",67,392,93,299,347,61,287" -"2021,""5064 Bodio"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5064 Bodio"",""Secteur secondaire"",X,272,32,240,258,23,235" -"2021,""5064 Bodio"",""Secteur tertiaire"",47,X,X,X,X,X,X" -"2021,""5071 Dalpe"",""Secteur conomique - total"",14,26,15,11,18,9,9" -"2021,""5071 Dalpe"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5071 Dalpe"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5071 Dalpe"",""Secteur tertiaire"",10,20,X,X,13,X,X" -"2021,""5072 Faido"",""Secteur conomique - total"",257,981,434,547,755,287,468" -"2021,""5072 Faido"",""Secteur primaire"",45,112,35,77,71,16,55" -"2021,""5072 Faido"",""Secteur secondaire"",42,214,29,185,193,17,176" -"2021,""5072 Faido"",""Secteur tertiaire"",170,655,370,285,491,255,236" -"2021,""5073 Giornico"",""Secteur conomique - total"",64,362,136,226,286,88,199" -"2021,""5073 Giornico"",""Secteur primaire"",9,18,X,X,8,X,X" -"2021,""5073 Giornico"",""Secteur secondaire"",13,166,X,X,159,X,X" -"2021,""5073 Giornico"",""Secteur tertiaire"",42,178,114,64,119,72,48" -"2021,""5076 Personico"",""Secteur conomique - total"",30,136,23,113,119,15,104" -"2021,""5076 Personico"",""Secteur primaire"",X,6,X,X,6,X,X" -"2021,""5076 Personico"",""Secteur secondaire"",X,98,X,X,88,X,X" -"2021,""5076 Personico"",""Secteur tertiaire"",15,32,14,18,25,9,16" -"2021,""5077 Pollegio"",""Secteur conomique - total"",54,300,98,202,260,77,184" -"2021,""5077 Pollegio"",""Secteur primaire"",5,14,X,X,8,X,X" -"2021,""5077 Pollegio"",""Secteur secondaire"",8,18,X,X,16,X,X" -"2021,""5077 Pollegio"",""Secteur tertiaire"",41,268,91,177,236,72,164" -"2021,""5078 Prato (Leventina)"",""Secteur conomique - total"",29,131,72,59,102,48,54" -"2021,""5078 Prato (Leventina)"",""Secteur primaire"",4,10,X,X,7,X,X" -"2021,""5078 Prato (Leventina)"",""Secteur secondaire"",7,31,X,X,28,X,X" -"2021,""5078 Prato (Leventina)"",""Secteur tertiaire"",18,90,66,24,67,45,22" -"2021,""5079 Quinto"",""Secteur conomique - total"",111,705,264,441,563,182,381" -"2021,""5079 Quinto"",""Secteur primaire"",20,74,15,59,58,7,51" -"2021,""5079 Quinto"",""Secteur secondaire"",23,162,60,102,143,45,99" -"2021,""5079 Quinto"",""Secteur tertiaire"",68,469,189,280,361,130,231" -"2021,""5091 Ascona"",""Secteur conomique - total"",666,3202,1527,1675,2558,1079,1479" -"2021,""5091 Ascona"",""Secteur primaire"",4,12,X,X,9,X,X" -"2021,""5091 Ascona"",""Secteur secondaire"",75,343,X,X,315,X,X" -"2021,""5091 Ascona"",""Secteur tertiaire"",587,2847,1477,1370,2234,1047,1188" -"2021,""5096 Brione sopra Minusio"",""Secteur conomique - total"",41,69,26,43,51,15,37" -"2021,""5096 Brione sopra Minusio"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5096 Brione sopra Minusio"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5096 Brione sopra Minusio"",""Secteur tertiaire"",35,56,22,34,41,13,28" -"2021,""5097 Brissago"",""Secteur conomique - total"",182,1266,675,591,1018,503,515" -"2021,""5097 Brissago"",""Secteur primaire"",10,18,X,X,10,X,X" -"2021,""5097 Brissago"",""Secteur secondaire"",26,179,X,X,168,X,X" -"2021,""5097 Brissago"",""Secteur tertiaire"",146,1069,626,443,840,465,375" -"2021,""5108 Gordola"",""Secteur conomique - total"",372,1652,661,991,1304,458,847" -"2021,""5108 Gordola"",""Secteur primaire"",20,60,15,45,38,8,31" -"2021,""5108 Gordola"",""Secteur secondaire"",73,408,71,337,379,54,325" -"2021,""5108 Gordola"",""Secteur tertiaire"",279,1184,575,609,887,397,491" -"2021,""5112 Lavertezzo"",""Secteur conomique - total"",146,867,280,587,738,199,539" -"2021,""5112 Lavertezzo"",""Secteur primaire"",7,15,X,X,8,X,X" -"2021,""5112 Lavertezzo"",""Secteur secondaire"",39,400,X,X,373,X,X" -"2021,""5112 Lavertezzo"",""Secteur tertiaire"",100,452,187,265,357,127,230" -"2021,""5113 Locarno"",""Secteur conomique - total"",2032,13637,6514,7123,10794,4554,6240" -"2021,""5113 Locarno"",""Secteur primaire"",18,109,22,87,92,16,76" -"2021,""5113 Locarno"",""Secteur secondaire"",238,2242,620,1622,2118,532,1586" -"2021,""5113 Locarno"",""Secteur tertiaire"",1776,11286,5872,5414,8584,4006,4578" -"2021,""5115 Losone"",""Secteur conomique - total"",568,3042,1195,1847,2579,867,1711" -"2021,""5115 Losone"",""Secteur primaire"",9,21,X,X,14,X,X" -"2021,""5115 Losone"",""Secteur secondaire"",127,1462,X,X,1389,X,X" -"2021,""5115 Losone"",""Secteur tertiaire"",432,1559,758,801,1176,486,690" -"2021,""5117 Mergoscia"",""Secteur conomique - total"",23,38,16,22,22,9,14" -"2021,""5117 Mergoscia"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5117 Mergoscia"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5117 Mergoscia"",""Secteur tertiaire"",16,22,9,13,14,4,10" -"2021,""5118 Minusio"",""Secteur conomique - total"",496,1821,836,985,1425,570,855" -"2021,""5118 Minusio"",""Secteur primaire"",4,8,X,X,6,X,X" -"2021,""5118 Minusio"",""Secteur secondaire"",67,363,X,X,336,X,X" -"2021,""5118 Minusio"",""Secteur tertiaire"",425,1450,766,684,1082,516,566" -"2021,""5120 Muralto"",""Secteur conomique - total"",405,1615,816,799,1231,552,679" -"2021,""5120 Muralto"",""Secteur primaire"",X,12,X,X,8,X,X" -"2021,""5120 Muralto"",""Secteur secondaire"",X,69,X,X,60,X,X" -"2021,""5120 Muralto"",""Secteur tertiaire"",373,1534,791,743,1162,534,628" -"2021,""5121 Orselina"",""Secteur conomique - total"",60,514,327,187,411,250,160" -"2021,""5121 Orselina"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5121 Orselina"",""Secteur secondaire"",7,19,8,11,17,6,11" -"2021,""5121 Orselina"",""Secteur tertiaire"",53,495,319,176,394,244,150" -"2021,""5125 Ronco sopra Ascona"",""Secteur conomique - total"",67,168,51,117,141,35,106" -"2021,""5125 Ronco sopra Ascona"",""Secteur primaire"",X,5,X,X,4,X,X" -"2021,""5125 Ronco sopra Ascona"",""Secteur secondaire"",X,59,X,X,55,X,X" -"2021,""5125 Ronco sopra Ascona"",""Secteur tertiaire"",50,104,X,X,81,X,X" -"2021,""5131 Tenero-Contra"",""Secteur conomique - total"",261,1445,694,751,1184,508,676" -"2021,""5131 Tenero-Contra"",""Secteur primaire"",9,21,9,12,14,6,8" -"2021,""5131 Tenero-Contra"",""Secteur secondaire"",52,394,129,265,364,108,255" -"2021,""5131 Tenero-Contra"",""Secteur tertiaire"",200,1030,556,474,807,393,413" -"2021,""5136 Onsernone"",""Secteur conomique - total"",84,244,138,106,167,87,80" -"2021,""5136 Onsernone"",""Secteur primaire"",13,34,X,X,18,X,X" -"2021,""5136 Onsernone"",""Secteur secondaire"",12,20,X,X,18,X,X" -"2021,""5136 Onsernone"",""Secteur tertiaire"",59,190,123,67,131,80,51" -"2021,""5138 Cugnasco-Gerra"",""Secteur conomique - total"",203,489,230,259,352,140,212" -"2021,""5138 Cugnasco-Gerra"",""Secteur primaire"",20,46,X,X,29,X,X" -"2021,""5138 Cugnasco-Gerra"",""Secteur secondaire"",42,106,X,X,92,X,X" -"2021,""5138 Cugnasco-Gerra"",""Secteur tertiaire"",141,337,195,142,231,122,109" -"2021,""5141 Agno"",""Secteur conomique - total"",446,2470,1052,1418,2012,747,1265" -"2021,""5141 Agno"",""Secteur primaire"",4,10,X,X,6,X,X" -"2021,""5141 Agno"",""Secteur secondaire"",71,746,X,X,689,X,X" -"2021,""5141 Agno"",""Secteur tertiaire"",371,1714,937,777,1317,661,656" -"2021,""5143 Aranno"",""Secteur conomique - total"",22,40,9,31,32,6,27" -"2021,""5143 Aranno"",""Secteur primaire"",X,15,X,X,X,X,X" -"2021,""5143 Aranno"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""5143 Aranno"",""Secteur tertiaire"",17,21,X,X,15,X,X" -"2021,""5144 Arogno"",""Secteur conomique - total"",85,261,122,139,197,81,115" -"2021,""5144 Arogno"",""Secteur primaire"",13,31,X,X,18,X,X" -"2021,""5144 Arogno"",""Secteur secondaire"",15,27,X,X,24,X,X" -"2021,""5144 Arogno"",""Secteur tertiaire"",57,203,107,96,154,73,81" -"2021,""5146 Astano"",""Secteur conomique - total"",31,54,23,31,36,12,23" -"2021,""5146 Astano"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""5146 Astano"",""Secteur secondaire"",X,7,X,X,X,X,X" -"2021,""5146 Astano"",""Secteur tertiaire"",22,40,18,22,26,10,16" -"2021,""5148 Bedano"",""Secteur conomique - total"",168,1642,411,1231,1436,281,1156" -"2021,""5148 Bedano"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""5148 Bedano"",""Secteur secondaire"",X,752,X,X,X,X,X" -"2021,""5148 Bedano"",""Secteur tertiaire"",107,886,X,X,719,X,X" -"2021,""5149 Bedigliora"",""Secteur conomique - total"",54,165,76,89,111,42,69" -"2021,""5149 Bedigliora"",""Secteur primaire"",8,22,7,15,15,4,11" -"2021,""5149 Bedigliora"",""Secteur secondaire"",16,38,9,29,32,5,27" -"2021,""5149 Bedigliora"",""Secteur tertiaire"",30,105,60,45,64,33,31" -"2021,""5151 Bioggio"",""Secteur conomique - total"",377,4788,1471,3317,4271,1179,3092" -"2021,""5151 Bioggio"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""5151 Bioggio"",""Secteur secondaire"",X,1373,X,X,X,X,X" -"2021,""5151 Bioggio"",""Secteur tertiaire"",297,3411,1167,2244,2993,928,2065" -"2021,""5154 Bissone"",""Secteur conomique - total"",82,214,95,119,174,67,106" -"2021,""5154 Bissone"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5154 Bissone"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5154 Bissone"",""Secteur tertiaire"",74,189,X,X,151,X,X" -"2021,""5160 Brusino Arsizio"",""Secteur conomique - total"",39,95,42,53,70,27,43" -"2021,""5160 Brusino Arsizio"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5160 Brusino Arsizio"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5160 Brusino Arsizio"",""Secteur tertiaire"",35,88,X,X,65,X,X" -"2021,""5161 Cademario"",""Secteur conomique - total"",41,151,63,88,122,46,77" -"2021,""5161 Cademario"",""Secteur primaire"",X,21,X,X,15,X,X" -"2021,""5161 Cademario"",""Secteur secondaire"",X,6,X,X,5,X,X" -"2021,""5161 Cademario"",""Secteur tertiaire"",34,124,58,66,102,42,59" -"2021,""5162 Cadempino"",""Secteur conomique - total"",196,1967,846,1121,1632,606,1026" -"2021,""5162 Cadempino"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5162 Cadempino"",""Secteur secondaire"",37,830,242,588,777,209,568" -"2021,""5162 Cadempino"",""Secteur tertiaire"",159,1137,604,533,856,397,458" -"2021,""5167 Canobbio"",""Secteur conomique - total"",164,959,461,498,649,281,368" -"2021,""5167 Canobbio"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5167 Canobbio"",""Secteur secondaire"",24,83,19,64,76,14,62" -"2021,""5167 Canobbio"",""Secteur tertiaire"",140,876,442,434,573,267,306" -"2021,""5171 Caslano"",""Secteur conomique - total"",356,1809,848,961,1435,568,867" -"2021,""5171 Caslano"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5171 Caslano"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5171 Caslano"",""Secteur tertiaire"",292,1123,X,X,796,X,X" -"2021,""5176 Comano"",""Secteur conomique - total"",137,906,384,522,758,279,479" -"2021,""5176 Comano"",""Secteur primaire"",4,11,X,X,4,X,X" -"2021,""5176 Comano"",""Secteur secondaire"",11,16,X,X,14,X,X" -"2021,""5176 Comano"",""Secteur tertiaire"",122,879,375,504,740,276,464" -"2021,""5180 Cureglia"",""Secteur conomique - total"",108,319,129,190,250,85,165" -"2021,""5180 Cureglia"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""5180 Cureglia"",""Secteur secondaire"",X,82,X,X,X,X,X" -"2021,""5180 Cureglia"",""Secteur tertiaire"",99,231,114,117,169,72,96" -"2021,""5181 Curio"",""Secteur conomique - total"",45,119,64,55,88,41,47" -"2021,""5181 Curio"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5181 Curio"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5181 Curio"",""Secteur tertiaire"",37,104,X,X,75,X,X" -"2021,""5186 Grancia"",""Secteur conomique - total"",110,990,437,553,813,310,503" -"2021,""5186 Grancia"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""5186 Grancia"",""Secteur secondaire"",X,95,X,X,X,X,X" -"2021,""5186 Grancia"",""Secteur tertiaire"",102,891,426,465,722,303,419" -"2021,""5187 Gravesano"",""Secteur conomique - total"",168,1089,454,635,902,323,579" -"2021,""5187 Gravesano"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5187 Gravesano"",""Secteur secondaire"",24,273,14,259,264,10,254" -"2021,""5187 Gravesano"",""Secteur tertiaire"",144,816,440,376,638,313,325" -"2021,""5189 Lamone"",""Secteur conomique - total"",247,2025,653,1372,1789,506,1283" -"2021,""5189 Lamone"",""Secteur primaire"",6,17,X,X,10,X,X" -"2021,""5189 Lamone"",""Secteur secondaire"",53,1068,X,X,1015,X,X" -"2021,""5189 Lamone"",""Secteur tertiaire"",188,940,366,574,764,254,510" -"2021,""5192 Lugano"",""Secteur conomique - total"",10197,57531,25319,32212,46575,18374,28201" -"2021,""5192 Lugano"",""Secteur primaire"",45,102,30,72,64,17,47" -"2021,""5192 Lugano"",""Secteur secondaire"",907,5356,934,4422,4965,709,4256" -"2021,""5192 Lugano"",""Secteur tertiaire"",9245,52073,24355,27718,41546,17647,23899" -"2021,""5193 Magliaso"",""Secteur conomique - total"",126,528,261,267,411,182,228" -"2021,""5193 Magliaso"",""Secteur primaire"",4,13,X,X,8,X,X" -"2021,""5193 Magliaso"",""Secteur secondaire"",13,71,X,X,60,X,X" -"2021,""5193 Magliaso"",""Secteur tertiaire"",109,444,235,209,342,167,176" -"2021,""5194 Manno"",""Secteur conomique - total"",381,6286,2543,3743,4954,1659,3295" -"2021,""5194 Manno"",""Secteur primaire"",X,14,X,X,10,X,X" -"2021,""5194 Manno"",""Secteur secondaire"",X,891,X,X,830,X,X" -"2021,""5194 Manno"",""Secteur tertiaire"",326,5381,2291,3090,4114,1444,2670" -"2021,""5195 Maroggia"",""Secteur conomique - total"",92,323,114,209,253,71,182" -"2021,""5195 Maroggia"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5195 Maroggia"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5195 Maroggia"",""Secteur tertiaire"",75,241,107,134,177,67,110" -"2021,""5196 Massagno"",""Secteur conomique - total"",501,2159,1076,1083,1655,718,937" -"2021,""5196 Massagno"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5196 Massagno"",""Secteur secondaire"",39,356,84,272,334,68,266" -"2021,""5196 Massagno"",""Secteur tertiaire"",462,1803,992,811,1321,651,671" -"2021,""5197 Melano"",""Secteur conomique - total"",128,498,198,300,395,133,262" -"2021,""5197 Melano"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""5197 Melano"",""Secteur secondaire"",X,104,X,X,X,X,X" -"2021,""5197 Melano"",""Secteur tertiaire"",105,388,178,210,298,121,176" -"2021,""5198 Melide"",""Secteur conomique - total"",184,683,290,393,541,194,347" -"2021,""5198 Melide"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5198 Melide"",""Secteur secondaire"",21,148,22,126,138,14,123" -"2021,""5198 Melide"",""Secteur tertiaire"",163,535,268,267,403,179,224" -"2021,""5199 Mezzovico-Vira"",""Secteur conomique - total"",244,2852,687,2165,2587,541,2046" -"2021,""5199 Mezzovico-Vira"",""Secteur primaire"",5,15,X,X,9,X,X" -"2021,""5199 Mezzovico-Vira"",""Secteur secondaire"",68,1732,X,X,1652,X,X" -"2021,""5199 Mezzovico-Vira"",""Secteur tertiaire"",171,1105,X,X,926,X,X" -"2021,""5200 Miglieglia"",""Secteur conomique - total"",32,65,20,45,47,11,36" -"2021,""5200 Miglieglia"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""5200 Miglieglia"",""Secteur secondaire"",X,23,X,X,X,X,X" -"2021,""5200 Miglieglia"",""Secteur tertiaire"",20,37,X,X,22,X,X" -"2021,""5203 Morcote"",""Secteur conomique - total"",72,259,109,150,212,83,129" -"2021,""5203 Morcote"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5203 Morcote"",""Secteur secondaire"",5,34,6,28,32,5,28" -"2021,""5203 Morcote"",""Secteur tertiaire"",67,225,103,122,179,78,101" -"2021,""5205 Muzzano"",""Secteur conomique - total"",111,1146,232,914,1015,175,840" -"2021,""5205 Muzzano"",""Secteur primaire"",6,21,X,X,15,X,X" -"2021,""5205 Muzzano"",""Secteur secondaire"",26,631,102,529,602,87,515" -"2021,""5205 Muzzano"",""Secteur tertiaire"",79,494,X,X,398,X,X" -"2021,""5206 Neggio"",""Secteur conomique - total"",25,108,54,54,65,30,34" -"2021,""5206 Neggio"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5206 Neggio"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5206 Neggio"",""Secteur tertiaire"",18,98,X,X,60,X,X" -"2021,""5207 Novaggio"",""Secteur conomique - total"",79,329,168,161,255,118,137" -"2021,""5207 Novaggio"",""Secteur primaire"",X,8,X,X,6,X,X" -"2021,""5207 Novaggio"",""Secteur secondaire"",X,25,X,X,23,X,X" -"2021,""5207 Novaggio"",""Secteur tertiaire"",63,296,164,132,226,116,111" -"2021,""5208 Origlio"",""Secteur conomique - total"",101,232,117,115,158,66,92" -"2021,""5208 Origlio"",""Secteur primaire"",X,11,X,X,7,X,X" -"2021,""5208 Origlio"",""Secteur secondaire"",X,19,X,X,17,X,X" -"2021,""5208 Origlio"",""Secteur tertiaire"",88,202,112,90,134,64,69" -"2021,""5210 Paradiso"",""Secteur conomique - total"",766,3186,1415,1771,2620,1054,1565" -"2021,""5210 Paradiso"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5210 Paradiso"",""Secteur secondaire"",76,285,49,236,263,41,222" -"2021,""5210 Paradiso"",""Secteur tertiaire"",690,2901,1366,1535,2357,1013,1343" -"2021,""5212 Ponte Capriasca"",""Secteur conomique - total"",104,193,93,100,141,55,86" -"2021,""5212 Ponte Capriasca"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""5212 Ponte Capriasca"",""Secteur secondaire"",X,26,X,X,X,X,X" -"2021,""5212 Ponte Capriasca"",""Secteur tertiaire"",87,160,84,76,116,51,64" -"2021,""5214 Porza"",""Secteur conomique - total"",147,623,295,328,468,188,280" -"2021,""5214 Porza"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5214 Porza"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5214 Porza"",""Secteur tertiaire"",128,506,277,229,360,175,185" -"2021,""5216 Pura"",""Secteur conomique - total"",101,213,100,113,152,60,92" -"2021,""5216 Pura"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5216 Pura"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5216 Pura"",""Secteur tertiaire"",84,188,95,93,133,58,75" -"2021,""5219 Rovio"",""Secteur conomique - total"",58,100,39,61,72,23,49" -"2021,""5219 Rovio"",""Secteur primaire"",4,12,X,X,6,X,X" -"2021,""5219 Rovio"",""Secteur secondaire"",7,11,X,X,9,X,X" -"2021,""5219 Rovio"",""Secteur tertiaire"",47,77,31,46,57,20,37" -"2021,""5221 Savosa"",""Secteur conomique - total"",232,1033,480,553,788,319,470" -"2021,""5221 Savosa"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5221 Savosa"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5221 Savosa"",""Secteur tertiaire"",211,938,464,474,704,309,395" -"2021,""5225 Sorengo"",""Secteur conomique - total"",188,1283,746,537,1008,547,461" -"2021,""5225 Sorengo"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5225 Sorengo"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5225 Sorengo"",""Secteur tertiaire"",179,1216,735,481,945,538,407" -"2021,""5226 Capriasca"",""Secteur conomique - total"",478,1582,676,906,1215,437,777" -"2021,""5226 Capriasca"",""Secteur primaire"",28,61,18,43,33,8,25" -"2021,""5226 Capriasca"",""Secteur secondaire"",79,305,19,286,291,12,279" -"2021,""5226 Capriasca"",""Secteur tertiaire"",371,1216,639,577,890,418,473" -"2021,""5227 Torricella-Taverne"",""Secteur conomique - total"",313,1711,438,1273,1476,298,1177" -"2021,""5227 Torricella-Taverne"",""Secteur primaire"",7,50,8,42,41,4,36" -"2021,""5227 Torricella-Taverne"",""Secteur secondaire"",78,795,76,719,759,58,701" -"2021,""5227 Torricella-Taverne"",""Secteur tertiaire"",228,866,354,512,676,236,440" -"2021,""5230 Vernate"",""Secteur conomique - total"",51,66,34,32,44,18,26" -"2021,""5230 Vernate"",""Secteur primaire"",5,8,X,X,5,X,X" -"2021,""5230 Vernate"",""Secteur secondaire"",6,8,X,X,7,X,X" -"2021,""5230 Vernate"",""Secteur tertiaire"",40,50,29,21,33,16,17" -"2021,""5231 Vezia"",""Secteur conomique - total"",186,1133,514,619,867,327,540" -"2021,""5231 Vezia"",""Secteur primaire"",4,10,0,10,8,0,8" -"2021,""5231 Vezia"",""Secteur secondaire"",27,171,23,148,161,16,145" -"2021,""5231 Vezia"",""Secteur tertiaire"",155,952,491,461,698,311,387" -"2021,""5233 Vico Morcote"",""Secteur conomique - total"",37,163,64,99,138,49,89" -"2021,""5233 Vico Morcote"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5233 Vico Morcote"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5233 Vico Morcote"",""Secteur tertiaire"",34,157,X,X,132,X,X" -"2021,""5236 Collina d'Oro"",""Secteur conomique - total"",415,2378,1041,1337,1991,795,1196" -"2021,""5236 Collina d'Oro"",""Secteur primaire"",7,18,X,X,11,X,X" -"2021,""5236 Collina d'Oro"",""Secteur secondaire"",37,603,X,X,570,X,X" -"2021,""5236 Collina d'Oro"",""Secteur tertiaire"",371,1757,814,943,1409,594,816" -"2021,""5237 Alto Malcantone"",""Secteur conomique - total"",100,184,76,108,133,44,88" -"2021,""5237 Alto Malcantone"",""Secteur primaire"",15,32,10,22,20,6,14" -"2021,""5237 Alto Malcantone"",""Secteur secondaire"",17,39,7,32,34,4,30" -"2021,""5237 Alto Malcantone"",""Secteur tertiaire"",68,113,59,54,78,34,44" -"2021,""5238 Monteceneri"",""Secteur conomique - total"",428,2978,943,2035,2513,651,1861" -"2021,""5238 Monteceneri"",""Secteur primaire"",15,34,14,20,17,6,11" -"2021,""5238 Monteceneri"",""Secteur secondaire"",97,911,141,770,853,110,743" -"2021,""5238 Monteceneri"",""Secteur tertiaire"",316,2033,788,1245,1643,535,1108" -"2021,""5239 Tresa"",""Secteur conomique - total"",356,2055,837,1218,1750,633,1118" -"2021,""5239 Tresa"",""Secteur primaire"",28,91,25,66,61,14,48" -"2021,""5239 Tresa"",""Secteur secondaire"",73,1018,271,747,964,241,723" -"2021,""5239 Tresa"",""Secteur tertiaire"",255,946,541,405,724,378,347" -"2021,""5242 Balerna"",""Secteur conomique - total"",534,4585,1724,2861,3880,1246,2633" -"2021,""5242 Balerna"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""5242 Balerna"",""Secteur secondaire"",X,1197,X,X,X,X,X" -"2021,""5242 Balerna"",""Secteur tertiaire"",438,3381,1449,1932,2765,1018,1747" -"2021,""5249 Castel San Pietro"",""Secteur conomique - total"",208,1623,601,1022,1416,464,953" -"2021,""5249 Castel San Pietro"",""Secteur primaire"",30,74,23,51,46,10,36" -"2021,""5249 Castel San Pietro"",""Secteur secondaire"",40,946,230,716,903,206,696" -"2021,""5249 Castel San Pietro"",""Secteur tertiaire"",138,603,348,255,467,247,220" -"2021,""5250 Chiasso"",""Secteur conomique - total"",1901,10612,4169,6443,8589,2945,5644" -"2021,""5250 Chiasso"",""Secteur primaire"",8,17,X,X,11,X,X" -"2021,""5250 Chiasso"",""Secteur secondaire"",203,1101,X,X,1011,X,X" -"2021,""5250 Chiasso"",""Secteur tertiaire"",1690,9494,3942,5552,7568,2770,4798" -"2021,""5251 Coldrerio"",""Secteur conomique - total"",178,935,507,428,775,408,367" -"2021,""5251 Coldrerio"",""Secteur primaire"",5,12,X,X,7,X,X" -"2021,""5251 Coldrerio"",""Secteur secondaire"",28,113,X,X,102,X,X" -"2021,""5251 Coldrerio"",""Secteur tertiaire"",145,810,457,353,665,368,297" -"2021,""5254 Mendrisio"",""Secteur conomique - total"",2152,18066,8946,9120,14908,6887,8021" -"2021,""5254 Mendrisio"",""Secteur primaire"",73,228,56,172,156,32,124" -"2021,""5254 Mendrisio"",""Secteur secondaire"",332,6684,3381,3303,6230,3064,3166" -"2021,""5254 Mendrisio"",""Secteur tertiaire"",1747,11154,5509,5645,8522,3790,4732" -"2021,""5257 Morbio Inferiore"",""Secteur conomique - total"",331,1834,907,927,1465,639,826" -"2021,""5257 Morbio Inferiore"",""Secteur primaire"",4,5,X,X,X,X,X" -"2021,""5257 Morbio Inferiore"",""Secteur secondaire"",48,288,X,X,X,X,X" -"2021,""5257 Morbio Inferiore"",""Secteur tertiaire"",279,1541,861,680,1192,602,590" -"2021,""5260 Novazzano"",""Secteur conomique - total"",239,2003,644,1359,1774,496,1278" -"2021,""5260 Novazzano"",""Secteur primaire"",21,65,21,44,41,8,33" -"2021,""5260 Novazzano"",""Secteur secondaire"",37,764,152,612,736,135,601" -"2021,""5260 Novazzano"",""Secteur tertiaire"",181,1174,471,703,996,352,644" -"2021,""5263 Riva San Vitale"",""Secteur conomique - total"",283,1195,472,723,943,307,636" -"2021,""5263 Riva San Vitale"",""Secteur primaire"",5,40,X,X,31,X,X" -"2021,""5263 Riva San Vitale"",""Secteur secondaire"",76,405,X,X,374,X,X" -"2021,""5263 Riva San Vitale"",""Secteur tertiaire"",202,750,403,347,538,255,283" -"2021,""5266 Stabio"",""Secteur conomique - total"",669,7029,2821,4208,6215,2342,3873" -"2021,""5266 Stabio"",""Secteur primaire"",10,36,X,X,27,X,X" -"2021,""5266 Stabio"",""Secteur secondaire"",134,3046,X,X,2819,X,X" -"2021,""5266 Stabio"",""Secteur tertiaire"",525,3947,1854,2093,3369,1477,1891" -"2021,""5268 Vacallo"",""Secteur conomique - total"",211,598,268,330,450,170,280" -"2021,""5268 Vacallo"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""5268 Vacallo"",""Secteur secondaire"",X,83,X,X,X,X,X" -"2021,""5268 Vacallo"",""Secteur tertiaire"",182,510,253,257,374,161,214" -"2021,""5269 Breggia"",""Secteur conomique - total"",115,286,101,185,194,55,140" -"2021,""5269 Breggia"",""Secteur primaire"",24,61,17,44,34,7,27" -"2021,""5269 Breggia"",""Secteur secondaire"",12,38,7,31,32,4,27" -"2021,""5269 Breggia"",""Secteur tertiaire"",79,187,77,110,129,44,85" -"2021,""5281 Biasca"",""Secteur conomique - total"",527,3269,1393,1876,2627,932,1694" -"2021,""5281 Biasca"",""Secteur primaire"",25,55,22,33,31,12,19" -"2021,""5281 Biasca"",""Secteur secondaire"",97,826,145,681,780,114,665" -"2021,""5281 Biasca"",""Secteur tertiaire"",405,2388,1226,1162,1816,806,1010" -"2021,""5287 Riviera"",""Secteur conomique - total"",276,1522,330,1192,1322,213,1109" -"2021,""5287 Riviera"",""Secteur primaire"",22,66,17,49,36,7,29" -"2021,""5287 Riviera"",""Secteur secondaire"",80,934,72,862,901,51,850" -"2021,""5287 Riviera"",""Secteur tertiaire"",174,522,241,281,386,155,231" -"2021,""5304 Bosco/Gurin"",""Secteur conomique - total"",17,59,14,45,42,9,32" -"2021,""5304 Bosco/Gurin"",""Secteur primaire"",4,12,X,X,9,X,X" -"2021,""5304 Bosco/Gurin"",""Secteur secondaire"",4,13,0,13,12,0,12" -"2021,""5304 Bosco/Gurin"",""Secteur tertiaire"",9,34,X,X,21,X,X" -"2021,""5307 Campo (Vallemaggia)"",""Secteur conomique - total"",18,34,8,26,22,5,17" -"2021,""5307 Campo (Vallemaggia)"",""Secteur primaire"",4,8,X,X,6,X,X" -"2021,""5307 Campo (Vallemaggia)"",""Secteur secondaire"",7,14,X,X,8,X,X" -"2021,""5307 Campo (Vallemaggia)"",""Secteur tertiaire"",7,12,X,X,8,X,X" -"2021,""5309 Cerentino"",""Secteur conomique - total"",10,22,X,X,13,X,X" -"2021,""5309 Cerentino"",""Secteur primaire"",X,10,X,X,7,X,X" -"2021,""5309 Cerentino"",""Secteur secondaire"",4,8,X,X,X,X,X" -"2021,""5309 Cerentino"",""Secteur tertiaire"",X,4,X,X,X,X,X" -"2021,""5310 Cevio"",""Secteur conomique - total"",150,691,279,412,541,178,364" -"2021,""5310 Cevio"",""Secteur primaire"",11,28,9,19,12,4,8" -"2021,""5310 Cevio"",""Secteur secondaire"",44,215,13,202,204,8,196" -"2021,""5310 Cevio"",""Secteur tertiaire"",95,448,257,191,325,165,160" -"2021,""5315 Linescio"",""Secteur conomique - total"",X,X,X,X,X,X,X" -"2021,""5315 Linescio"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5315 Linescio"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5315 Linescio"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""5317 Maggia"",""Secteur conomique - total"",224,719,311,408,554,202,352" -"2021,""5317 Maggia"",""Secteur primaire"",16,34,13,21,18,5,14" -"2021,""5317 Maggia"",""Secteur secondaire"",51,196,23,173,182,15,167" -"2021,""5317 Maggia"",""Secteur tertiaire"",157,489,275,214,354,183,171" -"2021,""5323 Lavizzara"",""Secteur conomique - total"",76,224,81,143,162,44,119" -"2021,""5323 Lavizzara"",""Secteur primaire"",25,69,27,42,39,12,26" -"2021,""5323 Lavizzara"",""Secteur secondaire"",20,80,13,67,73,8,65" -"2021,""5323 Lavizzara"",""Secteur tertiaire"",31,75,41,34,50,23,27" -"2021,""5324 Avegno Gordevio"",""Secteur conomique - total"",138,482,228,254,382,156,226" -"2021,""5324 Avegno Gordevio"",""Secteur primaire"",8,66,17,49,57,11,45" -"2021,""5324 Avegno Gordevio"",""Secteur secondaire"",31,90,14,76,80,9,70" -"2021,""5324 Avegno Gordevio"",""Secteur tertiaire"",99,326,197,129,246,136,110" -"2021,""5396 Terre di Pedemonte"",""Secteur conomique - total"",239,709,286,423,549,186,363" -"2021,""5396 Terre di Pedemonte"",""Secteur primaire"",12,24,X,X,12,X,X" -"2021,""5396 Terre di Pedemonte"",""Secteur secondaire"",44,204,X,X,189,X,X" -"2021,""5396 Terre di Pedemonte"",""Secteur tertiaire"",183,481,247,234,348,160,188" -"2021,""5397 Centovalli"",""Secteur conomique - total"",131,439,202,237,337,141,196" -"2021,""5397 Centovalli"",""Secteur primaire"",15,37,X,X,18,X,X" -"2021,""5397 Centovalli"",""Secteur secondaire"",22,88,X,X,83,X,X" -"2021,""5397 Centovalli"",""Secteur tertiaire"",94,314,185,129,236,131,104" -"2021,""5398 Gambarogno"",""Secteur conomique - total"",570,2680,974,1706,2250,700,1550" -"2021,""5398 Gambarogno"",""Secteur primaire"",23,96,23,73,74,13,62" -"2021,""5398 Gambarogno"",""Secteur secondaire"",123,961,227,734,905,192,712" -"2021,""5398 Gambarogno"",""Secteur tertiaire"",424,1623,724,899,1271,495,776" -"2021,""5399 Verzasca"",""Secteur conomique - total"",101,238,100,138,165,60,105" -"2021,""5399 Verzasca"",""Secteur primaire"",27,65,23,42,36,10,25" -"2021,""5399 Verzasca"",""Secteur secondaire"",16,45,15,30,41,13,29" -"2021,""5399 Verzasca"",""Secteur tertiaire"",58,128,62,66,88,37,51" -"2021,""5401 Aigle"",""Secteur conomique - total"",913,6136,2696,3440,4909,1813,3096" -"2021,""5401 Aigle"",""Secteur primaire"",57,310,145,165,207,87,120" -"2021,""5401 Aigle"",""Secteur secondaire"",149,1356,232,1124,1251,169,1082" -"2021,""5401 Aigle"",""Secteur tertiaire"",707,4470,2319,2151,3451,1557,1894" -"2021,""5402 Bex"",""Secteur conomique - total"",544,2640,1213,1427,2116,846,1271" -"2021,""5402 Bex"",""Secteur primaire"",52,183,87,96,105,39,66" -"2021,""5402 Bex"",""Secteur secondaire"",112,790,111,679,733,81,652" -"2021,""5402 Bex"",""Secteur tertiaire"",380,1667,1015,652,1278,726,553" -"2021,""5403 Chessel"",""Secteur conomique - total"",36,102,36,66,75,25,50" -"2021,""5403 Chessel"",""Secteur primaire"",14,57,X,X,46,X,X" -"2021,""5403 Chessel"",""Secteur secondaire"",4,8,X,X,7,X,X" -"2021,""5403 Chessel"",""Secteur tertiaire"",18,37,24,13,22,15,7" -"2021,""5404 Corbeyrier"",""Secteur conomique - total"",29,116,73,43,75,42,33" -"2021,""5404 Corbeyrier"",""Secteur primaire"",X,18,X,X,8,X,X" -"2021,""5404 Corbeyrier"",""Secteur secondaire"",X,5,0,5,5,0,5" -"2021,""5404 Corbeyrier"",""Secteur tertiaire"",22,93,X,X,63,X,X" -"2021,""5405 Gryon"",""Secteur conomique - total"",135,397,145,252,294,88,206" -"2021,""5405 Gryon"",""Secteur primaire"",5,9,X,X,5,X,X" -"2021,""5405 Gryon"",""Secteur secondaire"",19,88,X,X,79,X,X" -"2021,""5405 Gryon"",""Secteur tertiaire"",111,300,126,174,210,75,135" -"2021,""5406 Lavey-Morcles"",""Secteur conomique - total"",57,396,178,218,309,123,187" -"2021,""5406 Lavey-Morcles"",""Secteur primaire"",6,11,X,X,6,X,X" -"2021,""5406 Lavey-Morcles"",""Secteur secondaire"",17,59,X,X,56,X,X" -"2021,""5406 Lavey-Morcles"",""Secteur tertiaire"",34,326,169,157,247,117,130" -"2021,""5407 Leysin"",""Secteur conomique - total"",240,1431,631,800,1136,452,684" -"2021,""5407 Leysin"",""Secteur primaire"",14,32,13,19,24,8,16" -"2021,""5407 Leysin"",""Secteur secondaire"",31,138,25,113,120,15,105" -"2021,""5407 Leysin"",""Secteur tertiaire"",195,1261,593,668,991,429,563" -"2021,""5408 Noville"",""Secteur conomique - total"",114,763,270,493,647,187,459" -"2021,""5408 Noville"",""Secteur primaire"",25,89,28,61,76,21,55" -"2021,""5408 Noville"",""Secteur secondaire"",16,255,39,216,235,27,208" -"2021,""5408 Noville"",""Secteur tertiaire"",73,419,203,216,335,139,196" -"2021,""5409 Ollon"",""Secteur conomique - total"",561,2863,1332,1531,2221,887,1333" -"2021,""5409 Ollon"",""Secteur primaire"",65,211,76,135,137,39,99" -"2021,""5409 Ollon"",""Secteur secondaire"",69,303,39,264,273,21,252" -"2021,""5409 Ollon"",""Secteur tertiaire"",427,2349,1217,1132,1810,827,983" -"2021,""5410 Ormont-Dessous"",""Secteur conomique - total"",135,431,214,217,306,128,178" -"2021,""5410 Ormont-Dessous"",""Secteur primaire"",34,75,31,44,45,15,30" -"2021,""5410 Ormont-Dessous"",""Secteur secondaire"",22,41,12,29,33,7,26" -"2021,""5410 Ormont-Dessous"",""Secteur tertiaire"",79,315,171,144,227,106,121" -"2021,""5411 Ormont-Dessus"",""Secteur conomique - total"",215,764,331,433,617,227,390" -"2021,""5411 Ormont-Dessus"",""Secteur primaire"",17,40,12,28,29,7,22" -"2021,""5411 Ormont-Dessus"",""Secteur secondaire"",42,144,25,119,125,14,111" -"2021,""5411 Ormont-Dessus"",""Secteur tertiaire"",156,580,294,286,463,206,257" -"2021,""5412 Rennaz"",""Secteur conomique - total"",86,2795,1823,972,2226,1362,865" -"2021,""5412 Rennaz"",""Secteur primaire"",X,6,X,X,4,X,X" -"2021,""5412 Rennaz"",""Secteur secondaire"",X,135,X,X,128,X,X" -"2021,""5412 Rennaz"",""Secteur tertiaire"",67,2654,1810,844,2094,1354,739" -"2021,""5413 Roche (VD)"",""Secteur conomique - total"",101,579,187,392,503,132,371" -"2021,""5413 Roche (VD)"",""Secteur primaire"",10,17,X,X,12,X,X" -"2021,""5413 Roche (VD)"",""Secteur secondaire"",33,316,X,X,296,X,X" -"2021,""5413 Roche (VD)"",""Secteur tertiaire"",58,246,122,124,195,85,110" -"2021,""5414 Villeneuve (VD)"",""Secteur conomique - total"",399,3001,1119,1882,2527,786,1742" -"2021,""5414 Villeneuve (VD)"",""Secteur primaire"",12,51,24,27,26,7,19" -"2021,""5414 Villeneuve (VD)"",""Secteur secondaire"",76,1056,202,854,998,169,829" -"2021,""5414 Villeneuve (VD)"",""Secteur tertiaire"",311,1894,893,1001,1503,609,893" -"2021,""5415 Yvorne"",""Secteur conomique - total"",122,572,254,318,407,156,251" -"2021,""5415 Yvorne"",""Secteur primaire"",39,239,93,146,161,52,109" -"2021,""5415 Yvorne"",""Secteur secondaire"",18,52,19,33,41,11,30" -"2021,""5415 Yvorne"",""Secteur tertiaire"",65,281,142,139,205,93,112" -"2021,""5422 Aubonne"",""Secteur conomique - total"",426,3912,2001,1911,3225,1518,1707" -"2021,""5422 Aubonne"",""Secteur primaire"",34,137,47,90,74,17,57" -"2021,""5422 Aubonne"",""Secteur secondaire"",49,1026,382,644,964,342,622" -"2021,""5422 Aubonne"",""Secteur tertiaire"",343,2749,1572,1177,2187,1159,1027" -"2021,""5423 Ballens"",""Secteur conomique - total"",36,358,80,278,289,45,245" -"2021,""5423 Ballens"",""Secteur primaire"",13,102,X,X,65,X,X" -"2021,""5423 Ballens"",""Secteur secondaire"",4,36,X,X,34,X,X" -"2021,""5423 Ballens"",""Secteur tertiaire"",19,220,X,X,191,X,X" -"2021,""5424 Berolle"",""Secteur conomique - total"",31,64,27,37,42,13,30" -"2021,""5424 Berolle"",""Secteur primaire"",9,23,X,X,17,X,X" -"2021,""5424 Berolle"",""Secteur secondaire"",9,10,X,X,7,X,X" -"2021,""5424 Berolle"",""Secteur tertiaire"",13,31,18,13,19,9,9" -"2021,""5425 Bire"",""Secteur conomique - total"",110,532,148,384,450,99,351" -"2021,""5425 Bire"",""Secteur primaire"",21,69,20,49,52,12,40" -"2021,""5425 Bire"",""Secteur secondaire"",28,179,19,160,163,12,151" -"2021,""5425 Bire"",""Secteur tertiaire"",61,284,109,175,236,76,160" -"2021,""5426 Bougy-Villars"",""Secteur conomique - total"",30,113,44,69,72,24,48" -"2021,""5426 Bougy-Villars"",""Secteur primaire"",4,47,15,32,21,7,15" -"2021,""5426 Bougy-Villars"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5426 Bougy-Villars"",""Secteur tertiaire"",26,66,29,37,51,17,34" -"2021,""5427 Fchy"",""Secteur conomique - total"",67,249,119,130,180,71,108" -"2021,""5427 Fchy"",""Secteur primaire"",11,46,X,X,31,X,X" -"2021,""5427 Fchy"",""Secteur secondaire"",8,47,X,X,43,X,X" -"2021,""5427 Fchy"",""Secteur tertiaire"",48,156,104,52,106,63,43" -"2021,""5428 Gimel"",""Secteur conomique - total"",132,604,295,309,484,211,273" -"2021,""5428 Gimel"",""Secteur primaire"",19,59,21,38,43,13,30" -"2021,""5428 Gimel"",""Secteur secondaire"",22,83,8,75,75,4,71" -"2021,""5428 Gimel"",""Secteur tertiaire"",91,462,266,196,366,194,172" -"2021,""5429 Longirod"",""Secteur conomique - total"",39,88,36,52,62,19,43" -"2021,""5429 Longirod"",""Secteur primaire"",X,49,14,35,37,7,30" -"2021,""5429 Longirod"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""5429 Longirod"",""Secteur tertiaire"",21,35,X,X,X,X,X" -"2021,""5430 Marchissy"",""Secteur conomique - total"",36,88,26,62,67,13,54" -"2021,""5430 Marchissy"",""Secteur primaire"",10,41,X,X,33,X,X" -"2021,""5430 Marchissy"",""Secteur secondaire"",5,16,X,X,14,X,X" -"2021,""5430 Marchissy"",""Secteur tertiaire"",21,31,16,15,21,8,13" -"2021,""5431 Mollens (VD)"",""Secteur conomique - total"",36,72,30,42,47,15,32" -"2021,""5431 Mollens (VD)"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5431 Mollens (VD)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5431 Mollens (VD)"",""Secteur tertiaire"",17,36,X,X,24,X,X" -"2021,""5434 Saint-George"",""Secteur conomique - total"",71,226,118,108,158,69,88" -"2021,""5434 Saint-George"",""Secteur primaire"",8,32,X,X,25,X,X" -"2021,""5434 Saint-George"",""Secteur secondaire"",12,43,X,X,38,X,X" -"2021,""5434 Saint-George"",""Secteur tertiaire"",51,151,110,41,95,65,30" -"2021,""5435 Saint-Livres"",""Secteur conomique - total"",52,105,31,74,77,15,62" -"2021,""5435 Saint-Livres"",""Secteur primaire"",12,34,X,X,24,X,X" -"2021,""5435 Saint-Livres"",""Secteur secondaire"",8,27,X,X,24,X,X" -"2021,""5435 Saint-Livres"",""Secteur tertiaire"",32,44,17,27,29,9,21" -"2021,""5436 Saint-Oyens"",""Secteur conomique - total"",19,56,18,38,46,11,35" -"2021,""5436 Saint-Oyens"",""Secteur primaire"",4,8,X,X,7,X,X" -"2021,""5436 Saint-Oyens"",""Secteur secondaire"",4,17,X,X,16,X,X" -"2021,""5436 Saint-Oyens"",""Secteur tertiaire"",11,31,14,17,24,9,15" -"2021,""5437 Saubraz"",""Secteur conomique - total"",27,44,14,30,29,6,23" -"2021,""5437 Saubraz"",""Secteur primaire"",X,8,X,X,X,X,X" -"2021,""5437 Saubraz"",""Secteur secondaire"",X,16,X,X,15,X,X" -"2021,""5437 Saubraz"",""Secteur tertiaire"",15,20,X,X,X,X,X" -"2021,""5451 Avenches"",""Secteur conomique - total"",344,2705,1083,1622,2225,764,1462" -"2021,""5451 Avenches"",""Secteur primaire"",28,146,48,98,118,33,85" -"2021,""5451 Avenches"",""Secteur secondaire"",52,870,185,685,838,170,668" -"2021,""5451 Avenches"",""Secteur tertiaire"",264,1689,850,839,1270,561,709" -"2021,""5456 Cudrefin"",""Secteur conomique - total"",128,361,169,192,252,96,155" -"2021,""5456 Cudrefin"",""Secteur primaire"",24,85,X,X,58,X,X" -"2021,""5456 Cudrefin"",""Secteur secondaire"",14,35,X,X,31,X,X" -"2021,""5456 Cudrefin"",""Secteur tertiaire"",90,241,135,106,162,76,86" -"2021,""5458 Faoug"",""Secteur conomique - total"",62,179,91,88,124,50,74" -"2021,""5458 Faoug"",""Secteur primaire"",9,33,19,14,15,6,10" -"2021,""5458 Faoug"",""Secteur secondaire"",12,32,11,21,27,7,19" -"2021,""5458 Faoug"",""Secteur tertiaire"",41,114,61,53,82,37,46" -"2021,""5464 Vully-les-Lacs"",""Secteur conomique - total"",219,677,341,336,444,204,240" -"2021,""5464 Vully-les-Lacs"",""Secteur primaire"",58,211,57,154,118,23,94" -"2021,""5464 Vully-les-Lacs"",""Secteur secondaire"",23,50,17,33,39,11,28" -"2021,""5464 Vully-les-Lacs"",""Secteur tertiaire"",138,416,267,149,288,170,118" -"2021,""5471 Bettens"",""Secteur conomique - total"",32,85,34,51,60,19,41" -"2021,""5471 Bettens"",""Secteur primaire"",7,20,X,X,15,X,X" -"2021,""5471 Bettens"",""Secteur secondaire"",8,17,X,X,15,X,X" -"2021,""5471 Bettens"",""Secteur tertiaire"",17,48,27,21,31,14,16" -"2021,""5472 Bournens"",""Secteur conomique - total"",34,58,23,35,41,13,28" -"2021,""5472 Bournens"",""Secteur primaire"",6,16,X,X,12,X,X" -"2021,""5472 Bournens"",""Secteur secondaire"",6,8,X,X,7,X,X" -"2021,""5472 Bournens"",""Secteur tertiaire"",22,34,20,14,21,11,11" -"2021,""5473 Boussens"",""Secteur conomique - total"",53,171,64,107,131,37,93" -"2021,""5473 Boussens"",""Secteur primaire"",6,12,X,X,10,X,X" -"2021,""5473 Boussens"",""Secteur secondaire"",6,22,X,X,14,X,X" -"2021,""5473 Boussens"",""Secteur tertiaire"",41,137,51,86,107,31,76" -"2021,""5474 La Chaux (Cossonay)"",""Secteur conomique - total"",38,72,25,47,47,11,36" -"2021,""5474 La Chaux (Cossonay)"",""Secteur primaire"",11,18,X,X,11,X,X" -"2021,""5474 La Chaux (Cossonay)"",""Secteur secondaire"",7,11,X,X,9,X,X" -"2021,""5474 La Chaux (Cossonay)"",""Secteur tertiaire"",20,43,19,24,27,9,18" -"2021,""5475 Chavannes-le-Veyron"",""Secteur conomique - total"",15,36,11,25,23,4,18" -"2021,""5475 Chavannes-le-Veyron"",""Secteur primaire"",9,25,X,X,18,X,X" -"2021,""5475 Chavannes-le-Veyron"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5475 Chavannes-le-Veyron"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""5476 Chevilly"",""Secteur conomique - total"",16,27,X,X,16,X,X" -"2021,""5476 Chevilly"",""Secteur primaire"",X,X,X,X,9,X,X" -"2021,""5476 Chevilly"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5476 Chevilly"",""Secteur tertiaire"",10,13,X,X,X,X,X" -"2021,""5477 Cossonay"",""Secteur conomique - total"",282,1638,818,820,1232,540,692" -"2021,""5477 Cossonay"",""Secteur primaire"",16,55,17,38,38,8,30" -"2021,""5477 Cossonay"",""Secteur secondaire"",34,224,26,198,205,16,189" -"2021,""5477 Cossonay"",""Secteur tertiaire"",232,1359,775,584,989,516,473" -"2021,""5479 Cuarnens"",""Secteur conomique - total"",49,138,64,74,91,35,56" -"2021,""5479 Cuarnens"",""Secteur primaire"",15,43,X,X,27,X,X" -"2021,""5479 Cuarnens"",""Secteur secondaire"",10,25,X,X,21,X,X" -"2021,""5479 Cuarnens"",""Secteur tertiaire"",24,70,44,26,43,26,17" -"2021,""5480 Daillens"",""Secteur conomique - total"",79,734,135,599,645,83,562" -"2021,""5480 Daillens"",""Secteur primaire"",12,36,15,21,23,5,18" -"2021,""5480 Daillens"",""Secteur secondaire"",15,110,36,74,88,23,64" -"2021,""5480 Daillens"",""Secteur tertiaire"",52,588,84,504,534,55,480" -"2021,""5481 Dizy"",""Secteur conomique - total"",24,64,29,35,42,17,25" -"2021,""5481 Dizy"",""Secteur primaire"",6,17,X,X,11,X,X" -"2021,""5481 Dizy"",""Secteur secondaire"",7,27,13,14,22,10,13" -"2021,""5481 Dizy"",""Secteur tertiaire"",11,20,X,X,8,X,X" -"2021,""5482 Eclpens"",""Secteur conomique - total"",92,1559,366,1193,1440,283,1157" -"2021,""5482 Eclpens"",""Secteur primaire"",7,32,11,21,24,6,18" -"2021,""5482 Eclpens"",""Secteur secondaire"",33,918,128,790,878,107,772" -"2021,""5482 Eclpens"",""Secteur tertiaire"",52,609,227,382,538,171,368" -"2021,""5483 Ferreyres"",""Secteur conomique - total"",28,61,27,34,42,15,27" -"2021,""5483 Ferreyres"",""Secteur primaire"",4,12,X,X,11,X,X" -"2021,""5483 Ferreyres"",""Secteur secondaire"",5,12,0,12,10,0,10" -"2021,""5483 Ferreyres"",""Secteur tertiaire"",19,37,X,X,21,X,X" -"2021,""5484 Gollion"",""Secteur conomique - total"",75,325,129,196,257,84,172" -"2021,""5484 Gollion"",""Secteur primaire"",14,45,19,26,35,11,24" -"2021,""5484 Gollion"",""Secteur secondaire"",13,70,15,55,56,9,48" -"2021,""5484 Gollion"",""Secteur tertiaire"",48,210,95,115,165,64,101" -"2021,""5485 Grancy"",""Secteur conomique - total"",34,98,32,66,73,17,55" -"2021,""5485 Grancy"",""Secteur primaire"",6,23,X,X,17,X,X" -"2021,""5485 Grancy"",""Secteur secondaire"",7,33,X,X,30,X,X" -"2021,""5485 Grancy"",""Secteur tertiaire"",21,42,24,18,26,12,13" -"2021,""5486 L'Isle"",""Secteur conomique - total"",99,321,131,190,236,73,163" -"2021,""5486 L'Isle"",""Secteur primaire"",23,62,15,47,45,7,38" -"2021,""5486 L'Isle"",""Secteur secondaire"",18,93,34,59,72,19,53" -"2021,""5486 L'Isle"",""Secteur tertiaire"",58,166,82,84,118,47,72" -"2021,""5487 Lussery-Villars"",""Secteur conomique - total"",32,64,23,41,41,12,28" -"2021,""5487 Lussery-Villars"",""Secteur primaire"",7,18,X,X,13,X,X" -"2021,""5487 Lussery-Villars"",""Secteur secondaire"",5,5,X,X,4,X,X" -"2021,""5487 Lussery-Villars"",""Secteur tertiaire"",20,41,18,23,23,10,13" -"2021,""5488 Mauraz"",""Secteur conomique - total"",7,13,X,X,7,X,X" -"2021,""5488 Mauraz"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""5488 Mauraz"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5488 Mauraz"",""Secteur tertiaire"",X,7,X,X,X,X,X" -"2021,""5489 Mex (VD)"",""Secteur conomique - total"",53,1726,270,1456,1645,237,1408" -"2021,""5489 Mex (VD)"",""Secteur primaire"",5,12,X,X,6,X,X" -"2021,""5489 Mex (VD)"",""Secteur secondaire"",7,1592,208,1384,1551,197,1355" -"2021,""5489 Mex (VD)"",""Secteur tertiaire"",41,122,X,X,87,X,X" -"2021,""5490 Moiry"",""Secteur conomique - total"",33,78,37,41,48,20,27" -"2021,""5490 Moiry"",""Secteur primaire"",9,33,X,X,26,X,X" -"2021,""5490 Moiry"",""Secteur secondaire"",4,4,X,X,X,X,X" -"2021,""5490 Moiry"",""Secteur tertiaire"",20,41,X,X,X,X,X" -"2021,""5491 Mont-la-Ville"",""Secteur conomique - total"",33,75,39,36,53,24,29" -"2021,""5491 Mont-la-Ville"",""Secteur primaire"",X,23,X,X,17,X,X" -"2021,""5491 Mont-la-Ville"",""Secteur secondaire"",X,6,X,X,5,X,X" -"2021,""5491 Mont-la-Ville"",""Secteur tertiaire"",23,46,X,X,31,X,X" -"2021,""5492 Montricher"",""Secteur conomique - total"",82,289,109,180,234,73,161" -"2021,""5492 Montricher"",""Secteur primaire"",20,54,11,43,43,5,38" -"2021,""5492 Montricher"",""Secteur secondaire"",19,66,11,55,59,7,52" -"2021,""5492 Montricher"",""Secteur tertiaire"",43,169,87,82,132,60,71" -"2021,""5493 Orny"",""Secteur conomique - total"",28,127,73,54,79,39,40" -"2021,""5493 Orny"",""Secteur primaire"",X,37,X,X,26,X,X" -"2021,""5493 Orny"",""Secteur secondaire"",X,11,X,X,10,X,X" -"2021,""5493 Orny"",""Secteur tertiaire"",15,79,64,15,43,34,9" -"2021,""5495 Penthalaz"",""Secteur conomique - total"",200,1416,471,945,1181,344,837" -"2021,""5495 Penthalaz"",""Secteur primaire"",6,10,X,X,6,X,X" -"2021,""5495 Penthalaz"",""Secteur secondaire"",39,136,X,X,117,X,X" -"2021,""5495 Penthalaz"",""Secteur tertiaire"",155,1270,441,829,1058,326,733" -"2021,""5496 Penthaz"",""Secteur conomique - total"",119,650,177,473,550,114,435" -"2021,""5496 Penthaz"",""Secteur primaire"",X,9,X,X,6,X,X" -"2021,""5496 Penthaz"",""Secteur secondaire"",X,343,X,X,324,X,X" -"2021,""5496 Penthaz"",""Secteur tertiaire"",82,298,X,X,219,X,X" -"2021,""5497 Pompaples"",""Secteur conomique - total"",72,516,351,165,409,262,147" -"2021,""5497 Pompaples"",""Secteur primaire"",9,26,X,X,18,X,X" -"2021,""5497 Pompaples"",""Secteur secondaire"",8,15,X,X,13,X,X" -"2021,""5497 Pompaples"",""Secteur tertiaire"",55,475,344,131,378,258,119" -"2021,""5498 La Sarraz"",""Secteur conomique - total"",204,687,411,276,480,254,226" -"2021,""5498 La Sarraz"",""Secteur primaire"",8,22,X,X,11,X,X" -"2021,""5498 La Sarraz"",""Secteur secondaire"",30,103,X,X,85,X,X" -"2021,""5498 La Sarraz"",""Secteur tertiaire"",166,562,375,187,384,233,150" -"2021,""5499 Senarclens"",""Secteur conomique - total"",32,119,75,44,84,50,34" -"2021,""5499 Senarclens"",""Secteur primaire"",X,15,X,X,9,X,X" -"2021,""5499 Senarclens"",""Secteur secondaire"",X,6,X,X,5,X,X" -"2021,""5499 Senarclens"",""Secteur tertiaire"",23,98,69,29,71,47,23" -"2021,""5501 Sullens"",""Secteur conomique - total"",62,187,73,114,139,42,96" -"2021,""5501 Sullens"",""Secteur primaire"",8,17,X,X,13,X,X" -"2021,""5501 Sullens"",""Secteur secondaire"",12,59,X,X,54,X,X" -"2021,""5501 Sullens"",""Secteur tertiaire"",42,111,58,53,72,34,39" -"2021,""5503 Vufflens-la-Ville"",""Secteur conomique - total"",112,924,281,643,789,194,596" -"2021,""5503 Vufflens-la-Ville"",""Secteur primaire"",7,18,X,X,11,X,X" -"2021,""5503 Vufflens-la-Ville"",""Secteur secondaire"",17,121,X,X,111,X,X" -"2021,""5503 Vufflens-la-Ville"",""Secteur tertiaire"",88,785,270,515,667,189,479" -"2021,""5511 Assens"",""Secteur conomique - total"",140,1397,291,1106,1246,196,1051" -"2021,""5511 Assens"",""Secteur primaire"",17,54,18,36,40,8,32" -"2021,""5511 Assens"",""Secteur secondaire"",27,574,33,541,552,23,529" -"2021,""5511 Assens"",""Secteur tertiaire"",96,769,240,529,655,165,490" -"2021,""5512 Bercher"",""Secteur conomique - total"",69,469,206,263,364,131,233" -"2021,""5512 Bercher"",""Secteur primaire"",6,16,X,X,10,X,X" -"2021,""5512 Bercher"",""Secteur secondaire"",10,82,X,X,72,X,X" -"2021,""5512 Bercher"",""Secteur tertiaire"",53,371,181,190,282,117,165" -"2021,""5514 Bottens"",""Secteur conomique - total"",83,242,108,134,161,56,105" -"2021,""5514 Bottens"",""Secteur primaire"",17,45,X,X,32,X,X" -"2021,""5514 Bottens"",""Secteur secondaire"",10,53,X,X,51,X,X" -"2021,""5514 Bottens"",""Secteur tertiaire"",56,144,88,56,79,44,35" -"2021,""5515 Bretigny-sur-Morrens"",""Secteur conomique - total"",49,208,68,140,167,43,124" -"2021,""5515 Bretigny-sur-Morrens"",""Secteur primaire"",5,9,X,X,7,X,X" -"2021,""5515 Bretigny-sur-Morrens"",""Secteur secondaire"",9,92,X,X,87,X,X" -"2021,""5515 Bretigny-sur-Morrens"",""Secteur tertiaire"",35,107,54,53,73,33,40" -"2021,""5516 Cugy (VD)"",""Secteur conomique - total"",209,1194,594,600,891,377,514" -"2021,""5516 Cugy (VD)"",""Secteur primaire"",5,13,X,X,9,X,X" -"2021,""5516 Cugy (VD)"",""Secteur secondaire"",41,248,X,X,228,X,X" -"2021,""5516 Cugy (VD)"",""Secteur tertiaire"",163,933,545,388,653,341,312" -"2021,""5518 Echallens"",""Secteur conomique - total"",501,2648,1329,1319,2063,889,1175" -"2021,""5518 Echallens"",""Secteur primaire"",16,36,X,X,28,X,X" -"2021,""5518 Echallens"",""Secteur secondaire"",77,445,X,X,394,X,X" -"2021,""5518 Echallens"",""Secteur tertiaire"",408,2167,1229,938,1641,827,814" -"2021,""5520 Essertines-sur-Yverdon"",""Secteur conomique - total"",69,193,72,121,140,41,99" -"2021,""5520 Essertines-sur-Yverdon"",""Secteur primaire"",14,43,X,X,30,X,X" -"2021,""5520 Essertines-sur-Yverdon"",""Secteur secondaire"",13,40,X,X,31,X,X" -"2021,""5520 Essertines-sur-Yverdon"",""Secteur tertiaire"",42,110,54,56,80,31,49" -"2021,""5521 Etagnires"",""Secteur conomique - total"",90,713,263,450,595,177,419" -"2021,""5521 Etagnires"",""Secteur primaire"",7,19,X,X,16,X,X" -"2021,""5521 Etagnires"",""Secteur secondaire"",14,207,X,X,197,X,X" -"2021,""5521 Etagnires"",""Secteur tertiaire"",69,487,233,254,381,153,228" -"2021,""5522 Fey"",""Secteur conomique - total"",43,183,54,129,146,34,111" -"2021,""5522 Fey"",""Secteur primaire"",9,22,X,X,15,X,X" -"2021,""5522 Fey"",""Secteur secondaire"",9,82,X,X,76,X,X" -"2021,""5522 Fey"",""Secteur tertiaire"",25,79,33,46,55,21,35" -"2021,""5523 Froideville"",""Secteur conomique - total"",114,264,121,143,186,68,118" -"2021,""5523 Froideville"",""Secteur primaire"",5,16,X,X,12,X,X" -"2021,""5523 Froideville"",""Secteur secondaire"",19,42,X,X,37,X,X" -"2021,""5523 Froideville"",""Secteur tertiaire"",90,206,114,92,137,65,71" -"2021,""5527 Morrens (VD)"",""Secteur conomique - total"",67,154,76,78,112,49,63" -"2021,""5527 Morrens (VD)"",""Secteur primaire"",5,8,X,X,6,X,X" -"2021,""5527 Morrens (VD)"",""Secteur secondaire"",11,35,X,X,30,X,X" -"2021,""5527 Morrens (VD)"",""Secteur tertiaire"",51,111,71,40,75,46,30" -"2021,""5529 Oulens-sous-Echallens"",""Secteur conomique - total"",48,135,54,81,89,29,60" -"2021,""5529 Oulens-sous-Echallens"",""Secteur primaire"",15,37,X,X,23,X,X" -"2021,""5529 Oulens-sous-Echallens"",""Secteur secondaire"",4,13,X,X,10,X,X" -"2021,""5529 Oulens-sous-Echallens"",""Secteur tertiaire"",29,85,40,45,56,23,33" -"2021,""5530 Pailly"",""Secteur conomique - total"",40,180,60,120,145,36,109" -"2021,""5530 Pailly"",""Secteur primaire"",14,100,X,X,87,X,X" -"2021,""5530 Pailly"",""Secteur secondaire"",7,29,X,X,24,X,X" -"2021,""5530 Pailly"",""Secteur tertiaire"",19,51,40,11,33,24,9" -"2021,""5531 Penthraz"",""Secteur conomique - total"",34,128,32,96,104,18,86" -"2021,""5531 Penthraz"",""Secteur primaire"",9,27,8,19,21,5,17" -"2021,""5531 Penthraz"",""Secteur secondaire"",11,77,10,67,71,7,65" -"2021,""5531 Penthraz"",""Secteur tertiaire"",14,24,14,10,11,7,5" -"2021,""5533 Poliez-Pittet"",""Secteur conomique - total"",63,412,197,215,271,98,173" -"2021,""5533 Poliez-Pittet"",""Secteur primaire"",13,29,X,X,18,X,X" -"2021,""5533 Poliez-Pittet"",""Secteur secondaire"",16,120,X,X,113,X,X" -"2021,""5533 Poliez-Pittet"",""Secteur tertiaire"",34,263,182,81,140,89,51" -"2021,""5534 Rueyres"",""Secteur conomique - total"",15,91,16,75,82,13,69" -"2021,""5534 Rueyres"",""Secteur primaire"",5,12,X,X,8,X,X" -"2021,""5534 Rueyres"",""Secteur secondaire"",5,60,13,47,58,12,46" -"2021,""5534 Rueyres"",""Secteur tertiaire"",5,19,X,X,16,X,X" -"2021,""5535 Saint-Barthlemy (VD)"",""Secteur conomique - total"",53,321,165,156,225,106,120" -"2021,""5535 Saint-Barthlemy (VD)"",""Secteur primaire"",15,35,X,X,22,X,X" -"2021,""5535 Saint-Barthlemy (VD)"",""Secteur secondaire"",6,18,X,X,16,X,X" -"2021,""5535 Saint-Barthlemy (VD)"",""Secteur tertiaire"",32,268,153,115,187,100,87" -"2021,""5537 Villars-le-Terroir"",""Secteur conomique - total"",85,230,111,119,164,63,101" -"2021,""5537 Villars-le-Terroir"",""Secteur primaire"",21,48,X,X,30,X,X" -"2021,""5537 Villars-le-Terroir"",""Secteur secondaire"",11,38,X,X,35,X,X" -"2021,""5537 Villars-le-Terroir"",""Secteur tertiaire"",53,144,93,51,99,56,43" -"2021,""5539 Vuarrens"",""Secteur conomique - total"",68,155,72,83,108,42,66" -"2021,""5539 Vuarrens"",""Secteur primaire"",21,40,10,30,29,5,24" -"2021,""5539 Vuarrens"",""Secteur secondaire"",13,33,10,23,26,6,20" -"2021,""5539 Vuarrens"",""Secteur tertiaire"",34,82,52,30,54,30,23" -"2021,""5540 Montilliez"",""Secteur conomique - total"",127,321,113,208,227,57,170" -"2021,""5540 Montilliez"",""Secteur primaire"",27,79,24,55,52,11,41" -"2021,""5540 Montilliez"",""Secteur secondaire"",32,86,15,71,71,7,65" -"2021,""5540 Montilliez"",""Secteur tertiaire"",68,156,74,82,104,40,64" -"2021,""5541 Goumons"",""Secteur conomique - total"",76,326,178,148,239,114,126" -"2021,""5541 Goumons"",""Secteur primaire"",22,49,X,X,30,X,X" -"2021,""5541 Goumons"",""Secteur secondaire"",6,70,X,X,64,X,X" -"2021,""5541 Goumons"",""Secteur tertiaire"",48,207,161,46,145,105,39" -"2021,""5551 Bonvillars"",""Secteur conomique - total"",37,118,52,66,78,29,49" -"2021,""5551 Bonvillars"",""Secteur primaire"",X,51,24,27,28,11,17" -"2021,""5551 Bonvillars"",""Secteur secondaire"",X,32,9,23,28,7,21" -"2021,""5551 Bonvillars"",""Secteur tertiaire"",19,35,19,16,22,11,11" -"2021,""5552 Bullet"",""Secteur conomique - total"",60,215,112,103,156,70,86" -"2021,""5552 Bullet"",""Secteur primaire"",11,35,X,X,26,X,X" -"2021,""5552 Bullet"",""Secteur secondaire"",10,26,X,X,24,X,X" -"2021,""5552 Bullet"",""Secteur tertiaire"",39,154,98,56,106,63,43" -"2021,""5553 Champagne"",""Secteur conomique - total"",103,498,207,291,414,150,264" -"2021,""5553 Champagne"",""Secteur primaire"",9,26,X,X,20,X,X" -"2021,""5553 Champagne"",""Secteur secondaire"",24,306,102,204,281,86,195" -"2021,""5553 Champagne"",""Secteur tertiaire"",70,166,X,X,114,X,X" -"2021,""5554 Concise"",""Secteur conomique - total"",72,202,99,103,130,56,73" -"2021,""5554 Concise"",""Secteur primaire"",14,63,25,38,33,9,24" -"2021,""5554 Concise"",""Secteur secondaire"",8,18,7,11,12,4,7" -"2021,""5554 Concise"",""Secteur tertiaire"",50,121,67,54,85,43,42" -"2021,""5555 Corcelles-prs-Concise"",""Secteur conomique - total"",33,131,80,51,90,52,38" -"2021,""5555 Corcelles-prs-Concise"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5555 Corcelles-prs-Concise"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5555 Corcelles-prs-Concise"",""Secteur tertiaire"",19,90,X,X,60,X,X" -"2021,""5556 Fiez"",""Secteur conomique - total"",28,67,41,26,49,27,22" -"2021,""5556 Fiez"",""Secteur primaire"",X,13,X,X,11,X,X" -"2021,""5556 Fiez"",""Secteur secondaire"",X,7,X,X,6,X,X" -"2021,""5556 Fiez"",""Secteur tertiaire"",19,47,37,10,33,25,8" -"2021,""5557 Fontaines-sur-Grandson"",""Secteur conomique - total"",17,29,15,14,18,7,11" -"2021,""5557 Fontaines-sur-Grandson"",""Secteur primaire"",X,11,X,X,X,X,X" -"2021,""5557 Fontaines-sur-Grandson"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""5557 Fontaines-sur-Grandson"",""Secteur tertiaire"",10,14,X,X,8,X,X" -"2021,""5559 Giez"",""Secteur conomique - total"",38,101,36,65,77,20,57" -"2021,""5559 Giez"",""Secteur primaire"",8,24,X,X,14,X,X" -"2021,""5559 Giez"",""Secteur secondaire"",13,49,X,X,46,X,X" -"2021,""5559 Giez"",""Secteur tertiaire"",17,28,18,10,18,10,8" -"2021,""5560 Grandevent"",""Secteur conomique - total"",14,23,8,15,14,5,9" -"2021,""5560 Grandevent"",""Secteur primaire"",X,X,X,X,7,X,X" -"2021,""5560 Grandevent"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5560 Grandevent"",""Secteur tertiaire"",9,11,X,X,X,X,X" -"2021,""5561 Grandson"",""Secteur conomique - total"",220,1517,703,814,1210,479,731" -"2021,""5561 Grandson"",""Secteur primaire"",6,11,X,X,8,X,X" -"2021,""5561 Grandson"",""Secteur secondaire"",46,324,X,X,293,X,X" -"2021,""5561 Grandson"",""Secteur tertiaire"",168,1182,635,547,909,433,476" -"2021,""5562 Mauborget"",""Secteur conomique - total"",11,22,X,X,12,X,X" -"2021,""5562 Mauborget"",""Secteur primaire"",4,13,X,X,8,X,X" -"2021,""5562 Mauborget"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5562 Mauborget"",""Secteur tertiaire"",7,9,X,X,4,X,X" -"2021,""5563 Mutrux"",""Secteur conomique - total"",17,28,12,16,17,7,11" -"2021,""5563 Mutrux"",""Secteur primaire"",X,X,X,X,9,X,X" -"2021,""5563 Mutrux"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5563 Mutrux"",""Secteur tertiaire"",11,16,X,X,X,X,X" -"2021,""5564 Novalles"",""Secteur conomique - total"",12,23,X,X,12,X,X" -"2021,""5564 Novalles"",""Secteur primaire"",6,14,X,X,7,X,X" -"2021,""5564 Novalles"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5564 Novalles"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""5565 Onnens (VD)"",""Secteur conomique - total"",50,247,104,143,201,70,131" -"2021,""5565 Onnens (VD)"",""Secteur primaire"",9,30,X,X,X,X,X" -"2021,""5565 Onnens (VD)"",""Secteur secondaire"",5,6,X,X,X,X,X" -"2021,""5565 Onnens (VD)"",""Secteur tertiaire"",36,211,92,119,174,63,112" -"2021,""5566 Provence"",""Secteur conomique - total"",45,143,55,88,111,35,75" -"2021,""5566 Provence"",""Secteur primaire"",21,53,14,39,43,10,32" -"2021,""5566 Provence"",""Secteur secondaire"",10,37,10,27,32,6,26" -"2021,""5566 Provence"",""Secteur tertiaire"",14,53,31,22,37,20,17" -"2021,""5568 Sainte-Croix"",""Secteur conomique - total"",369,1881,848,1033,1448,560,888" -"2021,""5568 Sainte-Croix"",""Secteur primaire"",34,81,28,53,55,13,42" -"2021,""5568 Sainte-Croix"",""Secteur secondaire"",84,569,125,444,516,91,425" -"2021,""5568 Sainte-Croix"",""Secteur tertiaire"",251,1231,695,536,877,456,421" -"2021,""5571 Tvenon"",""Secteur conomique - total"",55,143,80,63,102,50,52" -"2021,""5571 Tvenon"",""Secteur primaire"",13,29,10,19,22,5,17" -"2021,""5571 Tvenon"",""Secteur secondaire"",7,22,8,14,18,6,12" -"2021,""5571 Tvenon"",""Secteur tertiaire"",35,92,62,30,62,39,23" -"2021,""5581 Belmont-sur-Lausanne"",""Secteur conomique - total"",182,540,281,259,404,189,215" -"2021,""5581 Belmont-sur-Lausanne"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""5581 Belmont-sur-Lausanne"",""Secteur secondaire"",X,59,X,X,X,X,X" -"2021,""5581 Belmont-sur-Lausanne"",""Secteur tertiaire"",163,476,263,213,350,175,174" -"2021,""5582 Cheseaux-sur-Lausanne"",""Secteur conomique - total"",221,2083,720,1363,1760,510,1250" -"2021,""5582 Cheseaux-sur-Lausanne"",""Secteur primaire"",14,34,11,23,24,7,17" -"2021,""5582 Cheseaux-sur-Lausanne"",""Secteur secondaire"",30,446,102,344,417,83,334" -"2021,""5582 Cheseaux-sur-Lausanne"",""Secteur tertiaire"",177,1603,607,996,1319,420,899" -"2021,""5583 Crissier"",""Secteur conomique - total"",805,10253,3709,6544,8682,2584,6098" -"2021,""5583 Crissier"",""Secteur primaire"",5,21,X,X,16,X,X" -"2021,""5583 Crissier"",""Secteur secondaire"",177,3027,X,X,2869,X,X" -"2021,""5583 Crissier"",""Secteur tertiaire"",623,7205,3166,4039,5797,2148,3649" -"2021,""5584 Epalinges"",""Secteur conomique - total"",523,3333,1876,1457,2660,1384,1276" -"2021,""5584 Epalinges"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""5584 Epalinges"",""Secteur secondaire"",X,217,X,X,X,X,X" -"2021,""5584 Epalinges"",""Secteur tertiaire"",480,3111,1812,1299,2462,1332,1130" -"2021,""5585 Jouxtens-Mzery"",""Secteur conomique - total"",79,175,86,89,130,50,80" -"2021,""5585 Jouxtens-Mzery"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5585 Jouxtens-Mzery"",""Secteur secondaire"",11,58,14,44,51,8,43" -"2021,""5585 Jouxtens-Mzery"",""Secteur tertiaire"",68,117,72,45,79,42,38" -"2021,""5586 Lausanne"",""Secteur conomique - total"",13366,127489,66748,60741,100487,48071,52416" -"2021,""5586 Lausanne"",""Secteur primaire"",20,125,41,84,93,26,68" -"2021,""5586 Lausanne"",""Secteur secondaire"",926,6618,1427,5191,6017,1064,4954" -"2021,""5586 Lausanne"",""Secteur tertiaire"",12420,120746,65280,55466,94376,46981,47395" -"2021,""5587 Le Mont-sur-Lausanne"",""Secteur conomique - total"",806,8534,3537,4997,6876,2376,4499" -"2021,""5587 Le Mont-sur-Lausanne"",""Secteur primaire"",17,49,22,27,36,13,23" -"2021,""5587 Le Mont-sur-Lausanne"",""Secteur secondaire"",165,1770,299,1471,1658,229,1429" -"2021,""5587 Le Mont-sur-Lausanne"",""Secteur tertiaire"",624,6715,3216,3499,5181,2134,3047" -"2021,""5588 Paudex"",""Secteur conomique - total"",160,1443,694,749,1018,464,555" -"2021,""5588 Paudex"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5588 Paudex"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5588 Paudex"",""Secteur tertiaire"",148,1287,667,620,875,440,435" -"2021,""5589 Prilly"",""Secteur conomique - total"",588,7128,3430,3698,5842,2516,3326" -"2021,""5589 Prilly"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""5589 Prilly"",""Secteur secondaire"",X,1249,X,X,X,X,X" -"2021,""5589 Prilly"",""Secteur tertiaire"",516,5875,3081,2794,4663,2214,2450" -"2021,""5590 Pully"",""Secteur conomique - total"",1248,6646,3337,3309,5218,2409,2809" -"2021,""5590 Pully"",""Secteur primaire"",8,20,X,X,15,X,X" -"2021,""5590 Pully"",""Secteur secondaire"",82,355,X,X,321,X,X" -"2021,""5590 Pully"",""Secteur tertiaire"",1158,6271,3259,3012,4882,2356,2526" -"2021,""5591 Renens (VD)"",""Secteur conomique - total"",1327,15490,5877,9613,12803,4070,8733" -"2021,""5591 Renens (VD)"",""Secteur primaire"",X,27,6,21,26,6,20" -"2021,""5591 Renens (VD)"",""Secteur secondaire"",X,2191,324,1867,2057,250,1808" -"2021,""5591 Renens (VD)"",""Secteur tertiaire"",1109,13272,5547,7725,10720,3815,6905" -"2021,""5592 Romanel-sur-Lausanne"",""Secteur conomique - total"",235,1519,608,911,1284,444,840" -"2021,""5592 Romanel-sur-Lausanne"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5592 Romanel-sur-Lausanne"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5592 Romanel-sur-Lausanne"",""Secteur tertiaire"",183,1040,544,496,834,393,441" -"2021,""5601 Chexbres"",""Secteur conomique - total"",182,819,400,419,631,269,362" -"2021,""5601 Chexbres"",""Secteur primaire"",14,69,24,45,41,9,31" -"2021,""5601 Chexbres"",""Secteur secondaire"",23,106,31,75,90,20,69" -"2021,""5601 Chexbres"",""Secteur tertiaire"",145,644,345,299,501,240,261" -"2021,""5604 Forel (Lavaux)"",""Secteur conomique - total"",215,1184,365,819,941,208,733" -"2021,""5604 Forel (Lavaux)"",""Secteur primaire"",42,122,46,76,80,25,54" -"2021,""5604 Forel (Lavaux)"",""Secteur secondaire"",47,553,70,483,517,50,467" -"2021,""5604 Forel (Lavaux)"",""Secteur tertiaire"",126,509,249,260,344,133,211" -"2021,""5606 Lutry"",""Secteur conomique - total"",876,3445,1721,1724,2655,1167,1488" -"2021,""5606 Lutry"",""Secteur primaire"",28,105,30,75,76,17,59" -"2021,""5606 Lutry"",""Secteur secondaire"",76,330,72,258,290,50,241" -"2021,""5606 Lutry"",""Secteur tertiaire"",772,3010,1619,1391,2289,1100,1189" -"2021,""5607 Puidoux"",""Secteur conomique - total"",324,2308,902,1406,1922,649,1273" -"2021,""5607 Puidoux"",""Secteur primaire"",58,198,71,127,122,28,93" -"2021,""5607 Puidoux"",""Secteur secondaire"",66,750,248,502,678,207,471" -"2021,""5607 Puidoux"",""Secteur tertiaire"",200,1360,583,777,1122,414,708" -"2021,""5609 Rivaz"",""Secteur conomique - total"",32,83,25,58,55,10,45" -"2021,""5609 Rivaz"",""Secteur primaire"",15,60,19,41,38,7,31" -"2021,""5609 Rivaz"",""Secteur secondaire"",5,9,X,X,8,X,X" -"2021,""5609 Rivaz"",""Secteur tertiaire"",12,14,X,X,9,X,X" -"2021,""5610 Saint-Saphorin (Lavaux)"",""Secteur conomique - total"",29,83,23,60,69,16,53" -"2021,""5610 Saint-Saphorin (Lavaux)"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5610 Saint-Saphorin (Lavaux)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5610 Saint-Saphorin (Lavaux)"",""Secteur tertiaire"",20,57,15,42,48,11,37" -"2021,""5611 Savigny"",""Secteur conomique - total"",293,1462,619,843,1115,389,726" -"2021,""5611 Savigny"",""Secteur primaire"",39,102,31,71,70,16,54" -"2021,""5611 Savigny"",""Secteur secondaire"",51,309,41,268,283,25,259" -"2021,""5611 Savigny"",""Secteur tertiaire"",203,1051,547,504,761,348,413" -"2021,""5613 Bourg-en-Lavaux"",""Secteur conomique - total"",467,1757,942,815,1238,592,646" -"2021,""5613 Bourg-en-Lavaux"",""Secteur primaire"",80,324,104,220,207,47,161" -"2021,""5613 Bourg-en-Lavaux"",""Secteur secondaire"",45,125,26,99,105,14,91" -"2021,""5613 Bourg-en-Lavaux"",""Secteur tertiaire"",342,1308,812,496,925,531,394" -"2021,""5621 Aclens"",""Secteur conomique - total"",110,1891,315,1576,1708,249,1459" -"2021,""5621 Aclens"",""Secteur primaire"",8,19,6,13,12,4,8" -"2021,""5621 Aclens"",""Secteur secondaire"",37,493,45,448,467,33,433" -"2021,""5621 Aclens"",""Secteur tertiaire"",65,1379,264,1115,1230,212,1018" -"2021,""5622 Bremblens"",""Secteur conomique - total"",46,348,57,291,315,39,276" -"2021,""5622 Bremblens"",""Secteur primaire"",6,43,X,X,37,X,X" -"2021,""5622 Bremblens"",""Secteur secondaire"",9,176,X,X,171,X,X" -"2021,""5622 Bremblens"",""Secteur tertiaire"",31,129,42,87,106,28,78" -"2021,""5623 Buchillon"",""Secteur conomique - total"",48,124,41,83,90,26,65" -"2021,""5623 Buchillon"",""Secteur primaire"",X,8,0,8,6,0,6" -"2021,""5623 Buchillon"",""Secteur secondaire"",X,5,0,5,5,0,5" -"2021,""5623 Buchillon"",""Secteur tertiaire"",42,111,41,70,80,26,54" -"2021,""5624 Bussigny"",""Secteur conomique - total"",657,6026,1765,4261,5128,1222,3906" -"2021,""5624 Bussigny"",""Secteur primaire"",5,16,X,X,13,X,X" -"2021,""5624 Bussigny"",""Secteur secondaire"",138,1873,X,X,1775,X,X" -"2021,""5624 Bussigny"",""Secteur tertiaire"",514,4137,1593,2544,3340,1090,2249" -"2021,""5627 Chavannes-prs-Renens"",""Secteur conomique - total"",305,3675,1794,1881,2829,1305,1523" -"2021,""5627 Chavannes-prs-Renens"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5627 Chavannes-prs-Renens"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5627 Chavannes-prs-Renens"",""Secteur tertiaire"",249,3482,1769,1713,2654,1286,1369" -"2021,""5628 Chigny"",""Secteur conomique - total"",20,69,33,36,44,17,27" -"2021,""5628 Chigny"",""Secteur primaire"",X,21,X,X,9,X,X" -"2021,""5628 Chigny"",""Secteur secondaire"",X,10,X,X,9,X,X" -"2021,""5628 Chigny"",""Secteur tertiaire"",13,38,21,17,27,13,13" -"2021,""5629 Clarmont"",""Secteur conomique - total"",18,47,19,28,23,6,17" -"2021,""5629 Clarmont"",""Secteur primaire"",X,28,X,X,14,X,X" -"2021,""5629 Clarmont"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5629 Clarmont"",""Secteur tertiaire"",10,X,X,X,X,X,X" -"2021,""5631 Denens"",""Secteur conomique - total"",41,114,58,56,73,30,43" -"2021,""5631 Denens"",""Secteur primaire"",X,52,X,X,30,X,X" -"2021,""5631 Denens"",""Secteur secondaire"",X,8,X,X,7,X,X" -"2021,""5631 Denens"",""Secteur tertiaire"",26,54,33,21,36,19,18" -"2021,""5632 Denges"",""Secteur conomique - total"",132,864,258,606,729,169,559" -"2021,""5632 Denges"",""Secteur primaire"",X,37,26,11,16,7,9" -"2021,""5632 Denges"",""Secteur secondaire"",X,218,42,176,204,36,168" -"2021,""5632 Denges"",""Secteur tertiaire"",105,609,190,419,509,126,383" -"2021,""5633 Echandens"",""Secteur conomique - total"",207,1684,534,1150,1388,347,1041" -"2021,""5633 Echandens"",""Secteur primaire"",7,23,8,15,15,4,11" -"2021,""5633 Echandens"",""Secteur secondaire"",41,593,74,519,560,55,505" -"2021,""5633 Echandens"",""Secteur tertiaire"",159,1068,452,616,813,288,525" -"2021,""5634 Echichens"",""Secteur conomique - total"",173,943,573,370,645,371,274" -"2021,""5634 Echichens"",""Secteur primaire"",30,127,48,79,69,25,44" -"2021,""5634 Echichens"",""Secteur secondaire"",15,49,10,39,38,6,32" -"2021,""5634 Echichens"",""Secteur tertiaire"",128,767,515,252,538,341,198" -"2021,""5635 Ecublens (VD)"",""Secteur conomique - total"",870,16855,6625,10230,14929,5373,9555" -"2021,""5635 Ecublens (VD)"",""Secteur primaire"",6,19,X,X,13,X,X" -"2021,""5635 Ecublens (VD)"",""Secteur secondaire"",162,2475,X,X,2323,X,X" -"2021,""5635 Ecublens (VD)"",""Secteur tertiaire"",702,14361,5933,8428,12593,4778,7815" -"2021,""5636 Etoy"",""Secteur conomique - total"",377,3126,1386,1740,2527,995,1532" -"2021,""5636 Etoy"",""Secteur primaire"",18,112,37,75,64,17,47" -"2021,""5636 Etoy"",""Secteur secondaire"",68,470,68,402,437,53,384" -"2021,""5636 Etoy"",""Secteur tertiaire"",291,2544,1281,1263,2026,926,1101" -"2021,""5637 Lavigny"",""Secteur conomique - total"",71,935,493,442,717,359,358" -"2021,""5637 Lavigny"",""Secteur primaire"",11,42,9,33,30,6,23" -"2021,""5637 Lavigny"",""Secteur secondaire"",14,77,8,69,71,5,66" -"2021,""5637 Lavigny"",""Secteur tertiaire"",46,816,476,340,617,348,269" -"2021,""5638 Lonay"",""Secteur conomique - total"",283,1723,684,1039,1459,507,952" -"2021,""5638 Lonay"",""Secteur primaire"",8,57,12,45,51,11,40" -"2021,""5638 Lonay"",""Secteur secondaire"",49,443,126,317,416,110,306" -"2021,""5638 Lonay"",""Secteur tertiaire"",226,1223,546,677,992,386,606" -"2021,""5639 Lully (VD)"",""Secteur conomique - total"",74,205,95,110,142,56,87" -"2021,""5639 Lully (VD)"",""Secteur primaire"",6,20,X,X,11,X,X" -"2021,""5639 Lully (VD)"",""Secteur secondaire"",6,37,X,X,29,X,X" -"2021,""5639 Lully (VD)"",""Secteur tertiaire"",62,148,80,68,103,47,55" -"2021,""5640 Lussy-sur-Morges"",""Secteur conomique - total"",50,197,126,71,131,79,52" -"2021,""5640 Lussy-sur-Morges"",""Secteur primaire"",6,21,11,10,11,5,6" -"2021,""5640 Lussy-sur-Morges"",""Secteur secondaire"",6,22,8,14,19,5,14" -"2021,""5640 Lussy-sur-Morges"",""Secteur tertiaire"",38,154,107,47,101,69,32" -"2021,""5642 Morges"",""Secteur conomique - total"",1478,11714,6290,5424,9370,4578,4792" -"2021,""5642 Morges"",""Secteur primaire"",4,69,40,29,37,11,27" -"2021,""5642 Morges"",""Secteur secondaire"",113,894,250,644,795,187,608" -"2021,""5642 Morges"",""Secteur tertiaire"",1361,10751,6000,4751,8538,4381,4157" -"2021,""5643 Prverenges"",""Secteur conomique - total"",317,1736,663,1073,1436,469,967" -"2021,""5643 Prverenges"",""Secteur primaire"",X,22,X,X,10,X,X" -"2021,""5643 Prverenges"",""Secteur secondaire"",X,454,X,X,430,X,X" -"2021,""5643 Prverenges"",""Secteur tertiaire"",272,1260,579,681,996,398,598" -"2021,""5645 Romanel-sur-Morges"",""Secteur conomique - total"",110,552,145,407,481,100,381" -"2021,""5645 Romanel-sur-Morges"",""Secteur primaire"",4,12,X,X,10,X,X" -"2021,""5645 Romanel-sur-Morges"",""Secteur secondaire"",41,284,X,X,260,X,X" -"2021,""5645 Romanel-sur-Morges"",""Secteur tertiaire"",65,256,89,167,211,59,152" -"2021,""5646 Saint-Prex"",""Secteur conomique - total"",367,3140,1468,1672,2742,1179,1563" -"2021,""5646 Saint-Prex"",""Secteur primaire"",14,49,15,34,40,11,29" -"2021,""5646 Saint-Prex"",""Secteur secondaire"",51,1389,470,919,1333,428,905" -"2021,""5646 Saint-Prex"",""Secteur tertiaire"",302,1702,983,719,1369,740,630" -"2021,""5648 Saint-Sulpice (VD)"",""Secteur conomique - total"",343,1750,722,1028,1455,529,925" -"2021,""5648 Saint-Sulpice (VD)"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5648 Saint-Sulpice (VD)"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5648 Saint-Sulpice (VD)"",""Secteur tertiaire"",306,1479,654,825,1208,475,733" -"2021,""5649 Tolochenaz"",""Secteur conomique - total"",149,2537,947,1590,2265,806,1459" -"2021,""5649 Tolochenaz"",""Secteur primaire"",4,9,X,X,7,X,X" -"2021,""5649 Tolochenaz"",""Secteur secondaire"",26,834,X,X,793,X,X" -"2021,""5649 Tolochenaz"",""Secteur tertiaire"",119,1694,676,1018,1466,560,906" -"2021,""5650 Vaux-sur-Morges"",""Secteur conomique - total"",18,96,50,46,53,24,29" -"2021,""5650 Vaux-sur-Morges"",""Secteur primaire"",9,X,X,X,X,X,X" -"2021,""5650 Vaux-sur-Morges"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5650 Vaux-sur-Morges"",""Secteur tertiaire"",X,69,X,X,38,X,X" -"2021,""5651 Villars-Sainte-Croix"",""Secteur conomique - total"",170,1433,333,1100,1271,224,1047" -"2021,""5651 Villars-Sainte-Croix"",""Secteur primaire"",X,8,X,X,7,X,X" -"2021,""5651 Villars-Sainte-Croix"",""Secteur secondaire"",X,645,X,X,607,X,X" -"2021,""5651 Villars-Sainte-Croix"",""Secteur tertiaire"",104,780,245,535,657,160,497" -"2021,""5652 Villars-sous-Yens"",""Secteur conomique - total"",45,93,38,55,59,19,39" -"2021,""5652 Villars-sous-Yens"",""Secteur primaire"",X,41,X,X,26,X,X" -"2021,""5652 Villars-sous-Yens"",""Secteur secondaire"",X,6,X,X,6,X,X" -"2021,""5652 Villars-sous-Yens"",""Secteur tertiaire"",29,46,23,23,27,11,16" -"2021,""5653 Vufflens-le-Chteau"",""Secteur conomique - total"",57,200,75,125,120,44,76" -"2021,""5653 Vufflens-le-Chteau"",""Secteur primaire"",5,80,X,X,33,X,X" -"2021,""5653 Vufflens-le-Chteau"",""Secteur secondaire"",4,7,X,X,6,X,X" -"2021,""5653 Vufflens-le-Chteau"",""Secteur tertiaire"",48,113,58,55,81,37,45" -"2021,""5654 Vullierens"",""Secteur conomique - total"",46,145,56,89,112,31,81" -"2021,""5654 Vullierens"",""Secteur primaire"",14,42,X,X,32,X,X" -"2021,""5654 Vullierens"",""Secteur secondaire"",8,41,X,X,37,X,X" -"2021,""5654 Vullierens"",""Secteur tertiaire"",24,62,37,25,43,21,22" -"2021,""5655 Yens"",""Secteur conomique - total"",99,421,159,262,349,114,235" -"2021,""5655 Yens"",""Secteur primaire"",18,81,33,48,65,25,40" -"2021,""5655 Yens"",""Secteur secondaire"",13,114,9,105,107,4,103" -"2021,""5655 Yens"",""Secteur tertiaire"",68,226,117,109,177,85,92" -"2021,""5656 Hautemorges"",""Secteur conomique - total"",320,1150,524,626,840,317,523" -"2021,""5656 Hautemorges"",""Secteur primaire"",72,228,69,159,156,34,121" -"2021,""5656 Hautemorges"",""Secteur secondaire"",56,223,38,185,192,23,169" -"2021,""5656 Hautemorges"",""Secteur tertiaire"",192,699,417,282,492,260,232" -"2021,""5661 Boulens"",""Secteur conomique - total"",29,71,18,53,53,7,46" -"2021,""5661 Boulens"",""Secteur primaire"",5,15,X,X,11,X,X" -"2021,""5661 Boulens"",""Secteur secondaire"",6,28,X,X,27,X,X" -"2021,""5661 Boulens"",""Secteur tertiaire"",18,28,12,16,15,4,11" -"2021,""5663 Bussy-sur-Moudon"",""Secteur conomique - total"",18,37,11,26,23,6,17" -"2021,""5663 Bussy-sur-Moudon"",""Secteur primaire"",6,11,X,X,7,X,X" -"2021,""5663 Bussy-sur-Moudon"",""Secteur secondaire"",5,14,X,X,11,X,X" -"2021,""5663 Bussy-sur-Moudon"",""Secteur tertiaire"",7,12,X,X,5,X,X" -"2021,""5665 Chavannes-sur-Moudon"",""Secteur conomique - total"",22,162,117,45,66,33,33" -"2021,""5665 Chavannes-sur-Moudon"",""Secteur primaire"",15,142,112,30,54,31,23" -"2021,""5665 Chavannes-sur-Moudon"",""Secteur secondaire"",X,7,X,X,5,X,X" -"2021,""5665 Chavannes-sur-Moudon"",""Secteur tertiaire"",X,13,X,X,7,X,X" -"2021,""5669 Curtilles"",""Secteur conomique - total"",34,69,25,44,42,12,29" -"2021,""5669 Curtilles"",""Secteur primaire"",9,23,X,X,16,X,X" -"2021,""5669 Curtilles"",""Secteur secondaire"",7,14,X,X,11,X,X" -"2021,""5669 Curtilles"",""Secteur tertiaire"",18,32,11,21,15,6,9" -"2021,""5671 Dompierre (VD)"",""Secteur conomique - total"",23,50,16,34,34,8,26" -"2021,""5671 Dompierre (VD)"",""Secteur primaire"",11,23,8,15,15,4,11" -"2021,""5671 Dompierre (VD)"",""Secteur secondaire"",5,17,X,X,13,X,X" -"2021,""5671 Dompierre (VD)"",""Secteur tertiaire"",7,10,X,X,6,X,X" -"2021,""5673 Hermenches"",""Secteur conomique - total"",24,70,30,40,44,17,27" -"2021,""5673 Hermenches"",""Secteur primaire"",11,26,X,X,16,X,X" -"2021,""5673 Hermenches"",""Secteur secondaire"",4,6,X,X,6,X,X" -"2021,""5673 Hermenches"",""Secteur tertiaire"",9,38,20,18,22,13,9" -"2021,""5674 Lovatens"",""Secteur conomique - total"",17,34,X,X,19,X,X" -"2021,""5674 Lovatens"",""Secteur primaire"",X,19,X,X,13,X,X" -"2021,""5674 Lovatens"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5674 Lovatens"",""Secteur tertiaire"",8,X,X,X,X,X,X" -"2021,""5675 Lucens"",""Secteur conomique - total"",215,1067,446,621,848,283,565" -"2021,""5675 Lucens"",""Secteur primaire"",37,90,28,62,60,11,49" -"2021,""5675 Lucens"",""Secteur secondaire"",48,432,80,352,405,64,341" -"2021,""5675 Lucens"",""Secteur tertiaire"",130,545,338,207,383,209,174" -"2021,""5678 Moudon"",""Secteur conomique - total"",423,2824,1327,1497,2218,894,1324" -"2021,""5678 Moudon"",""Secteur primaire"",18,54,17,37,39,8,31" -"2021,""5678 Moudon"",""Secteur secondaire"",81,808,178,630,697,107,591" -"2021,""5678 Moudon"",""Secteur tertiaire"",324,1962,1132,830,1482,780,703" -"2021,""5680 Ogens"",""Secteur conomique - total"",32,94,37,57,64,19,44" -"2021,""5680 Ogens"",""Secteur primaire"",7,19,10,9,12,6,6" -"2021,""5680 Ogens"",""Secteur secondaire"",9,45,10,35,38,5,33" -"2021,""5680 Ogens"",""Secteur tertiaire"",16,30,17,13,14,8,6" -"2021,""5683 Prvonloup"",""Secteur conomique - total"",16,34,16,18,20,7,13" -"2021,""5683 Prvonloup"",""Secteur primaire"",4,13,X,X,8,X,X" -"2021,""5683 Prvonloup"",""Secteur secondaire"",4,10,X,X,6,X,X" -"2021,""5683 Prvonloup"",""Secteur tertiaire"",8,11,X,X,5,X,X" -"2021,""5684 Rossenges"",""Secteur conomique - total"",8,12,X,X,X,X,X" -"2021,""5684 Rossenges"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""5684 Rossenges"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5684 Rossenges"",""Secteur tertiaire"",X,5,X,X,X,X,X" -"2021,""5688 Syens"",""Secteur conomique - total"",15,32,11,21,19,4,15" -"2021,""5688 Syens"",""Secteur primaire"",X,7,X,X,4,X,X" -"2021,""5688 Syens"",""Secteur secondaire"",X,9,X,X,8,X,X" -"2021,""5688 Syens"",""Secteur tertiaire"",10,16,X,X,7,X,X" -"2021,""5690 Villars-le-Comte"",""Secteur conomique - total"",14,30,X,X,16,X,X" -"2021,""5690 Villars-le-Comte"",""Secteur primaire"",7,X,X,X,9,X,X" -"2021,""5690 Villars-le-Comte"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5690 Villars-le-Comte"",""Secteur tertiaire"",X,16,X,X,X,X,X" -"2021,""5692 Vucherens"",""Secteur conomique - total"",48,190,89,101,145,57,87" -"2021,""5692 Vucherens"",""Secteur primaire"",9,19,X,X,11,X,X" -"2021,""5692 Vucherens"",""Secteur secondaire"",6,11,X,X,8,X,X" -"2021,""5692 Vucherens"",""Secteur tertiaire"",33,160,79,81,125,53,72" -"2021,""5693 Montanaire"",""Secteur conomique - total"",236,746,300,446,543,167,376" -"2021,""5693 Montanaire"",""Secteur primaire"",61,194,57,137,132,27,105" -"2021,""5693 Montanaire"",""Secteur secondaire"",46,159,31,128,136,16,121" -"2021,""5693 Montanaire"",""Secteur tertiaire"",129,393,212,181,275,124,151" -"2021,""5701 Arnex-sur-Nyon"",""Secteur conomique - total"",20,28,12,16,21,7,14" -"2021,""5701 Arnex-sur-Nyon"",""Secteur primaire"",X,6,0,6,X,X,X" -"2021,""5701 Arnex-sur-Nyon"",""Secteur secondaire"",X,5,X,X,X,X,X" -"2021,""5701 Arnex-sur-Nyon"",""Secteur tertiaire"",12,17,X,X,12,X,X" -"2021,""5702 Arzier-Le Muids"",""Secteur conomique - total"",160,423,194,229,321,126,195" -"2021,""5702 Arzier-Le Muids"",""Secteur primaire"",9,21,X,X,18,X,X" -"2021,""5702 Arzier-Le Muids"",""Secteur secondaire"",21,55,X,X,45,X,X" -"2021,""5702 Arzier-Le Muids"",""Secteur tertiaire"",130,347,179,168,258,117,140" -"2021,""5703 Bassins"",""Secteur conomique - total"",81,232,121,111,164,69,95" -"2021,""5703 Bassins"",""Secteur primaire"",14,55,24,31,35,11,24" -"2021,""5703 Bassins"",""Secteur secondaire"",15,48,9,39,41,5,36" -"2021,""5703 Bassins"",""Secteur tertiaire"",52,129,88,41,88,53,35" -"2021,""5704 Begnins"",""Secteur conomique - total"",140,420,233,187,291,144,147" -"2021,""5704 Begnins"",""Secteur primaire"",18,68,20,48,43,11,33" -"2021,""5704 Begnins"",""Secteur secondaire"",13,23,6,17,20,4,16" -"2021,""5704 Begnins"",""Secteur tertiaire"",109,329,207,122,228,130,98" -"2021,""5705 Bogis-Bossey"",""Secteur conomique - total"",40,94,41,53,73,31,43" -"2021,""5705 Bogis-Bossey"",""Secteur primaire"",X,12,X,X,7,X,X" -"2021,""5705 Bogis-Bossey"",""Secteur secondaire"",X,7,0,7,7,0,7" -"2021,""5705 Bogis-Bossey"",""Secteur tertiaire"",34,75,X,X,59,X,X" -"2021,""5706 Borex"",""Secteur conomique - total"",66,122,43,79,89,24,65" -"2021,""5706 Borex"",""Secteur primaire"",6,24,X,X,16,X,X" -"2021,""5706 Borex"",""Secteur secondaire"",4,6,X,X,5,X,X" -"2021,""5706 Borex"",""Secteur tertiaire"",56,92,33,59,68,19,49" -"2021,""5707 Chavannes-de-Bogis"",""Secteur conomique - total"",161,1015,541,474,817,397,420" -"2021,""5707 Chavannes-de-Bogis"",""Secteur primaire"",9,20,X,X,14,X,X" -"2021,""5707 Chavannes-de-Bogis"",""Secteur secondaire"",15,58,X,X,53,X,X" -"2021,""5707 Chavannes-de-Bogis"",""Secteur tertiaire"",137,937,531,406,750,391,358" -"2021,""5708 Chavannes-des-Bois"",""Secteur conomique - total"",32,68,44,24,51,31,20" -"2021,""5708 Chavannes-des-Bois"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5708 Chavannes-des-Bois"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5708 Chavannes-des-Bois"",""Secteur tertiaire"",28,63,X,X,47,X,X" -"2021,""5709 Chserex"",""Secteur conomique - total"",77,223,91,132,166,58,108" -"2021,""5709 Chserex"",""Secteur primaire"",6,15,X,X,9,X,X" -"2021,""5709 Chserex"",""Secteur secondaire"",6,24,X,X,22,X,X" -"2021,""5709 Chserex"",""Secteur tertiaire"",65,184,78,106,136,51,84" -"2021,""5710 Coinsins"",""Secteur conomique - total"",54,186,63,123,147,39,108" -"2021,""5710 Coinsins"",""Secteur primaire"",6,14,7,7,8,4,4" -"2021,""5710 Coinsins"",""Secteur secondaire"",15,86,16,70,76,10,67" -"2021,""5710 Coinsins"",""Secteur tertiaire"",33,86,40,46,63,25,37" -"2021,""5711 Commugny"",""Secteur conomique - total"",134,285,139,146,207,85,122" -"2021,""5711 Commugny"",""Secteur primaire"",7,20,X,X,14,X,X" -"2021,""5711 Commugny"",""Secteur secondaire"",11,25,X,X,17,X,X" -"2021,""5711 Commugny"",""Secteur tertiaire"",116,240,126,114,176,80,96" -"2021,""5712 Coppet"",""Secteur conomique - total"",228,917,536,381,710,385,325" -"2021,""5712 Coppet"",""Secteur primaire"",4,5,X,X,X,X,X" -"2021,""5712 Coppet"",""Secteur secondaire"",15,45,X,X,X,X,X" -"2021,""5712 Coppet"",""Secteur tertiaire"",209,867,528,339,667,381,286" -"2021,""5713 Crans (VD)"",""Secteur conomique - total"",130,321,160,161,240,106,134" -"2021,""5713 Crans (VD)"",""Secteur primaire"",4,19,X,X,12,X,X" -"2021,""5713 Crans (VD)"",""Secteur secondaire"",12,40,X,X,36,X,X" -"2021,""5713 Crans (VD)"",""Secteur tertiaire"",114,262,152,110,193,101,92" -"2021,""5714 Crassier"",""Secteur conomique - total"",86,394,153,241,322,102,220" -"2021,""5714 Crassier"",""Secteur primaire"",6,28,11,17,17,4,13" -"2021,""5714 Crassier"",""Secteur secondaire"",12,139,14,125,129,9,120" -"2021,""5714 Crassier"",""Secteur tertiaire"",68,227,128,99,175,89,87" -"2021,""5715 Duillier"",""Secteur conomique - total"",83,338,108,230,287,78,210" -"2021,""5715 Duillier"",""Secteur primaire"",6,22,7,15,18,6,12" -"2021,""5715 Duillier"",""Secteur secondaire"",16,119,17,102,108,12,97" -"2021,""5715 Duillier"",""Secteur tertiaire"",61,197,84,113,161,60,101" -"2021,""5716 Eysins"",""Secteur conomique - total"",189,2045,894,1151,1892,795,1098" -"2021,""5716 Eysins"",""Secteur primaire"",7,27,X,X,18,X,X" -"2021,""5716 Eysins"",""Secteur secondaire"",13,478,X,X,466,X,X" -"2021,""5716 Eysins"",""Secteur tertiaire"",169,1540,679,861,1409,591,818" -"2021,""5717 Founex"",""Secteur conomique - total"",184,955,480,475,720,331,388" -"2021,""5717 Founex"",""Secteur primaire"",8,107,40,67,67,20,47" -"2021,""5717 Founex"",""Secteur secondaire"",14,82,10,72,74,6,68" -"2021,""5717 Founex"",""Secteur tertiaire"",162,766,430,336,579,305,274" -"2021,""5718 Genolier"",""Secteur conomique - total"",169,1051,625,426,835,459,376" -"2021,""5718 Genolier"",""Secteur primaire"",7,16,X,X,10,X,X" -"2021,""5718 Genolier"",""Secteur secondaire"",18,102,X,X,96,X,X" -"2021,""5718 Genolier"",""Secteur tertiaire"",144,933,602,331,729,441,289" -"2021,""5719 Gingins"",""Secteur conomique - total"",99,320,117,203,263,80,183" -"2021,""5719 Gingins"",""Secteur primaire"",12,27,8,19,19,5,13" -"2021,""5719 Gingins"",""Secteur secondaire"",23,130,22,108,120,17,104" -"2021,""5719 Gingins"",""Secteur tertiaire"",64,163,87,76,124,58,66" -"2021,""5720 Givrins"",""Secteur conomique - total"",74,185,82,103,133,47,85" -"2021,""5720 Givrins"",""Secteur primaire"",13,41,X,X,31,X,X" -"2021,""5720 Givrins"",""Secteur secondaire"",7,23,X,X,21,X,X" -"2021,""5720 Givrins"",""Secteur tertiaire"",54,121,64,57,81,36,45" -"2021,""5721 Gland"",""Secteur conomique - total"",1044,7718,3429,4289,6252,2447,3805" -"2021,""5721 Gland"",""Secteur primaire"",18,114,30,84,56,12,44" -"2021,""5721 Gland"",""Secteur secondaire"",157,1051,178,873,982,138,843" -"2021,""5721 Gland"",""Secteur tertiaire"",869,6553,3221,3332,5215,2296,2918" -"2021,""5722 Grens"",""Secteur conomique - total"",38,129,44,85,94,24,71" -"2021,""5722 Grens"",""Secteur primaire"",6,35,11,24,20,5,15" -"2021,""5722 Grens"",""Secteur secondaire"",8,58,11,47,52,8,45" -"2021,""5722 Grens"",""Secteur tertiaire"",24,36,22,14,22,11,11" -"2021,""5723 Mies"",""Secteur conomique - total"",156,857,505,352,652,353,299" -"2021,""5723 Mies"",""Secteur primaire"",X,5,X,X,4,X,X" -"2021,""5723 Mies"",""Secteur secondaire"",X,42,X,X,34,X,X" -"2021,""5723 Mies"",""Secteur tertiaire"",139,810,491,319,614,345,269" -"2021,""5724 Nyon"",""Secteur conomique - total"",2340,17045,8090,8955,14054,6118,7936" -"2021,""5724 Nyon"",""Secteur primaire"",17,50,10,40,38,5,33" -"2021,""5724 Nyon"",""Secteur secondaire"",210,2195,653,1542,2052,566,1486" -"2021,""5724 Nyon"",""Secteur tertiaire"",2113,14800,7427,7373,11964,5547,6417" -"2021,""5725 Prangins"",""Secteur conomique - total"",203,2011,847,1164,1780,696,1084" -"2021,""5725 Prangins"",""Secteur primaire"",7,20,X,X,15,X,X" -"2021,""5725 Prangins"",""Secteur secondaire"",11,982,394,588,962,380,582" -"2021,""5725 Prangins"",""Secteur tertiaire"",185,1009,X,X,802,X,X" -"2021,""5726 La Rippe"",""Secteur conomique - total"",75,241,106,135,185,66,119" -"2021,""5726 La Rippe"",""Secteur primaire"",9,31,X,X,22,X,X" -"2021,""5726 La Rippe"",""Secteur secondaire"",10,46,X,X,44,X,X" -"2021,""5726 La Rippe"",""Secteur tertiaire"",56,164,93,71,120,60,60" -"2021,""5727 Saint-Cergue"",""Secteur conomique - total"",156,417,170,247,323,114,209" -"2021,""5727 Saint-Cergue"",""Secteur primaire"",X,14,X,X,10,X,X" -"2021,""5727 Saint-Cergue"",""Secteur secondaire"",X,81,X,X,73,X,X" -"2021,""5727 Saint-Cergue"",""Secteur tertiaire"",126,322,158,164,240,107,132" -"2021,""5728 Signy-Avenex"",""Secteur conomique - total"",85,648,379,269,536,294,242" -"2021,""5728 Signy-Avenex"",""Secteur primaire"",8,42,X,X,30,X,X" -"2021,""5728 Signy-Avenex"",""Secteur secondaire"",4,13,X,X,11,X,X" -"2021,""5728 Signy-Avenex"",""Secteur tertiaire"",73,593,363,230,495,284,211" -"2021,""5729 Tannay"",""Secteur conomique - total"",88,184,88,96,139,58,81" -"2021,""5729 Tannay"",""Secteur primaire"",X,10,X,X,7,X,X" -"2021,""5729 Tannay"",""Secteur secondaire"",X,12,X,X,10,X,X" -"2021,""5729 Tannay"",""Secteur tertiaire"",80,162,82,80,122,55,67" -"2021,""5730 Trlex"",""Secteur conomique - total"",91,226,125,101,171,82,89" -"2021,""5730 Trlex"",""Secteur primaire"",10,31,X,X,24,X,X" -"2021,""5730 Trlex"",""Secteur secondaire"",8,33,X,X,30,X,X" -"2021,""5730 Trlex"",""Secteur tertiaire"",73,162,107,55,118,70,48" -"2021,""5731 Le Vaud"",""Secteur conomique - total"",85,218,91,127,164,55,109" -"2021,""5731 Le Vaud"",""Secteur primaire"",10,24,X,X,12,X,X" -"2021,""5731 Le Vaud"",""Secteur secondaire"",11,46,X,X,43,X,X" -"2021,""5731 Le Vaud"",""Secteur tertiaire"",64,148,83,65,108,52,56" -"2021,""5732 Vich"",""Secteur conomique - total"",109,579,245,334,455,155,300" -"2021,""5732 Vich"",""Secteur primaire"",X,18,X,X,14,X,X" -"2021,""5732 Vich"",""Secteur secondaire"",X,102,X,X,95,X,X" -"2021,""5732 Vich"",""Secteur tertiaire"",82,459,232,227,346,149,198" -"2021,""5741 L'Abergement"",""Secteur conomique - total"",15,26,10,16,16,4,12" -"2021,""5741 L'Abergement"",""Secteur primaire"",5,8,X,X,X,X,X" -"2021,""5741 L'Abergement"",""Secteur secondaire"",5,10,X,X,8,X,X" -"2021,""5741 L'Abergement"",""Secteur tertiaire"",5,8,X,X,X,X,X" -"2021,""5742 Agiez"",""Secteur conomique - total"",23,74,26,48,51,14,37" -"2021,""5742 Agiez"",""Secteur primaire"",X,32,X,X,20,X,X" -"2021,""5742 Agiez"",""Secteur secondaire"",X,20,X,X,18,X,X" -"2021,""5742 Agiez"",""Secteur tertiaire"",13,22,12,10,13,6,7" -"2021,""5743 Arnex-sur-Orbe"",""Secteur conomique - total"",60,193,78,115,141,43,98" -"2021,""5743 Arnex-sur-Orbe"",""Secteur primaire"",19,64,32,32,42,16,26" -"2021,""5743 Arnex-sur-Orbe"",""Secteur secondaire"",15,61,8,53,56,5,51" -"2021,""5743 Arnex-sur-Orbe"",""Secteur tertiaire"",26,68,38,30,44,22,22" -"2021,""5744 Ballaigues"",""Secteur conomique - total"",61,993,407,586,911,351,561" -"2021,""5744 Ballaigues"",""Secteur primaire"",10,32,X,X,23,X,X" -"2021,""5744 Ballaigues"",""Secteur secondaire"",17,819,307,512,787,286,501" -"2021,""5744 Ballaigues"",""Secteur tertiaire"",34,142,X,X,101,X,X" -"2021,""5745 Baulmes"",""Secteur conomique - total"",86,361,113,248,292,65,227" -"2021,""5745 Baulmes"",""Secteur primaire"",14,36,13,23,22,5,17" -"2021,""5745 Baulmes"",""Secteur secondaire"",19,218,30,188,205,21,184" -"2021,""5745 Baulmes"",""Secteur tertiaire"",53,107,70,37,65,39,26" -"2021,""5746 Bavois"",""Secteur conomique - total"",68,259,136,123,173,78,95" -"2021,""5746 Bavois"",""Secteur primaire"",15,52,22,30,33,10,23" -"2021,""5746 Bavois"",""Secteur secondaire"",8,36,11,25,31,7,24" -"2021,""5746 Bavois"",""Secteur tertiaire"",45,171,103,68,109,61,48" -"2021,""5747 Bofflens"",""Secteur conomique - total"",21,51,16,35,30,6,25" -"2021,""5747 Bofflens"",""Secteur primaire"",10,30,X,X,20,X,X" -"2021,""5747 Bofflens"",""Secteur secondaire"",5,9,X,X,X,X,X" -"2021,""5747 Bofflens"",""Secteur tertiaire"",6,12,X,X,X,X,X" -"2021,""5748 Bretonnires"",""Secteur conomique - total"",23,52,20,32,36,10,26" -"2021,""5748 Bretonnires"",""Secteur primaire"",7,22,X,X,16,X,X" -"2021,""5748 Bretonnires"",""Secteur secondaire"",4,9,X,X,8,X,X" -"2021,""5748 Bretonnires"",""Secteur tertiaire"",12,21,12,9,12,6,6" -"2021,""5749 Chavornay"",""Secteur conomique - total"",309,1799,638,1161,1507,433,1073" -"2021,""5749 Chavornay"",""Secteur primaire"",32,142,37,105,108,23,85" -"2021,""5749 Chavornay"",""Secteur secondaire"",47,637,98,539,609,83,526" -"2021,""5749 Chavornay"",""Secteur tertiaire"",230,1020,503,517,790,327,463" -"2021,""5750 Les Cles"",""Secteur conomique - total"",18,26,X,X,15,X,X" -"2021,""5750 Les Cles"",""Secteur primaire"",X,5,0,5,5,0,5" -"2021,""5750 Les Cles"",""Secteur secondaire"",X,8,X,X,5,X,X" -"2021,""5750 Les Cles"",""Secteur tertiaire"",11,13,X,X,6,X,X" -"2021,""5752 Croy"",""Secteur conomique - total"",30,228,122,106,135,62,72" -"2021,""5752 Croy"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""5752 Croy"",""Secteur secondaire"",X,11,X,X,X,X,X" -"2021,""5752 Croy"",""Secteur tertiaire"",21,213,117,96,124,60,64" -"2021,""5754 Juriens"",""Secteur conomique - total"",27,65,20,45,46,9,38" -"2021,""5754 Juriens"",""Secteur primaire"",9,33,X,X,25,X,X" -"2021,""5754 Juriens"",""Secteur secondaire"",7,15,X,X,11,X,X" -"2021,""5754 Juriens"",""Secteur tertiaire"",11,17,X,X,10,X,X" -"2021,""5755 Lignerolle"",""Secteur conomique - total"",36,108,25,83,81,15,66" -"2021,""5755 Lignerolle"",""Secteur primaire"",10,29,X,X,22,X,X" -"2021,""5755 Lignerolle"",""Secteur secondaire"",6,13,X,X,11,X,X" -"2021,""5755 Lignerolle"",""Secteur tertiaire"",20,66,19,47,47,11,36" -"2021,""5756 Montcherand"",""Secteur conomique - total"",29,79,25,54,60,12,47" -"2021,""5756 Montcherand"",""Secteur primaire"",6,19,X,X,13,X,X" -"2021,""5756 Montcherand"",""Secteur secondaire"",5,35,X,X,32,X,X" -"2021,""5756 Montcherand"",""Secteur tertiaire"",18,25,15,10,15,8,7" -"2021,""5757 Orbe"",""Secteur conomique - total"",474,4838,2241,2597,4045,1614,2431" -"2021,""5757 Orbe"",""Secteur primaire"",15,34,8,26,28,4,23" -"2021,""5757 Orbe"",""Secteur secondaire"",76,1601,422,1179,1501,356,1145" -"2021,""5757 Orbe"",""Secteur tertiaire"",383,3203,1811,1392,2516,1254,1262" -"2021,""5758 La Praz"",""Secteur conomique - total"",14,27,8,19,20,4,16" -"2021,""5758 La Praz"",""Secteur primaire"",X,13,X,X,10,X,X" -"2021,""5758 La Praz"",""Secteur secondaire"",X,5,X,X,4,X,X" -"2021,""5758 La Praz"",""Secteur tertiaire"",6,9,X,X,6,X,X" -"2021,""5759 Premier"",""Secteur conomique - total"",21,54,26,28,31,11,20" -"2021,""5759 Premier"",""Secteur primaire"",8,33,14,19,19,6,13" -"2021,""5759 Premier"",""Secteur secondaire"",5,12,X,X,X,X,X" -"2021,""5759 Premier"",""Secteur tertiaire"",8,9,X,X,X,X,X" -"2021,""5760 Rances"",""Secteur conomique - total"",39,96,38,58,69,24,46" -"2021,""5760 Rances"",""Secteur primaire"",11,27,X,X,19,X,X" -"2021,""5760 Rances"",""Secteur secondaire"",6,22,X,X,18,X,X" -"2021,""5760 Rances"",""Secteur tertiaire"",22,47,24,23,33,15,18" -"2021,""5761 Romainmtier-Envy"",""Secteur conomique - total"",57,191,67,124,145,37,108" -"2021,""5761 Romainmtier-Envy"",""Secteur primaire"",6,17,X,X,11,X,X" -"2021,""5761 Romainmtier-Envy"",""Secteur secondaire"",12,75,X,X,68,X,X" -"2021,""5761 Romainmtier-Envy"",""Secteur tertiaire"",39,99,54,45,65,30,35" -"2021,""5762 Sergey"",""Secteur conomique - total"",13,21,X,X,13,X,X" -"2021,""5762 Sergey"",""Secteur primaire"",X,7,X,X,5,X,X" -"2021,""5762 Sergey"",""Secteur secondaire"",X,6,X,X,4,X,X" -"2021,""5762 Sergey"",""Secteur tertiaire"",7,8,X,X,4,X,X" -"2021,""5763 Valeyres-sous-Rances"",""Secteur conomique - total"",57,172,58,114,130,34,96" -"2021,""5763 Valeyres-sous-Rances"",""Secteur primaire"",16,53,14,39,36,5,31" -"2021,""5763 Valeyres-sous-Rances"",""Secteur secondaire"",11,60,10,50,52,5,46" -"2021,""5763 Valeyres-sous-Rances"",""Secteur tertiaire"",30,59,34,25,43,24,19" -"2021,""5764 Vallorbe"",""Secteur conomique - total"",242,1437,600,837,1186,418,768" -"2021,""5764 Vallorbe"",""Secteur primaire"",13,31,8,23,24,4,20" -"2021,""5764 Vallorbe"",""Secteur secondaire"",52,595,155,440,553,130,423" -"2021,""5764 Vallorbe"",""Secteur tertiaire"",177,811,437,374,608,284,324" -"2021,""5765 Vaulion"",""Secteur conomique - total"",50,156,58,98,125,37,88" -"2021,""5765 Vaulion"",""Secteur primaire"",13,55,14,41,46,9,37" -"2021,""5765 Vaulion"",""Secteur secondaire"",16,47,10,37,41,6,35" -"2021,""5765 Vaulion"",""Secteur tertiaire"",21,54,34,20,39,22,17" -"2021,""5766 Vuiteboeuf"",""Secteur conomique - total"",51,250,100,150,198,63,135" -"2021,""5766 Vuiteboeuf"",""Secteur primaire"",7,23,X,X,17,X,X" -"2021,""5766 Vuiteboeuf"",""Secteur secondaire"",11,44,X,X,36,X,X" -"2021,""5766 Vuiteboeuf"",""Secteur tertiaire"",33,183,85,98,144,56,87" -"2021,""5785 Corcelles-le-Jorat"",""Secteur conomique - total"",39,82,32,50,60,19,40" -"2021,""5785 Corcelles-le-Jorat"",""Secteur primaire"",11,32,X,X,25,X,X" -"2021,""5785 Corcelles-le-Jorat"",""Secteur secondaire"",5,15,X,X,11,X,X" -"2021,""5785 Corcelles-le-Jorat"",""Secteur tertiaire"",23,35,18,17,23,12,12" -"2021,""5788 Essertes"",""Secteur conomique - total"",20,43,15,28,27,8,19" -"2021,""5788 Essertes"",""Secteur primaire"",X,7,X,X,4,X,X" -"2021,""5788 Essertes"",""Secteur secondaire"",X,12,X,X,9,X,X" -"2021,""5788 Essertes"",""Secteur tertiaire"",11,24,8,16,13,4,9" -"2021,""5790 Maracon"",""Secteur conomique - total"",46,103,38,65,73,21,52" -"2021,""5790 Maracon"",""Secteur primaire"",8,24,X,X,14,X,X" -"2021,""5790 Maracon"",""Secteur secondaire"",7,31,X,X,29,X,X" -"2021,""5790 Maracon"",""Secteur tertiaire"",31,48,25,23,31,14,17" -"2021,""5792 Montpreveyres"",""Secteur conomique - total"",38,118,51,67,78,24,54" -"2021,""5792 Montpreveyres"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""5792 Montpreveyres"",""Secteur secondaire"",X,20,X,X,X,X,X" -"2021,""5792 Montpreveyres"",""Secteur tertiaire"",29,93,46,47,57,21,36" -"2021,""5798 Ropraz"",""Secteur conomique - total"",52,187,56,131,144,33,111" -"2021,""5798 Ropraz"",""Secteur primaire"",12,31,X,X,19,X,X" -"2021,""5798 Ropraz"",""Secteur secondaire"",10,34,X,X,29,X,X" -"2021,""5798 Ropraz"",""Secteur tertiaire"",30,122,44,78,96,27,70" -"2021,""5799 Servion"",""Secteur conomique - total"",160,686,356,330,499,225,274" -"2021,""5799 Servion"",""Secteur primaire"",8,14,X,X,11,X,X" -"2021,""5799 Servion"",""Secteur secondaire"",23,92,X,X,78,X,X" -"2021,""5799 Servion"",""Secteur tertiaire"",129,580,337,243,410,216,194" -"2021,""5803 Vulliens"",""Secteur conomique - total"",41,88,34,54,54,16,38" -"2021,""5803 Vulliens"",""Secteur primaire"",15,41,X,X,26,X,X" -"2021,""5803 Vulliens"",""Secteur secondaire"",4,11,X,X,6,X,X" -"2021,""5803 Vulliens"",""Secteur tertiaire"",22,36,17,19,23,9,13" -"2021,""5804 Jorat-Menthue"",""Secteur conomique - total"",110,319,118,201,231,69,162" -"2021,""5804 Jorat-Menthue"",""Secteur primaire"",21,50,10,40,37,6,31" -"2021,""5804 Jorat-Menthue"",""Secteur secondaire"",25,90,17,73,71,8,63" -"2021,""5804 Jorat-Menthue"",""Secteur tertiaire"",64,179,91,88,122,55,67" -"2021,""5805 Oron"",""Secteur conomique - total"",433,2435,1267,1168,1860,846,1015" -"2021,""5805 Oron"",""Secteur primaire"",60,176,64,112,132,40,93" -"2021,""5805 Oron"",""Secteur secondaire"",70,602,194,408,554,162,392" -"2021,""5805 Oron"",""Secteur tertiaire"",303,1657,1009,648,1174,644,530" -"2021,""5806 Jorat-Mzires"",""Secteur conomique - total"",231,904,441,463,677,288,388" -"2021,""5806 Jorat-Mzires"",""Secteur primaire"",31,138,39,99,102,23,79" -"2021,""5806 Jorat-Mzires"",""Secteur secondaire"",33,102,34,68,81,22,60" -"2021,""5806 Jorat-Mzires"",""Secteur tertiaire"",167,664,368,296,494,244,250" -"2021,""5812 Champtauroz"",""Secteur conomique - total"",12,32,X,X,17,X,X" -"2021,""5812 Champtauroz"",""Secteur primaire"",7,23,X,X,13,X,X" -"2021,""5812 Champtauroz"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5812 Champtauroz"",""Secteur tertiaire"",5,9,X,X,4,X,X" -"2021,""5813 Chevroux"",""Secteur conomique - total"",33,124,57,67,88,32,56" -"2021,""5813 Chevroux"",""Secteur primaire"",11,23,X,X,15,X,X" -"2021,""5813 Chevroux"",""Secteur secondaire"",4,16,X,X,15,X,X" -"2021,""5813 Chevroux"",""Secteur tertiaire"",18,85,48,37,58,27,31" -"2021,""5816 Corcelles-prs-Payerne"",""Secteur conomique - total"",182,808,292,516,645,180,465" -"2021,""5816 Corcelles-prs-Payerne"",""Secteur primaire"",30,105,30,75,66,12,54" -"2021,""5816 Corcelles-prs-Payerne"",""Secteur secondaire"",43,332,43,289,308,29,279" -"2021,""5816 Corcelles-prs-Payerne"",""Secteur tertiaire"",109,371,219,152,271,139,132" -"2021,""5817 Grandcour"",""Secteur conomique - total"",74,223,83,140,157,46,111" -"2021,""5817 Grandcour"",""Secteur primaire"",21,72,21,51,42,9,33" -"2021,""5817 Grandcour"",""Secteur secondaire"",16,78,17,61,66,10,56" -"2021,""5817 Grandcour"",""Secteur tertiaire"",37,73,45,28,49,27,21" -"2021,""5819 Henniez"",""Secteur conomique - total"",21,273,89,184,250,76,173" -"2021,""5819 Henniez"",""Secteur primaire"",X,10,X,X,5,X,X" -"2021,""5819 Henniez"",""Secteur secondaire"",X,205,52,153,200,49,151" -"2021,""5819 Henniez"",""Secteur tertiaire"",13,58,X,X,45,X,X" -"2021,""5821 Missy"",""Secteur conomique - total"",30,78,24,54,46,11,35" -"2021,""5821 Missy"",""Secteur primaire"",X,43,X,X,24,X,X" -"2021,""5821 Missy"",""Secteur secondaire"",X,8,X,X,7,X,X" -"2021,""5821 Missy"",""Secteur tertiaire"",14,27,13,14,15,7,8" -"2021,""5822 Payerne"",""Secteur conomique - total"",834,7244,3261,3983,5781,2185,3596" -"2021,""5822 Payerne"",""Secteur primaire"",33,88,27,61,64,15,49" -"2021,""5822 Payerne"",""Secteur secondaire"",128,1057,171,886,969,116,853" -"2021,""5822 Payerne"",""Secteur tertiaire"",673,6099,3063,3036,4748,2054,2693" -"2021,""5827 Trey"",""Secteur conomique - total"",27,79,39,40,54,23,30" -"2021,""5827 Trey"",""Secteur primaire"",13,51,27,24,38,18,20" -"2021,""5827 Trey"",""Secteur secondaire"",6,12,X,X,9,X,X" -"2021,""5827 Trey"",""Secteur tertiaire"",8,16,X,X,7,X,X" -"2021,""5828 Treytorrens (Payerne)"",""Secteur conomique - total"",12,23,11,12,14,5,9" -"2021,""5828 Treytorrens (Payerne)"",""Secteur primaire"",7,17,X,X,X,X,X" -"2021,""5828 Treytorrens (Payerne)"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5828 Treytorrens (Payerne)"",""Secteur tertiaire"",5,6,X,X,X,X,X" -"2021,""5830 Villarzel"",""Secteur conomique - total"",41,118,42,76,87,24,63" -"2021,""5830 Villarzel"",""Secteur primaire"",14,46,19,27,36,13,23" -"2021,""5830 Villarzel"",""Secteur secondaire"",9,20,X,X,15,X,X" -"2021,""5830 Villarzel"",""Secteur tertiaire"",18,52,X,X,35,X,X" -"2021,""5831 Valbroye"",""Secteur conomique - total"",272,1293,516,777,1002,328,674" -"2021,""5831 Valbroye"",""Secteur primaire"",84,253,72,181,167,35,132" -"2021,""5831 Valbroye"",""Secteur secondaire"",41,448,91,357,410,64,346" -"2021,""5831 Valbroye"",""Secteur tertiaire"",147,592,353,239,425,229,196" -"2021,""5841 Chteau-d'Oex"",""Secteur conomique - total"",404,1778,889,889,1330,576,753" -"2021,""5841 Chteau-d'Oex"",""Secteur primaire"",75,205,69,136,151,43,108" -"2021,""5841 Chteau-d'Oex"",""Secteur secondaire"",73,305,65,240,262,40,222" -"2021,""5841 Chteau-d'Oex"",""Secteur tertiaire"",256,1268,755,513,916,493,423" -"2021,""5842 Rossinire"",""Secteur conomique - total"",57,142,59,83,112,38,74" -"2021,""5842 Rossinire"",""Secteur primaire"",13,35,8,27,27,4,22" -"2021,""5842 Rossinire"",""Secteur secondaire"",16,51,13,38,45,10,35" -"2021,""5842 Rossinire"",""Secteur tertiaire"",28,56,38,18,40,24,16" -"2021,""5843 Rougemont"",""Secteur conomique - total"",109,413,162,251,334,113,221" -"2021,""5843 Rougemont"",""Secteur primaire"",26,70,19,51,54,14,40" -"2021,""5843 Rougemont"",""Secteur secondaire"",19,71,18,53,61,11,50" -"2021,""5843 Rougemont"",""Secteur tertiaire"",64,272,125,147,220,89,131" -"2021,""5851 Allaman"",""Secteur conomique - total"",73,425,196,229,340,145,194" -"2021,""5851 Allaman"",""Secteur primaire"",16,54,X,X,38,X,X" -"2021,""5851 Allaman"",""Secteur secondaire"",4,32,X,X,29,X,X" -"2021,""5851 Allaman"",""Secteur tertiaire"",53,339,183,156,273,137,136" -"2021,""5852 Bursinel"",""Secteur conomique - total"",36,89,33,56,65,20,45" -"2021,""5852 Bursinel"",""Secteur primaire"",4,17,X,X,14,X,X" -"2021,""5852 Bursinel"",""Secteur secondaire"",4,8,X,X,6,X,X" -"2021,""5852 Bursinel"",""Secteur tertiaire"",28,64,28,36,45,16,28" -"2021,""5853 Bursins"",""Secteur conomique - total"",53,420,135,285,364,96,267" -"2021,""5853 Bursins"",""Secteur primaire"",8,41,12,29,27,6,21" -"2021,""5853 Bursins"",""Secteur secondaire"",9,91,20,71,83,14,70" -"2021,""5853 Bursins"",""Secteur tertiaire"",36,288,103,185,253,77,176" -"2021,""5854 Burtigny"",""Secteur conomique - total"",39,117,37,80,86,19,67" -"2021,""5854 Burtigny"",""Secteur primaire"",9,22,X,X,15,X,X" -"2021,""5854 Burtigny"",""Secteur secondaire"",5,18,X,X,17,X,X" -"2021,""5854 Burtigny"",""Secteur tertiaire"",25,77,28,49,54,14,40" -"2021,""5855 Dully"",""Secteur conomique - total"",47,120,60,60,85,39,46" -"2021,""5855 Dully"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""5855 Dully"",""Secteur secondaire"",X,5,X,X,X,X,X" -"2021,""5855 Dully"",""Secteur tertiaire"",40,108,X,X,76,X,X" -"2021,""5856 Essertines-sur-Rolle"",""Secteur conomique - total"",45,99,46,53,72,29,42" -"2021,""5856 Essertines-sur-Rolle"",""Secteur primaire"",12,34,X,X,25,X,X" -"2021,""5856 Essertines-sur-Rolle"",""Secteur secondaire"",5,11,X,X,10,X,X" -"2021,""5856 Essertines-sur-Rolle"",""Secteur tertiaire"",28,54,32,22,37,20,17" -"2021,""5857 Gilly"",""Secteur conomique - total"",86,335,172,163,229,111,118" -"2021,""5857 Gilly"",""Secteur primaire"",16,99,26,73,53,11,42" -"2021,""5857 Gilly"",""Secteur secondaire"",10,25,12,13,21,9,12" -"2021,""5857 Gilly"",""Secteur tertiaire"",60,211,134,77,155,91,64" -"2021,""5858 Luins"",""Secteur conomique - total"",60,184,59,125,122,34,88" -"2021,""5858 Luins"",""Secteur primaire"",15,93,X,X,49,X,X" -"2021,""5858 Luins"",""Secteur secondaire"",7,19,X,X,16,X,X" -"2021,""5858 Luins"",""Secteur tertiaire"",38,72,30,42,57,21,36" -"2021,""5859 Mont-sur-Rolle"",""Secteur conomique - total"",143,528,240,288,383,160,223" -"2021,""5859 Mont-sur-Rolle"",""Secteur primaire"",24,106,19,87,72,11,61" -"2021,""5859 Mont-sur-Rolle"",""Secteur secondaire"",20,67,14,53,58,10,48" -"2021,""5859 Mont-sur-Rolle"",""Secteur tertiaire"",99,355,207,148,253,140,114" -"2021,""5860 Perroy"",""Secteur conomique - total"",112,471,211,260,357,138,218" -"2021,""5860 Perroy"",""Secteur primaire"",13,89,35,54,46,16,29" -"2021,""5860 Perroy"",""Secteur secondaire"",19,134,35,99,121,26,96" -"2021,""5860 Perroy"",""Secteur tertiaire"",80,248,141,107,190,96,93" -"2021,""5861 Rolle"",""Secteur conomique - total"",594,4487,2099,2388,3702,1519,2183" -"2021,""5861 Rolle"",""Secteur primaire"",6,18,X,X,12,X,X" -"2021,""5861 Rolle"",""Secteur secondaire"",64,519,X,X,474,X,X" -"2021,""5861 Rolle"",""Secteur tertiaire"",524,3950,2001,1949,3216,1446,1770" -"2021,""5862 Tartegnin"",""Secteur conomique - total"",23,71,23,48,52,15,38" -"2021,""5862 Tartegnin"",""Secteur primaire"",9,45,12,33,35,9,26" -"2021,""5862 Tartegnin"",""Secteur secondaire"",4,9,X,X,7,X,X" -"2021,""5862 Tartegnin"",""Secteur tertiaire"",10,17,X,X,10,X,X" -"2021,""5863 Vinzel"",""Secteur conomique - total"",32,117,34,83,96,24,73" -"2021,""5863 Vinzel"",""Secteur primaire"",6,34,X,X,29,X,X" -"2021,""5863 Vinzel"",""Secteur secondaire"",4,13,X,X,7,X,X" -"2021,""5863 Vinzel"",""Secteur tertiaire"",22,70,28,42,60,21,39" -"2021,""5871 L'Abbaye"",""Secteur conomique - total"",139,726,304,422,587,232,355" -"2021,""5871 L'Abbaye"",""Secteur primaire"",9,25,X,X,15,X,X" -"2021,""5871 L'Abbaye"",""Secteur secondaire"",41,407,167,240,375,147,228" -"2021,""5871 L'Abbaye"",""Secteur tertiaire"",89,294,X,X,197,X,X" -"2021,""5872 Le Chenit"",""Secteur conomique - total"",384,6379,2907,3472,5618,2360,3258" -"2021,""5872 Le Chenit"",""Secteur primaire"",24,70,8,62,63,6,57" -"2021,""5872 Le Chenit"",""Secteur secondaire"",97,4131,1747,2384,3856,1536,2320" -"2021,""5872 Le Chenit"",""Secteur tertiaire"",263,2178,1152,1026,1699,818,881" -"2021,""5873 Le Lieu"",""Secteur conomique - total"",87,735,294,441,645,237,408" -"2021,""5873 Le Lieu"",""Secteur primaire"",12,34,9,25,26,4,21" -"2021,""5873 Le Lieu"",""Secteur secondaire"",27,568,223,345,527,196,331" -"2021,""5873 Le Lieu"",""Secteur tertiaire"",48,133,62,71,92,37,55" -"2021,""5881 Blonay"",""Secteur conomique - total"",374,1772,946,826,1298,615,684" -"2021,""5881 Blonay"",""Secteur primaire"",21,83,29,54,45,10,35" -"2021,""5881 Blonay"",""Secteur secondaire"",26,99,22,77,82,12,69" -"2021,""5881 Blonay"",""Secteur tertiaire"",327,1590,895,695,1172,592,580" -"2021,""5882 Chardonne"",""Secteur conomique - total"",229,768,417,351,546,269,277" -"2021,""5882 Chardonne"",""Secteur primaire"",29,118,43,75,70,20,50" -"2021,""5882 Chardonne"",""Secteur secondaire"",17,28,9,19,21,5,16" -"2021,""5882 Chardonne"",""Secteur tertiaire"",183,622,365,257,454,243,211" -"2021,""5883 Corseaux"",""Secteur conomique - total"",148,451,223,228,326,143,183" -"2021,""5883 Corseaux"",""Secteur primaire"",X,32,16,16,12,4,7" -"2021,""5883 Corseaux"",""Secteur secondaire"",X,33,13,20,29,10,19" -"2021,""5883 Corseaux"",""Secteur tertiaire"",134,386,194,192,285,129,156" -"2021,""5884 Corsier-sur-Vevey"",""Secteur conomique - total"",217,1777,773,1004,1504,593,911" -"2021,""5884 Corsier-sur-Vevey"",""Secteur primaire"",18,37,12,25,25,7,19" -"2021,""5884 Corsier-sur-Vevey"",""Secteur secondaire"",37,800,256,544,763,234,530" -"2021,""5884 Corsier-sur-Vevey"",""Secteur tertiaire"",162,940,505,435,715,352,363" -"2021,""5885 Jongny"",""Secteur conomique - total"",79,246,128,118,178,81,97" -"2021,""5885 Jongny"",""Secteur primaire"",6,13,X,X,7,X,X" -"2021,""5885 Jongny"",""Secteur secondaire"",13,27,X,X,21,X,X" -"2021,""5885 Jongny"",""Secteur tertiaire"",60,206,117,89,150,77,73" -"2021,""5886 Montreux"",""Secteur conomique - total"",2070,12433,6520,5913,9718,4604,5114" -"2021,""5886 Montreux"",""Secteur primaire"",29,87,20,67,62,10,52" -"2021,""5886 Montreux"",""Secteur secondaire"",231,1053,191,862,952,138,814" -"2021,""5886 Montreux"",""Secteur tertiaire"",1810,11293,6309,4984,8703,4456,4248" -"2021,""5888 Saint-Lgier-La Chisaz"",""Secteur conomique - total"",353,2724,1167,1557,2231,811,1420" -"2021,""5888 Saint-Lgier-La Chisaz"",""Secteur primaire"",14,39,10,29,25,4,21" -"2021,""5888 Saint-Lgier-La Chisaz"",""Secteur secondaire"",50,582,75,507,548,53,495" -"2021,""5888 Saint-Lgier-La Chisaz"",""Secteur tertiaire"",289,2103,1082,1021,1658,754,904" -"2021,""5889 La Tour-de-Peilz"",""Secteur conomique - total"",621,3642,2050,1592,2954,1512,1442" -"2021,""5889 La Tour-de-Peilz"",""Secteur primaire"",6,24,X,X,20,X,X" -"2021,""5889 La Tour-de-Peilz"",""Secteur secondaire"",59,183,X,X,164,X,X" -"2021,""5889 La Tour-de-Peilz"",""Secteur tertiaire"",556,3435,2026,1409,2770,1498,1272" -"2021,""5890 Vevey"",""Secteur conomique - total"",2004,14359,7714,6645,11526,5676,5850" -"2021,""5890 Vevey"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""5890 Vevey"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5890 Vevey"",""Secteur tertiaire"",1850,13597,7547,6050,10844,5552,5292" -"2021,""5891 Veytaux"",""Secteur conomique - total"",67,213,89,124,142,47,95" -"2021,""5891 Veytaux"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""5891 Veytaux"",""Secteur secondaire"",X,45,X,X,X,X,X" -"2021,""5891 Veytaux"",""Secteur tertiaire"",56,162,X,X,95,X,X" -"2021,""5902 Belmont-sur-Yverdon"",""Secteur conomique - total"",40,67,23,44,45,11,35" -"2021,""5902 Belmont-sur-Yverdon"",""Secteur primaire"",11,27,X,X,22,X,X" -"2021,""5902 Belmont-sur-Yverdon"",""Secteur secondaire"",11,14,X,X,11,X,X" -"2021,""5902 Belmont-sur-Yverdon"",""Secteur tertiaire"",18,26,X,X,12,X,X" -"2021,""5903 Bioley-Magnoux"",""Secteur conomique - total"",21,48,X,X,30,X,X" -"2021,""5903 Bioley-Magnoux"",""Secteur primaire"",6,22,X,X,14,X,X" -"2021,""5903 Bioley-Magnoux"",""Secteur secondaire"",6,7,X,X,6,X,X" -"2021,""5903 Bioley-Magnoux"",""Secteur tertiaire"",9,19,X,X,10,X,X" -"2021,""5904 Chamblon"",""Secteur conomique - total"",34,231,154,77,178,112,66" -"2021,""5904 Chamblon"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""5904 Chamblon"",""Secteur secondaire"",8,13,X,X,11,X,X" -"2021,""5904 Chamblon"",""Secteur tertiaire"",26,218,X,X,167,X,X" -"2021,""5905 Champvent"",""Secteur conomique - total"",56,323,143,180,261,104,157" -"2021,""5905 Champvent"",""Secteur primaire"",18,56,23,33,33,8,25" -"2021,""5905 Champvent"",""Secteur secondaire"",11,200,86,114,185,75,110" -"2021,""5905 Champvent"",""Secteur tertiaire"",27,67,34,33,43,21,22" -"2021,""5907 Chavannes-le-Chne"",""Secteur conomique - total"",30,52,24,28,32,12,21" -"2021,""5907 Chavannes-le-Chne"",""Secteur primaire"",7,11,X,X,8,X,X" -"2021,""5907 Chavannes-le-Chne"",""Secteur secondaire"",5,12,X,X,9,X,X" -"2021,""5907 Chavannes-le-Chne"",""Secteur tertiaire"",18,29,18,11,15,9,6" -"2021,""5908 Chne-Pquier"",""Secteur conomique - total"",16,54,15,39,38,8,30" -"2021,""5908 Chne-Pquier"",""Secteur primaire"",X,10,X,X,7,X,X" -"2021,""5908 Chne-Pquier"",""Secteur secondaire"",X,27,X,X,25,X,X" -"2021,""5908 Chne-Pquier"",""Secteur tertiaire"",7,17,X,X,6,X,X" -"2021,""5909 Cheseaux-Noraz"",""Secteur conomique - total"",34,280,144,136,232,112,120" -"2021,""5909 Cheseaux-Noraz"",""Secteur primaire"",6,26,8,18,20,4,15" -"2021,""5909 Cheseaux-Noraz"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""5909 Cheseaux-Noraz"",""Secteur tertiaire"",28,254,136,118,212,107,105" -"2021,""5910 Cronay"",""Secteur conomique - total"",29,85,35,50,52,17,35" -"2021,""5910 Cronay"",""Secteur primaire"",X,53,20,33,34,10,24" -"2021,""5910 Cronay"",""Secteur secondaire"",X,7,X,X,5,X,X" -"2021,""5910 Cronay"",""Secteur tertiaire"",13,25,X,X,13,X,X" -"2021,""5911 Cuarny"",""Secteur conomique - total"",24,52,16,36,35,8,27" -"2021,""5911 Cuarny"",""Secteur primaire"",9,24,X,X,15,X,X" -"2021,""5911 Cuarny"",""Secteur secondaire"",5,13,X,X,11,X,X" -"2021,""5911 Cuarny"",""Secteur tertiaire"",10,15,8,7,9,5,5" -"2021,""5912 Dmoret"",""Secteur conomique - total"",24,85,32,53,55,15,40" -"2021,""5912 Dmoret"",""Secteur primaire"",10,32,X,X,20,X,X" -"2021,""5912 Dmoret"",""Secteur secondaire"",4,19,X,X,16,X,X" -"2021,""5912 Dmoret"",""Secteur tertiaire"",10,34,17,17,18,8,10" -"2021,""5913 Donneloye"",""Secteur conomique - total"",70,151,55,96,95,27,68" -"2021,""5913 Donneloye"",""Secteur primaire"",20,60,19,41,32,7,25" -"2021,""5913 Donneloye"",""Secteur secondaire"",17,49,10,39,39,6,33" -"2021,""5913 Donneloye"",""Secteur tertiaire"",33,42,26,16,25,14,11" -"2021,""5914 Ependes (VD)"",""Secteur conomique - total"",39,115,44,71,85,23,62" -"2021,""5914 Ependes (VD)"",""Secteur primaire"",9,20,X,X,16,X,X" -"2021,""5914 Ependes (VD)"",""Secteur secondaire"",10,26,X,X,23,X,X" -"2021,""5914 Ependes (VD)"",""Secteur tertiaire"",20,69,37,32,47,19,28" -"2021,""5919 Mathod"",""Secteur conomique - total"",41,163,47,116,119,24,95" -"2021,""5919 Mathod"",""Secteur primaire"",11,45,X,X,36,X,X" -"2021,""5919 Mathod"",""Secteur secondaire"",5,23,X,X,17,X,X" -"2021,""5919 Mathod"",""Secteur tertiaire"",25,95,32,63,66,17,49" -"2021,""5921 Molondin"",""Secteur conomique - total"",29,111,39,72,85,24,61" -"2021,""5921 Molondin"",""Secteur primaire"",10,21,X,X,13,X,X" -"2021,""5921 Molondin"",""Secteur secondaire"",8,24,X,X,19,X,X" -"2021,""5921 Molondin"",""Secteur tertiaire"",11,66,28,38,54,20,34" -"2021,""5922 Montagny-prs-Yverdon"",""Secteur conomique - total"",159,2068,1149,919,1630,796,834" -"2021,""5922 Montagny-prs-Yverdon"",""Secteur primaire"",5,20,X,X,15,X,X" -"2021,""5922 Montagny-prs-Yverdon"",""Secteur secondaire"",20,148,X,X,133,X,X" -"2021,""5922 Montagny-prs-Yverdon"",""Secteur tertiaire"",134,1900,1113,787,1483,772,710" -"2021,""5923 Oppens"",""Secteur conomique - total"",23,225,80,145,187,58,128" -"2021,""5923 Oppens"",""Secteur primaire"",11,88,36,52,76,30,46" -"2021,""5923 Oppens"",""Secteur secondaire"",4,34,6,28,31,4,27" -"2021,""5923 Oppens"",""Secteur tertiaire"",8,103,38,65,79,24,55" -"2021,""5924 Orges"",""Secteur conomique - total"",30,122,36,86,102,25,76" -"2021,""5924 Orges"",""Secteur primaire"",6,21,X,X,14,X,X" -"2021,""5924 Orges"",""Secteur secondaire"",5,40,X,X,38,X,X" -"2021,""5924 Orges"",""Secteur tertiaire"",19,61,29,32,50,21,29" -"2021,""5925 Orzens"",""Secteur conomique - total"",20,58,15,43,38,6,32" -"2021,""5925 Orzens"",""Secteur primaire"",X,16,X,X,10,X,X" -"2021,""5925 Orzens"",""Secteur secondaire"",X,17,X,X,15,X,X" -"2021,""5925 Orzens"",""Secteur tertiaire"",9,25,X,X,13,X,X" -"2021,""5926 Pomy"",""Secteur conomique - total"",59,237,107,130,181,73,109" -"2021,""5926 Pomy"",""Secteur primaire"",13,39,11,28,25,5,20" -"2021,""5926 Pomy"",""Secteur secondaire"",18,55,12,43,46,7,40" -"2021,""5926 Pomy"",""Secteur tertiaire"",28,143,84,59,110,61,49" -"2021,""5928 Rovray"",""Secteur conomique - total"",15,43,14,29,33,6,26" -"2021,""5928 Rovray"",""Secteur primaire"",10,30,9,21,23,5,19" -"2021,""5928 Rovray"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5928 Rovray"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""5929 Suchy"",""Secteur conomique - total"",43,137,48,89,94,22,71" -"2021,""5929 Suchy"",""Secteur primaire"",13,37,X,X,22,X,X" -"2021,""5929 Suchy"",""Secteur secondaire"",4,32,X,X,30,X,X" -"2021,""5929 Suchy"",""Secteur tertiaire"",26,68,33,35,42,17,25" -"2021,""5930 Suscvaz"",""Secteur conomique - total"",16,32,10,22,24,5,18" -"2021,""5930 Suscvaz"",""Secteur primaire"",8,18,X,X,14,X,X" -"2021,""5930 Suscvaz"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5930 Suscvaz"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""5931 Treycovagnes"",""Secteur conomique - total"",27,81,25,56,64,16,49" -"2021,""5931 Treycovagnes"",""Secteur primaire"",X,6,X,X,4,X,X" -"2021,""5931 Treycovagnes"",""Secteur secondaire"",X,34,X,X,31,X,X" -"2021,""5931 Treycovagnes"",""Secteur tertiaire"",21,41,X,X,29,X,X" -"2021,""5932 Ursins"",""Secteur conomique - total"",11,25,X,X,17,X,X" -"2021,""5932 Ursins"",""Secteur primaire"",6,14,X,X,9,X,X" -"2021,""5932 Ursins"",""Secteur secondaire"",X,5,X,X,X,X,X" -"2021,""5932 Ursins"",""Secteur tertiaire"",X,6,X,X,X,X,X" -"2021,""5933 Valeyres-sous-Montagny"",""Secteur conomique - total"",36,153,53,100,119,30,89" -"2021,""5933 Valeyres-sous-Montagny"",""Secteur primaire"",5,17,X,X,11,X,X" -"2021,""5933 Valeyres-sous-Montagny"",""Secteur secondaire"",8,40,X,X,36,X,X" -"2021,""5933 Valeyres-sous-Montagny"",""Secteur tertiaire"",23,96,39,57,73,23,50" -"2021,""5934 Valeyres-sous-Ursins"",""Secteur conomique - total"",21,40,12,28,25,4,21" -"2021,""5934 Valeyres-sous-Ursins"",""Secteur primaire"",X,15,X,X,9,X,X" -"2021,""5934 Valeyres-sous-Ursins"",""Secteur secondaire"",X,12,X,X,11,X,X" -"2021,""5934 Valeyres-sous-Ursins"",""Secteur tertiaire"",11,13,X,X,6,X,X" -"2021,""5935 Villars-Epeney"",""Secteur conomique - total"",6,13,X,X,8,X,X" -"2021,""5935 Villars-Epeney"",""Secteur primaire"",X,X,X,X,5,X,X" -"2021,""5935 Villars-Epeney"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""5935 Villars-Epeney"",""Secteur tertiaire"",X,6,X,X,X,X,X" -"2021,""5937 Vugelles-La Mothe"",""Secteur conomique - total"",14,26,10,16,15,5,10" -"2021,""5937 Vugelles-La Mothe"",""Secteur primaire"",X,9,X,X,6,X,X" -"2021,""5937 Vugelles-La Mothe"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""5937 Vugelles-La Mothe"",""Secteur tertiaire"",8,13,X,X,X,X,X" -"2021,""5938 Yverdon-les-Bains"",""Secteur conomique - total"",2259,20879,9679,11200,16726,6700,10026" -"2021,""5938 Yverdon-les-Bains"",""Secteur primaire"",14,265,48,217,260,45,215" -"2021,""5938 Yverdon-les-Bains"",""Secteur secondaire"",320,2814,615,2199,2599,480,2119" -"2021,""5938 Yverdon-les-Bains"",""Secteur tertiaire"",1925,17800,9016,8784,13868,6176,7692" -"2021,""5939 Yvonand"",""Secteur conomique - total"",203,1097,638,459,840,434,406" -"2021,""5939 Yvonand"",""Secteur primaire"",15,38,16,22,26,9,17" -"2021,""5939 Yvonand"",""Secteur secondaire"",41,265,60,205,246,50,196" -"2021,""5939 Yvonand"",""Secteur tertiaire"",147,794,562,232,567,374,193" -"2021,""6002 Brig-Glis"",""Secteur conomique - total"",1171,10261,4930,5331,7907,3221,4685" -"2021,""6002 Brig-Glis"",""Secteur primaire"",34,78,30,48,36,12,24" -"2021,""6002 Brig-Glis"",""Secteur secondaire"",170,1518,239,1279,1387,160,1226" -"2021,""6002 Brig-Glis"",""Secteur tertiaire"",967,8665,4661,4004,6483,3049,3434" -"2021,""6004 Eggerberg"",""Secteur conomique - total"",25,66,22,44,33,7,26" -"2021,""6004 Eggerberg"",""Secteur primaire"",11,21,X,X,8,X,X" -"2021,""6004 Eggerberg"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""6004 Eggerberg"",""Secteur tertiaire"",14,45,X,X,25,X,X" -"2021,""6007 Naters"",""Secteur conomique - total"",579,2447,1291,1156,1703,774,928" -"2021,""6007 Naters"",""Secteur primaire"",93,233,78,155,108,31,78" -"2021,""6007 Naters"",""Secteur secondaire"",96,455,133,322,375,81,294" -"2021,""6007 Naters"",""Secteur tertiaire"",390,1759,1080,679,1220,663,557" -"2021,""6008 Ried-Brig"",""Secteur conomique - total"",109,399,222,177,265,130,135" -"2021,""6008 Ried-Brig"",""Secteur primaire"",23,72,23,49,39,11,28" -"2021,""6008 Ried-Brig"",""Secteur secondaire"",13,48,13,35,42,9,33" -"2021,""6008 Ried-Brig"",""Secteur tertiaire"",73,279,186,93,184,110,74" -"2021,""6009 Simplon"",""Secteur conomique - total"",47,193,82,111,130,42,88" -"2021,""6009 Simplon"",""Secteur primaire"",15,42,17,25,24,7,18" -"2021,""6009 Simplon"",""Secteur secondaire"",6,61,14,47,55,10,45" -"2021,""6009 Simplon"",""Secteur tertiaire"",26,90,51,39,51,26,26" -"2021,""6010 Termen"",""Secteur conomique - total"",65,172,82,90,105,44,61" -"2021,""6010 Termen"",""Secteur primaire"",18,41,15,26,17,6,11" -"2021,""6010 Termen"",""Secteur secondaire"",8,41,14,27,33,8,24" -"2021,""6010 Termen"",""Secteur tertiaire"",39,90,53,37,55,30,25" -"2021,""6011 Zwischbergen"",""Secteur conomique - total"",10,33,9,24,25,5,20" -"2021,""6011 Zwischbergen"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6011 Zwischbergen"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6011 Zwischbergen"",""Secteur tertiaire"",X,21,X,X,14,X,X" -"2021,""6021 Ardon"",""Secteur conomique - total"",206,936,438,498,713,282,431" -"2021,""6021 Ardon"",""Secteur primaire"",20,97,50,47,56,27,30" -"2021,""6021 Ardon"",""Secteur secondaire"",41,203,28,175,182,19,163" -"2021,""6021 Ardon"",""Secteur tertiaire"",145,636,360,276,475,236,239" -"2021,""6022 Chamoson"",""Secteur conomique - total"",320,1224,571,653,850,316,534" -"2021,""6022 Chamoson"",""Secteur primaire"",61,301,155,146,170,69,101" -"2021,""6022 Chamoson"",""Secteur secondaire"",56,304,41,263,266,22,244" -"2021,""6022 Chamoson"",""Secteur tertiaire"",203,619,375,244,414,225,189" -"2021,""6023 Conthey"",""Secteur conomique - total"",741,4043,1839,2204,3147,1210,1937" -"2021,""6023 Conthey"",""Secteur primaire"",89,368,138,230,211,64,147" -"2021,""6023 Conthey"",""Secteur secondaire"",136,672,135,537,608,96,513" -"2021,""6023 Conthey"",""Secteur tertiaire"",516,3003,1566,1437,2328,1050,1278" -"2021,""6024 Nendaz"",""Secteur conomique - total"",585,2559,1183,1376,1895,730,1165" -"2021,""6024 Nendaz"",""Secteur primaire"",99,248,82,166,137,33,104" -"2021,""6024 Nendaz"",""Secteur secondaire"",98,509,106,403,457,74,383" -"2021,""6024 Nendaz"",""Secteur tertiaire"",388,1802,995,807,1301,623,677" -"2021,""6025 Vtroz"",""Secteur conomique - total"",403,2159,894,1265,1725,601,1124" -"2021,""6025 Vtroz"",""Secteur primaire"",58,368,130,238,268,82,186" -"2021,""6025 Vtroz"",""Secteur secondaire"",65,527,71,456,485,47,438" -"2021,""6025 Vtroz"",""Secteur tertiaire"",280,1264,693,571,973,473,500" -"2021,""6032 Bourg-Saint-Pierre"",""Secteur conomique - total"",26,110,36,74,92,25,67" -"2021,""6032 Bourg-Saint-Pierre"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6032 Bourg-Saint-Pierre"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6032 Bourg-Saint-Pierre"",""Secteur tertiaire"",23,106,X,X,90,X,X" -"2021,""6033 Liddes"",""Secteur conomique - total"",71,171,62,109,118,34,84" -"2021,""6033 Liddes"",""Secteur primaire"",21,51,13,38,30,6,24" -"2021,""6033 Liddes"",""Secteur secondaire"",10,35,8,27,30,4,26" -"2021,""6033 Liddes"",""Secteur tertiaire"",40,85,41,44,59,24,34" -"2021,""6034 Orsires"",""Secteur conomique - total"",306,1292,495,797,989,297,692" -"2021,""6034 Orsires"",""Secteur primaire"",43,127,36,91,72,14,58" -"2021,""6034 Orsires"",""Secteur secondaire"",58,429,65,364,384,37,347" -"2021,""6034 Orsires"",""Secteur tertiaire"",205,736,394,342,533,246,287" -"2021,""6035 Sembrancher"",""Secteur conomique - total"",131,733,358,375,566,235,331" -"2021,""6035 Sembrancher"",""Secteur primaire"",13,32,12,20,19,6,13" -"2021,""6035 Sembrancher"",""Secteur secondaire"",29,284,61,223,255,42,212" -"2021,""6035 Sembrancher"",""Secteur tertiaire"",89,417,285,132,293,187,105" -"2021,""6037 Val de Bagnes"",""Secteur conomique - total"",1291,6657,2819,3838,5212,1904,3308" -"2021,""6037 Val de Bagnes"",""Secteur primaire"",99,286,102,184,146,37,110" -"2021,""6037 Val de Bagnes"",""Secteur secondaire"",194,1131,182,949,1005,117,888" -"2021,""6037 Val de Bagnes"",""Secteur tertiaire"",998,5240,2535,2705,4061,1751,2310" -"2021,""6052 Bellwald"",""Secteur conomique - total"",49,215,81,134,164,50,113" -"2021,""6052 Bellwald"",""Secteur primaire"",4,8,X,X,6,X,X" -"2021,""6052 Bellwald"",""Secteur secondaire"",6,20,X,X,19,X,X" -"2021,""6052 Bellwald"",""Secteur tertiaire"",39,187,77,110,139,47,92" -"2021,""6054 Binn"",""Secteur conomique - total"",28,72,36,36,44,19,26" -"2021,""6054 Binn"",""Secteur primaire"",5,10,X,X,7,X,X" -"2021,""6054 Binn"",""Secteur secondaire"",4,8,X,X,6,X,X" -"2021,""6054 Binn"",""Secteur tertiaire"",19,54,30,24,32,16,16" -"2021,""6056 Ernen"",""Secteur conomique - total"",54,206,81,125,157,51,106" -"2021,""6056 Ernen"",""Secteur primaire"",10,30,X,X,19,X,X" -"2021,""6056 Ernen"",""Secteur secondaire"",10,55,X,X,44,X,X" -"2021,""6056 Ernen"",""Secteur tertiaire"",34,121,62,59,95,43,52" -"2021,""6057 Fiesch"",""Secteur conomique - total"",114,655,364,291,498,242,256" -"2021,""6057 Fiesch"",""Secteur primaire"",5,30,10,20,20,5,16" -"2021,""6057 Fiesch"",""Secteur secondaire"",18,82,26,56,68,14,54" -"2021,""6057 Fiesch"",""Secteur tertiaire"",91,543,328,215,410,224,186" -"2021,""6058 Fieschertal"",""Secteur conomique - total"",35,209,62,147,184,51,133" -"2021,""6058 Fieschertal"",""Secteur primaire"",9,27,X,X,13,X,X" -"2021,""6058 Fieschertal"",""Secteur secondaire"",5,42,X,X,39,X,X" -"2021,""6058 Fieschertal"",""Secteur tertiaire"",21,140,46,94,132,43,89" -"2021,""6061 Lax"",""Secteur conomique - total"",28,99,43,56,76,25,50" -"2021,""6061 Lax"",""Secteur primaire"",7,17,10,7,11,5,6" -"2021,""6061 Lax"",""Secteur secondaire"",4,41,8,33,38,6,31" -"2021,""6061 Lax"",""Secteur tertiaire"",17,41,25,16,27,14,13" -"2021,""6076 Obergoms"",""Secteur conomique - total"",88,422,181,241,335,121,214" -"2021,""6076 Obergoms"",""Secteur primaire"",18,55,20,35,34,9,25" -"2021,""6076 Obergoms"",""Secteur secondaire"",10,67,13,54,63,11,52" -"2021,""6076 Obergoms"",""Secteur tertiaire"",60,300,148,152,239,102,137" -"2021,""6077 Goms"",""Secteur conomique - total"",141,676,284,392,536,196,340" -"2021,""6077 Goms"",""Secteur primaire"",30,107,32,75,73,18,55" -"2021,""6077 Goms"",""Secteur secondaire"",23,175,27,148,160,20,141" -"2021,""6077 Goms"",""Secteur tertiaire"",88,394,225,169,303,158,145" -"2021,""6082 Ayent"",""Secteur conomique - total"",312,1162,486,676,870,296,574" -"2021,""6082 Ayent"",""Secteur primaire"",48,119,45,74,62,18,44" -"2021,""6082 Ayent"",""Secteur secondaire"",47,239,30,209,215,14,201" -"2021,""6082 Ayent"",""Secteur tertiaire"",217,804,411,393,593,263,330" -"2021,""6083 Evolne"",""Secteur conomique - total"",232,653,287,366,460,175,285" -"2021,""6083 Evolne"",""Secteur primaire"",53,148,53,95,84,27,58" -"2021,""6083 Evolne"",""Secteur secondaire"",28,86,16,70,75,9,65" -"2021,""6083 Evolne"",""Secteur tertiaire"",151,419,218,201,301,139,162" -"2021,""6084 Hrmence"",""Secteur conomique - total"",114,397,195,202,269,113,156" -"2021,""6084 Hrmence"",""Secteur primaire"",18,67,21,46,31,8,23" -"2021,""6084 Hrmence"",""Secteur secondaire"",19,74,19,55,64,14,49" -"2021,""6084 Hrmence"",""Secteur tertiaire"",77,256,155,101,175,91,84" -"2021,""6087 Saint-Martin (VS)"",""Secteur conomique - total"",56,221,82,139,170,51,120" -"2021,""6087 Saint-Martin (VS)"",""Secteur primaire"",7,20,X,X,12,X,X" -"2021,""6087 Saint-Martin (VS)"",""Secteur secondaire"",15,76,X,X,69,X,X" -"2021,""6087 Saint-Martin (VS)"",""Secteur tertiaire"",34,125,70,55,89,42,48" -"2021,""6089 Vex"",""Secteur conomique - total"",146,602,329,273,430,203,227" -"2021,""6089 Vex"",""Secteur primaire"",18,42,X,X,21,X,X" -"2021,""6089 Vex"",""Secteur secondaire"",14,31,X,X,26,X,X" -"2021,""6089 Vex"",""Secteur tertiaire"",114,529,306,223,383,195,189" -"2021,""6090 Mont-Noble"",""Secteur conomique - total"",93,238,109,129,163,66,97" -"2021,""6090 Mont-Noble"",""Secteur primaire"",7,15,X,X,13,X,X" -"2021,""6090 Mont-Noble"",""Secteur secondaire"",12,35,X,X,31,X,X" -"2021,""6090 Mont-Noble"",""Secteur tertiaire"",74,188,99,89,119,58,61" -"2021,""6101 Agarn"",""Secteur conomique - total"",49,200,56,144,158,32,126" -"2021,""6101 Agarn"",""Secteur primaire"",9,20,X,X,11,X,X" -"2021,""6101 Agarn"",""Secteur secondaire"",10,69,X,X,63,X,X" -"2021,""6101 Agarn"",""Secteur tertiaire"",30,111,40,71,84,24,60" -"2021,""6102 Albinen"",""Secteur conomique - total"",26,88,32,56,64,19,45" -"2021,""6102 Albinen"",""Secteur primaire"",X,10,X,X,5,X,X" -"2021,""6102 Albinen"",""Secteur secondaire"",X,14,X,X,13,X,X" -"2021,""6102 Albinen"",""Secteur tertiaire"",19,64,27,37,46,16,30" -"2021,""6104 Ergisch"",""Secteur conomique - total"",22,41,18,23,21,8,14" -"2021,""6104 Ergisch"",""Secteur primaire"",10,22,X,X,X,X,X" -"2021,""6104 Ergisch"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6104 Ergisch"",""Secteur tertiaire"",X,X,X,X,10,X,X" -"2021,""6109 Inden"",""Secteur conomique - total"",11,28,10,18,15,4,11" -"2021,""6109 Inden"",""Secteur primaire"",X,10,X,X,X,X,X" -"2021,""6109 Inden"",""Secteur secondaire"",X,5,X,X,X,X,X" -"2021,""6109 Inden"",""Secteur tertiaire"",X,13,X,X,6,X,X" -"2021,""6110 Leuk"",""Secteur conomique - total"",354,1739,892,847,1245,532,713" -"2021,""6110 Leuk"",""Secteur primaire"",50,187,69,118,108,30,77" -"2021,""6110 Leuk"",""Secteur secondaire"",60,222,38,184,199,24,176" -"2021,""6110 Leuk"",""Secteur tertiaire"",244,1330,785,545,938,478,460" -"2021,""6111 Leukerbad"",""Secteur conomique - total"",151,942,469,473,745,339,406" -"2021,""6111 Leukerbad"",""Secteur primaire"",8,21,X,X,10,X,X" -"2021,""6111 Leukerbad"",""Secteur secondaire"",17,59,X,X,48,X,X" -"2021,""6111 Leukerbad"",""Secteur tertiaire"",126,862,452,410,687,330,357" -"2021,""6112 Oberems"",""Secteur conomique - total"",14,30,16,14,20,10,10" -"2021,""6112 Oberems"",""Secteur primaire"",5,13,6,7,8,4,4" -"2021,""6112 Oberems"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""6112 Oberems"",""Secteur tertiaire"",9,17,10,7,12,6,6" -"2021,""6113 Salgesch"",""Secteur conomique - total"",205,1061,369,692,814,216,598" -"2021,""6113 Salgesch"",""Secteur primaire"",83,310,111,199,209,61,148" -"2021,""6113 Salgesch"",""Secteur secondaire"",34,398,98,300,346,61,285" -"2021,""6113 Salgesch"",""Secteur tertiaire"",88,353,160,193,260,94,165" -"2021,""6116 Varen"",""Secteur conomique - total"",61,171,74,97,107,38,69" -"2021,""6116 Varen"",""Secteur primaire"",23,81,X,X,47,X,X" -"2021,""6116 Varen"",""Secteur secondaire"",8,10,X,X,8,X,X" -"2021,""6116 Varen"",""Secteur tertiaire"",30,80,40,40,52,23,28" -"2021,""6117 Guttet-Feschel"",""Secteur conomique - total"",32,89,52,37,54,25,29" -"2021,""6117 Guttet-Feschel"",""Secteur primaire"",4,13,X,X,5,X,X" -"2021,""6117 Guttet-Feschel"",""Secteur secondaire"",6,13,X,X,10,X,X" -"2021,""6117 Guttet-Feschel"",""Secteur tertiaire"",22,63,43,20,38,21,17" -"2021,""6118 Gampel-Bratsch"",""Secteur conomique - total"",168,713,314,399,497,180,317" -"2021,""6118 Gampel-Bratsch"",""Secteur primaire"",31,91,31,60,42,13,29" -"2021,""6118 Gampel-Bratsch"",""Secteur secondaire"",31,185,53,132,160,33,127" -"2021,""6118 Gampel-Bratsch"",""Secteur tertiaire"",106,437,230,207,296,134,162" -"2021,""6119 Turtmann-Unterems"",""Secteur conomique - total"",115,487,201,286,341,111,230" -"2021,""6119 Turtmann-Unterems"",""Secteur primaire"",34,102,33,69,45,14,32" -"2021,""6119 Turtmann-Unterems"",""Secteur secondaire"",18,139,24,115,122,14,107" -"2021,""6119 Turtmann-Unterems"",""Secteur tertiaire"",63,246,144,102,175,83,91" -"2021,""6131 Bovernier"",""Secteur conomique - total"",39,81,32,49,58,18,40" -"2021,""6131 Bovernier"",""Secteur primaire"",4,16,0,16,12,0,12" -"2021,""6131 Bovernier"",""Secteur secondaire"",9,15,X,X,12,X,X" -"2021,""6131 Bovernier"",""Secteur tertiaire"",26,50,X,X,34,X,X" -"2021,""6133 Fully"",""Secteur conomique - total"",600,2507,1203,1304,1689,714,975" -"2021,""6133 Fully"",""Secteur primaire"",123,787,263,524,435,129,306" -"2021,""6133 Fully"",""Secteur secondaire"",83,260,49,211,220,23,197" -"2021,""6133 Fully"",""Secteur tertiaire"",394,1460,891,569,1035,563,472" -"2021,""6134 Isrables"",""Secteur conomique - total"",73,266,99,167,194,56,138" -"2021,""6134 Isrables"",""Secteur primaire"",24,61,28,33,29,12,17" -"2021,""6134 Isrables"",""Secteur secondaire"",15,90,31,59,74,19,54" -"2021,""6134 Isrables"",""Secteur tertiaire"",34,115,40,75,92,25,67" -"2021,""6135 Leytron"",""Secteur conomique - total"",286,1408,684,724,991,424,567" -"2021,""6135 Leytron"",""Secteur primaire"",69,258,115,143,121,46,75" -"2021,""6135 Leytron"",""Secteur secondaire"",35,309,121,188,272,99,173" -"2021,""6135 Leytron"",""Secteur tertiaire"",182,841,448,393,597,279,319" -"2021,""6136 Martigny"",""Secteur conomique - total"",2087,14348,6446,7902,11327,4376,6951" -"2021,""6136 Martigny"",""Secteur primaire"",53,444,134,310,253,67,186" -"2021,""6136 Martigny"",""Secteur secondaire"",287,2301,457,1844,2077,315,1762" -"2021,""6136 Martigny"",""Secteur tertiaire"",1747,11603,5855,5748,8998,3994,5003" -"2021,""6137 Martigny-Combe"",""Secteur conomique - total"",177,630,242,388,443,134,309" -"2021,""6137 Martigny-Combe"",""Secteur primaire"",20,87,X,X,45,X,X" -"2021,""6137 Martigny-Combe"",""Secteur secondaire"",33,56,X,X,48,X,X" -"2021,""6137 Martigny-Combe"",""Secteur tertiaire"",124,487,195,292,350,115,235" -"2021,""6139 Riddes"",""Secteur conomique - total"",223,1308,579,729,1017,373,645" -"2021,""6139 Riddes"",""Secteur primaire"",21,106,51,55,74,31,43" -"2021,""6139 Riddes"",""Secteur secondaire"",37,297,62,235,267,42,226" -"2021,""6139 Riddes"",""Secteur tertiaire"",165,905,466,439,676,300,376" -"2021,""6140 Saillon"",""Secteur conomique - total"",196,804,375,429,571,231,340" -"2021,""6140 Saillon"",""Secteur primaire"",37,244,86,158,145,43,102" -"2021,""6140 Saillon"",""Secteur secondaire"",21,108,11,97,98,7,92" -"2021,""6140 Saillon"",""Secteur tertiaire"",138,452,278,174,328,182,147" -"2021,""6141 Saxon"",""Secteur conomique - total"",437,2378,1103,1275,1730,708,1022" -"2021,""6141 Saxon"",""Secteur primaire"",52,352,121,231,193,64,129" -"2021,""6141 Saxon"",""Secteur secondaire"",91,478,70,408,428,44,383" -"2021,""6141 Saxon"",""Secteur tertiaire"",294,1548,912,636,1109,599,510" -"2021,""6142 Trient"",""Secteur conomique - total"",23,68,30,38,48,17,31" -"2021,""6142 Trient"",""Secteur primaire"",X,4,X,X,X,X,X" -"2021,""6142 Trient"",""Secteur secondaire"",X,4,X,X,X,X,X" -"2021,""6142 Trient"",""Secteur tertiaire"",19,60,X,X,41,X,X" -"2021,""6151 Champry"",""Secteur conomique - total"",185,765,317,448,605,213,391" -"2021,""6151 Champry"",""Secteur primaire"",13,33,14,19,20,7,12" -"2021,""6151 Champry"",""Secteur secondaire"",25,45,8,37,33,4,29" -"2021,""6151 Champry"",""Secteur tertiaire"",147,687,295,392,552,202,350" -"2021,""6152 Collombey-Muraz"",""Secteur conomique - total"",676,3451,1545,1906,2756,1033,1723" -"2021,""6152 Collombey-Muraz"",""Secteur primaire"",20,102,24,78,78,11,66" -"2021,""6152 Collombey-Muraz"",""Secteur secondaire"",154,944,121,823,866,77,789" -"2021,""6152 Collombey-Muraz"",""Secteur tertiaire"",502,2405,1400,1005,1812,944,868" -"2021,""6153 Monthey"",""Secteur conomique - total"",1334,11226,4757,6469,9230,3330,5900" -"2021,""6153 Monthey"",""Secteur primaire"",13,39,12,27,26,6,20" -"2021,""6153 Monthey"",""Secteur secondaire"",198,3486,457,3029,3321,367,2954" -"2021,""6153 Monthey"",""Secteur tertiaire"",1123,7701,4288,3413,5882,2956,2926" -"2021,""6154 Port-Valais"",""Secteur conomique - total"",318,1144,462,682,869,282,586" -"2021,""6154 Port-Valais"",""Secteur primaire"",12,42,10,32,34,8,25" -"2021,""6154 Port-Valais"",""Secteur secondaire"",67,262,41,221,226,21,205" -"2021,""6154 Port-Valais"",""Secteur tertiaire"",239,840,411,429,609,253,356" -"2021,""6155 Saint-Gingolph"",""Secteur conomique - total"",73,153,67,86,115,42,73" -"2021,""6155 Saint-Gingolph"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6155 Saint-Gingolph"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6155 Saint-Gingolph"",""Secteur tertiaire"",57,125,X,X,92,X,X" -"2021,""6156 Troistorrents"",""Secteur conomique - total"",346,929,473,456,677,289,387" -"2021,""6156 Troistorrents"",""Secteur primaire"",20,47,13,34,27,6,22" -"2021,""6156 Troistorrents"",""Secteur secondaire"",70,220,36,184,194,23,172" -"2021,""6156 Troistorrents"",""Secteur tertiaire"",256,662,424,238,455,261,194" -"2021,""6157 Val-d'Illiez"",""Secteur conomique - total"",210,606,242,364,437,143,293" -"2021,""6157 Val-d'Illiez"",""Secteur primaire"",39,95,25,70,55,10,45" -"2021,""6157 Val-d'Illiez"",""Secteur secondaire"",47,104,13,91,91,7,84" -"2021,""6157 Val-d'Illiez"",""Secteur tertiaire"",124,407,204,203,291,127,163" -"2021,""6158 Vionnaz"",""Secteur conomique - total"",187,975,358,617,829,252,578" -"2021,""6158 Vionnaz"",""Secteur primaire"",10,40,12,28,34,9,25" -"2021,""6158 Vionnaz"",""Secteur secondaire"",38,535,149,386,495,122,373" -"2021,""6158 Vionnaz"",""Secteur tertiaire"",139,400,197,203,300,121,179" -"2021,""6159 Vouvry"",""Secteur conomique - total"",267,1709,752,957,1424,540,885" -"2021,""6159 Vouvry"",""Secteur primaire"",20,58,13,45,43,8,34" -"2021,""6159 Vouvry"",""Secteur secondaire"",62,860,242,618,792,195,597" -"2021,""6159 Vouvry"",""Secteur tertiaire"",185,791,497,294,590,336,254" -"2021,""6172 Bister"",""Secteur conomique - total"",6,17,X,X,9,X,X" -"2021,""6172 Bister"",""Secteur primaire"",X,9,X,X,X,X,X" -"2021,""6172 Bister"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""6172 Bister"",""Secteur tertiaire"",X,8,X,X,X,X,X" -"2021,""6173 Bitsch"",""Secteur conomique - total"",75,336,146,190,245,85,159" -"2021,""6173 Bitsch"",""Secteur primaire"",10,23,X,X,9,X,X" -"2021,""6173 Bitsch"",""Secteur secondaire"",10,86,X,X,73,X,X" -"2021,""6173 Bitsch"",""Secteur tertiaire"",55,227,113,114,163,69,94" -"2021,""6177 Grengiols"",""Secteur conomique - total"",45,143,56,87,98,28,69" -"2021,""6177 Grengiols"",""Secteur primaire"",21,59,X,X,31,X,X" -"2021,""6177 Grengiols"",""Secteur secondaire"",7,23,X,X,19,X,X" -"2021,""6177 Grengiols"",""Secteur tertiaire"",17,61,X,X,48,X,X" -"2021,""6181 Riederalp"",""Secteur conomique - total"",66,318,165,153,220,95,125" -"2021,""6181 Riederalp"",""Secteur primaire"",10,36,X,X,19,X,X" -"2021,""6181 Riederalp"",""Secteur secondaire"",6,14,X,X,12,X,X" -"2021,""6181 Riederalp"",""Secteur tertiaire"",50,268,148,120,189,89,101" -"2021,""6191 Ausserberg"",""Secteur conomique - total"",52,130,61,69,67,27,40" -"2021,""6191 Ausserberg"",""Secteur primaire"",22,68,25,43,X,X,X" -"2021,""6191 Ausserberg"",""Secteur secondaire"",4,4,X,X,X,X,X" -"2021,""6191 Ausserberg"",""Secteur tertiaire"",26,58,X,X,35,X,X" -"2021,""6192 Blatten"",""Secteur conomique - total"",24,87,56,31,53,33,20" -"2021,""6192 Blatten"",""Secteur primaire"",X,17,X,X,X,X,X" -"2021,""6192 Blatten"",""Secteur secondaire"",X,6,X,X,X,X,X" -"2021,""6192 Blatten"",""Secteur tertiaire"",16,64,X,X,44,X,X" -"2021,""6193 Brchen"",""Secteur conomique - total"",61,187,91,96,123,51,72" -"2021,""6193 Brchen"",""Secteur primaire"",14,41,X,X,18,X,X" -"2021,""6193 Brchen"",""Secteur secondaire"",6,13,X,X,12,X,X" -"2021,""6193 Brchen"",""Secteur tertiaire"",41,133,74,59,93,44,49" -"2021,""6194 Eischoll"",""Secteur conomique - total"",31,93,29,64,66,16,50" -"2021,""6194 Eischoll"",""Secteur primaire"",8,27,X,X,14,X,X" -"2021,""6194 Eischoll"",""Secteur secondaire"",5,20,X,X,19,X,X" -"2021,""6194 Eischoll"",""Secteur tertiaire"",18,46,20,26,33,11,21" -"2021,""6195 Ferden"",""Secteur conomique - total"",26,86,34,52,49,16,34" -"2021,""6195 Ferden"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6195 Ferden"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6195 Ferden"",""Secteur tertiaire"",13,51,20,31,35,11,24" -"2021,""6197 Kippel"",""Secteur conomique - total"",26,115,67,48,77,40,37" -"2021,""6197 Kippel"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6197 Kippel"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6197 Kippel"",""Secteur tertiaire"",20,102,X,X,70,X,X" -"2021,""6198 Niedergesteln"",""Secteur conomique - total"",43,119,48,71,74,22,52" -"2021,""6198 Niedergesteln"",""Secteur primaire"",12,40,13,27,18,4,13" -"2021,""6198 Niedergesteln"",""Secteur secondaire"",10,28,8,20,24,5,19" -"2021,""6198 Niedergesteln"",""Secteur tertiaire"",21,51,27,24,33,13,20" -"2021,""6199 Raron"",""Secteur conomique - total"",150,1075,428,647,873,300,573" -"2021,""6199 Raron"",""Secteur primaire"",23,130,50,80,87,31,57" -"2021,""6199 Raron"",""Secteur secondaire"",31,470,138,332,431,111,320" -"2021,""6199 Raron"",""Secteur tertiaire"",96,475,240,235,355,158,197" -"2021,""6201 Unterbch"",""Secteur conomique - total"",42,139,65,74,90,36,54" -"2021,""6201 Unterbch"",""Secteur primaire"",12,37,X,X,19,X,X" -"2021,""6201 Unterbch"",""Secteur secondaire"",4,14,X,X,12,X,X" -"2021,""6201 Unterbch"",""Secteur tertiaire"",26,88,48,40,59,28,31" -"2021,""6202 Wiler (Ltschen)"",""Secteur conomique - total"",46,217,96,121,140,56,85" -"2021,""6202 Wiler (Ltschen)"",""Secteur primaire"",9,25,X,X,13,X,X" -"2021,""6202 Wiler (Ltschen)"",""Secteur secondaire"",7,20,X,X,17,X,X" -"2021,""6202 Wiler (Ltschen)"",""Secteur tertiaire"",30,172,84,88,111,50,61" -"2021,""6203 Mrel-Filet"",""Secteur conomique - total"",65,318,141,177,225,76,149" -"2021,""6203 Mrel-Filet"",""Secteur primaire"",11,23,9,14,11,5,6" -"2021,""6203 Mrel-Filet"",""Secteur secondaire"",14,122,21,101,108,10,98" -"2021,""6203 Mrel-Filet"",""Secteur tertiaire"",40,173,111,62,106,61,45" -"2021,""6204 Steg-Hohtenn"",""Secteur conomique - total"",113,980,362,618,790,230,560" -"2021,""6204 Steg-Hohtenn"",""Secteur primaire"",10,30,11,19,13,4,9" -"2021,""6204 Steg-Hohtenn"",""Secteur secondaire"",28,409,35,374,388,25,363" -"2021,""6204 Steg-Hohtenn"",""Secteur tertiaire"",75,541,316,225,389,201,189" -"2021,""6205 Bettmeralp"",""Secteur conomique - total"",86,721,277,444,585,190,395" -"2021,""6205 Bettmeralp"",""Secteur primaire"",11,24,X,X,12,X,X" -"2021,""6205 Bettmeralp"",""Secteur secondaire"",10,39,X,X,32,X,X" -"2021,""6205 Bettmeralp"",""Secteur tertiaire"",65,658,259,399,541,182,359" -"2021,""6211 Collonges"",""Secteur conomique - total"",44,116,48,68,82,28,54" -"2021,""6211 Collonges"",""Secteur primaire"",4,20,X,X,16,X,X" -"2021,""6211 Collonges"",""Secteur secondaire"",10,37,X,X,29,X,X" -"2021,""6211 Collonges"",""Secteur tertiaire"",30,59,30,29,37,18,19" -"2021,""6212 Dornaz"",""Secteur conomique - total"",67,145,49,96,107,28,79" -"2021,""6212 Dornaz"",""Secteur primaire"",5,14,X,X,9,X,X" -"2021,""6212 Dornaz"",""Secteur secondaire"",14,22,X,X,17,X,X" -"2021,""6212 Dornaz"",""Secteur tertiaire"",48,109,40,69,82,24,58" -"2021,""6213 Evionnaz"",""Secteur conomique - total"",97,710,187,523,629,132,497" -"2021,""6213 Evionnaz"",""Secteur primaire"",5,20,X,X,14,X,X" -"2021,""6213 Evionnaz"",""Secteur secondaire"",25,458,99,359,433,81,352" -"2021,""6213 Evionnaz"",""Secteur tertiaire"",67,232,X,X,183,X,X" -"2021,""6214 Finhaut"",""Secteur conomique - total"",37,96,40,56,70,23,47" -"2021,""6214 Finhaut"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""6214 Finhaut"",""Secteur secondaire"",X,8,X,X,X,X,X" -"2021,""6214 Finhaut"",""Secteur tertiaire"",27,82,36,46,62,22,40" -"2021,""6215 Massongex"",""Secteur conomique - total"",105,352,158,194,268,102,166" -"2021,""6215 Massongex"",""Secteur primaire"",12,26,X,X,18,X,X" -"2021,""6215 Massongex"",""Secteur secondaire"",17,78,X,X,72,X,X" -"2021,""6215 Massongex"",""Secteur tertiaire"",76,248,142,106,178,92,86" -"2021,""6217 Saint-Maurice"",""Secteur conomique - total"",344,2022,1036,986,1510,649,861" -"2021,""6217 Saint-Maurice"",""Secteur primaire"",7,30,13,17,21,8,13" -"2021,""6217 Saint-Maurice"",""Secteur secondaire"",59,308,48,260,279,29,249" -"2021,""6217 Saint-Maurice"",""Secteur tertiaire"",278,1684,975,709,1210,612,599" -"2021,""6218 Salvan"",""Secteur conomique - total"",120,337,176,161,248,112,136" -"2021,""6218 Salvan"",""Secteur primaire"",4,9,X,X,5,X,X" -"2021,""6218 Salvan"",""Secteur secondaire"",22,42,X,X,37,X,X" -"2021,""6218 Salvan"",""Secteur tertiaire"",94,286,166,120,207,107,100" -"2021,""6219 Vernayaz"",""Secteur conomique - total"",103,723,268,455,582,181,401" -"2021,""6219 Vernayaz"",""Secteur primaire"",X,8,X,X,5,X,X" -"2021,""6219 Vernayaz"",""Secteur secondaire"",X,310,X,X,279,X,X" -"2021,""6219 Vernayaz"",""Secteur tertiaire"",71,405,X,X,299,X,X" -"2021,""6220 Vrossaz"",""Secteur conomique - total"",45,84,38,46,50,17,33" -"2021,""6220 Vrossaz"",""Secteur primaire"",16,30,X,X,13,X,X" -"2021,""6220 Vrossaz"",""Secteur secondaire"",4,15,X,X,12,X,X" -"2021,""6220 Vrossaz"",""Secteur tertiaire"",25,39,22,17,25,11,14" -"2021,""6232 Chalais"",""Secteur conomique - total"",244,1021,456,565,779,278,502" -"2021,""6232 Chalais"",""Secteur primaire"",17,65,22,43,45,12,33" -"2021,""6232 Chalais"",""Secteur secondaire"",54,291,43,248,259,24,235" -"2021,""6232 Chalais"",""Secteur tertiaire"",173,665,391,274,475,241,234" -"2021,""6235 Chippis"",""Secteur conomique - total"",105,508,136,372,426,86,340" -"2021,""6235 Chippis"",""Secteur primaire"",11,55,28,27,40,18,22" -"2021,""6235 Chippis"",""Secteur secondaire"",22,267,18,249,254,12,242" -"2021,""6235 Chippis"",""Secteur tertiaire"",72,186,90,96,131,56,75" -"2021,""6238 Grne"",""Secteur conomique - total"",170,507,212,295,376,126,249" -"2021,""6238 Grne"",""Secteur primaire"",17,43,17,26,23,8,16" -"2021,""6238 Grne"",""Secteur secondaire"",24,106,10,96,98,6,92" -"2021,""6238 Grne"",""Secteur tertiaire"",129,358,185,173,255,113,142" -"2021,""6239 Icogne"",""Secteur conomique - total"",56,160,49,111,119,28,91" -"2021,""6239 Icogne"",""Secteur primaire"",6,14,X,X,10,X,X" -"2021,""6239 Icogne"",""Secteur secondaire"",8,54,X,X,47,X,X" -"2021,""6239 Icogne"",""Secteur tertiaire"",42,92,39,53,62,23,39" -"2021,""6240 Lens"",""Secteur conomique - total"",402,1982,927,1055,1530,625,905" -"2021,""6240 Lens"",""Secteur primaire"",24,216,98,118,111,42,69" -"2021,""6240 Lens"",""Secteur secondaire"",35,186,31,155,166,17,149" -"2021,""6240 Lens"",""Secteur tertiaire"",343,1580,798,782,1253,565,688" -"2021,""6246 Saint-Lonard"",""Secteur conomique - total"",140,695,296,399,532,188,344" -"2021,""6246 Saint-Lonard"",""Secteur primaire"",14,72,27,45,46,16,30" -"2021,""6246 Saint-Lonard"",""Secteur secondaire"",29,207,40,167,185,29,156" -"2021,""6246 Saint-Lonard"",""Secteur tertiaire"",97,416,229,187,300,143,158" -"2021,""6248 Sierre"",""Secteur conomique - total"",1531,11557,5495,6062,8999,3722,5277" -"2021,""6248 Sierre"",""Secteur primaire"",43,191,69,122,134,42,91" -"2021,""6248 Sierre"",""Secteur secondaire"",214,2429,401,2028,2278,312,1966" -"2021,""6248 Sierre"",""Secteur tertiaire"",1274,8937,5025,3912,6587,3367,3220" -"2021,""6252 Anniviers"",""Secteur conomique - total"",357,1623,668,955,1237,432,804" -"2021,""6252 Anniviers"",""Secteur primaire"",45,113,30,83,60,12,48" -"2021,""6252 Anniviers"",""Secteur secondaire"",51,285,41,244,253,24,229" -"2021,""6252 Anniviers"",""Secteur tertiaire"",261,1225,597,628,924,397,528" -"2021,""6253 Crans-Montana"",""Secteur conomique - total"",919,4666,2125,2541,3658,1482,2176" -"2021,""6253 Crans-Montana"",""Secteur primaire"",54,159,57,102,74,20,54" -"2021,""6253 Crans-Montana"",""Secteur secondaire"",114,594,94,500,540,64,476" -"2021,""6253 Crans-Montana"",""Secteur tertiaire"",751,3913,1974,1939,3044,1398,1645" -"2021,""6254 Noble-Contre"",""Secteur conomique - total"",249,714,375,339,471,208,264" -"2021,""6254 Noble-Contre"",""Secteur primaire"",38,149,62,87,84,28,56" -"2021,""6254 Noble-Contre"",""Secteur secondaire"",42,120,23,97,101,12,90" -"2021,""6254 Noble-Contre"",""Secteur tertiaire"",169,445,290,155,286,168,118" -"2021,""6261 Arbaz"",""Secteur conomique - total"",93,196,94,102,132,51,81" -"2021,""6261 Arbaz"",""Secteur primaire"",11,21,X,X,10,X,X" -"2021,""6261 Arbaz"",""Secteur secondaire"",15,25,X,X,22,X,X" -"2021,""6261 Arbaz"",""Secteur tertiaire"",67,150,82,68,100,45,55" -"2021,""6263 Grimisuat"",""Secteur conomique - total"",234,887,535,352,612,328,283" -"2021,""6263 Grimisuat"",""Secteur primaire"",28,73,30,43,38,11,27" -"2021,""6263 Grimisuat"",""Secteur secondaire"",30,56,13,43,48,8,40" -"2021,""6263 Grimisuat"",""Secteur tertiaire"",176,758,492,266,526,310,217" -"2021,""6265 Savise"",""Secteur conomique - total"",500,1540,717,823,1114,434,680" -"2021,""6265 Savise"",""Secteur primaire"",97,254,86,168,166,53,114" -"2021,""6265 Savise"",""Secteur secondaire"",86,331,66,265,286,36,250" -"2021,""6265 Savise"",""Secteur tertiaire"",317,955,565,390,661,345,316" -"2021,""6266 Sion"",""Secteur conomique - total"",4105,37051,17787,19264,29041,12153,16889" -"2021,""6266 Sion"",""Secteur primaire"",86,639,228,411,364,121,243" -"2021,""6266 Sion"",""Secteur secondaire"",471,5719,1092,4627,5204,791,4413" -"2021,""6266 Sion"",""Secteur tertiaire"",3548,30693,16467,14226,23473,11240,12233" -"2021,""6267 Veysonnaz"",""Secteur conomique - total"",63,280,123,157,203,80,124" -"2021,""6267 Veysonnaz"",""Secteur primaire"",12,31,X,X,16,X,X" -"2021,""6267 Veysonnaz"",""Secteur secondaire"",5,21,X,X,19,X,X" -"2021,""6267 Veysonnaz"",""Secteur tertiaire"",46,228,113,115,168,75,93" -"2021,""6281 Baltschieder"",""Secteur conomique - total"",73,255,123,132,165,62,104" -"2021,""6281 Baltschieder"",""Secteur primaire"",12,36,X,X,16,X,X" -"2021,""6281 Baltschieder"",""Secteur secondaire"",11,31,X,X,26,X,X" -"2021,""6281 Baltschieder"",""Secteur tertiaire"",50,188,104,84,123,54,69" -"2021,""6282 Eisten"",""Secteur conomique - total"",14,34,17,17,19,8,11" -"2021,""6282 Eisten"",""Secteur primaire"",6,14,X,X,6,X,X" -"2021,""6282 Eisten"",""Secteur secondaire"",4,6,0,6,5,0,5" -"2021,""6282 Eisten"",""Secteur tertiaire"",4,14,X,X,7,X,X" -"2021,""6283 Embd"",""Secteur conomique - total"",27,81,36,45,33,11,22" -"2021,""6283 Embd"",""Secteur primaire"",18,43,X,X,15,X,X" -"2021,""6283 Embd"",""Secteur secondaire"",X,8,X,X,7,X,X" -"2021,""6283 Embd"",""Secteur tertiaire"",X,30,17,13,11,5,6" -"2021,""6285 Grchen"",""Secteur conomique - total"",138,622,305,317,437,186,251" -"2021,""6285 Grchen"",""Secteur primaire"",24,57,19,38,20,6,14" -"2021,""6285 Grchen"",""Secteur secondaire"",16,79,13,66,67,7,60" -"2021,""6285 Grchen"",""Secteur tertiaire"",98,486,273,213,350,173,177" -"2021,""6286 Lalden"",""Secteur conomique - total"",40,151,44,107,112,23,89" -"2021,""6286 Lalden"",""Secteur primaire"",13,26,X,X,9,X,X" -"2021,""6286 Lalden"",""Secteur secondaire"",10,73,X,X,68,X,X" -"2021,""6286 Lalden"",""Secteur tertiaire"",17,52,29,23,35,16,20" -"2021,""6287 Randa"",""Secteur conomique - total"",38,105,31,74,74,16,58" -"2021,""6287 Randa"",""Secteur primaire"",5,21,X,X,11,X,X" -"2021,""6287 Randa"",""Secteur secondaire"",7,38,X,X,34,X,X" -"2021,""6287 Randa"",""Secteur tertiaire"",26,46,22,24,29,12,17" -"2021,""6288 Saas-Almagell"",""Secteur conomique - total"",45,150,73,77,115,53,62" -"2021,""6288 Saas-Almagell"",""Secteur primaire"",X,17,X,X,8,X,X" -"2021,""6288 Saas-Almagell"",""Secteur secondaire"",X,10,X,X,8,X,X" -"2021,""6288 Saas-Almagell"",""Secteur tertiaire"",37,123,66,57,99,49,49" -"2021,""6289 Saas-Balen"",""Secteur conomique - total"",28,120,46,74,74,22,52" -"2021,""6289 Saas-Balen"",""Secteur primaire"",9,35,X,X,20,X,X" -"2021,""6289 Saas-Balen"",""Secteur secondaire"",5,25,X,X,22,X,X" -"2021,""6289 Saas-Balen"",""Secteur tertiaire"",14,60,34,26,33,18,15" -"2021,""6290 Saas-Fee"",""Secteur conomique - total"",270,1541,683,858,1247,485,762" -"2021,""6290 Saas-Fee"",""Secteur primaire"",X,6,X,X,X,X,X" -"2021,""6290 Saas-Fee"",""Secteur secondaire"",X,130,X,X,X,X,X" -"2021,""6290 Saas-Fee"",""Secteur tertiaire"",244,1405,658,747,1126,468,658" -"2021,""6291 Saas-Grund"",""Secteur conomique - total"",122,501,267,234,341,159,182" -"2021,""6291 Saas-Grund"",""Secteur primaire"",18,57,19,38,19,6,13" -"2021,""6291 Saas-Grund"",""Secteur secondaire"",15,52,10,42,44,5,39" -"2021,""6291 Saas-Grund"",""Secteur tertiaire"",89,392,238,154,278,148,130" -"2021,""6292 St. Niklaus"",""Secteur conomique - total"",178,1342,544,798,1104,395,709" -"2021,""6292 St. Niklaus"",""Secteur primaire"",49,109,41,68,46,16,31" -"2021,""6292 St. Niklaus"",""Secteur secondaire"",26,761,229,532,727,209,519" -"2021,""6292 St. Niklaus"",""Secteur tertiaire"",103,472,274,198,331,171,160" -"2021,""6293 Stalden (VS)"",""Secteur conomique - total"",74,332,135,197,260,86,174" -"2021,""6293 Stalden (VS)"",""Secteur primaire"",11,34,11,23,18,5,14" -"2021,""6293 Stalden (VS)"",""Secteur secondaire"",20,126,21,105,116,15,101" -"2021,""6293 Stalden (VS)"",""Secteur tertiaire"",43,172,103,69,126,67,59" -"2021,""6294 Staldenried"",""Secteur conomique - total"",47,96,44,52,53,20,33" -"2021,""6294 Staldenried"",""Secteur primaire"",14,34,X,X,13,X,X" -"2021,""6294 Staldenried"",""Secteur secondaire"",7,16,X,X,14,X,X" -"2021,""6294 Staldenried"",""Secteur tertiaire"",26,46,30,16,26,15,11" -"2021,""6295 Tsch"",""Secteur conomique - total"",66,259,139,120,186,90,96" -"2021,""6295 Tsch"",""Secteur primaire"",6,13,X,X,6,X,X" -"2021,""6295 Tsch"",""Secteur secondaire"",5,20,X,X,17,X,X" -"2021,""6295 Tsch"",""Secteur tertiaire"",55,226,132,94,164,87,77" -"2021,""6296 Trbel"",""Secteur conomique - total"",55,173,77,96,91,36,54" -"2021,""6296 Trbel"",""Secteur primaire"",36,88,33,55,30,11,20" -"2021,""6296 Trbel"",""Secteur secondaire"",4,18,7,11,15,4,11" -"2021,""6296 Trbel"",""Secteur tertiaire"",15,67,37,30,45,22,24" -"2021,""6297 Visp"",""Secteur conomique - total"",772,12694,4748,7946,10934,3488,7446" -"2021,""6297 Visp"",""Secteur primaire"",20,75,22,53,52,13,39" -"2021,""6297 Visp"",""Secteur secondaire"",118,5907,1435,4472,5645,1262,4383" -"2021,""6297 Visp"",""Secteur tertiaire"",634,6712,3291,3421,5238,2213,3025" -"2021,""6298 Visperterminen"",""Secteur conomique - total"",109,530,173,357,385,86,299" -"2021,""6298 Visperterminen"",""Secteur primaire"",42,104,33,71,42,11,32" -"2021,""6298 Visperterminen"",""Secteur secondaire"",13,269,33,236,249,19,231" -"2021,""6298 Visperterminen"",""Secteur tertiaire"",54,157,107,50,94,57,37" -"2021,""6299 Zeneggen"",""Secteur conomique - total"",24,59,29,30,29,12,18" -"2021,""6299 Zeneggen"",""Secteur primaire"",X,29,12,17,X,X,X" -"2021,""6299 Zeneggen"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6299 Zeneggen"",""Secteur tertiaire"",11,X,X,X,14,X,X" -"2021,""6300 Zermatt"",""Secteur conomique - total"",891,6911,2997,3914,5942,2380,3562" -"2021,""6300 Zermatt"",""Secteur primaire"",15,36,X,X,18,X,X" -"2021,""6300 Zermatt"",""Secteur secondaire"",65,647,X,X,604,X,X" -"2021,""6300 Zermatt"",""Secteur tertiaire"",811,6228,2924,3304,5321,2335,2985" -"2021,""6404 Boudry"",""Secteur conomique - total"",372,4270,1729,2541,3634,1328,2305" -"2021,""6404 Boudry"",""Secteur primaire"",18,70,28,42,50,16,34" -"2021,""6404 Boudry"",""Secteur secondaire"",73,1869,521,1348,1790,477,1313" -"2021,""6404 Boudry"",""Secteur tertiaire"",281,2331,1180,1151,1794,835,959" -"2021,""6408 Cortaillod"",""Secteur conomique - total"",293,1938,658,1280,1619,448,1171" -"2021,""6408 Cortaillod"",""Secteur primaire"",11,31,10,21,22,5,17" -"2021,""6408 Cortaillod"",""Secteur secondaire"",63,845,149,696,803,126,677" -"2021,""6408 Cortaillod"",""Secteur tertiaire"",219,1062,499,563,793,317,476" -"2021,""6413 Rochefort"",""Secteur conomique - total"",90,211,100,111,146,57,89" -"2021,""6413 Rochefort"",""Secteur primaire"",11,29,X,X,22,X,X" -"2021,""6413 Rochefort"",""Secteur secondaire"",12,23,X,X,19,X,X" -"2021,""6413 Rochefort"",""Secteur tertiaire"",67,159,86,73,105,49,56" -"2021,""6416 Milvignes"",""Secteur conomique - total"",532,2766,1224,1542,2130,813,1317" -"2021,""6416 Milvignes"",""Secteur primaire"",21,117,32,85,90,19,72" -"2021,""6416 Milvignes"",""Secteur secondaire"",65,563,132,431,512,106,406" -"2021,""6416 Milvignes"",""Secteur tertiaire"",446,2086,1060,1026,1529,689,840" -"2021,""6417 La Grande Broche"",""Secteur conomique - total"",726,3261,1515,1746,2440,952,1488" -"2021,""6417 La Grande Broche"",""Secteur primaire"",57,195,58,137,139,32,107" -"2021,""6417 La Grande Broche"",""Secteur secondaire"",137,844,204,640,742,149,594" -"2021,""6417 La Grande Broche"",""Secteur tertiaire"",532,2222,1253,969,1558,771,788" -"2021,""6421 La Chaux-de-Fonds"",""Secteur conomique - total"",2814,26203,12503,13700,21212,9097,12114" -"2021,""6421 La Chaux-de-Fonds"",""Secteur primaire"",80,253,75,178,197,44,154" -"2021,""6421 La Chaux-de-Fonds"",""Secteur secondaire"",572,10546,3947,6599,9807,3465,6343" -"2021,""6421 La Chaux-de-Fonds"",""Secteur tertiaire"",2162,15404,8481,6923,11207,5589,5618" -"2021,""6422 Les Planchettes"",""Secteur conomique - total"",23,60,14,46,46,8,38" -"2021,""6422 Les Planchettes"",""Secteur primaire"",14,34,X,X,25,X,X" -"2021,""6422 Les Planchettes"",""Secteur secondaire"",4,18,X,X,X,X,X" -"2021,""6422 Les Planchettes"",""Secteur tertiaire"",5,8,X,X,X,X,X" -"2021,""6423 La Sagne"",""Secteur conomique - total"",96,382,209,173,297,143,153" -"2021,""6423 La Sagne"",""Secteur primaire"",30,79,25,54,59,13,45" -"2021,""6423 La Sagne"",""Secteur secondaire"",21,67,20,47,59,15,44" -"2021,""6423 La Sagne"",""Secteur tertiaire"",45,236,164,72,179,115,64" -"2021,""6432 La Brvine"",""Secteur conomique - total"",110,327,109,218,243,62,182" -"2021,""6432 La Brvine"",""Secteur primaire"",53,148,43,105,109,24,85" -"2021,""6432 La Brvine"",""Secteur secondaire"",21,85,16,69,71,8,63" -"2021,""6432 La Brvine"",""Secteur tertiaire"",36,94,50,44,63,30,33" -"2021,""6433 Brot-Plamboz"",""Secteur conomique - total"",44,125,39,86,92,22,70" -"2021,""6433 Brot-Plamboz"",""Secteur primaire"",27,77,29,48,53,16,37" -"2021,""6433 Brot-Plamboz"",""Secteur secondaire"",6,29,X,X,27,X,X" -"2021,""6433 Brot-Plamboz"",""Secteur tertiaire"",11,19,X,X,12,X,X" -"2021,""6434 Le Cerneux-Pquignot"",""Secteur conomique - total"",42,138,39,99,102,20,82" -"2021,""6434 Le Cerneux-Pquignot"",""Secteur primaire"",21,58,20,38,39,9,29" -"2021,""6434 Le Cerneux-Pquignot"",""Secteur secondaire"",10,47,X,X,44,X,X" -"2021,""6434 Le Cerneux-Pquignot"",""Secteur tertiaire"",11,33,X,X,20,X,X" -"2021,""6435 La Chaux-du-Milieu"",""Secteur conomique - total"",45,109,37,72,82,21,61" -"2021,""6435 La Chaux-du-Milieu"",""Secteur primaire"",21,61,13,48,48,7,41" -"2021,""6435 La Chaux-du-Milieu"",""Secteur secondaire"",7,24,11,13,20,8,13" -"2021,""6435 La Chaux-du-Milieu"",""Secteur tertiaire"",17,24,13,11,14,6,7" -"2021,""6436 Le Locle"",""Secteur conomique - total"",775,8415,3925,4490,7301,3089,4212" -"2021,""6436 Le Locle"",""Secteur primaire"",40,96,25,71,77,15,62" -"2021,""6436 Le Locle"",""Secteur secondaire"",209,5194,2128,3066,4845,1877,2968" -"2021,""6436 Le Locle"",""Secteur tertiaire"",526,3125,1772,1353,2380,1197,1182" -"2021,""6437 Les Ponts-de-Martel"",""Secteur conomique - total"",135,532,246,286,390,145,245" -"2021,""6437 Les Ponts-de-Martel"",""Secteur primaire"",30,82,24,58,65,13,52" -"2021,""6437 Les Ponts-de-Martel"",""Secteur secondaire"",36,153,35,118,122,19,104" -"2021,""6437 Les Ponts-de-Martel"",""Secteur tertiaire"",69,297,187,110,203,113,90" -"2021,""6451 Cornaux"",""Secteur conomique - total"",122,776,152,624,688,98,590" -"2021,""6451 Cornaux"",""Secteur primaire"",8,25,X,X,20,X,X" -"2021,""6451 Cornaux"",""Secteur secondaire"",50,430,X,X,404,X,X" -"2021,""6451 Cornaux"",""Secteur tertiaire"",64,321,105,216,264,65,199" -"2021,""6452 Cressier (NE)"",""Secteur conomique - total"",107,1217,366,851,1063,261,803" -"2021,""6452 Cressier (NE)"",""Secteur primaire"",6,20,5,15,18,5,13" -"2021,""6452 Cressier (NE)"",""Secteur secondaire"",24,843,147,696,799,117,682" -"2021,""6452 Cressier (NE)"",""Secteur tertiaire"",77,354,214,140,246,139,108" -"2021,""6453 Enges"",""Secteur conomique - total"",28,49,23,26,33,13,21" -"2021,""6453 Enges"",""Secteur primaire"",10,18,X,X,X,X,X" -"2021,""6453 Enges"",""Secteur secondaire"",4,4,X,X,X,X,X" -"2021,""6453 Enges"",""Secteur tertiaire"",14,27,X,X,18,X,X" -"2021,""6454 Hauterive (NE)"",""Secteur conomique - total"",139,773,375,398,592,251,341" -"2021,""6454 Hauterive (NE)"",""Secteur primaire"",4,9,X,X,8,X,X" -"2021,""6454 Hauterive (NE)"",""Secteur secondaire"",23,298,X,X,276,X,X" -"2021,""6454 Hauterive (NE)"",""Secteur tertiaire"",112,466,272,194,308,164,144" -"2021,""6455 Le Landeron"",""Secteur conomique - total"",311,1375,537,838,1089,337,752" -"2021,""6455 Le Landeron"",""Secteur primaire"",21,59,14,45,49,8,41" -"2021,""6455 Le Landeron"",""Secteur secondaire"",58,544,101,443,490,66,423" -"2021,""6455 Le Landeron"",""Secteur tertiaire"",232,772,422,350,551,263,288" -"2021,""6456 Lignires"",""Secteur conomique - total"",83,234,93,141,165,52,113" -"2021,""6456 Lignires"",""Secteur primaire"",19,52,X,X,38,X,X" -"2021,""6456 Lignires"",""Secteur secondaire"",11,45,X,X,39,X,X" -"2021,""6456 Lignires"",""Secteur tertiaire"",53,137,73,64,88,42,46" -"2021,""6458 Neuchtel"",""Secteur conomique - total"",4363,36676,17783,18893,27830,11966,15864" -"2021,""6458 Neuchtel"",""Secteur primaire"",27,97,15,82,75,8,67" -"2021,""6458 Neuchtel"",""Secteur secondaire"",418,5617,1615,4002,5187,1356,3831" -"2021,""6458 Neuchtel"",""Secteur tertiaire"",3918,30962,16153,14809,22568,10602,11966" -"2021,""6459 Saint-Blaise"",""Secteur conomique - total"",283,1558,587,971,1268,407,861" -"2021,""6459 Saint-Blaise"",""Secteur primaire"",6,27,9,18,24,6,17" -"2021,""6459 Saint-Blaise"",""Secteur secondaire"",46,392,58,334,360,40,320" -"2021,""6459 Saint-Blaise"",""Secteur tertiaire"",231,1139,520,619,884,361,523" -"2021,""6461 La Tne"",""Secteur conomique - total"",376,4676,1908,2768,4005,1461,2544" -"2021,""6461 La Tne"",""Secteur primaire"",9,37,12,25,31,9,21" -"2021,""6461 La Tne"",""Secteur secondaire"",72,1393,272,1121,1332,240,1092" -"2021,""6461 La Tne"",""Secteur tertiaire"",295,3246,1624,1622,2642,1211,1431" -"2021,""6487 Val-de-Ruz"",""Secteur conomique - total"",1166,7363,3343,4020,5639,2203,3437" -"2021,""6487 Val-de-Ruz"",""Secteur primaire"",133,361,116,245,264,69,194" -"2021,""6487 Val-de-Ruz"",""Secteur secondaire"",243,2572,692,1880,2387,577,1810" -"2021,""6487 Val-de-Ruz"",""Secteur tertiaire"",790,4430,2535,1895,2989,1556,1433" -"2021,""6504 La Cte-aux-Fes"",""Secteur conomique - total"",62,292,118,174,217,71,146" -"2021,""6504 La Cte-aux-Fes"",""Secteur primaire"",19,44,14,30,28,6,22" -"2021,""6504 La Cte-aux-Fes"",""Secteur secondaire"",13,96,15,81,90,12,78" -"2021,""6504 La Cte-aux-Fes"",""Secteur tertiaire"",30,152,89,63,99,53,46" -"2021,""6511 Les Verrires"",""Secteur conomique - total"",66,229,75,154,186,49,137" -"2021,""6511 Les Verrires"",""Secteur primaire"",19,54,13,41,47,9,38" -"2021,""6511 Les Verrires"",""Secteur secondaire"",11,78,17,61,73,14,59" -"2021,""6511 Les Verrires"",""Secteur tertiaire"",36,97,45,52,66,27,40" -"2021,""6512 Val-de-Travers"",""Secteur conomique - total"",915,5490,2501,2989,4399,1748,2651" -"2021,""6512 Val-de-Travers"",""Secteur primaire"",118,295,83,212,229,52,177" -"2021,""6512 Val-de-Travers"",""Secteur secondaire"",208,2450,795,1655,2230,669,1561" -"2021,""6512 Val-de-Travers"",""Secteur tertiaire"",589,2745,1623,1122,1941,1027,913" -"2021,""6601 Aire-la-Ville"",""Secteur conomique - total"",62,460,158,302,347,80,266" -"2021,""6601 Aire-la-Ville"",""Secteur primaire"",4,18,X,X,9,X,X" -"2021,""6601 Aire-la-Ville"",""Secteur secondaire"",17,162,X,X,156,X,X" -"2021,""6601 Aire-la-Ville"",""Secteur tertiaire"",41,280,139,141,182,65,117" -"2021,""6602 Anires"",""Secteur conomique - total"",129,522,286,236,363,189,174" -"2021,""6602 Anires"",""Secteur primaire"",10,52,X,X,32,X,X" -"2021,""6602 Anires"",""Secteur secondaire"",13,22,X,X,19,X,X" -"2021,""6602 Anires"",""Secteur tertiaire"",106,448,266,182,312,179,133" -"2021,""6603 Avully"",""Secteur conomique - total"",92,228,102,126,161,60,101" -"2021,""6603 Avully"",""Secteur primaire"",9,35,9,26,26,5,21" -"2021,""6603 Avully"",""Secteur secondaire"",8,10,0,10,9,0,9" -"2021,""6603 Avully"",""Secteur tertiaire"",75,183,93,90,126,55,71" -"2021,""6604 Avusy"",""Secteur conomique - total"",83,240,89,151,166,49,117" -"2021,""6604 Avusy"",""Secteur primaire"",11,58,X,X,30,X,X" -"2021,""6604 Avusy"",""Secteur secondaire"",14,36,X,X,34,X,X" -"2021,""6604 Avusy"",""Secteur tertiaire"",58,146,65,81,102,37,65" -"2021,""6605 Bardonnex"",""Secteur conomique - total"",160,1017,247,770,907,183,725" -"2021,""6605 Bardonnex"",""Secteur primaire"",9,40,X,X,30,X,X" -"2021,""6605 Bardonnex"",""Secteur secondaire"",33,437,X,X,414,X,X" -"2021,""6605 Bardonnex"",""Secteur tertiaire"",118,540,208,332,463,157,306" -"2021,""6606 Bellevue"",""Secteur conomique - total"",172,1366,662,704,1169,534,635" -"2021,""6606 Bellevue"",""Secteur primaire"",4,8,X,X,4,X,X" -"2021,""6606 Bellevue"",""Secteur secondaire"",21,467,X,X,442,X,X" -"2021,""6606 Bellevue"",""Secteur tertiaire"",147,891,446,445,723,337,386" -"2021,""6607 Bernex"",""Secteur conomique - total"",525,2939,1413,1526,2339,1015,1325" -"2021,""6607 Bernex"",""Secteur primaire"",34,315,79,236,270,54,215" -"2021,""6607 Bernex"",""Secteur secondaire"",73,397,50,347,368,39,329" -"2021,""6607 Bernex"",""Secteur tertiaire"",418,2227,1284,943,1702,921,780" -"2021,""6608 Carouge (GE)"",""Secteur conomique - total"",2917,26458,10747,15711,22093,7926,14167" -"2021,""6608 Carouge (GE)"",""Secteur primaire"",6,19,X,X,13,X,X" -"2021,""6608 Carouge (GE)"",""Secteur secondaire"",389,3504,X,X,3321,X,X" -"2021,""6608 Carouge (GE)"",""Secteur tertiaire"",2522,22935,10048,12887,18759,7332,11427" -"2021,""6609 Cartigny"",""Secteur conomique - total"",62,251,65,186,208,39,169" -"2021,""6609 Cartigny"",""Secteur primaire"",11,23,X,X,12,X,X" -"2021,""6609 Cartigny"",""Secteur secondaire"",12,36,X,X,33,X,X" -"2021,""6609 Cartigny"",""Secteur tertiaire"",39,192,53,139,164,33,132" -"2021,""6610 Cligny"",""Secteur conomique - total"",59,113,44,69,85,28,57" -"2021,""6610 Cligny"",""Secteur primaire"",9,24,X,X,19,X,X" -"2021,""6610 Cligny"",""Secteur secondaire"",5,9,X,X,7,X,X" -"2021,""6610 Cligny"",""Secteur tertiaire"",45,80,37,43,59,24,36" -"2021,""6611 Chancy"",""Secteur conomique - total"",74,164,89,75,107,49,58" -"2021,""6611 Chancy"",""Secteur primaire"",6,10,X,X,6,X,X" -"2021,""6611 Chancy"",""Secteur secondaire"",10,23,X,X,21,X,X" -"2021,""6611 Chancy"",""Secteur tertiaire"",58,131,83,48,80,46,35" -"2021,""6612 Chne-Bougeries"",""Secteur conomique - total"",742,4963,2936,2027,3915,2159,1756" -"2021,""6612 Chne-Bougeries"",""Secteur primaire"",0,0,0,0,0,0,0" -"2021,""6612 Chne-Bougeries"",""Secteur secondaire"",61,279,38,241,257,24,233" -"2021,""6612 Chne-Bougeries"",""Secteur tertiaire"",681,4684,2898,1786,3658,2135,1523" -"2021,""6613 Chne-Bourg"",""Secteur conomique - total"",704,2852,1213,1639,2331,881,1450" -"2021,""6613 Chne-Bourg"",""Secteur primaire"",X,5,X,X,X,X,X" -"2021,""6613 Chne-Bourg"",""Secteur secondaire"",X,915,X,X,X,X,X" -"2021,""6613 Chne-Bourg"",""Secteur tertiaire"",592,1932,986,946,1476,689,787" -"2021,""6614 Choulex"",""Secteur conomique - total"",89,169,59,110,122,33,89" -"2021,""6614 Choulex"",""Secteur primaire"",12,34,X,X,20,X,X" -"2021,""6614 Choulex"",""Secteur secondaire"",14,29,X,X,24,X,X" -"2021,""6614 Choulex"",""Secteur tertiaire"",63,106,49,57,78,29,48" -"2021,""6615 Collex-Bossy"",""Secteur conomique - total"",91,243,86,157,185,57,128" -"2021,""6615 Collex-Bossy"",""Secteur primaire"",13,49,X,X,36,X,X" -"2021,""6615 Collex-Bossy"",""Secteur secondaire"",14,36,X,X,32,X,X" -"2021,""6615 Collex-Bossy"",""Secteur tertiaire"",64,158,70,88,117,47,70" -"2021,""6616 Collonge-Bellerive"",""Secteur conomique - total"",743,4785,2243,2542,3836,1586,2250" -"2021,""6616 Collonge-Bellerive"",""Secteur primaire"",10,24,10,14,18,8,10" -"2021,""6616 Collonge-Bellerive"",""Secteur secondaire"",80,1130,189,941,1077,162,915" -"2021,""6616 Collonge-Bellerive"",""Secteur tertiaire"",653,3631,2044,1587,2741,1416,1325" -"2021,""6617 Cologny"",""Secteur conomique - total"",299,2255,1109,1146,1782,803,979" -"2021,""6617 Cologny"",""Secteur primaire"",X,10,X,X,8,X,X" -"2021,""6617 Cologny"",""Secteur secondaire"",X,52,X,X,48,X,X" -"2021,""6617 Cologny"",""Secteur tertiaire"",279,2193,1102,1091,1726,797,929" -"2021,""6618 Confignon"",""Secteur conomique - total"",253,1268,610,658,980,415,565" -"2021,""6618 Confignon"",""Secteur primaire"",6,14,0,14,12,0,12" -"2021,""6618 Confignon"",""Secteur secondaire"",25,68,19,49,51,12,39" -"2021,""6618 Confignon"",""Secteur tertiaire"",222,1186,591,595,917,402,515" -"2021,""6619 Corsier (GE)"",""Secteur conomique - total"",123,355,177,178,276,122,155" -"2021,""6619 Corsier (GE)"",""Secteur primaire"",7,42,13,29,37,9,28" -"2021,""6619 Corsier (GE)"",""Secteur secondaire"",16,53,8,45,50,7,43" -"2021,""6619 Corsier (GE)"",""Secteur tertiaire"",100,260,156,104,189,106,84" -"2021,""6620 Dardagny"",""Secteur conomique - total"",91,720,249,471,605,179,425" -"2021,""6620 Dardagny"",""Secteur primaire"",19,121,31,90,80,20,61" -"2021,""6620 Dardagny"",""Secteur secondaire"",16,347,46,301,337,40,297" -"2021,""6620 Dardagny"",""Secteur tertiaire"",56,252,172,80,187,120,68" -"2021,""6621 Genve"",""Secteur conomique - total"",23163,187783,90617,97166,154016,68737,85280" -"2021,""6621 Genve"",""Secteur primaire"",17,39,9,30,31,7,23" -"2021,""6621 Genve"",""Secteur secondaire"",1562,10302,2570,7732,9555,2159,7395" -"2021,""6621 Genve"",""Secteur tertiaire"",21584,177442,88038,89404,144431,66570,77861" -"2021,""6622 Genthod"",""Secteur conomique - total"",118,839,354,485,718,276,442" -"2021,""6622 Genthod"",""Secteur primaire"",X,15,X,X,12,X,X" -"2021,""6622 Genthod"",""Secteur secondaire"",X,379,X,X,359,X,X" -"2021,""6622 Genthod"",""Secteur tertiaire"",101,445,253,192,347,185,162" -"2021,""6623 Le Grand-Saconnex"",""Secteur conomique - total"",714,10880,4137,6743,9096,3156,5940" -"2021,""6623 Le Grand-Saconnex"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6623 Le Grand-Saconnex"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6623 Le Grand-Saconnex"",""Secteur tertiaire"",651,10636,4079,6557,8868,3108,5760" -"2021,""6624 Gy"",""Secteur conomique - total"",48,129,53,76,92,26,65" -"2021,""6624 Gy"",""Secteur primaire"",12,36,X,X,25,X,X" -"2021,""6624 Gy"",""Secteur secondaire"",9,21,X,X,18,X,X" -"2021,""6624 Gy"",""Secteur tertiaire"",27,72,39,33,49,21,28" -"2021,""6625 Hermance"",""Secteur conomique - total"",59,214,123,91,164,88,76" -"2021,""6625 Hermance"",""Secteur primaire"",X,6,0,6,6,0,6" -"2021,""6625 Hermance"",""Secteur secondaire"",X,13,X,X,9,X,X" -"2021,""6625 Hermance"",""Secteur tertiaire"",46,195,X,X,149,X,X" -"2021,""6626 Jussy"",""Secteur conomique - total"",106,385,137,248,294,87,207" -"2021,""6626 Jussy"",""Secteur primaire"",19,80,23,57,60,17,43" -"2021,""6626 Jussy"",""Secteur secondaire"",14,56,5,51,54,4,49" -"2021,""6626 Jussy"",""Secteur tertiaire"",73,249,109,140,181,66,115" -"2021,""6627 Laconnex"",""Secteur conomique - total"",43,107,45,62,77,28,49" -"2021,""6627 Laconnex"",""Secteur primaire"",6,32,X,X,20,X,X" -"2021,""6627 Laconnex"",""Secteur secondaire"",6,12,X,X,11,X,X" -"2021,""6627 Laconnex"",""Secteur tertiaire"",31,63,34,29,46,22,25" -"2021,""6628 Lancy"",""Secteur conomique - total"",2055,25577,10578,14999,21102,7703,13398" -"2021,""6628 Lancy"",""Secteur primaire"",X,23,X,X,8,X,X" -"2021,""6628 Lancy"",""Secteur secondaire"",X,2387,X,X,2239,X,X" -"2021,""6628 Lancy"",""Secteur tertiaire"",1694,23167,10252,12915,18855,7466,11389" -"2021,""6629 Meinier"",""Secteur conomique - total"",185,958,310,648,783,208,575" -"2021,""6629 Meinier"",""Secteur primaire"",19,69,21,48,49,12,37" -"2021,""6629 Meinier"",""Secteur secondaire"",56,377,75,302,351,59,292" -"2021,""6629 Meinier"",""Secteur tertiaire"",110,512,214,298,383,137,246" -"2021,""6630 Meyrin"",""Secteur conomique - total"",1902,22816,8955,13861,20136,7291,12845" -"2021,""6630 Meyrin"",""Secteur primaire"",9,44,15,29,26,7,19" -"2021,""6630 Meyrin"",""Secteur secondaire"",313,5061,1400,3661,4846,1277,3569" -"2021,""6630 Meyrin"",""Secteur tertiaire"",1580,17711,7540,10171,15264,6007,9257" -"2021,""6631 Onex"",""Secteur conomique - total"",675,4879,2632,2247,3885,1912,1973" -"2021,""6631 Onex"",""Secteur primaire"",X,X,X,X,X,X,X" -"2021,""6631 Onex"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6631 Onex"",""Secteur tertiaire"",576,3998,2533,1465,3049,1832,1217" -"2021,""6632 Perly-Certoux"",""Secteur conomique - total"",238,1463,404,1059,1273,304,969" -"2021,""6632 Perly-Certoux"",""Secteur primaire"",8,87,26,61,77,23,54" -"2021,""6632 Perly-Certoux"",""Secteur secondaire"",48,368,33,335,350,24,326" -"2021,""6632 Perly-Certoux"",""Secteur tertiaire"",182,1008,345,663,846,256,590" -"2021,""6633 Plan-les-Ouates"",""Secteur conomique - total"",1075,17516,6920,10596,15487,5584,9903" -"2021,""6633 Plan-les-Ouates"",""Secteur primaire"",11,31,8,23,21,5,16" -"2021,""6633 Plan-les-Ouates"",""Secteur secondaire"",236,8184,2415,5769,7937,2265,5672" -"2021,""6633 Plan-les-Ouates"",""Secteur tertiaire"",828,9301,4497,4804,7529,3314,4215" -"2021,""6634 Pregny-Chambsy"",""Secteur conomique - total"",164,669,367,302,485,247,238" -"2021,""6634 Pregny-Chambsy"",""Secteur primaire"",X,14,X,X,14,X,X" -"2021,""6634 Pregny-Chambsy"",""Secteur secondaire"",X,21,X,X,17,X,X" -"2021,""6634 Pregny-Chambsy"",""Secteur tertiaire"",150,634,363,271,454,244,210" -"2021,""6635 Presinge"",""Secteur conomique - total"",46,209,113,96,164,83,81" -"2021,""6635 Presinge"",""Secteur primaire"",7,22,X,X,17,X,X" -"2021,""6635 Presinge"",""Secteur secondaire"",6,12,X,X,11,X,X" -"2021,""6635 Presinge"",""Secteur tertiaire"",33,175,110,65,136,80,56" -"2021,""6636 Puplinge"",""Secteur conomique - total"",125,1218,382,836,1068,296,772" -"2021,""6636 Puplinge"",""Secteur primaire"",5,20,9,11,12,4,8" -"2021,""6636 Puplinge"",""Secteur secondaire"",18,77,7,70,69,5,65" -"2021,""6636 Puplinge"",""Secteur tertiaire"",102,1121,366,755,986,287,699" -"2021,""6637 Russin"",""Secteur conomique - total"",50,157,51,106,116,32,84" -"2021,""6637 Russin"",""Secteur primaire"",9,52,X,X,32,X,X" -"2021,""6637 Russin"",""Secteur secondaire"",5,40,X,X,39,X,X" -"2021,""6637 Russin"",""Secteur tertiaire"",36,65,34,31,45,20,25" -"2021,""6638 Satigny"",""Secteur conomique - total"",803,10565,2566,7999,9546,2026,7520" -"2021,""6638 Satigny"",""Secteur primaire"",44,245,65,180,178,45,134" -"2021,""6638 Satigny"",""Secteur secondaire"",239,5272,941,4331,5072,837,4235" -"2021,""6638 Satigny"",""Secteur tertiaire"",520,5048,1560,3488,4295,1144,3151" -"2021,""6639 Soral"",""Secteur conomique - total"",47,192,93,99,141,64,77" -"2021,""6639 Soral"",""Secteur primaire"",13,46,X,X,30,X,X" -"2021,""6639 Soral"",""Secteur secondaire"",5,10,X,X,9,X,X" -"2021,""6639 Soral"",""Secteur tertiaire"",29,136,82,54,102,57,45" -"2021,""6640 Thnex"",""Secteur conomique - total"",734,6337,3302,3035,5267,2573,2694" -"2021,""6640 Thnex"",""Secteur primaire"",5,14,X,X,7,X,X" -"2021,""6640 Thnex"",""Secteur secondaire"",92,1275,X,X,1229,X,X" -"2021,""6640 Thnex"",""Secteur tertiaire"",637,5048,2964,2084,4031,2263,1768" -"2021,""6641 Troinex"",""Secteur conomique - total"",147,590,206,384,481,136,344" -"2021,""6641 Troinex"",""Secteur primaire"",14,119,X,X,103,X,X" -"2021,""6641 Troinex"",""Secteur secondaire"",22,111,X,X,101,X,X" -"2021,""6641 Troinex"",""Secteur tertiaire"",111,360,151,209,277,97,180" -"2021,""6642 Vandoeuvres"",""Secteur conomique - total"",157,554,214,340,447,142,304" -"2021,""6642 Vandoeuvres"",""Secteur primaire"",X,10,X,X,8,X,X" -"2021,""6642 Vandoeuvres"",""Secteur secondaire"",X,90,X,X,85,X,X" -"2021,""6642 Vandoeuvres"",""Secteur tertiaire"",139,454,201,253,354,134,220" -"2021,""6643 Vernier"",""Secteur conomique - total"",1975,21665,8173,13492,18569,6178,12391" -"2021,""6643 Vernier"",""Secteur primaire"",6,14,X,X,10,X,X" -"2021,""6643 Vernier"",""Secteur secondaire"",470,6070,X,X,5777,X,X" -"2021,""6643 Vernier"",""Secteur tertiaire"",1499,15581,7151,8430,12782,5300,7482" -"2021,""6644 Versoix"",""Secteur conomique - total"",781,4169,2120,2049,3290,1516,1775" -"2021,""6644 Versoix"",""Secteur primaire"",12,31,X,X,22,X,X" -"2021,""6644 Versoix"",""Secteur secondaire"",110,488,X,X,444,X,X" -"2021,""6644 Versoix"",""Secteur tertiaire"",659,3650,2010,1640,2824,1434,1391" -"2021,""6645 Veyrier"",""Secteur conomique - total"",527,2677,1462,1215,2078,1042,1036" -"2021,""6645 Veyrier"",""Secteur primaire"",6,34,9,25,26,6,20" -"2021,""6645 Veyrier"",""Secteur secondaire"",50,256,35,221,238,24,214" -"2021,""6645 Veyrier"",""Secteur tertiaire"",471,2387,1418,969,1814,1012,802" -"2021,""6702 Bocourt"",""Secteur conomique - total"",63,414,183,231,332,131,201" -"2021,""6702 Bocourt"",""Secteur primaire"",14,39,10,29,28,5,22" -"2021,""6702 Bocourt"",""Secteur secondaire"",12,287,120,167,258,100,159" -"2021,""6702 Bocourt"",""Secteur tertiaire"",37,88,53,35,46,26,20" -"2021,""6703 Bourrignon"",""Secteur conomique - total"",36,92,33,59,62,15,47" -"2021,""6703 Bourrignon"",""Secteur primaire"",23,58,22,36,39,10,28" -"2021,""6703 Bourrignon"",""Secteur secondaire"",5,22,X,X,18,X,X" -"2021,""6703 Bourrignon"",""Secteur tertiaire"",8,12,X,X,6,X,X" -"2021,""6704 Chtillon (JU)"",""Secteur conomique - total"",20,53,16,37,40,8,32" -"2021,""6704 Chtillon (JU)"",""Secteur primaire"",X,27,X,X,22,X,X" -"2021,""6704 Chtillon (JU)"",""Secteur secondaire"",X,6,X,X,6,X,X" -"2021,""6704 Chtillon (JU)"",""Secteur tertiaire"",9,20,12,8,13,6,7" -"2021,""6706 Courchapoix"",""Secteur conomique - total"",27,130,31,99,105,18,87" -"2021,""6706 Courchapoix"",""Secteur primaire"",9,25,X,X,18,X,X" -"2021,""6706 Courchapoix"",""Secteur secondaire"",4,84,11,73,78,9,69" -"2021,""6706 Courchapoix"",""Secteur tertiaire"",14,21,X,X,9,X,X" -"2021,""6708 Courrendlin"",""Secteur conomique - total"",212,977,375,602,744,241,503" -"2021,""6708 Courrendlin"",""Secteur primaire"",29,62,18,44,39,8,31" -"2021,""6708 Courrendlin"",""Secteur secondaire"",52,363,73,290,328,55,273" -"2021,""6708 Courrendlin"",""Secteur tertiaire"",131,552,284,268,377,178,199" -"2021,""6709 Courroux"",""Secteur conomique - total"",226,945,396,549,727,258,469" -"2021,""6709 Courroux"",""Secteur primaire"",33,85,25,60,61,14,47" -"2021,""6709 Courroux"",""Secteur secondaire"",48,294,58,236,260,36,224" -"2021,""6709 Courroux"",""Secteur tertiaire"",145,566,313,253,406,208,198" -"2021,""6710 Courttelle"",""Secteur conomique - total"",161,1077,332,745,790,187,602" -"2021,""6710 Courttelle"",""Secteur primaire"",13,35,X,X,23,X,X" -"2021,""6710 Courttelle"",""Secteur secondaire"",31,475,X,X,450,X,X" -"2021,""6710 Courttelle"",""Secteur tertiaire"",117,567,275,292,316,148,168" -"2021,""6711 Delmont"",""Secteur conomique - total"",1346,13139,6433,6706,10321,4391,5930" -"2021,""6711 Delmont"",""Secteur primaire"",19,58,16,42,44,8,36" -"2021,""6711 Delmont"",""Secteur secondaire"",189,3561,987,2574,3285,812,2473" -"2021,""6711 Delmont"",""Secteur tertiaire"",1138,9520,5430,4090,6992,3571,3420" -"2021,""6712 Develier"",""Secteur conomique - total"",108,672,197,475,565,138,426" -"2021,""6712 Develier"",""Secteur primaire"",18,49,16,33,37,11,26" -"2021,""6712 Develier"",""Secteur secondaire"",25,248,71,177,223,57,167" -"2021,""6712 Develier"",""Secteur tertiaire"",65,375,110,265,304,70,234" -"2021,""6713 Ederswiler"",""Secteur conomique - total"",10,25,10,15,18,5,13" -"2021,""6713 Ederswiler"",""Secteur primaire"",6,18,X,X,14,X,X" -"2021,""6713 Ederswiler"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6713 Ederswiler"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""6715 Mervelier"",""Secteur conomique - total"",45,85,37,48,50,16,34" -"2021,""6715 Mervelier"",""Secteur primaire"",10,30,X,X,19,X,X" -"2021,""6715 Mervelier"",""Secteur secondaire"",9,16,X,X,12,X,X" -"2021,""6715 Mervelier"",""Secteur tertiaire"",26,39,22,17,19,9,10" -"2021,""6716 Mettembert"",""Secteur conomique - total"",8,15,X,X,8,X,X" -"2021,""6716 Mettembert"",""Secteur primaire"",X,7,X,X,X,X,X" -"2021,""6716 Mettembert"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""6716 Mettembert"",""Secteur tertiaire"",X,8,X,X,X,X,X" -"2021,""6718 Movelier"",""Secteur conomique - total"",29,78,22,56,56,12,44" -"2021,""6718 Movelier"",""Secteur primaire"",7,29,11,18,22,8,14" -"2021,""6718 Movelier"",""Secteur secondaire"",10,26,X,X,22,X,X" -"2021,""6718 Movelier"",""Secteur tertiaire"",12,23,X,X,12,X,X" -"2021,""6719 Pleigne"",""Secteur conomique - total"",31,127,53,74,92,31,61" -"2021,""6719 Pleigne"",""Secteur primaire"",X,45,X,X,37,X,X" -"2021,""6719 Pleigne"",""Secteur secondaire"",X,25,X,X,23,X,X" -"2021,""6719 Pleigne"",""Secteur tertiaire"",15,57,36,21,32,20,12" -"2021,""6721 Rossemaison"",""Secteur conomique - total"",48,173,63,110,127,37,90" -"2021,""6721 Rossemaison"",""Secteur primaire"",8,19,X,X,15,X,X" -"2021,""6721 Rossemaison"",""Secteur secondaire"",11,35,X,X,29,X,X" -"2021,""6721 Rossemaison"",""Secteur tertiaire"",29,119,55,64,83,33,50" -"2021,""6722 Saulcy"",""Secteur conomique - total"",20,73,23,50,55,12,43" -"2021,""6722 Saulcy"",""Secteur primaire"",11,29,14,15,20,7,13" -"2021,""6722 Saulcy"",""Secteur secondaire"",X,26,X,X,24,X,X" -"2021,""6722 Saulcy"",""Secteur tertiaire"",X,18,X,X,11,X,X" -"2021,""6724 Soyhires"",""Secteur conomique - total"",41,116,75,41,71,41,30" -"2021,""6724 Soyhires"",""Secteur primaire"",4,12,7,5,9,5,4" -"2021,""6724 Soyhires"",""Secteur secondaire"",5,20,9,11,14,5,9" -"2021,""6724 Soyhires"",""Secteur tertiaire"",32,84,59,25,48,32,17" -"2021,""6729 Haute-Sorne"",""Secteur conomique - total"",493,3253,1529,1724,2572,1065,1508" -"2021,""6729 Haute-Sorne"",""Secteur primaire"",64,164,49,115,109,27,82" -"2021,""6729 Haute-Sorne"",""Secteur secondaire"",136,1805,674,1131,1621,558,1063" -"2021,""6729 Haute-Sorne"",""Secteur tertiaire"",293,1284,806,478,842,479,363" -"2021,""6730 Val Terbi"",""Secteur conomique - total"",231,1069,483,586,787,298,489" -"2021,""6730 Val Terbi"",""Secteur primaire"",62,160,44,116,111,22,89" -"2021,""6730 Val Terbi"",""Secteur secondaire"",51,378,83,295,330,58,271" -"2021,""6730 Val Terbi"",""Secteur tertiaire"",118,531,356,175,347,218,129" -"2021,""6741 Le Bmont (JU)"",""Secteur conomique - total"",41,96,35,61,71,21,50" -"2021,""6741 Le Bmont (JU)"",""Secteur primaire"",28,66,23,43,49,13,36" -"2021,""6741 Le Bmont (JU)"",""Secteur secondaire"",X,8,X,X,6,X,X" -"2021,""6741 Le Bmont (JU)"",""Secteur tertiaire"",X,22,X,X,16,X,X" -"2021,""6742 Les Bois"",""Secteur conomique - total"",122,494,213,281,386,148,238" -"2021,""6742 Les Bois"",""Secteur primaire"",40,106,39,67,79,26,54" -"2021,""6742 Les Bois"",""Secteur secondaire"",24,242,86,156,214,72,141" -"2021,""6742 Les Bois"",""Secteur tertiaire"",58,146,88,58,93,50,43" -"2021,""6743 Les Breuleux"",""Secteur conomique - total"",115,1212,537,675,1013,394,619" -"2021,""6743 Les Breuleux"",""Secteur primaire"",23,58,16,42,40,9,31" -"2021,""6743 Les Breuleux"",""Secteur secondaire"",32,867,345,522,779,276,503" -"2021,""6743 Les Breuleux"",""Secteur tertiaire"",60,287,176,111,193,109,85" -"2021,""6744 La Chaux-des-Breuleux"",""Secteur conomique - total"",10,24,9,15,16,5,11" -"2021,""6744 La Chaux-des-Breuleux"",""Secteur primaire"",6,17,X,X,11,X,X" -"2021,""6744 La Chaux-des-Breuleux"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6744 La Chaux-des-Breuleux"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""6745 Les Enfers"",""Secteur conomique - total"",25,56,23,33,37,12,25" -"2021,""6745 Les Enfers"",""Secteur primaire"",13,41,14,27,30,8,22" -"2021,""6745 Les Enfers"",""Secteur secondaire"",5,5,X,X,X,X,X" -"2021,""6745 Les Enfers"",""Secteur tertiaire"",7,10,X,X,X,X,X" -"2021,""6748 Les Genevez (JU)"",""Secteur conomique - total"",51,356,161,195,302,124,178" -"2021,""6748 Les Genevez (JU)"",""Secteur primaire"",15,33,11,22,24,7,17" -"2021,""6748 Les Genevez (JU)"",""Secteur secondaire"",10,258,114,144,238,100,138" -"2021,""6748 Les Genevez (JU)"",""Secteur tertiaire"",26,65,36,29,40,18,22" -"2021,""6750 Lajoux (JU)"",""Secteur conomique - total"",50,207,97,110,152,59,94" -"2021,""6750 Lajoux (JU)"",""Secteur primaire"",18,41,15,26,29,7,22" -"2021,""6750 Lajoux (JU)"",""Secteur secondaire"",11,68,7,61,63,6,57" -"2021,""6750 Lajoux (JU)"",""Secteur tertiaire"",21,98,75,23,61,46,15" -"2021,""6751 Montfaucon"",""Secteur conomique - total"",70,198,104,94,127,52,76" -"2021,""6751 Montfaucon"",""Secteur primaire"",26,51,15,36,39,9,30" -"2021,""6751 Montfaucon"",""Secteur secondaire"",12,43,16,27,32,9,23" -"2021,""6751 Montfaucon"",""Secteur tertiaire"",32,104,73,31,56,34,22" -"2021,""6753 Muriaux"",""Secteur conomique - total"",76,190,83,107,133,49,84" -"2021,""6753 Muriaux"",""Secteur primaire"",38,112,46,66,79,28,51" -"2021,""6753 Muriaux"",""Secteur secondaire"",7,30,13,17,23,8,15" -"2021,""6753 Muriaux"",""Secteur tertiaire"",31,48,24,24,31,13,18" -"2021,""6754 Le Noirmont"",""Secteur conomique - total"",180,2065,921,1144,1722,681,1041" -"2021,""6754 Le Noirmont"",""Secteur primaire"",22,53,16,37,36,9,28" -"2021,""6754 Le Noirmont"",""Secteur secondaire"",51,1217,455,762,1120,392,728" -"2021,""6754 Le Noirmont"",""Secteur tertiaire"",107,795,450,345,565,281,285" -"2021,""6757 Saignelgier"",""Secteur conomique - total"",312,1823,863,960,1398,578,820" -"2021,""6757 Saignelgier"",""Secteur primaire"",38,97,35,62,67,17,50" -"2021,""6757 Saignelgier"",""Secteur secondaire"",64,621,181,440,555,140,415" -"2021,""6757 Saignelgier"",""Secteur tertiaire"",210,1105,647,458,776,422,354" -"2021,""6758 Saint-Brais"",""Secteur conomique - total"",39,91,33,58,53,14,38" -"2021,""6758 Saint-Brais"",""Secteur primaire"",21,51,16,35,32,7,26" -"2021,""6758 Saint-Brais"",""Secteur secondaire"",4,10,X,X,6,X,X" -"2021,""6758 Saint-Brais"",""Secteur tertiaire"",14,30,X,X,15,X,X" -"2021,""6759 Soubey"",""Secteur conomique - total"",20,50,20,30,32,10,22" -"2021,""6759 Soubey"",""Secteur primaire"",12,32,X,X,25,X,X" -"2021,""6759 Soubey"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""6759 Soubey"",""Secteur tertiaire"",8,18,X,X,7,X,X" -"2021,""6771 Alle"",""Secteur conomique - total"",138,1064,451,613,862,330,532" -"2021,""6771 Alle"",""Secteur primaire"",16,75,10,65,47,5,42" -"2021,""6771 Alle"",""Secteur secondaire"",30,607,252,355,539,208,331" -"2021,""6771 Alle"",""Secteur tertiaire"",92,382,189,193,277,117,159" -"2021,""6773 Beurnevsin"",""Secteur conomique - total"",15,35,18,17,23,11,12" -"2021,""6773 Beurnevsin"",""Secteur primaire"",8,25,11,14,16,7,9" -"2021,""6773 Beurnevsin"",""Secteur secondaire"",X,X,X,X,X,X,X" -"2021,""6773 Beurnevsin"",""Secteur tertiaire"",X,X,X,X,X,X,X" -"2021,""6774 Boncourt"",""Secteur conomique - total"",105,1737,611,1126,1484,454,1029" -"2021,""6774 Boncourt"",""Secteur primaire"",13,50,X,X,31,X,X" -"2021,""6774 Boncourt"",""Secteur secondaire"",19,885,X,X,843,X,X" -"2021,""6774 Boncourt"",""Secteur tertiaire"",73,802,371,431,610,247,363" -"2021,""6775 Bonfol"",""Secteur conomique - total"",63,353,179,174,297,139,158" -"2021,""6775 Bonfol"",""Secteur primaire"",12,34,X,X,22,X,X" -"2021,""6775 Bonfol"",""Secteur secondaire"",17,234,118,116,217,106,112" -"2021,""6775 Bonfol"",""Secteur tertiaire"",34,85,X,X,58,X,X" -"2021,""6778 Bure"",""Secteur conomique - total"",58,270,87,183,213,53,160" -"2021,""6778 Bure"",""Secteur primaire"",11,34,10,24,27,7,19" -"2021,""6778 Bure"",""Secteur secondaire"",12,112,20,92,97,15,82" -"2021,""6778 Bure"",""Secteur tertiaire"",35,124,57,67,89,31,59" -"2021,""6781 Coeuve"",""Secteur conomique - total"",48,149,65,84,91,30,61" -"2021,""6781 Coeuve"",""Secteur primaire"",15,61,X,X,30,X,X" -"2021,""6781 Coeuve"",""Secteur secondaire"",7,12,X,X,10,X,X" -"2021,""6781 Coeuve"",""Secteur tertiaire"",26,76,42,34,51,23,29" -"2021,""6782 Cornol"",""Secteur conomique - total"",68,377,122,255,310,82,228" -"2021,""6782 Cornol"",""Secteur primaire"",10,32,X,X,19,X,X" -"2021,""6782 Cornol"",""Secteur secondaire"",16,226,53,173,212,46,166" -"2021,""6782 Cornol"",""Secteur tertiaire"",42,119,X,X,80,X,X" -"2021,""6783 Courchavon"",""Secteur conomique - total"",30,174,67,107,139,43,96" -"2021,""6783 Courchavon"",""Secteur primaire"",7,21,X,X,15,X,X" -"2021,""6783 Courchavon"",""Secteur secondaire"",7,106,35,71,95,28,67" -"2021,""6783 Courchavon"",""Secteur tertiaire"",16,47,X,X,28,X,X" -"2021,""6784 Courgenay"",""Secteur conomique - total"",176,1018,397,621,823,272,551" -"2021,""6784 Courgenay"",""Secteur primaire"",29,83,26,57,62,17,45" -"2021,""6784 Courgenay"",""Secteur secondaire"",45,485,101,384,434,72,362" -"2021,""6784 Courgenay"",""Secteur tertiaire"",102,450,270,180,328,183,144" -"2021,""6785 Courtedoux"",""Secteur conomique - total"",54,266,67,199,218,42,175" -"2021,""6785 Courtedoux"",""Secteur primaire"",8,25,9,16,15,5,10" -"2021,""6785 Courtedoux"",""Secteur secondaire"",12,170,30,140,156,23,133" -"2021,""6785 Courtedoux"",""Secteur tertiaire"",34,71,28,43,47,15,32" -"2021,""6787 Damphreux"",""Secteur conomique - total"",16,32,10,22,23,5,18" -"2021,""6787 Damphreux"",""Secteur primaire"",6,18,X,X,16,X,X" -"2021,""6787 Damphreux"",""Secteur secondaire"",0,0,0,0,0,0,0" -"2021,""6787 Damphreux"",""Secteur tertiaire"",10,14,X,X,8,X,X" -"2021,""6789 Fahy"",""Secteur conomique - total"",40,139,52,87,100,31,69" -"2021,""6789 Fahy"",""Secteur primaire"",13,33,11,22,22,7,14" -"2021,""6789 Fahy"",""Secteur secondaire"",6,25,12,13,18,7,11" -"2021,""6789 Fahy"",""Secteur tertiaire"",21,81,29,52,60,17,43" -"2021,""6790 Fontenais"",""Secteur conomique - total"",108,271,100,171,198,59,139" -"2021,""6790 Fontenais"",""Secteur primaire"",20,52,14,38,40,7,33" -"2021,""6790 Fontenais"",""Secteur secondaire"",27,99,17,82,84,12,72" -"2021,""6790 Fontenais"",""Secteur tertiaire"",61,120,69,51,75,41,35" -"2021,""6792 Grandfontaine"",""Secteur conomique - total"",34,94,28,66,71,14,57" -"2021,""6792 Grandfontaine"",""Secteur primaire"",13,30,X,X,22,X,X" -"2021,""6792 Grandfontaine"",""Secteur secondaire"",6,32,X,X,28,X,X" -"2021,""6792 Grandfontaine"",""Secteur tertiaire"",15,32,16,16,21,8,12" -"2021,""6793 Lugnez"",""Secteur conomique - total"",20,52,20,32,37,9,28" -"2021,""6793 Lugnez"",""Secteur primaire"",7,22,X,X,17,X,X" -"2021,""6793 Lugnez"",""Secteur secondaire"",5,19,X,X,15,X,X" -"2021,""6793 Lugnez"",""Secteur tertiaire"",8,11,X,X,5,X,X" -"2021,""6800 Porrentruy"",""Secteur conomique - total"",828,7258,3467,3791,5633,2344,3288" -"2021,""6800 Porrentruy"",""Secteur primaire"",18,50,13,37,31,4,27" -"2021,""6800 Porrentruy"",""Secteur secondaire"",105,1521,417,1104,1376,322,1055" -"2021,""6800 Porrentruy"",""Secteur tertiaire"",705,5687,3037,2650,4225,2018,2207" -"2021,""6806 Vendlincourt"",""Secteur conomique - total"",40,248,50,198,217,34,183" -"2021,""6806 Vendlincourt"",""Secteur primaire"",9,28,8,20,23,5,18" -"2021,""6806 Vendlincourt"",""Secteur secondaire"",11,184,23,161,173,19,154" -"2021,""6806 Vendlincourt"",""Secteur tertiaire"",20,36,19,17,21,11,11" -"2021,""6807 Basse-Allaine"",""Secteur conomique - total"",103,489,201,288,343,118,225" -"2021,""6807 Basse-Allaine"",""Secteur primaire"",36,139,41,98,78,18,61" -"2021,""6807 Basse-Allaine"",""Secteur secondaire"",19,187,58,129,163,41,122" -"2021,""6807 Basse-Allaine"",""Secteur tertiaire"",48,163,102,61,101,59,42" -"2021,""6808 Clos du Doubs"",""Secteur conomique - total"",164,698,322,376,512,213,299" -"2021,""6808 Clos du Doubs"",""Secteur primaire"",72,211,65,146,143,37,107" -"2021,""6808 Clos du Doubs"",""Secteur secondaire"",28,121,22,99,104,11,93" -"2021,""6808 Clos du Doubs"",""Secteur tertiaire"",64,366,235,131,265,165,100" -"2021,""6809 Haute-Ajoie"",""Secteur conomique - total"",110,767,212,555,647,143,503" -"2021,""6809 Haute-Ajoie"",""Secteur primaire"",45,122,34,88,90,19,71" -"2021,""6809 Haute-Ajoie"",""Secteur secondaire"",16,477,76,401,448,65,383" -"2021,""6809 Haute-Ajoie"",""Secteur tertiaire"",49,168,102,66,109,60,49" -"2021,""6810 La Baroche"",""Secteur conomique - total"",97,395,197,198,286,121,165" -"2021,""6810 La Baroche"",""Secteur primaire"",40,102,24,78,74,12,63" -"2021,""6810 La Baroche"",""Secteur secondaire"",17,59,11,48,50,6,44" -"2021,""6810 La Baroche"",""Secteur tertiaire"",40,234,162,72,161,103,58" diff --git a/mobility/data/CH/CH-2021-emplois-communes.csv b/mobility/data/CH/CH-2021-emplois-communes.csv deleted file mode 100644 index 68a048b4..00000000 --- a/mobility/data/CH/CH-2021-emplois-communes.csv +++ /dev/null @@ -1,2165 +0,0 @@ -Anne;Commune;Secteur conomique;Emplois -2021;Suisse;Secteur conomique - total;5417999 -2021;1 Aeugst am Albis;Secteur conomique - total;470 -2021;2 Affoltern am Albis;Secteur conomique - total;6931 -2021;3 Bonstetten;Secteur conomique - total;1047 -2021;4 Hausen am Albis;Secteur conomique - total;1113 -2021;5 Hedingen;Secteur conomique - total;1409 -2021;6 Kappel am Albis;Secteur conomique - total;355 -2021;7 Knonau;Secteur conomique - total;516 -2021;8 Maschwanden;Secteur conomique - total;178 -2021;9 Mettmenstetten;Secteur conomique - total;1769 -2021;10 Obfelden;Secteur conomique - total;1464 -2021;11 Ottenbach;Secteur conomique - total;717 -2021;12 Rifferswil;Secteur conomique - total;277 -2021;13 Stallikon;Secteur conomique - total;777 -2021;14 Wettswil am Albis;Secteur conomique - total;1367 -2021;21 Adlikon;Secteur conomique - total;138 -2021;22 Benken (ZH);Secteur conomique - total;357 -2021;23 Berg am Irchel;Secteur conomique - total;142 -2021;24 Buch am Irchel;Secteur conomique - total;197 -2021;25 Dachsen;Secteur conomique - total;421 -2021;26 Dorf;Secteur conomique - total;164 -2021;27 Feuerthalen;Secteur conomique - total;1270 -2021;28 Flaach;Secteur conomique - total;754 -2021;29 Flurlingen;Secteur conomique - total;448 -2021;30 Andelfingen;Secteur conomique - total;1724 -2021;31 Henggart;Secteur conomique - total;727 -2021;32 Humlikon;Secteur conomique - total;162 -2021;33 Kleinandelfingen;Secteur conomique - total;1118 -2021;34 Laufen-Uhwiesen;Secteur conomique - total;435 -2021;35 Marthalen;Secteur conomique - total;1237 -2021;37 Ossingen;Secteur conomique - total;456 -2021;38 Rheinau;Secteur conomique - total;785 -2021;39 Thalheim an der Thur;Secteur conomique - total;294 -2021;40 Trllikon;Secteur conomique - total;337 -2021;41 Truttikon;Secteur conomique - total;123 -2021;43 Volken;Secteur conomique - total;86 -2021;51 Bachenblach;Secteur conomique - total;1730 -2021;52 Bassersdorf;Secteur conomique - total;4507 -2021;53 Blach;Secteur conomique - total;10845 -2021;54 Dietlikon;Secteur conomique - total;5751 -2021;55 Eglisau;Secteur conomique - total;1325 -2021;56 Embrach;Secteur conomique - total;3748 -2021;57 Freienstein-Teufen;Secteur conomique - total;762 -2021;58 Glattfelden;Secteur conomique - total;1066 -2021;59 Hochfelden;Secteur conomique - total;403 -2021;60 Hri;Secteur conomique - total;1248 -2021;61 Hntwangen;Secteur conomique - total;362 -2021;62 Kloten;Secteur conomique - total;35226 -2021;63 Lufingen;Secteur conomique - total;498 -2021;64 Nrensdorf;Secteur conomique - total;1147 -2021;65 Oberembrach;Secteur conomique - total;254 -2021;66 Opfikon;Secteur conomique - total;24028 -2021;67 Rafz;Secteur conomique - total;1618 -2021;68 Rorbas;Secteur conomique - total;513 -2021;69 Wallisellen;Secteur conomique - total;21225 -2021;70 Wasterkingen;Secteur conomique - total;75 -2021;71 Wil (ZH);Secteur conomique - total;503 -2021;72 Winkel;Secteur conomique - total;1033 -2021;81 Bachs;Secteur conomique - total;238 -2021;82 Boppelsen;Secteur conomique - total;329 -2021;83 Buchs (ZH);Secteur conomique - total;2452 -2021;84 Dllikon;Secteur conomique - total;2934 -2021;85 Dnikon;Secteur conomique - total;409 -2021;86 Dielsdorf;Secteur conomique - total;4535 -2021;87 Httikon;Secteur conomique - total;104 -2021;88 Neerach;Secteur conomique - total;680 -2021;89 Niederglatt;Secteur conomique - total;1700 -2021;90 Niederhasli;Secteur conomique - total;2580 -2021;91 Niederweningen;Secteur conomique - total;878 -2021;92 Oberglatt;Secteur conomique - total;1927 -2021;93 Oberweningen;Secteur conomique - total;241 -2021;94 Otelfingen;Secteur conomique - total;2441 -2021;95 Regensberg;Secteur conomique - total;299 -2021;96 Regensdorf;Secteur conomique - total;10239 -2021;97 Rmlang;Secteur conomique - total;6596 -2021;98 Schleinikon;Secteur conomique - total;156 -2021;99 Schfflisdorf;Secteur conomique - total;328 -2021;100 Stadel;Secteur conomique - total;518 -2021;101 Steinmaur;Secteur conomique - total;840 -2021;102 Weiach;Secteur conomique - total;304 -2021;111 Bretswil;Secteur conomique - total;1668 -2021;112 Bubikon;Secteur conomique - total;3791 -2021;113 Drnten;Secteur conomique - total;1903 -2021;114 Fischenthal;Secteur conomique - total;674 -2021;115 Gossau (ZH);Secteur conomique - total;2548 -2021;116 Grningen;Secteur conomique - total;1864 -2021;117 Hinwil;Secteur conomique - total;7324 -2021;118 Rti (ZH);Secteur conomique - total;5215 -2021;119 Seegrben;Secteur conomique - total;556 -2021;120 Wald (ZH);Secteur conomique - total;3486 -2021;121 Wetzikon (ZH);Secteur conomique - total;14354 -2021;131 Adliswil;Secteur conomique - total;7464 -2021;135 Kilchberg (ZH);Secteur conomique - total;4312 -2021;136 Langnau am Albis;Secteur conomique - total;1589 -2021;137 Oberrieden;Secteur conomique - total;1026 -2021;138 Richterswil;Secteur conomique - total;4238 -2021;139 Rschlikon;Secteur conomique - total;2950 -2021;141 Thalwil;Secteur conomique - total;6728 -2021;151 Erlenbach (ZH);Secteur conomique - total;1887 -2021;152 Herrliberg;Secteur conomique - total;1538 -2021;153 Hombrechtikon;Secteur conomique - total;2899 -2021;154 Ksnacht (ZH);Secteur conomique - total;6293 -2021;155 Mnnedorf;Secteur conomique - total;5354 -2021;156 Meilen;Secteur conomique - total;6111 -2021;157 Oetwil am See;Secteur conomique - total;2178 -2021;158 Stfa;Secteur conomique - total;6426 -2021;159 Uetikon am See;Secteur conomique - total;1650 -2021;160 Zumikon;Secteur conomique - total;1874 -2021;161 Zollikon;Secteur conomique - total;6411 -2021;172 Fehraltorf;Secteur conomique - total;4747 -2021;173 Hittnau;Secteur conomique - total;832 -2021;176 Lindau;Secteur conomique - total;3244 -2021;177 Pfffikon;Secteur conomique - total;6086 -2021;178 Russikon;Secteur conomique - total;1173 -2021;180 Weisslingen;Secteur conomique - total;876 -2021;181 Wila;Secteur conomique - total;608 -2021;182 Wildberg;Secteur conomique - total;264 -2021;191 Dbendorf;Secteur conomique - total;20149 -2021;192 Egg;Secteur conomique - total;2735 -2021;193 Fllanden;Secteur conomique - total;2945 -2021;194 Greifensee;Secteur conomique - total;1750 -2021;195 Maur;Secteur conomique - total;2359 -2021;196 Mnchaltorf;Secteur conomique - total;1420 -2021;197 Schwerzenbach;Secteur conomique - total;2688 -2021;198 Uster;Secteur conomique - total;17583 -2021;199 Volketswil;Secteur conomique - total;11534 -2021;200 Wangen-Brttisellen;Secteur conomique - total;5286 -2021;211 Altikon;Secteur conomique - total;166 -2021;213 Brtten;Secteur conomique - total;395 -2021;214 Dgerlen;Secteur conomique - total;292 -2021;215 Dttlikon;Secteur conomique - total;189 -2021;216 Dinhard;Secteur conomique - total;437 -2021;218 Ellikon an der Thur;Secteur conomique - total;650 -2021;219 Elsau;Secteur conomique - total;1140 -2021;220 Hagenbuch;Secteur conomique - total;198 -2021;221 Hettlingen;Secteur conomique - total;846 -2021;223 Neftenbach;Secteur conomique - total;1715 -2021;224 Pfungen;Secteur conomique - total;1458 -2021;225 Rickenbach (ZH);Secteur conomique - total;547 -2021;226 Schlatt (ZH);Secteur conomique - total;140 -2021;227 Seuzach;Secteur conomique - total;2667 -2021;228 Turbenthal;Secteur conomique - total;1586 -2021;230 Winterthur;Secteur conomique - total;75220 -2021;231 Zell (ZH);Secteur conomique - total;1532 -2021;241 Aesch (ZH);Secteur conomique - total;364 -2021;242 Birmensdorf (ZH);Secteur conomique - total;2641 -2021;243 Dietikon;Secteur conomique - total;19198 -2021;244 Geroldswil;Secteur conomique - total;2256 -2021;245 Oberengstringen;Secteur conomique - total;1333 -2021;246 Oetwil an der Limmat;Secteur conomique - total;260 -2021;247 Schlieren;Secteur conomique - total;19963 -2021;248 Uitikon;Secteur conomique - total;1105 -2021;249 Unterengstringen;Secteur conomique - total;953 -2021;250 Urdorf;Secteur conomique - total;8663 -2021;251 Weiningen (ZH);Secteur conomique - total;2164 -2021;261 Zrich;Secteur conomique - total;514995 -2021;292 Stammheim;Secteur conomique - total;1319 -2021;293 Wdenswil;Secteur conomique - total;10179 -2021;294 Elgg;Secteur conomique - total;1705 -2021;295 Horgen;Secteur conomique - total;10583 -2021;296 Illnau-Effretikon;Secteur conomique - total;6766 -2021;297 Bauma;Secteur conomique - total;1830 -2021;298 Wiesendangen;Secteur conomique - total;1611 -2021;301 Aarberg;Secteur conomique - total;2976 -2021;302 Bargen (BE);Secteur conomique - total;409 -2021;303 Grossaffoltern;Secteur conomique - total;725 -2021;304 Kallnach;Secteur conomique - total;1104 -2021;305 Kappelen;Secteur conomique - total;672 -2021;306 Lyss;Secteur conomique - total;8714 -2021;307 Meikirch;Secteur conomique - total;516 -2021;309 Radelfingen;Secteur conomique - total;267 -2021;310 Rapperswil (BE);Secteur conomique - total;865 -2021;311 Schpfen;Secteur conomique - total;1293 -2021;312 Seedorf (BE);Secteur conomique - total;1246 -2021;321 Aarwangen;Secteur conomique - total;1506 -2021;322 Auswil;Secteur conomique - total;137 -2021;323 Bannwil;Secteur conomique - total;287 -2021;324 Bleienbach;Secteur conomique - total;465 -2021;325 Busswil bei Melchnau;Secteur conomique - total;48 -2021;326 Gondiswil;Secteur conomique - total;244 -2021;329 Langenthal;Secteur conomique - total;12793 -2021;331 Lotzwil;Secteur conomique - total;926 -2021;332 Madiswil;Secteur conomique - total;1225 -2021;333 Melchnau;Secteur conomique - total;654 -2021;335 Oeschenbach;Secteur conomique - total;98 -2021;336 Reisiswil;Secteur conomique - total;51 -2021;337 Roggwil (BE);Secteur conomique - total;1733 -2021;338 Rohrbach;Secteur conomique - total;582 -2021;339 Rohrbachgraben;Secteur conomique - total;163 -2021;340 Rtschelen;Secteur conomique - total;93 -2021;341 Schwarzhusern;Secteur conomique - total;77 -2021;342 Thunstetten;Secteur conomique - total;1557 -2021;344 Ursenbach;Secteur conomique - total;443 -2021;345 Wynau;Secteur conomique - total;363 -2021;351 Bern;Secteur conomique - total;193347 -2021;352 Bolligen;Secteur conomique - total;1666 -2021;353 Bremgarten bei Bern;Secteur conomique - total;682 -2021;354 Kirchlindach;Secteur conomique - total;867 -2021;355 Kniz;Secteur conomique - total;20899 -2021;356 Muri bei Bern;Secteur conomique - total;10444 -2021;357 Oberbalm;Secteur conomique - total;299 -2021;358 Stettlen;Secteur conomique - total;809 -2021;359 Vechigen;Secteur conomique - total;1408 -2021;360 Wohlen bei Bern;Secteur conomique - total;1986 -2021;361 Zollikofen;Secteur conomique - total;9136 -2021;362 Ittigen;Secteur conomique - total;13110 -2021;363 Ostermundigen;Secteur conomique - total;8138 -2021;371 Biel/Bienne;Secteur conomique - total;42400 -2021;372 Evilard;Secteur conomique - total;338 -2021;381 Arch;Secteur conomique - total;548 -2021;382 Betigen;Secteur conomique - total;138 -2021;383 Bren an der Aare;Secteur conomique - total;2250 -2021;385 Diessbach bei Bren;Secteur conomique - total;294 -2021;386 Dotzigen;Secteur conomique - total;813 -2021;387 Lengnau (BE);Secteur conomique - total;1537 -2021;388 Leuzigen;Secteur conomique - total;269 -2021;389 Meienried;Secteur conomique - total;18 -2021;390 Meinisberg;Secteur conomique - total;264 -2021;391 Oberwil bei Bren;Secteur conomique - total;167 -2021;392 Pieterlen;Secteur conomique - total;1342 -2021;393 Rti bei Bren;Secteur conomique - total;515 -2021;394 Wengi;Secteur conomique - total;153 -2021;401 Aefligen;Secteur conomique - total;281 -2021;402 Alchenstorf;Secteur conomique - total;134 -2021;403 Briswil;Secteur conomique - total;207 -2021;404 Burgdorf;Secteur conomique - total;14416 -2021;405 Ersigen;Secteur conomique - total;575 -2021;406 Hasle bei Burgdorf;Secteur conomique - total;1360 -2021;407 Heimiswil;Secteur conomique - total;476 -2021;408 Hellsau;Secteur conomique - total;145 -2021;409 Hindelbank;Secteur conomique - total;1030 -2021;410 Hchstetten;Secteur conomique - total;93 -2021;411 Kernenried;Secteur conomique - total;129 -2021;412 Kirchberg (BE);Secteur conomique - total;3260 -2021;413 Koppigen;Secteur conomique - total;949 -2021;414 Krauchthal;Secteur conomique - total;528 -2021;415 Lyssach;Secteur conomique - total;1599 -2021;418 Oberburg;Secteur conomique - total;1242 -2021;420 Rdtligen-Alchenflh;Secteur conomique - total;1150 -2021;421 Rumendingen;Secteur conomique - total;144 -2021;422 Rti bei Lyssach;Secteur conomique - total;26 -2021;423 Willadingen;Secteur conomique - total;40 -2021;424 Wynigen;Secteur conomique - total;779 -2021;431 Corgmont;Secteur conomique - total;636 -2021;432 Cormoret;Secteur conomique - total;127 -2021;433 Cortbert;Secteur conomique - total;237 -2021;434 Courtelary;Secteur conomique - total;779 -2021;435 La Ferrire;Secteur conomique - total;215 -2021;437 Mont-Tramelan;Secteur conomique - total;52 -2021;438 Orvin;Secteur conomique - total;491 -2021;441 Renan (BE);Secteur conomique - total;249 -2021;442 Romont (BE);Secteur conomique - total;37 -2021;443 Saint-Imier;Secteur conomique - total;3799 -2021;444 Sonceboz-Sombeval;Secteur conomique - total;1782 -2021;445 Sonvilier;Secteur conomique - total;331 -2021;446 Tramelan;Secteur conomique - total;2382 -2021;448 Villeret;Secteur conomique - total;1293 -2021;449 Sauge;Secteur conomique - total;151 -2021;450 Pry-La Heutte;Secteur conomique - total;457 -2021;491 Brttelen;Secteur conomique - total;310 -2021;492 Erlach;Secteur conomique - total;359 -2021;493 Finsterhennen;Secteur conomique - total;178 -2021;494 Gals;Secteur conomique - total;636 -2021;495 Gampelen;Secteur conomique - total;770 -2021;496 Ins;Secteur conomique - total;1725 -2021;497 Lscherz;Secteur conomique - total;142 -2021;498 Mntschemier;Secteur conomique - total;1077 -2021;499 Siselen;Secteur conomique - total;197 -2021;500 Treiten;Secteur conomique - total;132 -2021;501 Tschugg;Secteur conomique - total;428 -2021;502 Vinelz;Secteur conomique - total;220 -2021;533 Btterkinden;Secteur conomique - total;976 -2021;535 Deisswil bei Mnchenbuchsee;Secteur conomique - total;396 -2021;536 Diemerswil;Secteur conomique - total;73 -2021;538 Fraubrunnen;Secteur conomique - total;1262 -2021;540 Jegenstorf;Secteur conomique - total;2303 -2021;541 Iffwil;Secteur conomique - total;154 -2021;543 Mattstetten;Secteur conomique - total;190 -2021;544 Moosseedorf;Secteur conomique - total;5143 -2021;546 Mnchenbuchsee;Secteur conomique - total;5114 -2021;551 Urtenen-Schnbhl;Secteur conomique - total;4340 -2021;552 Utzenstorf;Secteur conomique - total;1651 -2021;553 Wiggiswil;Secteur conomique - total;42 -2021;554 Wiler bei Utzenstorf;Secteur conomique - total;332 -2021;556 Zielebach;Secteur conomique - total;41 -2021;557 Zuzwil (BE);Secteur conomique - total;77 -2021;561 Adelboden;Secteur conomique - total;2419 -2021;562 Aeschi bei Spiez;Secteur conomique - total;1041 -2021;563 Frutigen;Secteur conomique - total;4409 -2021;564 Kandergrund;Secteur conomique - total;310 -2021;565 Kandersteg;Secteur conomique - total;694 -2021;566 Krattigen;Secteur conomique - total;281 -2021;567 Reichenbach im Kandertal;Secteur conomique - total;1393 -2021;571 Beatenberg;Secteur conomique - total;563 -2021;572 Bnigen;Secteur conomique - total;703 -2021;573 Brienz (BE);Secteur conomique - total;1583 -2021;574 Brienzwiler;Secteur conomique - total;122 -2021;575 Drligen;Secteur conomique - total;78 -2021;576 Grindelwald;Secteur conomique - total;3115 -2021;577 Gsteigwiler;Secteur conomique - total;139 -2021;578 Gndlischwand;Secteur conomique - total;120 -2021;579 Habkern;Secteur conomique - total;279 -2021;580 Hofstetten bei Brienz;Secteur conomique - total;292 -2021;581 Interlaken;Secteur conomique - total;6739 -2021;582 Iseltwald;Secteur conomique - total;109 -2021;584 Lauterbrunnen;Secteur conomique - total;2043 -2021;585 Leissigen;Secteur conomique - total;225 -2021;586 Ltschental;Secteur conomique - total;145 -2021;587 Matten bei Interlaken;Secteur conomique - total;1270 -2021;588 Niederried bei Interlaken;Secteur conomique - total;49 -2021;589 Oberried am Brienzersee;Secteur conomique - total;160 -2021;590 Ringgenberg (BE);Secteur conomique - total;732 -2021;591 Saxeten;Secteur conomique - total;36 -2021;592 Schwanden bei Brienz;Secteur conomique - total;90 -2021;593 Unterseen;Secteur conomique - total;3365 -2021;594 Wilderswil;Secteur conomique - total;1166 -2021;602 Arni (BE);Secteur conomique - total;260 -2021;603 Biglen;Secteur conomique - total;740 -2021;605 Bowil;Secteur conomique - total;397 -2021;606 Brenzikofen;Secteur conomique - total;116 -2021;607 Freimettigen;Secteur conomique - total;72 -2021;608 Grosshchstetten;Secteur conomique - total;1702 -2021;609 Hutligen;Secteur conomique - total;56 -2021;610 Herbligen;Secteur conomique - total;184 -2021;611 Kiesen;Secteur conomique - total;433 -2021;612 Konolfingen;Secteur conomique - total;3093 -2021;613 Landiswil;Secteur conomique - total;319 -2021;614 Linden;Secteur conomique - total;531 -2021;615 Mirchel;Secteur conomique - total;134 -2021;616 Mnsingen;Secteur conomique - total;6718 -2021;617 Niederhnigen;Secteur conomique - total;131 -2021;619 Oberdiessbach;Secteur conomique - total;1757 -2021;620 Oberthal;Secteur conomique - total;359 -2021;622 Oppligen;Secteur conomique - total;217 -2021;623 Rubigen;Secteur conomique - total;1418 -2021;626 Walkringen;Secteur conomique - total;979 -2021;627 Worb;Secteur conomique - total;4026 -2021;628 Zziwil;Secteur conomique - total;473 -2021;629 Oberhnigen;Secteur conomique - total;77 -2021;630 Allmendingen;Secteur conomique - total;226 -2021;632 Wichtrach;Secteur conomique - total;1137 -2021;661 Clavaleyres;Secteur conomique - total;23 -2021;662 Ferenbalm;Secteur conomique - total;390 -2021;663 Frauenkappelen;Secteur conomique - total;447 -2021;665 Gurbr;Secteur conomique - total;68 -2021;666 Kriechenwil;Secteur conomique - total;105 -2021;667 Laupen;Secteur conomique - total;1313 -2021;668 Mhleberg;Secteur conomique - total;1306 -2021;669 Mnchenwiler;Secteur conomique - total;218 -2021;670 Neuenegg;Secteur conomique - total;2026 -2021;671 Wileroltigen;Secteur conomique - total;91 -2021;681 Belprahon;Secteur conomique - total;105 -2021;683 Champoz;Secteur conomique - total;32 -2021;687 Corcelles (BE);Secteur conomique - total;57 -2021;690 Court;Secteur conomique - total;643 -2021;691 Crmines;Secteur conomique - total;280 -2021;692 Eschert;Secteur conomique - total;152 -2021;694 Grandval;Secteur conomique - total;82 -2021;696 Loveresse;Secteur conomique - total;285 -2021;700 Moutier;Secteur conomique - total;3489 -2021;701 Perrefitte;Secteur conomique - total;84 -2021;703 Reconvilier;Secteur conomique - total;849 -2021;704 Roches (BE);Secteur conomique - total;50 -2021;706 Saicourt;Secteur conomique - total;288 -2021;707 Saules (BE);Secteur conomique - total;27 -2021;708 Schelten;Secteur conomique - total;26 -2021;709 Seehof;Secteur conomique - total;36 -2021;711 Sorvilier;Secteur conomique - total;61 -2021;713 Tavannes;Secteur conomique - total;1551 -2021;715 Rebvelier;Secteur conomique - total;25 -2021;716 Petit-Val;Secteur conomique - total;167 -2021;717 Valbirse;Secteur conomique - total;1786 -2021;723 La Neuveville;Secteur conomique - total;1561 -2021;724 Nods;Secteur conomique - total;204 -2021;726 Plateau de Diesse;Secteur conomique - total;402 -2021;731 Aegerten;Secteur conomique - total;436 -2021;732 Bellmund;Secteur conomique - total;231 -2021;733 Brgg;Secteur conomique - total;3101 -2021;734 Bhl;Secteur conomique - total;82 -2021;735 Epsach;Secteur conomique - total;84 -2021;736 Hagneck;Secteur conomique - total;97 -2021;737 Hermrigen;Secteur conomique - total;82 -2021;738 Jens;Secteur conomique - total;126 -2021;739 Ipsach;Secteur conomique - total;733 -2021;740 Ligerz;Secteur conomique - total;190 -2021;741 Merzligen;Secteur conomique - total;46 -2021;742 Mrigen;Secteur conomique - total;159 -2021;743 Nidau;Secteur conomique - total;2850 -2021;744 Orpund;Secteur conomique - total;808 -2021;745 Port;Secteur conomique - total;972 -2021;746 Safnern;Secteur conomique - total;498 -2021;747 Scheuren;Secteur conomique - total;128 -2021;748 Schwadernau;Secteur conomique - total;201 -2021;749 Studen (BE);Secteur conomique - total;1748 -2021;750 Sutz-Lattrigen;Secteur conomique - total;645 -2021;751 Tuffelen;Secteur conomique - total;1105 -2021;754 Walperswil;Secteur conomique - total;305 -2021;755 Worben;Secteur conomique - total;876 -2021;756 Twann-Tscherz;Secteur conomique - total;369 -2021;761 Drstetten;Secteur conomique - total;321 -2021;762 Diemtigen;Secteur conomique - total;1427 -2021;763 Erlenbach im Simmental;Secteur conomique - total;658 -2021;766 Oberwil im Simmental;Secteur conomique - total;324 -2021;767 Reutigen;Secteur conomique - total;198 -2021;768 Spiez;Secteur conomique - total;5884 -2021;769 Wimmis;Secteur conomique - total;1329 -2021;770 Stocken-Hfen;Secteur conomique - total;185 -2021;782 Guttannen;Secteur conomique - total;148 -2021;783 Hasliberg;Secteur conomique - total;903 -2021;784 Innertkirchen;Secteur conomique - total;600 -2021;785 Meiringen;Secteur conomique - total;2734 -2021;786 Schattenhalb;Secteur conomique - total;631 -2021;791 Boltigen;Secteur conomique - total;481 -2021;792 Lenk;Secteur conomique - total;1769 -2021;793 St. Stephan;Secteur conomique - total;699 -2021;794 Zweisimmen;Secteur conomique - total;1747 -2021;841 Gsteig;Secteur conomique - total;392 -2021;842 Lauenen;Secteur conomique - total;484 -2021;843 Saanen;Secteur conomique - total;6643 -2021;852 Guggisberg;Secteur conomique - total;563 -2021;853 Rschegg;Secteur conomique - total;461 -2021;855 Schwarzenburg;Secteur conomique - total;3245 -2021;861 Belp;Secteur conomique - total;5227 -2021;863 Burgistein;Secteur conomique - total;300 -2021;866 Gerzensee;Secteur conomique - total;306 -2021;867 Gurzelen;Secteur conomique - total;147 -2021;868 Jaberg;Secteur conomique - total;87 -2021;869 Kaufdorf;Secteur conomique - total;163 -2021;870 Kehrsatz;Secteur conomique - total;1052 -2021;872 Kirchdorf (BE);Secteur conomique - total;574 -2021;877 Niedermuhlern;Secteur conomique - total;162 -2021;879 Riggisberg;Secteur conomique - total;1929 -2021;880 Reggisberg;Secteur conomique - total;579 -2021;883 Seftigen;Secteur conomique - total;702 -2021;884 Toffen;Secteur conomique - total;477 -2021;885 Uttigen;Secteur conomique - total;326 -2021;886 Wattenwil;Secteur conomique - total;1061 -2021;888 Wald (BE);Secteur conomique - total;630 -2021;889 Thurnen;Secteur conomique - total;372 -2021;901 Eggiwil;Secteur conomique - total;1329 -2021;902 Langnau im Emmental;Secteur conomique - total;6184 -2021;903 Lauperswil;Secteur conomique - total;1298 -2021;904 Rthenbach im Emmental;Secteur conomique - total;597 -2021;905 Rderswil;Secteur conomique - total;763 -2021;906 Schangnau;Secteur conomique - total;578 -2021;907 Signau;Secteur conomique - total;1019 -2021;908 Trub;Secteur conomique - total;637 -2021;909 Trubschachen;Secteur conomique - total;1001 -2021;921 Amsoldingen;Secteur conomique - total;120 -2021;922 Blumenstein;Secteur conomique - total;329 -2021;923 Buchholterberg;Secteur conomique - total;484 -2021;924 Eriz;Secteur conomique - total;194 -2021;925 Fahrni;Secteur conomique - total;208 -2021;927 Heiligenschwendi;Secteur conomique - total;628 -2021;928 Heimberg;Secteur conomique - total;2410 -2021;929 Hilterfingen;Secteur conomique - total;977 -2021;931 Homberg;Secteur conomique - total;175 -2021;932 Horrenbach-Buchen;Secteur conomique - total;97 -2021;934 Oberhofen am Thunersee;Secteur conomique - total;855 -2021;935 Oberlangenegg;Secteur conomique - total;280 -2021;936 Pohlern;Secteur conomique - total;61 -2021;938 Sigriswil;Secteur conomique - total;1822 -2021;939 Steffisburg;Secteur conomique - total;6328 -2021;940 Teuffenthal (BE);Secteur conomique - total;69 -2021;941 Thierachern;Secteur conomique - total;472 -2021;942 Thun;Secteur conomique - total;28449 -2021;943 Uebeschi;Secteur conomique - total;222 -2021;944 Uetendorf;Secteur conomique - total;3543 -2021;945 Unterlangenegg;Secteur conomique - total;330 -2021;946 Wachseldorn;Secteur conomique - total;66 -2021;947 Zwieselberg;Secteur conomique - total;115 -2021;948 Forst-Lngenbhl;Secteur conomique - total;189 -2021;951 Affoltern im Emmental;Secteur conomique - total;504 -2021;952 Drrenroth;Secteur conomique - total;410 -2021;953 Eriswil;Secteur conomique - total;378 -2021;954 Huttwil;Secteur conomique - total;3159 -2021;955 Ltzelflh;Secteur conomique - total;1609 -2021;956 Regsau;Secteur conomique - total;1277 -2021;957 Sumiswald;Secteur conomique - total;2979 -2021;958 Trachselwald;Secteur conomique - total;375 -2021;959 Walterswil (BE);Secteur conomique - total;208 -2021;960 Wyssachen;Secteur conomique - total;561 -2021;971 Attiswil;Secteur conomique - total;486 -2021;972 Berken;Secteur conomique - total;44 -2021;973 Bettenhausen;Secteur conomique - total;103 -2021;975 Farnern;Secteur conomique - total;60 -2021;976 Graben;Secteur conomique - total;59 -2021;977 Heimenhausen;Secteur conomique - total;213 -2021;979 Herzogenbuchsee;Secteur conomique - total;4284 -2021;980 Inkwil;Secteur conomique - total;123 -2021;981 Niederbipp;Secteur conomique - total;3256 -2021;982 Niedernz;Secteur conomique - total;909 -2021;983 Oberbipp;Secteur conomique - total;878 -2021;985 Ochlenberg;Secteur conomique - total;186 -2021;987 Rumisberg;Secteur conomique - total;82 -2021;988 Seeberg;Secteur conomique - total;483 -2021;989 Thrigen;Secteur conomique - total;360 -2021;990 Walliswil bei Niederbipp;Secteur conomique - total;75 -2021;991 Walliswil bei Wangen;Secteur conomique - total;107 -2021;992 Wangen an der Aare;Secteur conomique - total;1059 -2021;993 Wangenried;Secteur conomique - total;110 -2021;995 Wiedlisbach;Secteur conomique - total;1335 -2021;1001 Doppleschwand;Secteur conomique - total;239 -2021;1002 Entlebuch;Secteur conomique - total;1814 -2021;1004 Flhli;Secteur conomique - total;1095 -2021;1005 Hasle (LU);Secteur conomique - total;904 -2021;1007 Romoos;Secteur conomique - total;288 -2021;1008 Schpfheim;Secteur conomique - total;2413 -2021;1009 Werthenstein;Secteur conomique - total;1883 -2021;1010 Escholzmatt-Marbach;Secteur conomique - total;2367 -2021;1021 Aesch (LU);Secteur conomique - total;527 -2021;1023 Ballwil;Secteur conomique - total;848 -2021;1024 Emmen;Secteur conomique - total;17110 -2021;1025 Ermensee;Secteur conomique - total;389 -2021;1026 Eschenbach (LU);Secteur conomique - total;1505 -2021;1030 Hitzkirch;Secteur conomique - total;3153 -2021;1031 Hochdorf;Secteur conomique - total;5279 -2021;1032 Hohenrain;Secteur conomique - total;1230 -2021;1033 Inwil;Secteur conomique - total;1434 -2021;1037 Rain;Secteur conomique - total;970 -2021;1039 Rmerswil;Secteur conomique - total;653 -2021;1040 Rothenburg;Secteur conomique - total;6282 -2021;1041 Schongau;Secteur conomique - total;429 -2021;1051 Adligenswil;Secteur conomique - total;1678 -2021;1052 Buchrain;Secteur conomique - total;2609 -2021;1053 Dierikon;Secteur conomique - total;2999 -2021;1054 Ebikon;Secteur conomique - total;7279 -2021;1055 Gisikon;Secteur conomique - total;366 -2021;1056 Greppen;Secteur conomique - total;165 -2021;1057 Honau;Secteur conomique - total;143 -2021;1058 Horw;Secteur conomique - total;5219 -2021;1059 Kriens;Secteur conomique - total;12596 -2021;1061 Luzern;Secteur conomique - total;81803 -2021;1062 Malters;Secteur conomique - total;3931 -2021;1063 Meggen;Secteur conomique - total;2553 -2021;1064 Meierskappel;Secteur conomique - total;444 -2021;1065 Root;Secteur conomique - total;5016 -2021;1066 Schwarzenberg;Secteur conomique - total;458 -2021;1067 Udligenswil;Secteur conomique - total;462 -2021;1068 Vitznau;Secteur conomique - total;684 -2021;1069 Weggis;Secteur conomique - total;2653 -2021;1081 Beromnster;Secteur conomique - total;2828 -2021;1082 Bron;Secteur conomique - total;1135 -2021;1083 Buttisholz;Secteur conomique - total;1861 -2021;1084 Eich;Secteur conomique - total;576 -2021;1085 Geuensee;Secteur conomique - total;1063 -2021;1086 Grosswangen;Secteur conomique - total;1465 -2021;1088 Hildisrieden;Secteur conomique - total;603 -2021;1089 Knutwil;Secteur conomique - total;759 -2021;1091 Mauensee;Secteur conomique - total;284 -2021;1093 Neuenkirch;Secteur conomique - total;2721 -2021;1094 Nottwil;Secteur conomique - total;2971 -2021;1095 Oberkirch;Secteur conomique - total;3394 -2021;1097 Rickenbach (LU);Secteur conomique - total;1338 -2021;1098 Ruswil;Secteur conomique - total;3300 -2021;1099 Schenkon;Secteur conomique - total;1523 -2021;1100 Schlierbach;Secteur conomique - total;205 -2021;1102 Sempach;Secteur conomique - total;2034 -2021;1103 Sursee;Secteur conomique - total;13836 -2021;1104 Triengen;Secteur conomique - total;2549 -2021;1107 Wolhusen;Secteur conomique - total;2446 -2021;1121 Alberswil;Secteur conomique - total;246 -2021;1122 Altbron;Secteur conomique - total;546 -2021;1123 Altishofen;Secteur conomique - total;2906 -2021;1125 Dagmersellen;Secteur conomique - total;3510 -2021;1127 Egolzwil;Secteur conomique - total;606 -2021;1128 Ettiswil;Secteur conomique - total;967 -2021;1129 Fischbach;Secteur conomique - total;193 -2021;1131 Grossdietwil;Secteur conomique - total;503 -2021;1132 Hergiswil bei Willisau;Secteur conomique - total;881 -2021;1135 Luthern;Secteur conomique - total;683 -2021;1136 Menznau;Secteur conomique - total;1591 -2021;1137 Nebikon;Secteur conomique - total;1114 -2021;1139 Pfaffnau;Secteur conomique - total;1729 -2021;1140 Reiden;Secteur conomique - total;4922 -2021;1142 Roggliswil;Secteur conomique - total;298 -2021;1143 Schtz;Secteur conomique - total;1895 -2021;1145 Ufhusen;Secteur conomique - total;319 -2021;1146 Wauwil;Secteur conomique - total;790 -2021;1147 Wikon;Secteur conomique - total;786 -2021;1150 Zell (LU);Secteur conomique - total;1646 -2021;1151 Willisau;Secteur conomique - total;5910 -2021;1201 Altdorf (UR);Secteur conomique - total;6735 -2021;1202 Andermatt;Secteur conomique - total;1637 -2021;1203 Attinghausen;Secteur conomique - total;433 -2021;1205 Brglen (UR);Secteur conomique - total;1637 -2021;1206 Erstfeld;Secteur conomique - total;1414 -2021;1207 Flelen;Secteur conomique - total;1015 -2021;1208 Gschenen;Secteur conomique - total;212 -2021;1209 Gurtnellen;Secteur conomique - total;207 -2021;1210 Hospental;Secteur conomique - total;41 -2021;1211 Isenthal;Secteur conomique - total;190 -2021;1212 Realp;Secteur conomique - total;45 -2021;1213 Schattdorf;Secteur conomique - total;3329 -2021;1214 Seedorf (UR);Secteur conomique - total;806 -2021;1215 Seelisberg;Secteur conomique - total;249 -2021;1216 Silenen;Secteur conomique - total;421 -2021;1217 Sisikon;Secteur conomique - total;76 -2021;1218 Spiringen;Secteur conomique - total;321 -2021;1219 Unterschchen;Secteur conomique - total;195 -2021;1220 Wassen;Secteur conomique - total;269 -2021;1301 Einsiedeln;Secteur conomique - total;7152 -2021;1311 Gersau;Secteur conomique - total;633 -2021;1321 Feusisberg;Secteur conomique - total;4119 -2021;1322 Freienbach;Secteur conomique - total;16189 -2021;1323 Wollerau;Secteur conomique - total;4830 -2021;1331 Kssnacht (SZ);Secteur conomique - total;7144 -2021;1341 Altendorf;Secteur conomique - total;3946 -2021;1342 Galgenen;Secteur conomique - total;1361 -2021;1343 Innerthal;Secteur conomique - total;50 -2021;1344 Lachen;Secteur conomique - total;5594 -2021;1345 Reichenburg;Secteur conomique - total;1349 -2021;1346 Schbelbach;Secteur conomique - total;2923 -2021;1347 Tuggen;Secteur conomique - total;1516 -2021;1348 Vorderthal;Secteur conomique - total;272 -2021;1349 Wangen (SZ);Secteur conomique - total;2031 -2021;1361 Alpthal;Secteur conomique - total;189 -2021;1362 Arth;Secteur conomique - total;4187 -2021;1363 Illgau;Secteur conomique - total;189 -2021;1364 Ingenbohl;Secteur conomique - total;3565 -2021;1365 Lauerz;Secteur conomique - total;256 -2021;1366 Morschach;Secteur conomique - total;915 -2021;1367 Muotathal;Secteur conomique - total;1540 -2021;1368 Oberiberg;Secteur conomique - total;407 -2021;1369 Riemenstalden;Secteur conomique - total;45 -2021;1370 Rothenthurm;Secteur conomique - total;856 -2021;1371 Sattel;Secteur conomique - total;637 -2021;1372 Schwyz;Secteur conomique - total;12964 -2021;1373 Steinen;Secteur conomique - total;1384 -2021;1374 Steinerberg;Secteur conomique - total;336 -2021;1375 Unteriberg;Secteur conomique - total;885 -2021;1401 Alpnach;Secteur conomique - total;3165 -2021;1402 Engelberg;Secteur conomique - total;2600 -2021;1403 Giswil;Secteur conomique - total;1358 -2021;1404 Kerns;Secteur conomique - total;2462 -2021;1405 Lungern;Secteur conomique - total;1169 -2021;1406 Sachseln;Secteur conomique - total;3338 -2021;1407 Sarnen;Secteur conomique - total;8705 -2021;1501 Beckenried;Secteur conomique - total;1183 -2021;1502 Buochs;Secteur conomique - total;1924 -2021;1503 Dallenwil;Secteur conomique - total;867 -2021;1504 Emmetten;Secteur conomique - total;401 -2021;1505 Ennetbrgen;Secteur conomique - total;2117 -2021;1506 Ennetmoos;Secteur conomique - total;756 -2021;1507 Hergiswil (NW);Secteur conomique - total;3129 -2021;1508 Oberdorf (NW);Secteur conomique - total;1327 -2021;1509 Stans;Secteur conomique - total;10042 -2021;1510 Stansstad;Secteur conomique - total;1760 -2021;1511 Wolfenschiessen;Secteur conomique - total;810 -2021;1630 Glarus Nord;Secteur conomique - total;8820 -2021;1631 Glarus Sd;Secteur conomique - total;4740 -2021;1632 Glarus;Secteur conomique - total;9012 -2021;1701 Baar;Secteur conomique - total;26448 -2021;1702 Cham;Secteur conomique - total;12292 -2021;1703 Hnenberg;Secteur conomique - total;6862 -2021;1704 Menzingen;Secteur conomique - total;1768 -2021;1705 Neuheim;Secteur conomique - total;984 -2021;1706 Obergeri;Secteur conomique - total;1737 -2021;1707 Risch;Secteur conomique - total;13831 -2021;1708 Steinhausen;Secteur conomique - total;9103 -2021;1709 Untergeri;Secteur conomique - total;3349 -2021;1710 Walchwil;Secteur conomique - total;1104 -2021;1711 Zug;Secteur conomique - total;44797 -2021;2008 Chtillon (FR);Secteur conomique - total;48 -2021;2011 Cugy (FR);Secteur conomique - total;417 -2021;2016 Ftigny;Secteur conomique - total;298 -2021;2022 Gletterens;Secteur conomique - total;285 -2021;2025 Lully (FR);Secteur conomique - total;377 -2021;2027 Mnires;Secteur conomique - total;140 -2021;2029 Montagny (FR);Secteur conomique - total;586 -2021;2035 Nuvilly;Secteur conomique - total;183 -2021;2038 Prvondavaux;Secteur conomique - total;19 -2021;2041 Saint-Aubin (FR);Secteur conomique - total;477 -2021;2043 Svaz;Secteur conomique - total;487 -2021;2044 Surpierre;Secteur conomique - total;217 -2021;2045 Vallon;Secteur conomique - total;61 -2021;2050 Les Montets;Secteur conomique - total;336 -2021;2051 Delley-Portalban;Secteur conomique - total;207 -2021;2053 Belmont-Broye;Secteur conomique - total;2629 -2021;2054 Estavayer;Secteur conomique - total;4440 -2021;2055 Cheyres-Chbles;Secteur conomique - total;335 -2021;2061 Auboranges;Secteur conomique - total;55 -2021;2063 Billens-Hennens;Secteur conomique - total;328 -2021;2066 Chapelle (Glne);Secteur conomique - total;48 -2021;2067 Le Chtelard;Secteur conomique - total;156 -2021;2068 Chtonnaye;Secteur conomique - total;179 -2021;2072 Ecublens (FR);Secteur conomique - total;76 -2021;2079 Grangettes;Secteur conomique - total;56 -2021;2086 Massonnens;Secteur conomique - total;99 -2021;2087 Mzires (FR);Secteur conomique - total;239 -2021;2089 Montet (Glne);Secteur conomique - total;34 -2021;2096 Romont (FR);Secteur conomique - total;4112 -2021;2097 Rue;Secteur conomique - total;228 -2021;2099 Siviriez;Secteur conomique - total;623 -2021;2102 Ursy;Secteur conomique - total;1099 -2021;2113 Vuisternens-devant-Romont;Secteur conomique - total;777 -2021;2114 Villorsonnens;Secteur conomique - total;404 -2021;2115 Torny;Secteur conomique - total;136 -2021;2117 Villaz;Secteur conomique - total;744 -2021;2121 Haut-Intyamon;Secteur conomique - total;389 -2021;2122 Pont-en-Ogoz;Secteur conomique - total;436 -2021;2123 Botterens;Secteur conomique - total;151 -2021;2124 Broc;Secteur conomique - total;989 -2021;2125 Bulle;Secteur conomique - total;16494 -2021;2128 Chtel-sur-Montsalvens;Secteur conomique - total;37 -2021;2129 Corbires;Secteur conomique - total;175 -2021;2130 Crsuz;Secteur conomique - total;45 -2021;2131 Echarlens;Secteur conomique - total;139 -2021;2134 Grandvillard;Secteur conomique - total;201 -2021;2135 Gruyres;Secteur conomique - total;1194 -2021;2137 Hauteville;Secteur conomique - total;109 -2021;2138 Jaun;Secteur conomique - total;252 -2021;2140 Marsens;Secteur conomique - total;980 -2021;2143 Morlon;Secteur conomique - total;134 -2021;2145 Le Pquier (FR);Secteur conomique - total;262 -2021;2147 Pont-la-Ville;Secteur conomique - total;128 -2021;2148 Riaz;Secteur conomique - total;1160 -2021;2149 La Roche;Secteur conomique - total;719 -2021;2152 Sles;Secteur conomique - total;514 -2021;2153 Sorens;Secteur conomique - total;277 -2021;2155 Vaulruz;Secteur conomique - total;717 -2021;2160 Vuadens;Secteur conomique - total;1395 -2021;2162 Bas-Intyamon;Secteur conomique - total;764 -2021;2163 Val-de-Charmey;Secteur conomique - total;1159 -2021;2173 Autigny;Secteur conomique - total;133 -2021;2174 Avry;Secteur conomique - total;1335 -2021;2175 Belfaux;Secteur conomique - total;910 -2021;2177 Chnens;Secteur conomique - total;233 -2021;2183 Corminboeuf;Secteur conomique - total;1106 -2021;2186 Cottens (FR);Secteur conomique - total;390 -2021;2194 Ferpicloz;Secteur conomique - total;127 -2021;2196 Fribourg;Secteur conomique - total;33638 -2021;2197 Givisiez;Secteur conomique - total;6107 -2021;2198 Granges-Paccot;Secteur conomique - total;3697 -2021;2200 Grolley;Secteur conomique - total;885 -2021;2206 Marly;Secteur conomique - total;2698 -2021;2208 Matran;Secteur conomique - total;1605 -2021;2211 Neyruz (FR);Secteur conomique - total;306 -2021;2216 Pierrafortscha;Secteur conomique - total;42 -2021;2217 Ponthaux;Secteur conomique - total;131 -2021;2220 Le Mouret;Secteur conomique - total;920 -2021;2226 Treyvaux;Secteur conomique - total;297 -2021;2228 Villars-sur-Glne;Secteur conomique - total;10490 -2021;2230 Villarsel-sur-Marly;Secteur conomique - total;16 -2021;2233 Hauterive (FR);Secteur conomique - total;1272 -2021;2234 La Brillaz;Secteur conomique - total;233 -2021;2235 La Sonnaz;Secteur conomique - total;231 -2021;2236 Gibloux;Secteur conomique - total;2961 -2021;2237 Prez;Secteur conomique - total;461 -2021;2238 Bois-d'Amont;Secteur conomique - total;372 -2021;2250 Courgevaux;Secteur conomique - total;553 -2021;2254 Courtepin;Secteur conomique - total;2649 -2021;2257 Cressier (FR);Secteur conomique - total;638 -2021;2258 Frschels;Secteur conomique - total;105 -2021;2259 Galmiz;Secteur conomique - total;216 -2021;2260 Gempenach;Secteur conomique - total;157 -2021;2261 Greng;Secteur conomique - total;56 -2021;2262 Gurmels;Secteur conomique - total;879 -2021;2265 Kerzers;Secteur conomique - total;2660 -2021;2266 Kleinbsingen;Secteur conomique - total;121 -2021;2271 Meyriez;Secteur conomique - total;294 -2021;2272 Misery-Courtion;Secteur conomique - total;475 -2021;2274 Muntelier;Secteur conomique - total;493 -2021;2275 Murten;Secteur conomique - total;5029 -2021;2276 Ried bei Kerzers;Secteur conomique - total;867 -2021;2278 Ulmiz;Secteur conomique - total;169 -2021;2284 Mont-Vully;Secteur conomique - total;1224 -2021;2292 Brnisried;Secteur conomique - total;85 -2021;2293 Ddingen;Secteur conomique - total;3949 -2021;2294 Giffers;Secteur conomique - total;503 -2021;2295 Bsingen;Secteur conomique - total;974 -2021;2296 Heitenried;Secteur conomique - total;325 -2021;2299 Plaffeien;Secteur conomique - total;1673 -2021;2300 Plasselb;Secteur conomique - total;154 -2021;2301 Rechthalten;Secteur conomique - total;221 -2021;2303 St. Silvester;Secteur conomique - total;169 -2021;2304 St. Ursen;Secteur conomique - total;380 -2021;2305 Schmitten (FR);Secteur conomique - total;1557 -2021;2306 Tafers;Secteur conomique - total;3033 -2021;2307 Tentlingen;Secteur conomique - total;333 -2021;2308 Ueberstorf;Secteur conomique - total;478 -2021;2309 Wnnewil-Flamatt;Secteur conomique - total;2379 -2021;2321 Attalens;Secteur conomique - total;804 -2021;2323 Bossonnens;Secteur conomique - total;479 -2021;2325 Chtel-Saint-Denis;Secteur conomique - total;3876 -2021;2328 Granges (Veveyse);Secteur conomique - total;250 -2021;2333 Remaufens;Secteur conomique - total;244 -2021;2335 Saint-Martin (FR);Secteur conomique - total;207 -2021;2336 Semsales;Secteur conomique - total;571 -2021;2337 Le Flon;Secteur conomique - total;179 -2021;2338 La Verrerie;Secteur conomique - total;320 -2021;2401 Egerkingen;Secteur conomique - total;3670 -2021;2402 Hrkingen;Secteur conomique - total;3320 -2021;2403 Kestenholz;Secteur conomique - total;773 -2021;2404 Neuendorf;Secteur conomique - total;2549 -2021;2405 Niederbuchsiten;Secteur conomique - total;715 -2021;2406 Oberbuchsiten;Secteur conomique - total;549 -2021;2407 Oensingen;Secteur conomique - total;5535 -2021;2408 Wolfwil;Secteur conomique - total;804 -2021;2421 Aedermannsdorf;Secteur conomique - total;178 -2021;2422 Balsthal;Secteur conomique - total;2734 -2021;2424 Herbetswil;Secteur conomique - total;154 -2021;2425 Holderbank (SO);Secteur conomique - total;267 -2021;2426 Laupersdorf;Secteur conomique - total;462 -2021;2427 Matzendorf;Secteur conomique - total;438 -2021;2428 Mmliswil-Ramiswil;Secteur conomique - total;796 -2021;2430 Welschenrohr-Gnsbrunnen;Secteur conomique - total;274 -2021;2445 Biezwil;Secteur conomique - total;79 -2021;2455 Lterkofen-Ichertswil;Secteur conomique - total;174 -2021;2456 Lterswil-Gchliwil;Secteur conomique - total;100 -2021;2457 Messen;Secteur conomique - total;435 -2021;2461 Schnottwil;Secteur conomique - total;344 -2021;2463 Unterramsern;Secteur conomique - total;61 -2021;2464 Lsslingen-Nennigkofen;Secteur conomique - total;525 -2021;2465 Buchegg;Secteur conomique - total;1098 -2021;2471 Bttwil;Secteur conomique - total;450 -2021;2472 Bren (SO);Secteur conomique - total;170 -2021;2473 Dornach;Secteur conomique - total;2717 -2021;2474 Gempen;Secteur conomique - total;411 -2021;2475 Hochwald;Secteur conomique - total;227 -2021;2476 Hofstetten-Flh;Secteur conomique - total;462 -2021;2477 Metzerlen-Mariastein;Secteur conomique - total;252 -2021;2478 Nuglar-St. Pantaleon;Secteur conomique - total;202 -2021;2479 Rodersdorf;Secteur conomique - total;211 -2021;2480 Seewen;Secteur conomique - total;257 -2021;2481 Witterswil;Secteur conomique - total;611 -2021;2491 Hauenstein-Ifenthal;Secteur conomique - total;86 -2021;2492 Kienberg;Secteur conomique - total;105 -2021;2493 Lostorf;Secteur conomique - total;1015 -2021;2495 Niedergsgen;Secteur conomique - total;1221 -2021;2497 Obergsgen;Secteur conomique - total;557 -2021;2499 Stsslingen;Secteur conomique - total;215 -2021;2500 Trimbach;Secteur conomique - total;1838 -2021;2501 Winznau;Secteur conomique - total;341 -2021;2502 Wisen (SO);Secteur conomique - total;91 -2021;2503 Erlinsbach (SO);Secteur conomique - total;658 -2021;2511 Aeschi (SO);Secteur conomique - total;300 -2021;2513 Biberist;Secteur conomique - total;3315 -2021;2514 Bolken;Secteur conomique - total;68 -2021;2516 Deitingen;Secteur conomique - total;959 -2021;2517 Derendingen;Secteur conomique - total;2081 -2021;2518 Etziken;Secteur conomique - total;336 -2021;2519 Gerlafingen;Secteur conomique - total;1649 -2021;2520 Halten;Secteur conomique - total;159 -2021;2523 Horriwil;Secteur conomique - total;188 -2021;2524 Hniken;Secteur conomique - total;25 -2021;2525 Kriegstetten;Secteur conomique - total;496 -2021;2526 Lohn-Ammannsegg;Secteur conomique - total;913 -2021;2527 Luterbach;Secteur conomique - total;1936 -2021;2528 Obergerlafingen;Secteur conomique - total;545 -2021;2529 Oekingen;Secteur conomique - total;90 -2021;2530 Recherswil;Secteur conomique - total;596 -2021;2532 Subingen;Secteur conomique - total;2951 -2021;2534 Zuchwil;Secteur conomique - total;5774 -2021;2535 Drei Hfe;Secteur conomique - total;78 -2021;2541 Balm bei Gnsberg;Secteur conomique - total;98 -2021;2542 Bellach;Secteur conomique - total;2366 -2021;2543 Bettlach;Secteur conomique - total;2137 -2021;2544 Feldbrunnen-St. Niklaus;Secteur conomique - total;254 -2021;2545 Flumenthal;Secteur conomique - total;383 -2021;2546 Grenchen;Secteur conomique - total;10832 -2021;2547 Gnsberg;Secteur conomique - total;206 -2021;2548 Hubersdorf;Secteur conomique - total;120 -2021;2549 Kammersrohr;Secteur conomique - total;13 -2021;2550 Langendorf;Secteur conomique - total;1461 -2021;2551 Lommiswil;Secteur conomique - total;195 -2021;2553 Oberdorf (SO);Secteur conomique - total;499 -2021;2554 Riedholz;Secteur conomique - total;443 -2021;2555 Rttenen;Secteur conomique - total;248 -2021;2556 Selzach;Secteur conomique - total;1792 -2021;2571 Boningen;Secteur conomique - total;213 -2021;2572 Dniken;Secteur conomique - total;2533 -2021;2573 Dulliken;Secteur conomique - total;1486 -2021;2574 Eppenberg-Wschnau;Secteur conomique - total;301 -2021;2575 Fulenbach;Secteur conomique - total;809 -2021;2576 Gretzenbach;Secteur conomique - total;925 -2021;2578 Gunzgen;Secteur conomique - total;789 -2021;2579 Hgendorf;Secteur conomique - total;3202 -2021;2580 Kappel (SO);Secteur conomique - total;609 -2021;2581 Olten;Secteur conomique - total;22751 -2021;2582 Rickenbach (SO);Secteur conomique - total;651 -2021;2583 Schnenwerd;Secteur conomique - total;2328 -2021;2584 Starrkirch-Wil;Secteur conomique - total;182 -2021;2585 Walterswil (SO);Secteur conomique - total;247 -2021;2586 Wangen bei Olten;Secteur conomique - total;2532 -2021;2601 Solothurn;Secteur conomique - total;22627 -2021;2611 Brschwil;Secteur conomique - total;123 -2021;2612 Beinwil (SO);Secteur conomique - total;135 -2021;2613 Breitenbach;Secteur conomique - total;1803 -2021;2614 Bsserach;Secteur conomique - total;677 -2021;2615 Erschwil;Secteur conomique - total;406 -2021;2616 Fehren;Secteur conomique - total;82 -2021;2617 Grindel;Secteur conomique - total;60 -2021;2618 Himmelried;Secteur conomique - total;134 -2021;2619 Kleinltzel;Secteur conomique - total;364 -2021;2620 Meltingen;Secteur conomique - total;125 -2021;2621 Nunningen;Secteur conomique - total;624 -2021;2622 Zullwil;Secteur conomique - total;87 -2021;2701 Basel;Secteur conomique - total;187788 -2021;2702 Bettingen;Secteur conomique - total;317 -2021;2703 Riehen;Secteur conomique - total;4897 -2021;2761 Aesch (BL);Secteur conomique - total;5300 -2021;2762 Allschwil;Secteur conomique - total;12851 -2021;2763 Arlesheim;Secteur conomique - total;6337 -2021;2764 Biel-Benken;Secteur conomique - total;1080 -2021;2765 Binningen;Secteur conomique - total;5326 -2021;2766 Birsfelden;Secteur conomique - total;4237 -2021;2767 Bottmingen;Secteur conomique - total;1695 -2021;2768 Ettingen;Secteur conomique - total;1206 -2021;2769 Mnchenstein;Secteur conomique - total;12315 -2021;2770 Muttenz;Secteur conomique - total;13183 -2021;2771 Oberwil (BL);Secteur conomique - total;3980 -2021;2772 Pfeffingen;Secteur conomique - total;347 -2021;2773 Reinach (BL);Secteur conomique - total;11634 -2021;2774 Schnenbuch;Secteur conomique - total;418 -2021;2775 Therwil;Secteur conomique - total;3283 -2021;2781 Blauen;Secteur conomique - total;129 -2021;2782 Brislach;Secteur conomique - total;376 -2021;2783 Burg im Leimental;Secteur conomique - total;34 -2021;2784 Dittingen;Secteur conomique - total;203 -2021;2785 Duggingen;Secteur conomique - total;634 -2021;2786 Grellingen;Secteur conomique - total;356 -2021;2787 Laufen;Secteur conomique - total;4396 -2021;2788 Liesberg;Secteur conomique - total;668 -2021;2789 Nenzlingen;Secteur conomique - total;90 -2021;2790 Roggenburg;Secteur conomique - total;59 -2021;2791 Rschenz;Secteur conomique - total;276 -2021;2792 Wahlen;Secteur conomique - total;228 -2021;2793 Zwingen;Secteur conomique - total;1072 -2021;2821 Arisdorf;Secteur conomique - total;491 -2021;2822 Augst;Secteur conomique - total;779 -2021;2823 Bubendorf;Secteur conomique - total;3324 -2021;2824 Frenkendorf;Secteur conomique - total;2265 -2021;2825 Fllinsdorf;Secteur conomique - total;2111 -2021;2826 Giebenach;Secteur conomique - total;206 -2021;2827 Hersberg;Secteur conomique - total;34 -2021;2828 Lausen;Secteur conomique - total;1799 -2021;2829 Liestal;Secteur conomique - total;17269 -2021;2830 Lupsingen;Secteur conomique - total;153 -2021;2831 Pratteln;Secteur conomique - total;15108 -2021;2832 Ramlinsburg;Secteur conomique - total;131 -2021;2833 Seltisberg;Secteur conomique - total;227 -2021;2834 Ziefen;Secteur conomique - total;466 -2021;2841 Anwil;Secteur conomique - total;106 -2021;2842 Bckten;Secteur conomique - total;519 -2021;2843 Buckten;Secteur conomique - total;279 -2021;2844 Buus;Secteur conomique - total;236 -2021;2845 Diepflingen;Secteur conomique - total;194 -2021;2846 Gelterkinden;Secteur conomique - total;2435 -2021;2847 Hfelfingen;Secteur conomique - total;123 -2021;2848 Hemmiken;Secteur conomique - total;51 -2021;2849 Itingen;Secteur conomique - total;1042 -2021;2850 Knerkinden;Secteur conomique - total;29 -2021;2851 Kilchberg (BL);Secteur conomique - total;X -2021;2852 Lufelfingen;Secteur conomique - total;458 -2021;2853 Maisprach;Secteur conomique - total;218 -2021;2854 Nusshof;Secteur conomique - total;77 -2021;2855 Oltingen;Secteur conomique - total;148 -2021;2856 Ormalingen;Secteur conomique - total;829 -2021;2857 Rickenbach (BL);Secteur conomique - total;118 -2021;2858 Rothenfluh;Secteur conomique - total;175 -2021;2859 Rmlingen;Secteur conomique - total;149 -2021;2860 Rnenberg;Secteur conomique - total;147 -2021;2861 Sissach;Secteur conomique - total;4250 -2021;2862 Tecknau;Secteur conomique - total;142 -2021;2863 Tenniken;Secteur conomique - total;396 -2021;2864 Thrnen;Secteur conomique - total;289 -2021;2865 Wenslingen;Secteur conomique - total;185 -2021;2866 Wintersingen;Secteur conomique - total;144 -2021;2867 Wittinsburg;Secteur conomique - total;146 -2021;2868 Zeglingen;Secteur conomique - total;109 -2021;2869 Zunzgen;Secteur conomique - total;541 -2021;2881 Arboldswil;Secteur conomique - total;90 -2021;2882 Bennwil;Secteur conomique - total;196 -2021;2883 Bretzwil;Secteur conomique - total;178 -2021;2884 Diegten;Secteur conomique - total;464 -2021;2885 Eptingen;Secteur conomique - total;334 -2021;2886 Hlstein;Secteur conomique - total;917 -2021;2887 Lampenberg;Secteur conomique - total;69 -2021;2888 Langenbruck;Secteur conomique - total;371 -2021;2889 Lauwil;Secteur conomique - total;84 -2021;2890 Liedertswil;Secteur conomique - total;91 -2021;2891 Niederdorf;Secteur conomique - total;866 -2021;2892 Oberdorf (BL);Secteur conomique - total;849 -2021;2893 Reigoldswil;Secteur conomique - total;521 -2021;2894 Titterten;Secteur conomique - total;133 -2021;2895 Waldenburg;Secteur conomique - total;357 -2021;2901 Gchlingen;Secteur conomique - total;220 -2021;2903 Lhningen;Secteur conomique - total;309 -2021;2904 Neunkirch;Secteur conomique - total;924 -2021;2914 Bttenhardt;Secteur conomique - total;89 -2021;2915 Drflingen;Secteur conomique - total;241 -2021;2917 Lohn (SH);Secteur conomique - total;164 -2021;2919 Stetten (SH);Secteur conomique - total;178 -2021;2920 Thayngen;Secteur conomique - total;2576 -2021;2931 Bargen (SH);Secteur conomique - total;83 -2021;2932 Beringen;Secteur conomique - total;2527 -2021;2933 Buchberg;Secteur conomique - total;264 -2021;2936 Merishausen;Secteur conomique - total;189 -2021;2937 Neuhausen am Rheinfall;Secteur conomique - total;5607 -2021;2938 Rdlingen;Secteur conomique - total;210 -2021;2939 Schaffhausen;Secteur conomique - total;27991 -2021;2951 Beggingen;Secteur conomique - total;136 -2021;2952 Schleitheim;Secteur conomique - total;686 -2021;2953 Siblingen;Secteur conomique - total;186 -2021;2961 Buch (SH);Secteur conomique - total;73 -2021;2962 Hemishofen;Secteur conomique - total;120 -2021;2963 Ramsen;Secteur conomique - total;760 -2021;2964 Stein am Rhein;Secteur conomique - total;1784 -2021;2971 Hallau;Secteur conomique - total;983 -2021;2972 Oberhallau;Secteur conomique - total;131 -2021;2973 Trasadingen;Secteur conomique - total;245 -2021;2974 Wilchingen;Secteur conomique - total;882 -2021;3001 Herisau;Secteur conomique - total;10028 -2021;3002 Hundwil;Secteur conomique - total;561 -2021;3003 Schnengrund;Secteur conomique - total;156 -2021;3004 Schwellbrunn;Secteur conomique - total;594 -2021;3005 Stein (AR);Secteur conomique - total;504 -2021;3006 Urnsch;Secteur conomique - total;1026 -2021;3007 Waldstatt;Secteur conomique - total;1003 -2021;3021 Bhler;Secteur conomique - total;765 -2021;3022 Gais;Secteur conomique - total;1378 -2021;3023 Speicher;Secteur conomique - total;1417 -2021;3024 Teufen (AR);Secteur conomique - total;2868 -2021;3025 Trogen;Secteur conomique - total;962 -2021;3031 Grub (AR);Secteur conomique - total;272 -2021;3032 Heiden;Secteur conomique - total;2714 -2021;3033 Lutzenberg;Secteur conomique - total;316 -2021;3034 Rehetobel;Secteur conomique - total;538 -2021;3035 Reute (AR);Secteur conomique - total;207 -2021;3036 Wald (AR);Secteur conomique - total;311 -2021;3037 Walzenhausen;Secteur conomique - total;1029 -2021;3038 Wolfhalden;Secteur conomique - total;631 -2021;3101 Appenzell;Secteur conomique - total;4738 -2021;3102 Gonten;Secteur conomique - total;758 -2021;3103 Rte;Secteur conomique - total;1385 -2021;3104 Schlatt-Haslen;Secteur conomique - total;400 -2021;3105 Schwende;Secteur conomique - total;1200 -2021;3111 Oberegg;Secteur conomique - total;739 -2021;3201 Hggenschwil;Secteur conomique - total;359 -2021;3202 Muolen;Secteur conomique - total;417 -2021;3203 St. Gallen;Secteur conomique - total;86366 -2021;3204 Wittenbach;Secteur conomique - total;3528 -2021;3211 Berg (SG);Secteur conomique - total;137 -2021;3212 Eggersriet;Secteur conomique - total;324 -2021;3213 Goldach;Secteur conomique - total;4442 -2021;3214 Mrschwil;Secteur conomique - total;1173 -2021;3215 Rorschach;Secteur conomique - total;5183 -2021;3216 Rorschacherberg;Secteur conomique - total;1913 -2021;3217 Steinach;Secteur conomique - total;2101 -2021;3218 Tbach;Secteur conomique - total;779 -2021;3219 Untereggen;Secteur conomique - total;280 -2021;3231 Au (SG);Secteur conomique - total;4950 -2021;3232 Balgach;Secteur conomique - total;4396 -2021;3233 Berneck;Secteur conomique - total;2216 -2021;3234 Diepoldsau;Secteur conomique - total;3595 -2021;3235 Rheineck;Secteur conomique - total;1604 -2021;3236 St. Margrethen;Secteur conomique - total;4560 -2021;3237 Thal;Secteur conomique - total;3653 -2021;3238 Widnau;Secteur conomique - total;4981 -2021;3251 Altsttten;Secteur conomique - total;7453 -2021;3252 Eichberg;Secteur conomique - total;271 -2021;3253 Marbach (SG);Secteur conomique - total;720 -2021;3254 Oberriet (SG);Secteur conomique - total;5248 -2021;3255 Rebstein;Secteur conomique - total;1652 -2021;3256 Rthi (SG);Secteur conomique - total;1201 -2021;3271 Buchs (SG);Secteur conomique - total;7984 -2021;3272 Gams;Secteur conomique - total;1246 -2021;3273 Grabs;Secteur conomique - total;3654 -2021;3274 Sennwald;Secteur conomique - total;4239 -2021;3275 Sevelen;Secteur conomique - total;2184 -2021;3276 Wartau;Secteur conomique - total;2269 -2021;3291 Bad Ragaz;Secteur conomique - total;3517 -2021;3292 Flums;Secteur conomique - total;2489 -2021;3293 Mels;Secteur conomique - total;3525 -2021;3294 Pffers;Secteur conomique - total;1432 -2021;3295 Quarten;Secteur conomique - total;1225 -2021;3296 Sargans;Secteur conomique - total;4311 -2021;3297 Vilters-Wangs;Secteur conomique - total;1832 -2021;3298 Walenstadt;Secteur conomique - total;2253 -2021;3311 Amden;Secteur conomique - total;564 -2021;3312 Benken (SG);Secteur conomique - total;1219 -2021;3313 Kaltbrunn;Secteur conomique - total;1754 -2021;3315 Schnis;Secteur conomique - total;1403 -2021;3316 Weesen;Secteur conomique - total;470 -2021;3338 Schmerikon;Secteur conomique - total;1702 -2021;3339 Uznach;Secteur conomique - total;3583 -2021;3340 Rapperswil-Jona;Secteur conomique - total;18011 -2021;3341 Gommiswald;Secteur conomique - total;1458 -2021;3342 Eschenbach (SG);Secteur conomique - total;4166 -2021;3352 Ebnat-Kappel;Secteur conomique - total;2264 -2021;3359 Wildhaus-Alt St. Johann;Secteur conomique - total;1555 -2021;3360 Nesslau;Secteur conomique - total;1859 -2021;3372 Hemberg;Secteur conomique - total;325 -2021;3374 Lichtensteig;Secteur conomique - total;580 -2021;3375 Oberhelfenschwil;Secteur conomique - total;485 -2021;3378 Neckertal;Secteur conomique - total;1568 -2021;3379 Wattwil;Secteur conomique - total;4800 -2021;3392 Kirchberg (SG);Secteur conomique - total;5133 -2021;3393 Ltisburg;Secteur conomique - total;694 -2021;3394 Mosnang;Secteur conomique - total;1192 -2021;3395 Btschwil-Ganterschwil;Secteur conomique - total;2481 -2021;3401 Degersheim;Secteur conomique - total;1810 -2021;3402 Flawil;Secteur conomique - total;4108 -2021;3405 Jonschwil;Secteur conomique - total;2302 -2021;3407 Oberuzwil;Secteur conomique - total;2256 -2021;3408 Uzwil;Secteur conomique - total;6766 -2021;3422 Niederbren;Secteur conomique - total;698 -2021;3423 Niederhelfenschwil;Secteur conomique - total;858 -2021;3424 Oberbren;Secteur conomique - total;3420 -2021;3426 Zuzwil (SG);Secteur conomique - total;2045 -2021;3427 Wil (SG);Secteur conomique - total;15936 -2021;3441 Andwil (SG);Secteur conomique - total;571 -2021;3442 Gaiserwald;Secteur conomique - total;2510 -2021;3443 Gossau (SG);Secteur conomique - total;13642 -2021;3444 Waldkirch;Secteur conomique - total;1487 -2021;3506 Vaz/Obervaz;Secteur conomique - total;2813 -2021;3513 Lantsch/Lenz;Secteur conomique - total;202 -2021;3514 Schmitten (GR);Secteur conomique - total;53 -2021;3542 Albula/Alvra;Secteur conomique - total;709 -2021;3543 Surses;Secteur conomique - total;1569 -2021;3544 Bergn Filisur;Secteur conomique - total;572 -2021;3551 Brusio;Secteur conomique - total;899 -2021;3561 Poschiavo;Secteur conomique - total;2264 -2021;3572 Falera;Secteur conomique - total;238 -2021;3575 Laax;Secteur conomique - total;1274 -2021;3581 Sagogn;Secteur conomique - total;121 -2021;3582 Schluein;Secteur conomique - total;329 -2021;3603 Vals;Secteur conomique - total;706 -2021;3618 Lumnezia;Secteur conomique - total;842 -2021;3619 Ilanz/Glion;Secteur conomique - total;3294 -2021;3633 Frstenau;Secteur conomique - total;196 -2021;3637 Rothenbrunnen;Secteur conomique - total;518 -2021;3638 Scharans;Secteur conomique - total;392 -2021;3640 Sils im Domleschg;Secteur conomique - total;339 -2021;3661 Cazis;Secteur conomique - total;1516 -2021;3662 Flerden;Secteur conomique - total;81 -2021;3663 Masein;Secteur conomique - total;121 -2021;3668 Thusis;Secteur conomique - total;2363 -2021;3669 Tschappina;Secteur conomique - total;94 -2021;3670 Urmein;Secteur conomique - total;50 -2021;3672 Safiental;Secteur conomique - total;420 -2021;3673 Domleschg;Secteur conomique - total;504 -2021;3681 Avers;Secteur conomique - total;128 -2021;3695 Sufers;Secteur conomique - total;81 -2021;3701 Andeer;Secteur conomique - total;475 -2021;3711 Rongellen;Secteur conomique - total;17 -2021;3712 Zillis-Reischen;Secteur conomique - total;189 -2021;3713 Ferrera;Secteur conomique - total;37 -2021;3714 Rheinwald;Secteur conomique - total;337 -2021;3715 Muntogna da Schons;Secteur conomique - total;246 -2021;3721 Bonaduz;Secteur conomique - total;1755 -2021;3722 Domat/Ems;Secteur conomique - total;3861 -2021;3723 Rhzns;Secteur conomique - total;401 -2021;3731 Felsberg;Secteur conomique - total;496 -2021;3732 Flims;Secteur conomique - total;1799 -2021;3733 Tamins;Secteur conomique - total;261 -2021;3734 Trin;Secteur conomique - total;344 -2021;3746 Zernez;Secteur conomique - total;973 -2021;3752 Samnaun;Secteur conomique - total;1159 -2021;3762 Scuol;Secteur conomique - total;3351 -2021;3764 Valsot;Secteur conomique - total;421 -2021;3781 Bever;Secteur conomique - total;335 -2021;3782 Celerina/Schlarigna;Secteur conomique - total;983 -2021;3783 Madulain;Secteur conomique - total;70 -2021;3784 Pontresina;Secteur conomique - total;1912 -2021;3785 La Punt Chamues-ch;Secteur conomique - total;235 -2021;3786 Samedan;Secteur conomique - total;2896 -2021;3787 St. Moritz;Secteur conomique - total;7497 -2021;3788 S-chanf;Secteur conomique - total;318 -2021;3789 Sils im Engadin/Segl;Secteur conomique - total;995 -2021;3790 Silvaplana;Secteur conomique - total;987 -2021;3791 Zuoz;Secteur conomique - total;825 -2021;3792 Bregaglia;Secteur conomique - total;1141 -2021;3804 Buseno;Secteur conomique - total;17 -2021;3805 Castaneda;Secteur conomique - total;108 -2021;3808 Rossa;Secteur conomique - total;27 -2021;3810 Santa Maria in Calanca;Secteur conomique - total;25 -2021;3821 Lostallo;Secteur conomique - total;290 -2021;3822 Mesocco;Secteur conomique - total;593 -2021;3823 Soazza;Secteur conomique - total;115 -2021;3831 Cama;Secteur conomique - total;258 -2021;3832 Grono;Secteur conomique - total;1104 -2021;3834 Roveredo (GR);Secteur conomique - total;1108 -2021;3835 San Vittore;Secteur conomique - total;545 -2021;3837 Calanca;Secteur conomique - total;129 -2021;3847 Val Mstair;Secteur conomique - total;1248 -2021;3851 Davos;Secteur conomique - total;8800 -2021;3861 Fideris;Secteur conomique - total;195 -2021;3862 Furna;Secteur conomique - total;86 -2021;3863 Jenaz;Secteur conomique - total;390 -2021;3871 Klosters;Secteur conomique - total;2367 -2021;3881 Conters im Prttigau;Secteur conomique - total;91 -2021;3882 Kblis;Secteur conomique - total;559 -2021;3891 Luzein;Secteur conomique - total;495 -2021;3901 Chur;Secteur conomique - total;33787 -2021;3911 Churwalden;Secteur conomique - total;976 -2021;3921 Arosa;Secteur conomique - total;2911 -2021;3932 Tschiertschen-Praden;Secteur conomique - total;123 -2021;3945 Trimmis;Secteur conomique - total;1170 -2021;3946 Untervaz;Secteur conomique - total;930 -2021;3947 Zizers;Secteur conomique - total;2113 -2021;3951 Flsch;Secteur conomique - total;325 -2021;3952 Jenins;Secteur conomique - total;289 -2021;3953 Maienfeld;Secteur conomique - total;2058 -2021;3954 Malans;Secteur conomique - total;894 -2021;3955 Landquart;Secteur conomique - total;6023 -2021;3961 Grsch;Secteur conomique - total;1278 -2021;3962 Schiers;Secteur conomique - total;1558 -2021;3972 Seewis im Prttigau;Secteur conomique - total;534 -2021;3981 Breil/Brigels;Secteur conomique - total;742 -2021;3982 Disentis/Mustr;Secteur conomique - total;1200 -2021;3983 Medel (Lucmagn);Secteur conomique - total;165 -2021;3985 Sumvitg;Secteur conomique - total;476 -2021;3986 Tujetsch;Secteur conomique - total;576 -2021;3987 Trun;Secteur conomique - total;594 -2021;3988 Obersaxen Mundaun;Secteur conomique - total;629 -2021;4001 Aarau;Secteur conomique - total;35644 -2021;4002 Biberstein;Secteur conomique - total;294 -2021;4003 Buchs (AG);Secteur conomique - total;5202 -2021;4004 Densbren;Secteur conomique - total;422 -2021;4005 Erlinsbach (AG);Secteur conomique - total;1196 -2021;4006 Grnichen;Secteur conomique - total;2908 -2021;4007 Hirschthal;Secteur conomique - total;815 -2021;4008 Kttigen;Secteur conomique - total;1415 -2021;4009 Muhen;Secteur conomique - total;1467 -2021;4010 Oberentfelden;Secteur conomique - total;3771 -2021;4012 Suhr;Secteur conomique - total;5158 -2021;4013 Unterentfelden;Secteur conomique - total;2515 -2021;4021 Baden;Secteur conomique - total;29227 -2021;4022 Bellikon;Secteur conomique - total;752 -2021;4023 Bergdietikon;Secteur conomique - total;1092 -2021;4024 Birmenstorf (AG);Secteur conomique - total;1087 -2021;4026 Ennetbaden;Secteur conomique - total;803 -2021;4027 Fislisbach;Secteur conomique - total;1407 -2021;4028 Freienwil;Secteur conomique - total;143 -2021;4029 Gebenstorf;Secteur conomique - total;1913 -2021;4030 Killwangen;Secteur conomique - total;616 -2021;4031 Knten;Secteur conomique - total;477 -2021;4032 Mgenwil;Secteur conomique - total;3030 -2021;4033 Mellingen;Secteur conomique - total;1970 -2021;4034 Neuenhof;Secteur conomique - total;2404 -2021;4035 Niederrohrdorf;Secteur conomique - total;847 -2021;4037 Oberrohrdorf;Secteur conomique - total;793 -2021;4038 Obersiggenthal;Secteur conomique - total;2023 -2021;4039 Remetschwil;Secteur conomique - total;552 -2021;4040 Spreitenbach;Secteur conomique - total;8512 -2021;4041 Stetten (AG);Secteur conomique - total;952 -2021;4042 Turgi;Secteur conomique - total;757 -2021;4044 Untersiggenthal;Secteur conomique - total;2701 -2021;4045 Wettingen;Secteur conomique - total;7876 -2021;4046 Wohlenschwil;Secteur conomique - total;372 -2021;4047 Wrenlingen;Secteur conomique - total;3731 -2021;4048 Wrenlos;Secteur conomique - total;2179 -2021;4049 Ehrendingen;Secteur conomique - total;927 -2021;4061 Arni (AG);Secteur conomique - total;304 -2021;4062 Berikon;Secteur conomique - total;1573 -2021;4063 Bremgarten (AG);Secteur conomique - total;4770 -2021;4064 Bttikon;Secteur conomique - total;212 -2021;4065 Dottikon;Secteur conomique - total;1482 -2021;4066 Eggenwil;Secteur conomique - total;168 -2021;4067 Fischbach-Gslikon;Secteur conomique - total;411 -2021;4068 Hgglingen;Secteur conomique - total;779 -2021;4071 Jonen;Secteur conomique - total;605 -2021;4072 Niederwil (AG);Secteur conomique - total;1336 -2021;4073 Oberlunkhofen;Secteur conomique - total;441 -2021;4074 Oberwil-Lieli;Secteur conomique - total;513 -2021;4075 Rudolfstetten-Friedlisberg;Secteur conomique - total;935 -2021;4076 Sarmenstorf;Secteur conomique - total;735 -2021;4077 Tgerig;Secteur conomique - total;203 -2021;4078 Uezwil;Secteur conomique - total;91 -2021;4079 Unterlunkhofen;Secteur conomique - total;262 -2021;4080 Villmergen;Secteur conomique - total;3926 -2021;4081 Widen;Secteur conomique - total;921 -2021;4082 Wohlen (AG);Secteur conomique - total;8622 -2021;4083 Zufikon;Secteur conomique - total;1199 -2021;4084 Islisberg;Secteur conomique - total;75 -2021;4091 Auenstein;Secteur conomique - total;294 -2021;4092 Birr;Secteur conomique - total;1997 -2021;4093 Birrhard;Secteur conomique - total;260 -2021;4094 Bzen;Secteur conomique - total;197 -2021;4095 Brugg;Secteur conomique - total;9938 -2021;4096 Effingen;Secteur conomique - total;218 -2021;4097 Elfingen;Secteur conomique - total;79 -2021;4099 Habsburg;Secteur conomique - total;63 -2021;4100 Hausen (AG);Secteur conomique - total;1718 -2021;4104 Lupfig;Secteur conomique - total;2965 -2021;4105 Mandach;Secteur conomique - total;87 -2021;4106 Mnthal;Secteur conomique - total;94 -2021;4107 Mlligen;Secteur conomique - total;180 -2021;4110 Remigen;Secteur conomique - total;312 -2021;4111 Riniken;Secteur conomique - total;278 -2021;4112 Rfenach;Secteur conomique - total;227 -2021;4117 Thalheim (AG);Secteur conomique - total;262 -2021;4120 Veltheim (AG);Secteur conomique - total;640 -2021;4121 Villigen;Secteur conomique - total;1590 -2021;4122 Villnachern;Secteur conomique - total;247 -2021;4123 Windisch;Secteur conomique - total;5000 -2021;4124 Bzberg;Secteur conomique - total;298 -2021;4125 Schinznach;Secteur conomique - total;1457 -2021;4131 Beinwil am See;Secteur conomique - total;975 -2021;4132 Birrwil;Secteur conomique - total;205 -2021;4133 Burg (AG);Secteur conomique - total;342 -2021;4134 Drrensch;Secteur conomique - total;914 -2021;4135 Gontenschwil;Secteur conomique - total;1015 -2021;4136 Holziken;Secteur conomique - total;273 -2021;4137 Leimbach (AG);Secteur conomique - total;133 -2021;4138 Leutwil;Secteur conomique - total;175 -2021;4139 Menziken;Secteur conomique - total;1914 -2021;4140 Oberkulm;Secteur conomique - total;1002 -2021;4141 Reinach (AG);Secteur conomique - total;3762 -2021;4142 Schlossrued;Secteur conomique - total;346 -2021;4143 Schmiedrued;Secteur conomique - total;374 -2021;4144 Schftland;Secteur conomique - total;1799 -2021;4145 Teufenthal (AG);Secteur conomique - total;357 -2021;4146 Unterkulm;Secteur conomique - total;1136 -2021;4147 Zetzwil;Secteur conomique - total;626 -2021;4161 Eiken;Secteur conomique - total;1259 -2021;4163 Frick;Secteur conomique - total;4130 -2021;4164 Gansingen;Secteur conomique - total;173 -2021;4165 Gipf-Oberfrick;Secteur conomique - total;815 -2021;4166 Herznach;Secteur conomique - total;361 -2021;4167 Hornussen;Secteur conomique - total;176 -2021;4169 Kaisten;Secteur conomique - total;908 -2021;4170 Laufenburg;Secteur conomique - total;2291 -2021;4172 Mnchwilen (AG);Secteur conomique - total;614 -2021;4173 Oberhof;Secteur conomique - total;128 -2021;4175 Oeschgen;Secteur conomique - total;301 -2021;4176 Schwaderloch;Secteur conomique - total;241 -2021;4177 Sisseln;Secteur conomique - total;1168 -2021;4179 Ueken;Secteur conomique - total;125 -2021;4181 Wittnau;Secteur conomique - total;271 -2021;4182 Wlflinswil;Secteur conomique - total;310 -2021;4183 Zeihen;Secteur conomique - total;267 -2021;4184 Mettauertal;Secteur conomique - total;754 -2021;4191 Ammerswil;Secteur conomique - total;131 -2021;4192 Boniswil;Secteur conomique - total;209 -2021;4193 Brunegg;Secteur conomique - total;412 -2021;4194 Dintikon;Secteur conomique - total;1212 -2021;4195 Egliswil;Secteur conomique - total;438 -2021;4196 Fahrwangen;Secteur conomique - total;781 -2021;4197 Hallwil;Secteur conomique - total;296 -2021;4198 Hendschiken;Secteur conomique - total;563 -2021;4199 Holderbank (AG);Secteur conomique - total;730 -2021;4200 Hunzenschwil;Secteur conomique - total;2157 -2021;4201 Lenzburg;Secteur conomique - total;9640 -2021;4202 Meisterschwanden;Secteur conomique - total;1273 -2021;4203 Mriken-Wildegg;Secteur conomique - total;1617 -2021;4204 Niederlenz;Secteur conomique - total;1698 -2021;4205 Othmarsingen;Secteur conomique - total;1202 -2021;4206 Rupperswil;Secteur conomique - total;1990 -2021;4207 Schafisheim;Secteur conomique - total;4123 -2021;4208 Seengen;Secteur conomique - total;1355 -2021;4209 Seon;Secteur conomique - total;3003 -2021;4210 Staufen;Secteur conomique - total;801 -2021;4221 Abtwil;Secteur conomique - total;177 -2021;4222 Aristau;Secteur conomique - total;371 -2021;4223 Auw;Secteur conomique - total;611 -2021;4224 Beinwil (Freiamt);Secteur conomique - total;418 -2021;4226 Besenbren;Secteur conomique - total;137 -2021;4227 Bettwil;Secteur conomique - total;237 -2021;4228 Boswil;Secteur conomique - total;1432 -2021;4229 Bnzen;Secteur conomique - total;295 -2021;4230 Buttwil;Secteur conomique - total;207 -2021;4231 Dietwil;Secteur conomique - total;194 -2021;4232 Geltwil;Secteur conomique - total;63 -2021;4233 Kallern;Secteur conomique - total;102 -2021;4234 Merenschwand;Secteur conomique - total;1610 -2021;4235 Mhlau;Secteur conomique - total;346 -2021;4236 Muri (AG);Secteur conomique - total;5688 -2021;4237 Oberrti;Secteur conomique - total;433 -2021;4238 Rottenschwil;Secteur conomique - total;221 -2021;4239 Sins;Secteur conomique - total;2392 -2021;4240 Waltenschwil;Secteur conomique - total;621 -2021;4251 Hellikon;Secteur conomique - total;132 -2021;4252 Kaiseraugst;Secteur conomique - total;6510 -2021;4253 Magden;Secteur conomique - total;714 -2021;4254 Mhlin;Secteur conomique - total;4424 -2021;4255 Mumpf;Secteur conomique - total;370 -2021;4256 Obermumpf;Secteur conomique - total;140 -2021;4257 Olsberg;Secteur conomique - total;105 -2021;4258 Rheinfelden;Secteur conomique - total;8494 -2021;4259 Schupfart;Secteur conomique - total;180 -2021;4260 Stein (AG);Secteur conomique - total;3464 -2021;4261 Wallbach;Secteur conomique - total;748 -2021;4262 Wegenstetten;Secteur conomique - total;205 -2021;4263 Zeiningen;Secteur conomique - total;579 -2021;4264 Zuzgen;Secteur conomique - total;250 -2021;4271 Aarburg;Secteur conomique - total;3535 -2021;4273 Bottenwil;Secteur conomique - total;150 -2021;4274 Brittnau;Secteur conomique - total;764 -2021;4275 Kirchleerau;Secteur conomique - total;275 -2021;4276 Klliken;Secteur conomique - total;1632 -2021;4277 Moosleerau;Secteur conomique - total;374 -2021;4279 Murgenthal;Secteur conomique - total;890 -2021;4280 Oftringen;Secteur conomique - total;5688 -2021;4281 Reitnau;Secteur conomique - total;605 -2021;4282 Rothrist;Secteur conomique - total;5198 -2021;4283 Safenwil;Secteur conomique - total;1725 -2021;4284 Staffelbach;Secteur conomique - total;375 -2021;4285 Strengelbach;Secteur conomique - total;1405 -2021;4286 Uerkheim;Secteur conomique - total;369 -2021;4287 Vordemwald;Secteur conomique - total;581 -2021;4288 Wiliberg;Secteur conomique - total;47 -2021;4289 Zofingen;Secteur conomique - total;10851 -2021;4301 Baldingen;Secteur conomique - total;52 -2021;4302 Bbikon;Secteur conomique - total;82 -2021;4303 Bttstein;Secteur conomique - total;1752 -2021;4304 Dttingen;Secteur conomique - total;2291 -2021;4305 Endingen;Secteur conomique - total;810 -2021;4306 Fisibach;Secteur conomique - total;182 -2021;4307 Full-Reuenthal;Secteur conomique - total;170 -2021;4308 Kaiserstuhl;Secteur conomique - total;107 -2021;4309 Klingnau;Secteur conomique - total;975 -2021;4310 Koblenz;Secteur conomique - total;477 -2021;4311 Leibstadt;Secteur conomique - total;1081 -2021;4312 Lengnau (AG);Secteur conomique - total;1177 -2021;4313 Leuggern;Secteur conomique - total;1353 -2021;4314 Mellikon;Secteur conomique - total;139 -2021;4315 Rekingen (AG);Secteur conomique - total;442 -2021;4316 Rietheim;Secteur conomique - total;176 -2021;4317 Rmikon;Secteur conomique - total;63 -2021;4318 Schneisingen;Secteur conomique - total;354 -2021;4319 Siglistorf;Secteur conomique - total;182 -2021;4320 Tegerfelden;Secteur conomique - total;459 -2021;4322 Wislikofen;Secteur conomique - total;161 -2021;4323 Bad Zurzach;Secteur conomique - total;2993 -2021;4401 Arbon;Secteur conomique - total;6755 -2021;4406 Dozwil;Secteur conomique - total;243 -2021;4411 Egnach;Secteur conomique - total;1988 -2021;4416 Hefenhofen;Secteur conomique - total;731 -2021;4421 Horn;Secteur conomique - total;1232 -2021;4426 Kesswil;Secteur conomique - total;416 -2021;4431 Roggwil (TG);Secteur conomique - total;1615 -2021;4436 Romanshorn;Secteur conomique - total;5923 -2021;4441 Salmsach;Secteur conomique - total;429 -2021;4446 Sommeri;Secteur conomique - total;491 -2021;4451 Uttwil;Secteur conomique - total;357 -2021;4461 Amriswil;Secteur conomique - total;6662 -2021;4471 Bischofszell;Secteur conomique - total;3437 -2021;4476 Erlen;Secteur conomique - total;1307 -2021;4486 Hauptwil-Gottshaus;Secteur conomique - total;615 -2021;4495 Hohentannen;Secteur conomique - total;266 -2021;4501 Kradolf-Schnenberg;Secteur conomique - total;1095 -2021;4506 Sulgen;Secteur conomique - total;2509 -2021;4511 Zihlschlacht-Sitterdorf;Secteur conomique - total;1441 -2021;4536 Basadingen-Schlattingen;Secteur conomique - total;731 -2021;4545 Diessenhofen;Secteur conomique - total;1867 -2021;4546 Schlatt (TG);Secteur conomique - total;561 -2021;4551 Aadorf;Secteur conomique - total;3807 -2021;4561 Felben-Wellhausen;Secteur conomique - total;1007 -2021;4566 Frauenfeld;Secteur conomique - total;21936 -2021;4571 Gachnang;Secteur conomique - total;1509 -2021;4590 Httlingen;Secteur conomique - total;253 -2021;4591 Matzingen;Secteur conomique - total;1123 -2021;4601 Neunforn;Secteur conomique - total;392 -2021;4606 Stettfurt;Secteur conomique - total;434 -2021;4611 Thundorf;Secteur conomique - total;438 -2021;4616 Uesslingen-Buch;Secteur conomique - total;405 -2021;4621 Warth-Weiningen;Secteur conomique - total;604 -2021;4641 Altnau;Secteur conomique - total;923 -2021;4643 Bottighofen;Secteur conomique - total;907 -2021;4646 Ermatingen;Secteur conomique - total;1064 -2021;4651 Gottlieben;Secteur conomique - total;112 -2021;4656 Gttingen;Secteur conomique - total;654 -2021;4666 Kemmental;Secteur conomique - total;854 -2021;4671 Kreuzlingen;Secteur conomique - total;12249 -2021;4681 Langrickenbach;Secteur conomique - total;358 -2021;4683 Lengwil;Secteur conomique - total;902 -2021;4691 Mnsterlingen;Secteur conomique - total;3254 -2021;4696 Tgerwilen;Secteur conomique - total;3614 -2021;4701 Wldi;Secteur conomique - total;411 -2021;4711 Affeltrangen;Secteur conomique - total;1282 -2021;4716 Bettwiesen;Secteur conomique - total;323 -2021;4721 Bichelsee-Balterswil;Secteur conomique - total;942 -2021;4723 Braunau;Secteur conomique - total;291 -2021;4724 Eschlikon;Secteur conomique - total;1834 -2021;4726 Fischingen;Secteur conomique - total;1484 -2021;4741 Lommis;Secteur conomique - total;465 -2021;4746 Mnchwilen (TG);Secteur conomique - total;2705 -2021;4751 Rickenbach (TG);Secteur conomique - total;990 -2021;4756 Schnholzerswilen;Secteur conomique - total;362 -2021;4761 Sirnach;Secteur conomique - total;4040 -2021;4776 Tobel-Tgerschen;Secteur conomique - total;751 -2021;4781 Wngi;Secteur conomique - total;2088 -2021;4786 Wilen (TG);Secteur conomique - total;551 -2021;4791 Wuppenau;Secteur conomique - total;416 -2021;4801 Berlingen;Secteur conomique - total;342 -2021;4806 Eschenz;Secteur conomique - total;640 -2021;4811 Herdern;Secteur conomique - total;347 -2021;4816 Homburg;Secteur conomique - total;912 -2021;4821 Httwilen;Secteur conomique - total;740 -2021;4826 Mammern;Secteur conomique - total;489 -2021;4831 Mllheim;Secteur conomique - total;1329 -2021;4841 Pfyn;Secteur conomique - total;793 -2021;4846 Raperswilen;Secteur conomique - total;167 -2021;4851 Salenstein;Secteur conomique - total;582 -2021;4864 Steckborn;Secteur conomique - total;1549 -2021;4871 Wagenhausen;Secteur conomique - total;411 -2021;4881 Amlikon-Bissegg;Secteur conomique - total;470 -2021;4891 Berg (TG);Secteur conomique - total;1669 -2021;4901 Birwinken;Secteur conomique - total;398 -2021;4911 Brglen (TG);Secteur conomique - total;1463 -2021;4921 Bussnang;Secteur conomique - total;3362 -2021;4941 Mrstetten;Secteur conomique - total;1204 -2021;4946 Weinfelden;Secteur conomique - total;10157 -2021;4951 Wigoltingen;Secteur conomique - total;987 -2021;5001 Arbedo-Castione;Secteur conomique - total;2934 -2021;5002 Bellinzona;Secteur conomique - total;28644 -2021;5003 Cadenazzo;Secteur conomique - total;2005 -2021;5009 Isone;Secteur conomique - total;146 -2021;5010 Lumino;Secteur conomique - total;372 -2021;5017 Sant'Antonino;Secteur conomique - total;2338 -2021;5048 Acquarossa;Secteur conomique - total;810 -2021;5049 Blenio;Secteur conomique - total;667 -2021;5050 Serravalle;Secteur conomique - total;592 -2021;5061 Airolo;Secteur conomique - total;859 -2021;5063 Bedretto;Secteur conomique - total;53 -2021;5064 Bodio;Secteur conomique - total;392 -2021;5071 Dalpe;Secteur conomique - total;26 -2021;5072 Faido;Secteur conomique - total;981 -2021;5073 Giornico;Secteur conomique - total;362 -2021;5076 Personico;Secteur conomique - total;136 -2021;5077 Pollegio;Secteur conomique - total;300 -2021;5078 Prato (Leventina);Secteur conomique - total;131 -2021;5079 Quinto;Secteur conomique - total;705 -2021;5091 Ascona;Secteur conomique - total;3202 -2021;5096 Brione sopra Minusio;Secteur conomique - total;69 -2021;5097 Brissago;Secteur conomique - total;1266 -2021;5108 Gordola;Secteur conomique - total;1652 -2021;5112 Lavertezzo;Secteur conomique - total;867 -2021;5113 Locarno;Secteur conomique - total;13637 -2021;5115 Losone;Secteur conomique - total;3042 -2021;5117 Mergoscia;Secteur conomique - total;38 -2021;5118 Minusio;Secteur conomique - total;1821 -2021;5120 Muralto;Secteur conomique - total;1615 -2021;5121 Orselina;Secteur conomique - total;514 -2021;5125 Ronco sopra Ascona;Secteur conomique - total;168 -2021;5131 Tenero-Contra;Secteur conomique - total;1445 -2021;5136 Onsernone;Secteur conomique - total;244 -2021;5138 Cugnasco-Gerra;Secteur conomique - total;489 -2021;5141 Agno;Secteur conomique - total;2470 -2021;5143 Aranno;Secteur conomique - total;40 -2021;5144 Arogno;Secteur conomique - total;261 -2021;5146 Astano;Secteur conomique - total;54 -2021;5148 Bedano;Secteur conomique - total;1642 -2021;5149 Bedigliora;Secteur conomique - total;165 -2021;5151 Bioggio;Secteur conomique - total;4788 -2021;5154 Bissone;Secteur conomique - total;214 -2021;5160 Brusino Arsizio;Secteur conomique - total;95 -2021;5161 Cademario;Secteur conomique - total;151 -2021;5162 Cadempino;Secteur conomique - total;1967 -2021;5167 Canobbio;Secteur conomique - total;959 -2021;5171 Caslano;Secteur conomique - total;1809 -2021;5176 Comano;Secteur conomique - total;906 -2021;5180 Cureglia;Secteur conomique - total;319 -2021;5181 Curio;Secteur conomique - total;119 -2021;5186 Grancia;Secteur conomique - total;990 -2021;5187 Gravesano;Secteur conomique - total;1089 -2021;5189 Lamone;Secteur conomique - total;2025 -2021;5192 Lugano;Secteur conomique - total;57531 -2021;5193 Magliaso;Secteur conomique - total;528 -2021;5194 Manno;Secteur conomique - total;6286 -2021;5195 Maroggia;Secteur conomique - total;323 -2021;5196 Massagno;Secteur conomique - total;2159 -2021;5197 Melano;Secteur conomique - total;498 -2021;5198 Melide;Secteur conomique - total;683 -2021;5199 Mezzovico-Vira;Secteur conomique - total;2852 -2021;5200 Miglieglia;Secteur conomique - total;65 -2021;5203 Morcote;Secteur conomique - total;259 -2021;5205 Muzzano;Secteur conomique - total;1146 -2021;5206 Neggio;Secteur conomique - total;108 -2021;5207 Novaggio;Secteur conomique - total;329 -2021;5208 Origlio;Secteur conomique - total;232 -2021;5210 Paradiso;Secteur conomique - total;3186 -2021;5212 Ponte Capriasca;Secteur conomique - total;193 -2021;5214 Porza;Secteur conomique - total;623 -2021;5216 Pura;Secteur conomique - total;213 -2021;5219 Rovio;Secteur conomique - total;100 -2021;5221 Savosa;Secteur conomique - total;1033 -2021;5225 Sorengo;Secteur conomique - total;1283 -2021;5226 Capriasca;Secteur conomique - total;1582 -2021;5227 Torricella-Taverne;Secteur conomique - total;1711 -2021;5230 Vernate;Secteur conomique - total;66 -2021;5231 Vezia;Secteur conomique - total;1133 -2021;5233 Vico Morcote;Secteur conomique - total;163 -2021;5236 Collina d'Oro;Secteur conomique - total;2378 -2021;5237 Alto Malcantone;Secteur conomique - total;184 -2021;5238 Monteceneri;Secteur conomique - total;2978 -2021;5239 Tresa;Secteur conomique - total;2055 -2021;5242 Balerna;Secteur conomique - total;4585 -2021;5249 Castel San Pietro;Secteur conomique - total;1623 -2021;5250 Chiasso;Secteur conomique - total;10612 -2021;5251 Coldrerio;Secteur conomique - total;935 -2021;5254 Mendrisio;Secteur conomique - total;18066 -2021;5257 Morbio Inferiore;Secteur conomique - total;1834 -2021;5260 Novazzano;Secteur conomique - total;2003 -2021;5263 Riva San Vitale;Secteur conomique - total;1195 -2021;5266 Stabio;Secteur conomique - total;7029 -2021;5268 Vacallo;Secteur conomique - total;598 -2021;5269 Breggia;Secteur conomique - total;286 -2021;5281 Biasca;Secteur conomique - total;3269 -2021;5287 Riviera;Secteur conomique - total;1522 -2021;5304 Bosco/Gurin;Secteur conomique - total;59 -2021;5307 Campo (Vallemaggia);Secteur conomique - total;34 -2021;5309 Cerentino;Secteur conomique - total;22 -2021;5310 Cevio;Secteur conomique - total;691 -2021;5315 Linescio;Secteur conomique - total;X -2021;5317 Maggia;Secteur conomique - total;719 -2021;5323 Lavizzara;Secteur conomique - total;224 -2021;5324 Avegno Gordevio;Secteur conomique - total;482 -2021;5396 Terre di Pedemonte;Secteur conomique - total;709 -2021;5397 Centovalli;Secteur conomique - total;439 -2021;5398 Gambarogno;Secteur conomique - total;2680 -2021;5399 Verzasca;Secteur conomique - total;238 -2021;5401 Aigle;Secteur conomique - total;6136 -2021;5402 Bex;Secteur conomique - total;2640 -2021;5403 Chessel;Secteur conomique - total;102 -2021;5404 Corbeyrier;Secteur conomique - total;116 -2021;5405 Gryon;Secteur conomique - total;397 -2021;5406 Lavey-Morcles;Secteur conomique - total;396 -2021;5407 Leysin;Secteur conomique - total;1431 -2021;5408 Noville;Secteur conomique - total;763 -2021;5409 Ollon;Secteur conomique - total;2863 -2021;5410 Ormont-Dessous;Secteur conomique - total;431 -2021;5411 Ormont-Dessus;Secteur conomique - total;764 -2021;5412 Rennaz;Secteur conomique - total;2795 -2021;5413 Roche (VD);Secteur conomique - total;579 -2021;5414 Villeneuve (VD);Secteur conomique - total;3001 -2021;5415 Yvorne;Secteur conomique - total;572 -2021;5422 Aubonne;Secteur conomique - total;3912 -2021;5423 Ballens;Secteur conomique - total;358 -2021;5424 Berolle;Secteur conomique - total;64 -2021;5425 Bire;Secteur conomique - total;532 -2021;5426 Bougy-Villars;Secteur conomique - total;113 -2021;5427 Fchy;Secteur conomique - total;249 -2021;5428 Gimel;Secteur conomique - total;604 -2021;5429 Longirod;Secteur conomique - total;88 -2021;5430 Marchissy;Secteur conomique - total;88 -2021;5431 Mollens (VD);Secteur conomique - total;72 -2021;5434 Saint-George;Secteur conomique - total;226 -2021;5435 Saint-Livres;Secteur conomique - total;105 -2021;5436 Saint-Oyens;Secteur conomique - total;56 -2021;5437 Saubraz;Secteur conomique - total;44 -2021;5451 Avenches;Secteur conomique - total;2705 -2021;5456 Cudrefin;Secteur conomique - total;361 -2021;5458 Faoug;Secteur conomique - total;179 -2021;5464 Vully-les-Lacs;Secteur conomique - total;677 -2021;5471 Bettens;Secteur conomique - total;85 -2021;5472 Bournens;Secteur conomique - total;58 -2021;5473 Boussens;Secteur conomique - total;171 -2021;5474 La Chaux (Cossonay);Secteur conomique - total;72 -2021;5475 Chavannes-le-Veyron;Secteur conomique - total;36 -2021;5476 Chevilly;Secteur conomique - total;27 -2021;5477 Cossonay;Secteur conomique - total;1638 -2021;5479 Cuarnens;Secteur conomique - total;138 -2021;5480 Daillens;Secteur conomique - total;734 -2021;5481 Dizy;Secteur conomique - total;64 -2021;5482 Eclpens;Secteur conomique - total;1559 -2021;5483 Ferreyres;Secteur conomique - total;61 -2021;5484 Gollion;Secteur conomique - total;325 -2021;5485 Grancy;Secteur conomique - total;98 -2021;5486 L'Isle;Secteur conomique - total;321 -2021;5487 Lussery-Villars;Secteur conomique - total;64 -2021;5488 Mauraz;Secteur conomique - total;13 -2021;5489 Mex (VD);Secteur conomique - total;1726 -2021;5490 Moiry;Secteur conomique - total;78 -2021;5491 Mont-la-Ville;Secteur conomique - total;75 -2021;5492 Montricher;Secteur conomique - total;289 -2021;5493 Orny;Secteur conomique - total;127 -2021;5495 Penthalaz;Secteur conomique - total;1416 -2021;5496 Penthaz;Secteur conomique - total;650 -2021;5497 Pompaples;Secteur conomique - total;516 -2021;5498 La Sarraz;Secteur conomique - total;687 -2021;5499 Senarclens;Secteur conomique - total;119 -2021;5501 Sullens;Secteur conomique - total;187 -2021;5503 Vufflens-la-Ville;Secteur conomique - total;924 -2021;5511 Assens;Secteur conomique - total;1397 -2021;5512 Bercher;Secteur conomique - total;469 -2021;5514 Bottens;Secteur conomique - total;242 -2021;5515 Bretigny-sur-Morrens;Secteur conomique - total;208 -2021;5516 Cugy (VD);Secteur conomique - total;1194 -2021;5518 Echallens;Secteur conomique - total;2648 -2021;5520 Essertines-sur-Yverdon;Secteur conomique - total;193 -2021;5521 Etagnires;Secteur conomique - total;713 -2021;5522 Fey;Secteur conomique - total;183 -2021;5523 Froideville;Secteur conomique - total;264 -2021;5527 Morrens (VD);Secteur conomique - total;154 -2021;5529 Oulens-sous-Echallens;Secteur conomique - total;135 -2021;5530 Pailly;Secteur conomique - total;180 -2021;5531 Penthraz;Secteur conomique - total;128 -2021;5533 Poliez-Pittet;Secteur conomique - total;412 -2021;5534 Rueyres;Secteur conomique - total;91 -2021;5535 Saint-Barthlemy (VD);Secteur conomique - total;321 -2021;5537 Villars-le-Terroir;Secteur conomique - total;230 -2021;5539 Vuarrens;Secteur conomique - total;155 -2021;5540 Montilliez;Secteur conomique - total;321 -2021;5541 Goumons;Secteur conomique - total;326 -2021;5551 Bonvillars;Secteur conomique - total;118 -2021;5552 Bullet;Secteur conomique - total;215 -2021;5553 Champagne;Secteur conomique - total;498 -2021;5554 Concise;Secteur conomique - total;202 -2021;5555 Corcelles-prs-Concise;Secteur conomique - total;131 -2021;5556 Fiez;Secteur conomique - total;67 -2021;5557 Fontaines-sur-Grandson;Secteur conomique - total;29 -2021;5559 Giez;Secteur conomique - total;101 -2021;5560 Grandevent;Secteur conomique - total;23 -2021;5561 Grandson;Secteur conomique - total;1517 -2021;5562 Mauborget;Secteur conomique - total;22 -2021;5563 Mutrux;Secteur conomique - total;28 -2021;5564 Novalles;Secteur conomique - total;23 -2021;5565 Onnens (VD);Secteur conomique - total;247 -2021;5566 Provence;Secteur conomique - total;143 -2021;5568 Sainte-Croix;Secteur conomique - total;1881 -2021;5571 Tvenon;Secteur conomique - total;143 -2021;5581 Belmont-sur-Lausanne;Secteur conomique - total;540 -2021;5582 Cheseaux-sur-Lausanne;Secteur conomique - total;2083 -2021;5583 Crissier;Secteur conomique - total;10253 -2021;5584 Epalinges;Secteur conomique - total;3333 -2021;5585 Jouxtens-Mzery;Secteur conomique - total;175 -2021;5586 Lausanne;Secteur conomique - total;127489 -2021;5587 Le Mont-sur-Lausanne;Secteur conomique - total;8534 -2021;5588 Paudex;Secteur conomique - total;1443 -2021;5589 Prilly;Secteur conomique - total;7128 -2021;5590 Pully;Secteur conomique - total;6646 -2021;5591 Renens (VD);Secteur conomique - total;15490 -2021;5592 Romanel-sur-Lausanne;Secteur conomique - total;1519 -2021;5601 Chexbres;Secteur conomique - total;819 -2021;5604 Forel (Lavaux);Secteur conomique - total;1184 -2021;5606 Lutry;Secteur conomique - total;3445 -2021;5607 Puidoux;Secteur conomique - total;2308 -2021;5609 Rivaz;Secteur conomique - total;83 -2021;5610 Saint-Saphorin (Lavaux);Secteur conomique - total;83 -2021;5611 Savigny;Secteur conomique - total;1462 -2021;5613 Bourg-en-Lavaux;Secteur conomique - total;1757 -2021;5621 Aclens;Secteur conomique - total;1891 -2021;5622 Bremblens;Secteur conomique - total;348 -2021;5623 Buchillon;Secteur conomique - total;124 -2021;5624 Bussigny;Secteur conomique - total;6026 -2021;5627 Chavannes-prs-Renens;Secteur conomique - total;3675 -2021;5628 Chigny;Secteur conomique - total;69 -2021;5629 Clarmont;Secteur conomique - total;47 -2021;5631 Denens;Secteur conomique - total;114 -2021;5632 Denges;Secteur conomique - total;864 -2021;5633 Echandens;Secteur conomique - total;1684 -2021;5634 Echichens;Secteur conomique - total;943 -2021;5635 Ecublens (VD);Secteur conomique - total;16855 -2021;5636 Etoy;Secteur conomique - total;3126 -2021;5637 Lavigny;Secteur conomique - total;935 -2021;5638 Lonay;Secteur conomique - total;1723 -2021;5639 Lully (VD);Secteur conomique - total;205 -2021;5640 Lussy-sur-Morges;Secteur conomique - total;197 -2021;5642 Morges;Secteur conomique - total;11714 -2021;5643 Prverenges;Secteur conomique - total;1736 -2021;5645 Romanel-sur-Morges;Secteur conomique - total;552 -2021;5646 Saint-Prex;Secteur conomique - total;3140 -2021;5648 Saint-Sulpice (VD);Secteur conomique - total;1750 -2021;5649 Tolochenaz;Secteur conomique - total;2537 -2021;5650 Vaux-sur-Morges;Secteur conomique - total;96 -2021;5651 Villars-Sainte-Croix;Secteur conomique - total;1433 -2021;5652 Villars-sous-Yens;Secteur conomique - total;93 -2021;5653 Vufflens-le-Chteau;Secteur conomique - total;200 -2021;5654 Vullierens;Secteur conomique - total;145 -2021;5655 Yens;Secteur conomique - total;421 -2021;5656 Hautemorges;Secteur conomique - total;1150 -2021;5661 Boulens;Secteur conomique - total;71 -2021;5663 Bussy-sur-Moudon;Secteur conomique - total;37 -2021;5665 Chavannes-sur-Moudon;Secteur conomique - total;162 -2021;5669 Curtilles;Secteur conomique - total;69 -2021;5671 Dompierre (VD);Secteur conomique - total;50 -2021;5673 Hermenches;Secteur conomique - total;70 -2021;5674 Lovatens;Secteur conomique - total;34 -2021;5675 Lucens;Secteur conomique - total;1067 -2021;5678 Moudon;Secteur conomique - total;2824 -2021;5680 Ogens;Secteur conomique - total;94 -2021;5683 Prvonloup;Secteur conomique - total;34 -2021;5684 Rossenges;Secteur conomique - total;12 -2021;5688 Syens;Secteur conomique - total;32 -2021;5690 Villars-le-Comte;Secteur conomique - total;30 -2021;5692 Vucherens;Secteur conomique - total;190 -2021;5693 Montanaire;Secteur conomique - total;746 -2021;5701 Arnex-sur-Nyon;Secteur conomique - total;28 -2021;5702 Arzier-Le Muids;Secteur conomique - total;423 -2021;5703 Bassins;Secteur conomique - total;232 -2021;5704 Begnins;Secteur conomique - total;420 -2021;5705 Bogis-Bossey;Secteur conomique - total;94 -2021;5706 Borex;Secteur conomique - total;122 -2021;5707 Chavannes-de-Bogis;Secteur conomique - total;1015 -2021;5708 Chavannes-des-Bois;Secteur conomique - total;68 -2021;5709 Chserex;Secteur conomique - total;223 -2021;5710 Coinsins;Secteur conomique - total;186 -2021;5711 Commugny;Secteur conomique - total;285 -2021;5712 Coppet;Secteur conomique - total;917 -2021;5713 Crans (VD);Secteur conomique - total;321 -2021;5714 Crassier;Secteur conomique - total;394 -2021;5715 Duillier;Secteur conomique - total;338 -2021;5716 Eysins;Secteur conomique - total;2045 -2021;5717 Founex;Secteur conomique - total;955 -2021;5718 Genolier;Secteur conomique - total;1051 -2021;5719 Gingins;Secteur conomique - total;320 -2021;5720 Givrins;Secteur conomique - total;185 -2021;5721 Gland;Secteur conomique - total;7718 -2021;5722 Grens;Secteur conomique - total;129 -2021;5723 Mies;Secteur conomique - total;857 -2021;5724 Nyon;Secteur conomique - total;17045 -2021;5725 Prangins;Secteur conomique - total;2011 -2021;5726 La Rippe;Secteur conomique - total;241 -2021;5727 Saint-Cergue;Secteur conomique - total;417 -2021;5728 Signy-Avenex;Secteur conomique - total;648 -2021;5729 Tannay;Secteur conomique - total;184 -2021;5730 Trlex;Secteur conomique - total;226 -2021;5731 Le Vaud;Secteur conomique - total;218 -2021;5732 Vich;Secteur conomique - total;579 -2021;5741 L'Abergement;Secteur conomique - total;26 -2021;5742 Agiez;Secteur conomique - total;74 -2021;5743 Arnex-sur-Orbe;Secteur conomique - total;193 -2021;5744 Ballaigues;Secteur conomique - total;993 -2021;5745 Baulmes;Secteur conomique - total;361 -2021;5746 Bavois;Secteur conomique - total;259 -2021;5747 Bofflens;Secteur conomique - total;51 -2021;5748 Bretonnires;Secteur conomique - total;52 -2021;5749 Chavornay;Secteur conomique - total;1799 -2021;5750 Les Cles;Secteur conomique - total;26 -2021;5752 Croy;Secteur conomique - total;228 -2021;5754 Juriens;Secteur conomique - total;65 -2021;5755 Lignerolle;Secteur conomique - total;108 -2021;5756 Montcherand;Secteur conomique - total;79 -2021;5757 Orbe;Secteur conomique - total;4838 -2021;5758 La Praz;Secteur conomique - total;27 -2021;5759 Premier;Secteur conomique - total;54 -2021;5760 Rances;Secteur conomique - total;96 -2021;5761 Romainmtier-Envy;Secteur conomique - total;191 -2021;5762 Sergey;Secteur conomique - total;21 -2021;5763 Valeyres-sous-Rances;Secteur conomique - total;172 -2021;5764 Vallorbe;Secteur conomique - total;1437 -2021;5765 Vaulion;Secteur conomique - total;156 -2021;5766 Vuiteboeuf;Secteur conomique - total;250 -2021;5785 Corcelles-le-Jorat;Secteur conomique - total;82 -2021;5788 Essertes;Secteur conomique - total;43 -2021;5790 Maracon;Secteur conomique - total;103 -2021;5792 Montpreveyres;Secteur conomique - total;118 -2021;5798 Ropraz;Secteur conomique - total;187 -2021;5799 Servion;Secteur conomique - total;686 -2021;5803 Vulliens;Secteur conomique - total;88 -2021;5804 Jorat-Menthue;Secteur conomique - total;319 -2021;5805 Oron;Secteur conomique - total;2435 -2021;5806 Jorat-Mzires;Secteur conomique - total;904 -2021;5812 Champtauroz;Secteur conomique - total;32 -2021;5813 Chevroux;Secteur conomique - total;124 -2021;5816 Corcelles-prs-Payerne;Secteur conomique - total;808 -2021;5817 Grandcour;Secteur conomique - total;223 -2021;5819 Henniez;Secteur conomique - total;273 -2021;5821 Missy;Secteur conomique - total;78 -2021;5822 Payerne;Secteur conomique - total;7244 -2021;5827 Trey;Secteur conomique - total;79 -2021;5828 Treytorrens (Payerne);Secteur conomique - total;23 -2021;5830 Villarzel;Secteur conomique - total;118 -2021;5831 Valbroye;Secteur conomique - total;1293 -2021;5841 Chteau-d'Oex;Secteur conomique - total;1778 -2021;5842 Rossinire;Secteur conomique - total;142 -2021;5843 Rougemont;Secteur conomique - total;413 -2021;5851 Allaman;Secteur conomique - total;425 -2021;5852 Bursinel;Secteur conomique - total;89 -2021;5853 Bursins;Secteur conomique - total;420 -2021;5854 Burtigny;Secteur conomique - total;117 -2021;5855 Dully;Secteur conomique - total;120 -2021;5856 Essertines-sur-Rolle;Secteur conomique - total;99 -2021;5857 Gilly;Secteur conomique - total;335 -2021;5858 Luins;Secteur conomique - total;184 -2021;5859 Mont-sur-Rolle;Secteur conomique - total;528 -2021;5860 Perroy;Secteur conomique - total;471 -2021;5861 Rolle;Secteur conomique - total;4487 -2021;5862 Tartegnin;Secteur conomique - total;71 -2021;5863 Vinzel;Secteur conomique - total;117 -2021;5871 L'Abbaye;Secteur conomique - total;726 -2021;5872 Le Chenit;Secteur conomique - total;6379 -2021;5873 Le Lieu;Secteur conomique - total;735 -2021;5881 Blonay;Secteur conomique - total;1772 -2021;5882 Chardonne;Secteur conomique - total;768 -2021;5883 Corseaux;Secteur conomique - total;451 -2021;5884 Corsier-sur-Vevey;Secteur conomique - total;1777 -2021;5885 Jongny;Secteur conomique - total;246 -2021;5886 Montreux;Secteur conomique - total;12433 -2021;5888 Saint-Lgier-La Chisaz;Secteur conomique - total;2724 -2021;5889 La Tour-de-Peilz;Secteur conomique - total;3642 -2021;5890 Vevey;Secteur conomique - total;14359 -2021;5891 Veytaux;Secteur conomique - total;213 -2021;5902 Belmont-sur-Yverdon;Secteur conomique - total;67 -2021;5903 Bioley-Magnoux;Secteur conomique - total;48 -2021;5904 Chamblon;Secteur conomique - total;231 -2021;5905 Champvent;Secteur conomique - total;323 -2021;5907 Chavannes-le-Chne;Secteur conomique - total;52 -2021;5908 Chne-Pquier;Secteur conomique - total;54 -2021;5909 Cheseaux-Noraz;Secteur conomique - total;280 -2021;5910 Cronay;Secteur conomique - total;85 -2021;5911 Cuarny;Secteur conomique - total;52 -2021;5912 Dmoret;Secteur conomique - total;85 -2021;5913 Donneloye;Secteur conomique - total;151 -2021;5914 Ependes (VD);Secteur conomique - total;115 -2021;5919 Mathod;Secteur conomique - total;163 -2021;5921 Molondin;Secteur conomique - total;111 -2021;5922 Montagny-prs-Yverdon;Secteur conomique - total;2068 -2021;5923 Oppens;Secteur conomique - total;225 -2021;5924 Orges;Secteur conomique - total;122 -2021;5925 Orzens;Secteur conomique - total;58 -2021;5926 Pomy;Secteur conomique - total;237 -2021;5928 Rovray;Secteur conomique - total;43 -2021;5929 Suchy;Secteur conomique - total;137 -2021;5930 Suscvaz;Secteur conomique - total;32 -2021;5931 Treycovagnes;Secteur conomique - total;81 -2021;5932 Ursins;Secteur conomique - total;25 -2021;5933 Valeyres-sous-Montagny;Secteur conomique - total;153 -2021;5934 Valeyres-sous-Ursins;Secteur conomique - total;40 -2021;5935 Villars-Epeney;Secteur conomique - total;13 -2021;5937 Vugelles-La Mothe;Secteur conomique - total;26 -2021;5938 Yverdon-les-Bains;Secteur conomique - total;20879 -2021;5939 Yvonand;Secteur conomique - total;1097 -2021;6002 Brig-Glis;Secteur conomique - total;10261 -2021;6004 Eggerberg;Secteur conomique - total;66 -2021;6007 Naters;Secteur conomique - total;2447 -2021;6008 Ried-Brig;Secteur conomique - total;399 -2021;6009 Simplon;Secteur conomique - total;193 -2021;6010 Termen;Secteur conomique - total;172 -2021;6011 Zwischbergen;Secteur conomique - total;33 -2021;6021 Ardon;Secteur conomique - total;936 -2021;6022 Chamoson;Secteur conomique - total;1224 -2021;6023 Conthey;Secteur conomique - total;4043 -2021;6024 Nendaz;Secteur conomique - total;2559 -2021;6025 Vtroz;Secteur conomique - total;2159 -2021;6032 Bourg-Saint-Pierre;Secteur conomique - total;110 -2021;6033 Liddes;Secteur conomique - total;171 -2021;6034 Orsires;Secteur conomique - total;1292 -2021;6035 Sembrancher;Secteur conomique - total;733 -2021;6037 Val de Bagnes;Secteur conomique - total;6657 -2021;6052 Bellwald;Secteur conomique - total;215 -2021;6054 Binn;Secteur conomique - total;72 -2021;6056 Ernen;Secteur conomique - total;206 -2021;6057 Fiesch;Secteur conomique - total;655 -2021;6058 Fieschertal;Secteur conomique - total;209 -2021;6061 Lax;Secteur conomique - total;99 -2021;6076 Obergoms;Secteur conomique - total;422 -2021;6077 Goms;Secteur conomique - total;676 -2021;6082 Ayent;Secteur conomique - total;1162 -2021;6083 Evolne;Secteur conomique - total;653 -2021;6084 Hrmence;Secteur conomique - total;397 -2021;6087 Saint-Martin (VS);Secteur conomique - total;221 -2021;6089 Vex;Secteur conomique - total;602 -2021;6090 Mont-Noble;Secteur conomique - total;238 -2021;6101 Agarn;Secteur conomique - total;200 -2021;6102 Albinen;Secteur conomique - total;88 -2021;6104 Ergisch;Secteur conomique - total;41 -2021;6109 Inden;Secteur conomique - total;28 -2021;6110 Leuk;Secteur conomique - total;1739 -2021;6111 Leukerbad;Secteur conomique - total;942 -2021;6112 Oberems;Secteur conomique - total;30 -2021;6113 Salgesch;Secteur conomique - total;1061 -2021;6116 Varen;Secteur conomique - total;171 -2021;6117 Guttet-Feschel;Secteur conomique - total;89 -2021;6118 Gampel-Bratsch;Secteur conomique - total;713 -2021;6119 Turtmann-Unterems;Secteur conomique - total;487 -2021;6131 Bovernier;Secteur conomique - total;81 -2021;6133 Fully;Secteur conomique - total;2507 -2021;6134 Isrables;Secteur conomique - total;266 -2021;6135 Leytron;Secteur conomique - total;1408 -2021;6136 Martigny;Secteur conomique - total;14348 -2021;6137 Martigny-Combe;Secteur conomique - total;630 -2021;6139 Riddes;Secteur conomique - total;1308 -2021;6140 Saillon;Secteur conomique - total;804 -2021;6141 Saxon;Secteur conomique - total;2378 -2021;6142 Trient;Secteur conomique - total;68 -2021;6151 Champry;Secteur conomique - total;765 -2021;6152 Collombey-Muraz;Secteur conomique - total;3451 -2021;6153 Monthey;Secteur conomique - total;11226 -2021;6154 Port-Valais;Secteur conomique - total;1144 -2021;6155 Saint-Gingolph;Secteur conomique - total;153 -2021;6156 Troistorrents;Secteur conomique - total;929 -2021;6157 Val-d'Illiez;Secteur conomique - total;606 -2021;6158 Vionnaz;Secteur conomique - total;975 -2021;6159 Vouvry;Secteur conomique - total;1709 -2021;6172 Bister;Secteur conomique - total;17 -2021;6173 Bitsch;Secteur conomique - total;336 -2021;6177 Grengiols;Secteur conomique - total;143 -2021;6181 Riederalp;Secteur conomique - total;318 -2021;6191 Ausserberg;Secteur conomique - total;130 -2021;6192 Blatten;Secteur conomique - total;87 -2021;6193 Brchen;Secteur conomique - total;187 -2021;6194 Eischoll;Secteur conomique - total;93 -2021;6195 Ferden;Secteur conomique - total;86 -2021;6197 Kippel;Secteur conomique - total;115 -2021;6198 Niedergesteln;Secteur conomique - total;119 -2021;6199 Raron;Secteur conomique - total;1075 -2021;6201 Unterbch;Secteur conomique - total;139 -2021;6202 Wiler (Ltschen);Secteur conomique - total;217 -2021;6203 Mrel-Filet;Secteur conomique - total;318 -2021;6204 Steg-Hohtenn;Secteur conomique - total;980 -2021;6205 Bettmeralp;Secteur conomique - total;721 -2021;6211 Collonges;Secteur conomique - total;116 -2021;6212 Dornaz;Secteur conomique - total;145 -2021;6213 Evionnaz;Secteur conomique - total;710 -2021;6214 Finhaut;Secteur conomique - total;96 -2021;6215 Massongex;Secteur conomique - total;352 -2021;6217 Saint-Maurice;Secteur conomique - total;2022 -2021;6218 Salvan;Secteur conomique - total;337 -2021;6219 Vernayaz;Secteur conomique - total;723 -2021;6220 Vrossaz;Secteur conomique - total;84 -2021;6232 Chalais;Secteur conomique - total;1021 -2021;6235 Chippis;Secteur conomique - total;508 -2021;6238 Grne;Secteur conomique - total;507 -2021;6239 Icogne;Secteur conomique - total;160 -2021;6240 Lens;Secteur conomique - total;1982 -2021;6246 Saint-Lonard;Secteur conomique - total;695 -2021;6248 Sierre;Secteur conomique - total;11557 -2021;6252 Anniviers;Secteur conomique - total;1623 -2021;6253 Crans-Montana;Secteur conomique - total;4666 -2021;6254 Noble-Contre;Secteur conomique - total;714 -2021;6261 Arbaz;Secteur conomique - total;196 -2021;6263 Grimisuat;Secteur conomique - total;887 -2021;6265 Savise;Secteur conomique - total;1540 -2021;6266 Sion;Secteur conomique - total;37051 -2021;6267 Veysonnaz;Secteur conomique - total;280 -2021;6281 Baltschieder;Secteur conomique - total;255 -2021;6282 Eisten;Secteur conomique - total;34 -2021;6283 Embd;Secteur conomique - total;81 -2021;6285 Grchen;Secteur conomique - total;622 -2021;6286 Lalden;Secteur conomique - total;151 -2021;6287 Randa;Secteur conomique - total;105 -2021;6288 Saas-Almagell;Secteur conomique - total;150 -2021;6289 Saas-Balen;Secteur conomique - total;120 -2021;6290 Saas-Fee;Secteur conomique - total;1541 -2021;6291 Saas-Grund;Secteur conomique - total;501 -2021;6292 St. Niklaus;Secteur conomique - total;1342 -2021;6293 Stalden (VS);Secteur conomique - total;332 -2021;6294 Staldenried;Secteur conomique - total;96 -2021;6295 Tsch;Secteur conomique - total;259 -2021;6296 Trbel;Secteur conomique - total;173 -2021;6297 Visp;Secteur conomique - total;12694 -2021;6298 Visperterminen;Secteur conomique - total;530 -2021;6299 Zeneggen;Secteur conomique - total;59 -2021;6300 Zermatt;Secteur conomique - total;6911 -2021;6404 Boudry;Secteur conomique - total;4270 -2021;6408 Cortaillod;Secteur conomique - total;1938 -2021;6413 Rochefort;Secteur conomique - total;211 -2021;6416 Milvignes;Secteur conomique - total;2766 -2021;6417 La Grande Broche;Secteur conomique - total;3261 -2021;6421 La Chaux-de-Fonds;Secteur conomique - total;26203 -2021;6422 Les Planchettes;Secteur conomique - total;60 -2021;6423 La Sagne;Secteur conomique - total;382 -2021;6432 La Brvine;Secteur conomique - total;327 -2021;6433 Brot-Plamboz;Secteur conomique - total;125 -2021;6434 Le Cerneux-Pquignot;Secteur conomique - total;138 -2021;6435 La Chaux-du-Milieu;Secteur conomique - total;109 -2021;6436 Le Locle;Secteur conomique - total;8415 -2021;6437 Les Ponts-de-Martel;Secteur conomique - total;532 -2021;6451 Cornaux;Secteur conomique - total;776 -2021;6452 Cressier (NE);Secteur conomique - total;1217 -2021;6453 Enges;Secteur conomique - total;49 -2021;6454 Hauterive (NE);Secteur conomique - total;773 -2021;6455 Le Landeron;Secteur conomique - total;1375 -2021;6456 Lignires;Secteur conomique - total;234 -2021;6458 Neuchtel;Secteur conomique - total;36676 -2021;6459 Saint-Blaise;Secteur conomique - total;1558 -2021;6461 La Tne;Secteur conomique - total;4676 -2021;6487 Val-de-Ruz;Secteur conomique - total;7363 -2021;6504 La Cte-aux-Fes;Secteur conomique - total;292 -2021;6511 Les Verrires;Secteur conomique - total;229 -2021;6512 Val-de-Travers;Secteur conomique - total;5490 -2021;6601 Aire-la-Ville;Secteur conomique - total;460 -2021;6602 Anires;Secteur conomique - total;522 -2021;6603 Avully;Secteur conomique - total;228 -2021;6604 Avusy;Secteur conomique - total;240 -2021;6605 Bardonnex;Secteur conomique - total;1017 -2021;6606 Bellevue;Secteur conomique - total;1366 -2021;6607 Bernex;Secteur conomique - total;2939 -2021;6608 Carouge (GE);Secteur conomique - total;26458 -2021;6609 Cartigny;Secteur conomique - total;251 -2021;6610 Cligny;Secteur conomique - total;113 -2021;6611 Chancy;Secteur conomique - total;164 -2021;6612 Chne-Bougeries;Secteur conomique - total;4963 -2021;6613 Chne-Bourg;Secteur conomique - total;2852 -2021;6614 Choulex;Secteur conomique - total;169 -2021;6615 Collex-Bossy;Secteur conomique - total;243 -2021;6616 Collonge-Bellerive;Secteur conomique - total;4785 -2021;6617 Cologny;Secteur conomique - total;2255 -2021;6618 Confignon;Secteur conomique - total;1268 -2021;6619 Corsier (GE);Secteur conomique - total;355 -2021;6620 Dardagny;Secteur conomique - total;720 -2021;6621 Genve;Secteur conomique - total;187783 -2021;6622 Genthod;Secteur conomique - total;839 -2021;6623 Le Grand-Saconnex;Secteur conomique - total;10880 -2021;6624 Gy;Secteur conomique - total;129 -2021;6625 Hermance;Secteur conomique - total;214 -2021;6626 Jussy;Secteur conomique - total;385 -2021;6627 Laconnex;Secteur conomique - total;107 -2021;6628 Lancy;Secteur conomique - total;25577 -2021;6629 Meinier;Secteur conomique - total;958 -2021;6630 Meyrin;Secteur conomique - total;22816 -2021;6631 Onex;Secteur conomique - total;4879 -2021;6632 Perly-Certoux;Secteur conomique - total;1463 -2021;6633 Plan-les-Ouates;Secteur conomique - total;17516 -2021;6634 Pregny-Chambsy;Secteur conomique - total;669 -2021;6635 Presinge;Secteur conomique - total;209 -2021;6636 Puplinge;Secteur conomique - total;1218 -2021;6637 Russin;Secteur conomique - total;157 -2021;6638 Satigny;Secteur conomique - total;10565 -2021;6639 Soral;Secteur conomique - total;192 -2021;6640 Thnex;Secteur conomique - total;6337 -2021;6641 Troinex;Secteur conomique - total;590 -2021;6642 Vandoeuvres;Secteur conomique - total;554 -2021;6643 Vernier;Secteur conomique - total;21665 -2021;6644 Versoix;Secteur conomique - total;4169 -2021;6645 Veyrier;Secteur conomique - total;2677 -2021;6702 Bocourt;Secteur conomique - total;414 -2021;6703 Bourrignon;Secteur conomique - total;92 -2021;6704 Chtillon (JU);Secteur conomique - total;53 -2021;6706 Courchapoix;Secteur conomique - total;130 -2021;6708 Courrendlin;Secteur conomique - total;977 -2021;6709 Courroux;Secteur conomique - total;945 -2021;6710 Courttelle;Secteur conomique - total;1077 -2021;6711 Delmont;Secteur conomique - total;13139 -2021;6712 Develier;Secteur conomique - total;672 -2021;6713 Ederswiler;Secteur conomique - total;25 -2021;6715 Mervelier;Secteur conomique - total;85 -2021;6716 Mettembert;Secteur conomique - total;15 -2021;6718 Movelier;Secteur conomique - total;78 -2021;6719 Pleigne;Secteur conomique - total;127 -2021;6721 Rossemaison;Secteur conomique - total;173 -2021;6722 Saulcy;Secteur conomique - total;73 -2021;6724 Soyhires;Secteur conomique - total;116 -2021;6729 Haute-Sorne;Secteur conomique - total;3253 -2021;6730 Val Terbi;Secteur conomique - total;1069 -2021;6741 Le Bmont (JU);Secteur conomique - total;96 -2021;6742 Les Bois;Secteur conomique - total;494 -2021;6743 Les Breuleux;Secteur conomique - total;1212 -2021;6744 La Chaux-des-Breuleux;Secteur conomique - total;24 -2021;6745 Les Enfers;Secteur conomique - total;56 -2021;6748 Les Genevez (JU);Secteur conomique - total;356 -2021;6750 Lajoux (JU);Secteur conomique - total;207 -2021;6751 Montfaucon;Secteur conomique - total;198 -2021;6753 Muriaux;Secteur conomique - total;190 -2021;6754 Le Noirmont;Secteur conomique - total;2065 -2021;6757 Saignelgier;Secteur conomique - total;1823 -2021;6758 Saint-Brais;Secteur conomique - total;91 -2021;6759 Soubey;Secteur conomique - total;50 -2021;6771 Alle;Secteur conomique - total;1064 -2021;6773 Beurnevsin;Secteur conomique - total;35 -2021;6774 Boncourt;Secteur conomique - total;1737 -2021;6775 Bonfol;Secteur conomique - total;353 -2021;6778 Bure;Secteur conomique - total;270 -2021;6781 Coeuve;Secteur conomique - total;149 -2021;6782 Cornol;Secteur conomique - total;377 -2021;6783 Courchavon;Secteur conomique - total;174 -2021;6784 Courgenay;Secteur conomique - total;1018 -2021;6785 Courtedoux;Secteur conomique - total;266 -2021;6787 Damphreux;Secteur conomique - total;32 -2021;6789 Fahy;Secteur conomique - total;139 -2021;6790 Fontenais;Secteur conomique - total;271 -2021;6792 Grandfontaine;Secteur conomique - total;94 -2021;6793 Lugnez;Secteur conomique - total;52 -2021;6800 Porrentruy;Secteur conomique - total;7258 -2021;6806 Vendlincourt;Secteur conomique - total;248 -2021;6807 Basse-Allaine;Secteur conomique - total;489 -2021;6808 Clos du Doubs;Secteur conomique - total;698 -2021;6809 Haute-Ajoie;Secteur conomique - total;767 -2021;6810 La Baroche;Secteur conomique - total;395 diff --git a/mobility/data/CH/CH-2022-population-communes.xlsx b/mobility/data/CH/CH-2022-population-communes.xlsx deleted file mode 100644 index 38e15c25c60d4b598cddd73fc56a5e8b73654956..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102399 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

o@Bt(^KE)7GBe<<$nh4$wV#e97bQaDKY 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 b|2qmO%0PbkAP5M;*N@`MM+c(+mCO7u%x*8i diff --git a/mobility/data/CH/CH-2023-repertoire-localites.csv b/mobility/data/CH/CH-2023-repertoire-localites.csv deleted file mode 100644 index 67d3b87d..00000000 --- a/mobility/data/CH/CH-2023-repertoire-localites.csv +++ /dev/null @@ -1,5737 +0,0 @@ -Ortschaftsname;PLZ;Zusatzziffer;Gemeindename;BFS-Nr;Kantonskürzel;E;N;Sprache -Aeugst am Albis;8914;0;Aeugst am Albis;1;ZH;8.48831328535326;47.26700438726633;de -Aeugstertal;8914;2;Aeugst am Albis;1;ZH;8.49364170604486;47.282760808853396;de -Zwillikon;8909;0;Affoltern am Albis;2;ZH;8.431458619350813;47.287633089462105;de -Affoltern am Albis;8910;0;Affoltern am Albis;2;ZH;8.448945112880077;47.27916857724247;de -Bonstetten;8906;0;Bonstetten;3;ZH;8.467611445312384;47.31551041988308;de -Sihlbrugg;6340;4;Hausen am Albis;4;ZH;8.575173951552003;47.221166984565386;de -Langnau am Albis;8135;0;Hausen am Albis;4;ZH;8.522602732801188;47.2661624930981;de -Hausen am Albis;8915;0;Hausen am Albis;4;ZH;8.534860104026881;47.24235959332327;de -Ebertswil;8925;0;Hausen am Albis;4;ZH;8.550009060935205;47.22615737479009;de -Hedingen;8908;0;Hedingen;5;ZH;8.450346932518778;47.29793768702259;de -Kappel am Albis;8926;0;Kappel am Albis;6;ZH;8.52484980001053;47.22736695387242;de -Hauptikon;8926;2;Kappel am Albis;6;ZH;8.495354094622611;47.23038738389161;de -Uerzlikon;8926;3;Kappel am Albis;6;ZH;8.49938180782218;47.22203318856604;de -Knonau;8934;0;Knonau;7;ZH;8.460616615257766;47.223794093961985;de -Maschwanden;8933;0;Maschwanden;8;ZH;8.426273936192054;47.235240765224226;de -Mettmenstetten;8932;0;Mettmenstetten;9;ZH;8.463769783327361;47.24279923596396;de -Affoltern am Albis;8910;0;Obfelden;10;ZH;8.43856623125508;47.27137607268962;de -Obfelden;8912;0;Obfelden;10;ZH;8.42304503703087;47.263626853678495;de -Ottenbach;8913;0;Ottenbach;11;ZH;8.404344633221083;47.282771337374626;de -Rifferswil;8911;0;Rifferswil;12;ZH;8.496528927971678;47.243477987063386;de -Adliswil;8134;0;Stallikon;13;ZH;8.505877599121481;47.312105292377176;de -Stallikon;8143;0;Stallikon;13;ZH;8.490997118966119;47.32586425336778;de -Uetliberg;8143;2;Stallikon;13;ZH;8.491344879313965;47.3494790465516;de -Wettswil;8907;0;Wettswil am Albis;14;ZH;8.474962403404636;47.33802011347025;de -Benken ZH;8463;0;Benken (ZH);22;ZH;8.654019191577385;47.65273896514521;de -Berg am Irchel;8415;0;Berg am Irchel;23;ZH;8.598157496002308;47.57046219876355;de -Gräslikon;8415;1;Berg am Irchel;23;ZH;8.605294557065687;47.557320374168285;de -Buch am Irchel;8414;0;Buch am Irchel;24;ZH;8.622589256001662;47.54900405618059;de -Dachsen;8447;0;Dachsen;25;ZH;8.613862622551544;47.666972343003195;de -Dorf;8458;0;Dorf;26;ZH;8.647981643666581;47.571686192436104;de -Feuerthalen;8245;0;Feuerthalen;27;ZH;8.64104452857084;47.69094830024171;de -Langwiesen;8246;0;Feuerthalen;27;ZH;8.6632601277367;47.683983554881884;de -Flaach;8416;0;Flaach;28;ZH;8.60285262969122;47.573334476210746;de -Flurlingen;8247;0;Flurlingen;29;ZH;8.62786801940825;47.6841707878047;de -Henggart;8444;0;Henggart;31;ZH;8.683314132835044;47.562703893397725;de -Kleinandelfingen;8451;0;Kleinandelfingen;33;ZH;8.682990859670031;47.599528364393144;de -Alten;8453;0;Kleinandelfingen;33;ZH;8.647460097153353;47.59942553542318;de -Oerlingen;8461;0;Kleinandelfingen;33;ZH;8.676249811872285;47.62398412956237;de -Nohl;8212;4;Laufen-Uhwiesen;34;ZH;8.607844328824012;47.66994437548598;de -Uhwiesen;8248;0;Laufen-Uhwiesen;34;ZH;8.634368664570138;47.67107838986943;de -Dachsen;8447;0;Laufen-Uhwiesen;34;ZH;8.613741920484175;47.67559684255742;de -Marthalen;8460;0;Marthalen;35;ZH;8.64840876490265;47.62520566237858;de -Ellikon am Rhein;8464;0;Marthalen;35;ZH;8.597405495833414;47.605485574447805;de -Trüllikon;8466;0;Ossingen;37;ZH;8.689871285180535;47.62522368255119;de -Ossingen;8475;0;Ossingen;37;ZH;8.725764404647775;47.610340091874704;de -Rheinau;8462;0;Rheinau;38;ZH;8.603384787478777;47.64394415257786;de -Ellikon am Rhein;8464;0;Rheinau;38;ZH;8.60869713052077;47.60357981702725;de -Thalheim an der Thur;8478;0;Thalheim an der Thur;39;ZH;8.75433628100378;47.57897255565752;de -Rudolfingen;8465;0;Trüllikon;40;ZH;8.673417184764507;47.64036170030906;de -Wildensbuch;8465;1;Trüllikon;40;ZH;8.675901719829207;47.65173147193734;de -Trüllikon;8466;0;Trüllikon;40;ZH;8.692247251999763;47.6372693507532;de -Truttikon;8467;0;Truttikon;41;ZH;8.72651460572754;47.6301286585794;de -Volken;8459;0;Volken;43;ZH;8.629002244065166;47.57283883412277;de -Bülach;8180;0;Bachenbülach;51;ZH;8.564421710325043;47.51030825306576;de -Bachenbülach;8184;0;Bachenbülach;51;ZH;8.546430192606914;47.50356920457575;de -Bassersdorf;8303;0;Bassersdorf;52;ZH;8.627838771811374;47.44430845300167;de -Bülach;8180;0;Bülach;53;ZH;8.540863629475654;47.51707100782142;de -Glattfelden;8192;0;Bülach;53;ZH;8.52455019230342;47.549027208187034;de -Dietlikon;8305;0;Dietlikon;54;ZH;8.615781748254063;47.42552862161528;de -Dübendorf;8600;0;Dietlikon;54;ZH;8.624613634755821;47.408266938650875;de -Eglisau;8193;0;Eglisau;55;ZH;8.526037855083436;47.57518002603192;de -Rafz;8197;0;Eglisau;55;ZH;8.541636227917143;47.59116463049643;de -Embrach;8424;0;Embrach;56;ZH;8.595217101828691;47.5012284266776;de -Freienstein;8427;2;Freienstein-Teufen;57;ZH;8.590853915374247;47.53261473528856;de -Teufen ZH;8428;0;Freienstein-Teufen;57;ZH;8.567384714588757;47.5498909760702;de -Bülach;8180;0;Glattfelden;58;ZH;8.528453638201153;47.55199801652291;de -Glattfelden;8192;0;Glattfelden;58;ZH;8.49894483007971;47.55880970413219;de -Zweidlen;8192;1;Glattfelden;58;ZH;8.466662839321954;47.56092348422757;de -Eglisau;8193;0;Glattfelden;58;ZH;8.495676842103242;47.57888385777604;de -Hochfelden;8182;0;Hochfelden;59;ZH;8.515470064458354;47.52335843558774;de -Glattfelden;8192;0;Hochfelden;59;ZH;8.499386932789267;47.539394231953224;de -Höri;8181;0;Höri;60;ZH;8.508440693226534;47.50742392281879;de -Hüntwangen;8194;0;Hüntwangen;61;ZH;8.49291578573097;47.59544946350886;de -Kloten;8302;0;Kloten;62;ZH;8.584370227219702;47.452530526636714;de -Nürensdorf;8309;0;Kloten;62;ZH;8.627824346633957;47.46318655177957;de -Lufingen;8426;0;Lufingen;63;ZH;8.593667175905107;47.490399981624726;de -Nürensdorf;8309;0;Nürensdorf;64;ZH;8.649206628955003;47.447975906036774;de -Oberembrach;8425;0;Oberembrach;65;ZH;8.617427756375864;47.487407227673486;de -Zürich;8052;0;Opfikon;66;ZH;8.56201847395461;47.41744129415096;de -Glattbrugg;8152;0;Opfikon;66;ZH;8.568188088895571;47.433836275242115;de -Opfikon;8152;1;Opfikon;66;ZH;8.57742334234081;47.43221267172676;de -Glattpark (Opfikon);8152;2;Opfikon;66;ZH;8.561675338962793;47.4232475038171;de -Rafz;8197;0;Rafz;67;ZH;8.534988509339827;47.614389437993154;de -Rorbas;8427;3;Rorbas;68;ZH;8.578119172609911;47.52897999594148;de -Teufen ZH;8428;0;Rorbas;68;ZH;8.56967853914894;47.543211572563024;de -Wallisellen;8304;0;Wallisellen;69;ZH;8.591794513941402;47.412676351994996;de -Wasterkingen;8195;0;Wasterkingen;70;ZH;8.472611941896382;47.590126688509976;de -Wil ZH;8196;0;Wasterkingen;70;ZH;8.47831836183531;47.607839845305755;de -Wil ZH;8196;0;Wil (ZH);71;ZH;8.503495532736599;47.60268307307099;de -Rafz;8197;0;Wil (ZH);71;ZH;8.536014125723984;47.59272753569313;de -Bülach;8180;0;Winkel;72;ZH;8.56796055495089;47.507033169514884;de -Winkel;8185;0;Winkel;72;ZH;8.554477337310221;47.492500384616044;de -Bachs;8164;0;Bachs;81;ZH;8.439070029806587;47.52505895659891;de -Boppelsen;8113;0;Boppelsen;82;ZH;8.402593613350334;47.470534177598516;de -Regensberg;8158;0;Boppelsen;82;ZH;8.402681006738563;47.48150123317514;de -Buchs ZH;8107;0;Buchs (ZH);83;ZH;8.43812539324188;47.458811522221346;de -Dällikon;8108;0;Dällikon;84;ZH;8.439384093893743;47.43993161052506;de -Dänikon ZH;8114;0;Dänikon;85;ZH;8.405405206690604;47.44594314149815;de -Dielsdorf;8157;0;Dielsdorf;86;ZH;8.45355459043416;47.48419186144986;de -Hüttikon;8115;0;Hüttikon;87;ZH;8.3871685039007;47.44608841496912;de -Steinmaur;8162;0;Neerach;88;ZH;8.456907336762445;47.510834604578754;de -Bachs;8164;0;Neerach;88;ZH;8.461177225015113;47.51386685010993;de -Neerach;8173;0;Neerach;88;ZH;8.47452120272768;47.513485772093894;de -Stadel b. Niederglatt;8174;0;Neerach;88;ZH;8.473982406602094;47.52090894995305;de -Niederhasli;8155;0;Niederglatt;89;ZH;8.480345881895644;47.49126852063814;de -Niederglatt ZH;8172;0;Niederglatt;89;ZH;8.503516038972542;47.487463475564354;de -Niederhasli;8155;0;Niederhasli;90;ZH;8.483811515555885;47.482324946178636;de -Nassenwil;8155;1;Niederhasli;90;ZH;8.471468627188537;47.465762440146676;de -Oberhasli;8156;0;Niederhasli;90;ZH;8.49828249716288;47.46541926244081;de -Niederweningen;8166;0;Niederweningen;91;ZH;8.368980277796924;47.504141228597675;de -Oberglatt ZH;8154;0;Oberglatt;92;ZH;8.52072647965942;47.47663140368921;de -Siglistorf;5462;0;Oberweningen;93;ZH;8.400753676698693;47.52759892794146;de -Oberweningen;8165;2;Oberweningen;93;ZH;8.407361929364615;47.503772608460736;de -Buchs ZH;8107;0;Otelfingen;94;ZH;8.413565967622194;47.45559055293287;de -Otelfingen;8112;0;Otelfingen;94;ZH;8.387127546944358;47.46190585454648;de -Regensberg;8158;0;Regensberg;95;ZH;8.438811951768017;47.48314969967727;de -Regensdorf;8105;0;Regensdorf;96;ZH;8.465587250433273;47.4306851140246;de -Watt;8105;2;Regensdorf;96;ZH;8.481297209055368;47.44281342534846;de -Adlikon b. Regensdorf;8106;2;Regensdorf;96;ZH;8.466498101820388;47.4481389732845;de -Zürich;8052;0;Rümlang;97;ZH;8.540725263062455;47.43260378169158;de -Glattbrugg;8152;0;Rümlang;97;ZH;8.554663155253;47.43353876609442;de -Rümlang;8153;0;Rümlang;97;ZH;8.532700636182767;47.45169256661303;de -Schleinikon;8165;3;Schleinikon;98;ZH;8.391506523940256;47.49809258135476;de -Schöfflisdorf;8165;0;Schöfflisdorf;99;ZH;8.416881290226316;47.50006328294066;de -Stadel b. Niederglatt;8174;0;Stadel;100;ZH;8.466077102463384;47.52714340464087;de -Windlach;8175;0;Stadel;100;ZH;8.474969835465785;47.54114992574625;de -Niederhasli;8155;0;Steinmaur;101;ZH;8.474590065392073;47.49139222522788;de -Steinmaur;8162;0;Steinmaur;101;ZH;8.455669383904736;47.499120934304756;de -Sünikon;8162;1;Steinmaur;101;ZH;8.435905014651176;47.49070400012085;de -Weiach;8187;0;Weiach;102;ZH;8.437903123722482;47.55762070831526;de -Hinwil;8340;0;Bäretswil;111;ZH;8.851503983066536;47.32318064652433;de -Bäretswil;8344;0;Bäretswil;111;ZH;8.85577846146996;47.337535252949415;de -Adetswil;8345;0;Bäretswil;111;ZH;8.840409637136647;47.340520553292485;de -Gibswil;8498;0;Bäretswil;111;ZH;8.90246475770744;47.33257475394604;de -Bubikon;8608;0;Bubikon;112;ZH;8.817225489727857;47.26900932951344;de -Wolfhausen;8633;0;Bubikon;112;ZH;8.800087295613308;47.25655807424269;de -Hinwil;8340;0;Dürnten;113;ZH;8.851012312857593;47.2839140587108;de -Bubikon;8608;0;Dürnten;113;ZH;8.82994839749881;47.267504115326425;de -Rüti ZH;8630;0;Dürnten;113;ZH;8.854275814734164;47.26384865215697;de -Tann;8632;0;Dürnten;113;ZH;8.85155200860088;47.263546593223005;de -Dürnten;8635;0;Dürnten;113;ZH;8.843185982524831;47.278137372399314;de -Wald ZH;8636;0;Dürnten;113;ZH;8.890258641032379;47.271179779317464;de -Hinwil;8340;0;Fischenthal;114;ZH;8.89128631673596;47.31463510672658;de -Bauma;8494;0;Fischenthal;114;ZH;8.92114061310771;47.359688751674035;de -Steg im Tösstal;8496;0;Fischenthal;114;ZH;8.932353997483498;47.35391272673796;de -Fischenthal;8497;0;Fischenthal;114;ZH;8.919322585122904;47.33147322605521;de -Gibswil;8498;0;Fischenthal;114;ZH;8.915288758150421;47.313950095671444;de -Bertschikon (Gossau ZH);8614;0;Gossau (ZH);115;ZH;8.75728777491018;47.3209529874555;de -Mönchaltorf;8617;0;Gossau (ZH);115;ZH;8.7355749203494;47.30959554427936;de -Grüt (Gossau ZH);8624;0;Gossau (ZH);115;ZH;8.782010937840672;47.311048338684344;de -Gossau ZH;8625;0;Gossau (ZH);115;ZH;8.76270342930178;47.30104484061906;de -Ottikon (Gossau ZH);8626;0;Gossau (ZH);115;ZH;8.779374208067315;47.296489243055575;de -Grüningen;8627;0;Gossau (ZH);115;ZH;8.73701162067661;47.28855174566581;de -Grüningen;8627;0;Grüningen;116;ZH;8.761922878548353;47.2847987797599;de -Hinwil;8340;0;Hinwil;117;ZH;8.847208610141404;47.3011820716778;de -Wernetshausen;8342;0;Hinwil;117;ZH;8.866444416626077;47.29897194749234;de -Gibswil;8498;0;Hinwil;117;ZH;8.89927517665382;47.30956589410276;de -Rüti ZH;8630;0;Rüti (ZH);118;ZH;8.849160286108347;47.25910945865308;de -Wald ZH;8636;0;Rüti (ZH);118;ZH;8.903738127884301;47.267704929802036;de -Aathal-Seegräben;8607;0;Seegräben;119;ZH;8.769625042807338;47.33944687008346;de -Fischenthal;8497;0;Wald (ZH);120;ZH;8.932103896774874;47.31406671459694;de -Wald ZH;8636;0;Wald (ZH);120;ZH;8.915950200012754;47.27704723036556;de -Laupen ZH;8637;0;Wald (ZH);120;ZH;8.928314296723697;47.26510976912709;de -Adetswil;8345;0;Wetzikon (ZH);121;ZH;8.830090605616247;47.33480864048701;de -Wetzikon ZH;8620;0;Wetzikon (ZH);121;ZH;8.806375156850532;47.32238807191015;de -Wetzikon ZH;8623;0;Wetzikon (ZH);121;ZH;8.821414806906569;47.332170101253446;de -Zürich;8041;0;Adliswil;131;ZH;8.513269871931982;47.32233637571192;de -Adliswil;8134;0;Adliswil;131;ZH;8.522315303694374;47.31284103738969;de -Kilchberg ZH;8802;0;Kilchberg (ZH);135;ZH;8.542836827741464;47.320417637200315;de -Rüschlikon;8803;0;Kilchberg (ZH);135;ZH;8.554338796356273;47.315462333284295;de -Langnau am Albis;8135;0;Langnau am Albis;136;ZH;8.534583285015563;47.28824437116239;de -Oberrieden;8942;0;Oberrieden;137;ZH;8.576700382018855;47.27701429822005;de -Richterswil;8805;0;Richterswil;138;ZH;8.700955877910815;47.20826066969482;de -Samstagern;8833;0;Richterswil;138;ZH;8.678340155299011;47.194584568231676;de -Rüschlikon;8803;0;Rüschlikon;139;ZH;8.554894204054305;47.30932441735598;de -Gattikon;8136;0;Thalwil;141;ZH;8.550583931680448;47.284620293043176;de -Thalwil;8800;0;Thalwil;141;ZH;8.569164155771151;47.290223114366;de -Erlenbach ZH;8703;0;Erlenbach (ZH);151;ZH;8.591594123388965;47.30229682295557;de -Erlenbach ZH;8703;0;Herrliberg;152;ZH;8.604055719037081;47.29369122415506;de -Herrliberg;8704;0;Herrliberg;152;ZH;8.616883228825824;47.285197157837146;de -Grüningen;8627;0;Hombrechtikon;153;ZH;8.778993972638219;47.26494967906463;de -Hombrechtikon;8634;0;Hombrechtikon;153;ZH;8.76387178360639;47.25297519392692;de -Feldbach;8714;0;Hombrechtikon;153;ZH;8.782158936497565;47.2389088992923;de -Forch;8127;0;Küsnacht (ZH);154;ZH;8.64823740902385;47.32539830775686;de -Küsnacht ZH;8700;0;Küsnacht (ZH);154;ZH;8.583538342756214;47.316872154349795;de -Oetwil am See;8618;0;Männedorf;155;ZH;8.71219609203588;47.26563669055824;de -Männedorf;8708;0;Männedorf;155;ZH;8.69382754216855;47.25469791517197;de -Meilen;8706;0;Meilen;156;ZH;8.639900367478418;47.26809074802968;de -Oetwil am See;8618;0;Oetwil am See;157;ZH;8.723220837941811;47.27018727627144;de -Hombrechtikon;8634;0;Stäfa;158;ZH;8.755556677797596;47.24288219812934;de -Stäfa;8712;0;Stäfa;158;ZH;8.731044344447753;47.23895073268293;de -Uerikon;8713;0;Stäfa;158;ZH;8.756748551921905;47.234569897388816;de -Uetikon am See;8707;0;Uetikon am See;159;ZH;8.676921463896058;47.26182409806981;de -Zumikon;8126;0;Zumikon;160;ZH;8.623277907915842;47.33140333459929;de -Zollikerberg;8125;0;Zollikon;161;ZH;8.602261647411273;47.34800675033366;de -Zollikon;8702;0;Zollikon;161;ZH;8.574179370651436;47.33827490362902;de -Illnau;8308;0;Fehraltorf;172;ZH;8.74731700610759;47.40428323876106;de -Fehraltorf;8320;0;Fehraltorf;172;ZH;8.75227696885112;47.38712798665247;de -Hittnau;8335;0;Hittnau;173;ZH;8.824101584206876;47.36092687982071;de -Kemptthal;8310;0;Lindau;176;ZH;8.705688049683063;47.452811736020536;de -Grafstal;8310;1;Lindau;176;ZH;8.698216790994378;47.443870293831154;de -Winterberg ZH;8312;0;Lindau;176;ZH;8.692087063972052;47.45655292869648;de -Lindau;8315;0;Lindau;176;ZH;8.670647759883606;47.441863068421256;de -Tagelswangen;8317;0;Lindau;176;ZH;8.671844628020898;47.430415652277375;de -Pfäffikon ZH;8330;0;Pfäffikon;177;ZH;8.781101980256928;47.36522615309005;de -Auslikon;8331;0;Pfäffikon;177;ZH;8.80690557183696;47.34550487891338;de -Wetzikon ZH;8623;0;Pfäffikon;177;ZH;8.815556157335882;47.33816854219868;de -Madetswil;8322;0;Russikon;178;ZH;8.79143965833676;47.41016807960352;de -Gündisau;8322;2;Russikon;178;ZH;8.807446348083905;47.398020426465074;de -Russikon;8332;0;Russikon;178;ZH;8.773790713651897;47.39620841027907;de -Rumlikon;8332;2;Russikon;178;ZH;8.759724099039255;47.40929689942004;de -Agasul;8308;2;Weisslingen;180;ZH;8.746811360700905;47.42682371936285;de -Weisslingen;8484;0;Weisslingen;180;ZH;8.765125611641263;47.4334349741883;de -Neschwil;8484;2;Weisslingen;180;ZH;8.788230611124362;47.43020826173229;de -Theilingen;8484;3;Weisslingen;180;ZH;8.767776956877528;47.421110681187756;de -Rikon im Tösstal;8486;0;Weisslingen;180;ZH;8.786795145960657;47.44801656103069;de -Wila;8492;0;Wila;181;ZH;8.845832655779686;47.41941565311436;de -Saland;8493;0;Wila;181;ZH;8.85804856188311;47.39684407565437;de -Madetswil;8322;0;Wildberg;182;ZH;8.804743035030148;47.41852051780703;de -Turbenthal;8488;0;Wildberg;182;ZH;8.83155023147992;47.43903088074086;de -Wildberg;8489;0;Wildberg;182;ZH;8.816681798366814;47.42751412366287;de -Schalchen;8489;1;Wildberg;182;ZH;8.826216050019134;47.40692316327332;de -Ehrikon;8489;2;Wildberg;182;ZH;8.809024888476626;47.418948372006916;de -Gockhausen;8044;1;Dübendorf;191;ZH;8.602475950574982;47.38333585442108;de -Zürich;8051;0;Dübendorf;191;ZH;8.589022233538214;47.39350648868638;de -Dübendorf;8600;0;Dübendorf;191;ZH;8.618052062776723;47.395080263298325;de -Schwerzenbach;8603;0;Dübendorf;191;ZH;8.64633640757447;47.386465097307024;de -Forch;8127;0;Egg;192;ZH;8.662024467745791;47.30566472157078;de -Egg b. Zürich;8132;0;Egg;192;ZH;8.691447150962007;47.30065417811812;de -Hinteregg;8132;2;Egg;192;ZH;8.684243433749401;47.30594153115987;de -Esslingen;8133;0;Egg;192;ZH;8.709645800528286;47.28835517148579;de -Fällanden;8117;0;Fällanden;193;ZH;8.638358449481473;47.370528890884025;de -Pfaffhausen;8118;0;Fällanden;193;ZH;8.623247129419298;47.365736958432386;de -Benglen;8121;0;Fällanden;193;ZH;8.637323992136501;47.36117322895199;de -Greifensee;8606;2;Greifensee;194;ZH;8.676980114106447;47.364984868555304;de -Binz;8122;0;Maur;195;ZH;8.627067326055073;47.3567446276112;de -Ebmatingen;8123;0;Maur;195;ZH;8.63997210016202;47.35147588793316;de -Maur;8124;0;Maur;195;ZH;8.672844678428788;47.337809961101;de -Forch;8127;0;Maur;195;ZH;8.654119906768903;47.33460745806381;de -Hinteregg;8132;2;Maur;195;ZH;8.683362328032514;47.316977469112565;de -Aathal-Seegräben;8607;0;Mönchaltorf;196;ZH;8.75853552974146;47.32856278129145;de -Mönchaltorf;8617;0;Mönchaltorf;196;ZH;8.72197517883632;47.31015613385332;de -Dübendorf;8600;0;Schwerzenbach;197;ZH;8.650132553165179;47.39097001075345;de -Schwerzenbach;8603;0;Schwerzenbach;197;ZH;8.652131602888902;47.37979451346095;de -Gutenswil;8605;0;Uster;198;ZH;8.714673455363972;47.376794578934714;de -Nänikon;8606;0;Uster;198;ZH;8.693385382769616;47.37018201150075;de -Uster;8610;0;Uster;198;ZH;8.71690082510045;47.34585310298203;de -Sulzbach;8614;2;Uster;198;ZH;8.746715064556431;47.32896105660855;de -Wermatswil;8615;0;Uster;198;ZH;8.74593371079058;47.36210523941859;de -Freudwil;8615;2;Uster;198;ZH;8.734096629052276;47.374737002123815;de -Riedikon;8616;0;Uster;198;ZH;8.711528149578221;47.33252680574925;de -Mönchaltorf;8617;0;Uster;198;ZH;8.735766530096637;47.32693521419452;de -Effretikon;8307;0;Volketswil;199;ZH;8.682460581761799;47.411830445823014;de -Volketswil;8604;0;Volketswil;199;ZH;8.69142247090143;47.38905499772681;de -Gutenswil;8605;0;Volketswil;199;ZH;8.717984059779962;47.385145593345484;de -Brüttisellen;8306;0;Wangen-Brüttisellen;200;ZH;8.629741540885098;47.42322240129563;de -Wangen b. Dübendorf;8602;0;Wangen-Brüttisellen;200;ZH;8.646458325200049;47.40946288435608;de -Altikon;8479;0;Altikon;211;ZH;8.78450488733637;47.57524000380281;de -Brütten;8311;0;Brütten;213;ZH;8.674222243891652;47.47408979183086;de -Rutschwil (Dägerlen);8471;0;Dägerlen;214;ZH;8.730225104223566;47.556532928914876;de -Dägerlen;8471;2;Dägerlen;214;ZH;8.722114711070226;47.56089640269968;de -Oberwil (Dägerlen);8471;3;Dägerlen;214;ZH;8.716621985023135;47.57259007845758;de -Berg (Dägerlen);8471;4;Dägerlen;214;ZH;8.733175041147192;47.5637187541533;de -Bänk (Dägerlen);8471;5;Dägerlen;214;ZH;8.739209536742981;47.54837646134214;de -Dättlikon;8421;0;Dättlikon;215;ZH;8.62416872473886;47.524882791078014;de -Dinhard;8474;0;Dinhard;216;ZH;8.768290555789141;47.5552042607987;de -Ellikon an der Thur;8548;0;Ellikon an der Thur;218;ZH;8.825412166209187;47.562016744581875;de -Elsau;8352;0;Elsau;219;ZH;8.802517903216344;47.50615367134981;de -Gerlikon;8500;4;Hagenbuch;220;ZH;8.87550858812662;47.52769445953046;de -Hagenbuch ZH;8523;0;Hagenbuch;220;ZH;8.88783517467721;47.52101673163975;de -Hettlingen;8442;0;Hettlingen;221;ZH;8.708118813703202;47.54838177671516;de -Aesch (Neftenbach);8412;0;Neftenbach;223;ZH;8.6793652943283;47.54127515856092;de -Riet (Neftenbach);8412;1;Neftenbach;223;ZH;8.686827029984409;47.53646034883262;de -Hünikon (Neftenbach);8412;2;Neftenbach;223;ZH;8.668214291144237;47.552143104962866;de -Neftenbach;8413;0;Neftenbach;223;ZH;8.667824601889858;47.52855893458482;de -Pfungen;8422;0;Pfungen;224;ZH;8.64653645848558;47.51587827090937;de -Rickenbach ZH;8545;0;Rickenbach (ZH);225;ZH;8.793893839390265;47.551447169544076;de -Rickenbach Sulz;8545;1;Rickenbach (ZH);225;ZH;8.787877754614444;47.540696871189816;de -Hofstetten ZH;8354;0;Schlatt (ZH);226;ZH;8.83962692498086;47.47281058845319;de -Winterthur;8405;0;Schlatt (ZH);226;ZH;8.79858933286607;47.471511482191715;de -Schlatt ZH;8418;0;Schlatt (ZH);226;ZH;8.825961740283878;47.46795475268602;de -Seuzach;8472;0;Seuzach;227;ZH;8.73836762918562;47.536234488745166;de -Bichelsee;8363;0;Turbenthal;228;ZH;8.921304223961396;47.43405482120858;de -Turbenthal;8488;0;Turbenthal;228;ZH;8.847388690836128;47.43516269158667;de -Wila;8492;0;Turbenthal;228;ZH;8.869681836479515;47.41074889303802;de -Schmidrüti;8495;0;Turbenthal;228;ZH;8.903416307294572;47.41481312792848;de -Kemptthal;8310;0;Winterthur;230;ZH;8.71571430352363;47.46116708459668;de -Ricketwil (Winterthur);8352;2;Winterthur;230;ZH;8.80093912350213;47.485933090208604;de -Winterthur;8400;0;Winterthur;230;ZH;8.72954884269744;47.491621873326025;de -Winterthur;8404;0;Winterthur;230;ZH;8.759223002794496;47.507475123256896;de -Reutlingen (Winterthur);8404;2;Winterthur;230;ZH;8.751333851221453;47.527952542932496;de -Stadel (Winterthur);8404;3;Winterthur;230;ZH;8.761468968858043;47.53454503911586;de -Winterthur;8405;0;Winterthur;230;ZH;8.778269585505283;47.47754949977949;de -Winterthur;8406;0;Winterthur;230;ZH;8.700625776013917;47.48322456758198;de -Winterthur;8408;0;Winterthur;230;ZH;8.68334220971565;47.50773949910317;de -Winterthur;8409;0;Winterthur;230;ZH;8.781455850549886;47.509825107380685;de -Sennhof (Winterthur);8482;0;Winterthur;230;ZH;8.758021929741268;47.469166026715044;de -Wiesendangen;8542;0;Winterthur;230;ZH;8.777761479895274;47.53164821764902;de -Rickenbach Sulz;8545;1;Winterthur;230;ZH;8.782573524161224;47.535165215062875;de -Kollbrunn;8483;0;Zell (ZH);231;ZH;8.7766254729831;47.457296669798275;de -Rikon im Tösstal;8486;0;Zell (ZH);231;ZH;8.796773363512141;47.44472450528816;de -Zell ZH;8487;0;Zell (ZH);231;ZH;8.822697588686555;47.44852473679616;de -Rämismühle;8487;1;Zell (ZH);231;ZH;8.81908237236302;47.441573025965724;de -Aesch ZH;8904;0;Aesch (ZH);241;ZH;8.438240182749135;47.33735726486113;de -Uitikon Waldegg;8142;0;Birmensdorf (ZH);242;ZH;8.465289722490494;47.35585979999167;de -Birmensdorf ZH;8903;0;Birmensdorf (ZH);242;ZH;8.441176919517936;47.351665237544545;de -Dietikon;8953;0;Dietikon;243;ZH;8.403729396195992;47.40491419685633;de -Fahrweid;8951;0;Geroldswil;244;ZH;8.415493748599095;47.41041842749119;de -Geroldswil;8954;0;Geroldswil;244;ZH;8.410376203627484;47.42243509640037;de -Oberengstringen;8102;0;Oberengstringen;245;ZH;8.462359599999985;47.40837400096172;de -Oetwil an der Limmat;8955;0;Oetwil an der Limmat;246;ZH;8.39499526978769;47.42815598135042;de -Urdorf;8902;0;Schlieren;247;ZH;8.435109162577582;47.390650836250934;de -Schlieren;8952;0;Schlieren;247;ZH;8.445788972494483;47.3966049051377;de -Uitikon Waldegg;8142;0;Uitikon;248;ZH;8.453979400763368;47.370851622742705;de -Uetliberg;8143;2;Uitikon;248;ZH;8.485980666055445;47.35355922636893;de -Unterengstringen;8103;0;Unterengstringen;249;ZH;8.449449188670052;47.41332598368551;de -Fahrweid;8951;0;Unterengstringen;249;ZH;8.414648243541313;47.40427992912006;de -Urdorf;8902;0;Urdorf;250;ZH;8.423755265480839;47.38266536996476;de -Weiningen ZH;8104;0;Weiningen (ZH);251;ZH;8.4359841298133;47.420631852634735;de -Fahrweid;8951;0;Weiningen (ZH);251;ZH;8.421295369550235;47.41040878162138;de -Zürich;8001;0;Zürich;261;ZH;8.541349296997435;47.372048532664216;de -Zürich;8002;0;Zürich;261;ZH;8.532489659450409;47.360584104497654;de -Zürich;8003;0;Zürich;261;ZH;8.516142107913552;47.372578569421265;de -Zürich;8004;0;Zürich;261;ZH;8.523370314160541;47.377999153471485;de -Zürich;8005;0;Zürich;261;ZH;8.520684105099669;47.38676633563334;de -Zürich;8006;0;Zürich;261;ZH;8.543174739428517;47.385765673187315;de -Zürich;8008;0;Zürich;261;ZH;8.561384559723898;47.353640047881825;de -Zürich;8032;0;Zürich;261;ZH;8.56443872630102;47.36668879694642;de -Zürich;8037;0;Zürich;261;ZH;8.524261806663304;47.39849490685259;de -Zürich;8038;0;Zürich;261;ZH;8.536904755366834;47.34157429220142;de -Zürich;8041;0;Zürich;261;ZH;8.51566433067803;47.33605960507216;de -Zürich;8044;0;Zürich;261;ZH;8.57283034214897;47.38041488093525;de -Zürich;8045;0;Zürich;261;ZH;8.50570809616007;47.35161517520839;de -Zürich;8046;0;Zürich;261;ZH;8.508278676048434;47.422177381382056;de -Zürich;8047;0;Zürich;261;ZH;8.487021836354158;47.37389233190548;de -Zürich;8048;0;Zürich;261;ZH;8.483871092066265;47.38674684601843;de -Zürich;8049;0;Zürich;261;ZH;8.500466748261303;47.40869838981309;de -Zürich;8050;0;Zürich;261;ZH;8.550802019058356;47.41193801124004;de -Zürich;8051;0;Zürich;261;ZH;8.57881930913423;47.39965101487254;de -Zürich;8052;0;Zürich;261;ZH;8.540643194356203;47.424464140513315;de -Zürich;8053;0;Zürich;261;ZH;8.597418711716397;47.36128969682945;de -Zürich;8055;0;Zürich;261;ZH;8.49029204173726;47.364188803441294;de -Zürich;8057;0;Zürich;261;ZH;8.54739260758107;47.39992584088796;de -Zürich;8064;0;Zürich;261;ZH;8.485247272827678;47.398657596898836;de -Zollikerberg;8125;0;Zürich;261;ZH;8.602249771220361;47.351108105412116;de -Adliswil;8134;0;Zürich;261;ZH;8.529323757912955;47.32710267371676;de -Uitikon Waldegg;8142;0;Zürich;261;ZH;8.468942954474748;47.36526765161674;de -Uetliberg;8143;2;Zürich;261;ZH;8.492029625656125;47.34965256545146;de -Glattbrugg;8152;0;Zürich;261;ZH;8.553773077847698;47.430049861079574;de -Schlieren;8952;0;Zürich;261;ZH;8.467768802853;47.401167561539076;de -Andelfingen;8450;0;Andelfingen;291;ZH;8.67852026951591;47.594882202224284;de -Adlikon b. Andelfingen;8452;0;Andelfingen;291;ZH;8.692311457125522;47.5830351800184;de -Humlikon;8457;0;Andelfingen;291;ZH;8.6695746664396;47.5756287355605;de -Waltalingen;8468;0;Stammheim;292;ZH;8.778917851502893;47.622485408313096;de -Guntalingen;8468;2;Stammheim;292;ZH;8.769194154026968;47.6346739575027;de -Unterstammheim;8476;0;Stammheim;292;ZH;8.792329552566267;47.64083603225498;de -Oberstammheim;8477;0;Stammheim;292;ZH;8.801146885097534;47.63401560250837;de -Wilen b. Neunforn;8525;2;Stammheim;292;ZH;8.79717024047177;47.60257994078682;de -Au ZH;8804;0;Wädenswil;293;ZH;8.642975254725025;47.24699034325969;de -Wädenswil;8820;0;Wädenswil;293;ZH;8.671744183343975;47.22847229546469;de -Schönenberg ZH;8824;0;Wädenswil;293;ZH;8.64504004436453;47.192904990318475;de -Hütten;8825;0;Wädenswil;293;ZH;8.669011315897812;47.175651445318074;de -Elgg;8353;0;Elgg;294;ZH;8.867576656208632;47.490181864605894;de -Hofstetten ZH;8354;0;Elgg;294;ZH;8.853718589115259;47.47310439574053;de -Dickbuch;8354;1;Elgg;294;ZH;8.831650385714784;47.496397409180354;de -Aadorf;8355;0;Elgg;294;ZH;8.89224905677294;47.49195782198037;de -Hagenbuch ZH;8523;0;Elgg;294;ZH;8.890581414401764;47.50138320603512;de -Sihlbrugg;6340;4;Horgen;295;ZH;8.572414429208838;47.23363234781671;de -Langnau am Albis;8135;0;Horgen;295;ZH;8.55434301077064;47.255548596843596;de -Sihlbrugg Station;8135;2;Horgen;295;ZH;8.577206143066027;47.23919453153994;de -Sihlwald;8135;3;Horgen;295;ZH;8.557518823751147;47.26828466941764;de -Horgen;8810;0;Horgen;295;ZH;8.59738556918559;47.259524117766894;de -Horgenberg;8815;0;Horgen;295;ZH;8.583894373012633;47.24786418735395;de -Hirzel;8816;0;Horgen;295;ZH;8.606669485579227;47.21702624332535;de -Effretikon;8307;0;Illnau-Effretikon;296;ZH;8.689483141141492;47.42815279759913;de -Ottikon b. Kemptthal;8307;2;Illnau-Effretikon;296;ZH;8.716877259518736;47.43468151836961;de -Illnau;8308;0;Illnau-Effretikon;296;ZH;8.72262445048944;47.408959656986724;de -Agasul;8308;2;Illnau-Effretikon;296;ZH;8.743328236006231;47.42518853033553;de -Kyburg;8314;0;Illnau-Effretikon;296;ZH;8.744690069810785;47.457782435022935;de -Sennhof (Winterthur);8482;0;Illnau-Effretikon;296;ZH;8.7536260937504;47.46619042406281;de -Kollbrunn;8483;0;Illnau-Effretikon;296;ZH;8.765706461210199;47.45071595348985;de -Saland;8493;0;Bauma;297;ZH;8.853481324148392;47.39111600036059;de -Bauma;8494;0;Bauma;297;ZH;8.87724382487757;47.367288658018495;de -Sternenberg;8499;0;Bauma;297;ZH;8.911753654818924;47.387302644297556;de -Wiesendangen;8542;0;Wiesendangen;298;ZH;8.789515621863183;47.52126013157206;de -Bertschikon;8543;0;Wiesendangen;298;ZH;8.814508152556138;47.52680557957406;de -Gundetswil;8543;1;Wiesendangen;298;ZH;8.822336975196517;47.539847166749176;de -Kefikon ZH;8543;2;Wiesendangen;298;ZH;8.831016666064691;47.54889031689169;de -Attikon;8544;0;Wiesendangen;298;ZH;8.797961991544103;47.53587349327331;de -Menzengrüt;8546;3;Wiesendangen;298;ZH;8.821850967194077;47.54964958001008;de -Lyss;3250;0;Aarberg;301;BE;7.307383368375055;47.05451313364198;de -Seedorf BE;3267;0;Aarberg;301;BE;7.295953280846549;47.039124741863525;de -Aarberg;3270;0;Aarberg;301;BE;7.275297463028967;47.04354553494627;de -Kappelen;3273;0;Aarberg;301;BE;7.273559831145728;47.056674162939544;de -Bargen BE;3282;0;Bargen (BE);302;BE;7.25730112036087;47.04015793295672;de -Kallnach;3283;0;Bargen (BE);302;BE;7.2300234771126615;47.03418954175739;de -Grossaffoltern;3257;0;Grossaffoltern;303;BE;7.358832025046721;47.0657350920021;de -Ammerzwil BE;3257;1;Grossaffoltern;303;BE;7.341477184799406;47.07155701024176;de -Suberg;3262;0;Grossaffoltern;303;BE;7.3388615443467495;47.059291563273185;de -Golaten;3207;2;Kallnach;304;BE;7.2422611783248785;46.98570875027718;de -Treiten;3226;0;Kallnach;304;BE;7.1771279953299825;47.00053489338806;de -Kallnach;3283;0;Kallnach;304;BE;7.2299767447349454;47.01780774247225;de -Niederried b. Kallnach;3283;2;Kallnach;304;BE;7.252380092896418;47.01054182658397;de -Lyss;3250;0;Kappelen;305;BE;7.2924841318941995;47.074837367471915;de -Worben;3252;0;Kappelen;305;BE;7.299054714614185;47.09366730429558;de -Kappelen;3273;0;Kappelen;305;BE;7.267581044457035;47.06019559031215;de -Studen BE;2557;0;Lyss;306;BE;7.315620108465488;47.10958800576333;de -Lyss;3250;0;Lyss;306;BE;7.307507139316171;47.07058059074075;de -Busswil BE;3292;0;Lyss;306;BE;7.31822069156076;47.09833158043408;de -Ortschwaben;3042;0;Meikirch;307;BE;7.401894445223139;46.99058769336097;de -Meikirch;3045;0;Meikirch;307;BE;7.362644782001176;47.009346841890384;de -Wahlendorf;3046;0;Meikirch;307;BE;7.3378391826949665;47.007717611906415;de -Detligen;3036;0;Radelfingen;309;BE;7.272789570869697;47.00173950600875;de -Radelfingen b. Aarberg;3271;0;Radelfingen;309;BE;7.269056279045946;47.021862139524636;de -Lätti;3053;5;Rapperswil (BE);310;BE;7.430243079398754;47.039479466609684;de -Wengi b. Büren;3251;0;Rapperswil (BE);310;BE;7.412182565662357;47.07957946375893;de -Ruppoldsried;3251;2;Rapperswil (BE);310;BE;7.425466484456931;47.08809346110944;de -Messen;3254;0;Rapperswil (BE);310;BE;7.435392848364799;47.0956998724521;de -Rapperswil BE;3255;0;Rapperswil (BE);310;BE;7.409942374348781;47.06313800328001;de -Dieterswil;3256;0;Rapperswil (BE);310;BE;7.425028574567534;47.05520949081962;de -Bangerten b. Dieterswil;3256;2;Rapperswil (BE);310;BE;7.44921334845007;47.055775228577964;de -Seewil;3256;3;Rapperswil (BE);310;BE;7.408883709443168;47.04806190169362;de -Münchenbuchsee;3053;0;Schüpfen;311;BE;7.426022674560691;47.03309899599404;de -Schüpfen;3054;0;Schüpfen;311;BE;7.376796529308662;47.03821298065186;de -Frieswil;3035;0;Seedorf (BE);312;BE;7.285473818301022;46.994931747361306;de -Wiler b. Seedorf;3266;0;Seedorf (BE);312;BE;7.319965580521094;47.04853793318066;de -Seedorf BE;3267;0;Seedorf (BE);312;BE;7.311099073409035;47.034220067125624;de -Lobsigen;3268;0;Seedorf (BE);312;BE;7.293586219686586;47.026803348324826;de -Aarberg;3270;0;Seedorf (BE);312;BE;7.276343007010492;47.03112650685394;de -Aarwangen;4912;0;Aarwangen;321;BE;7.769617203492055;47.240874092876474;de -Bützberg;4922;0;Aarwangen;321;BE;7.739319093781297;47.2222742037752;de -Rohrbach;4938;0;Auswil;322;BE;7.8113783685357046;47.14196480419008;de -Auswil;4944;0;Auswil;322;BE;7.832675668304817;47.13466285163432;de -Aarwangen;4912;0;Bannwil;323;BE;7.756463125861005;47.246761453226476;de -Bannwil;4913;0;Bannwil;323;BE;7.729947096268574;47.237408741861984;de -Bleienbach;3368;0;Bleienbach;324;BE;7.757697858087769;47.18456560409521;de -Busswil b. Melchnau;4917;2;Busswil bei Melchnau;325;BE;7.833074683501284;47.18604076734787;de -Gondiswil;4955;0;Gondiswil;326;BE;7.871932474136463;47.14623977474729;de -Langenthal;4900;0;Langenthal;329;BE;7.792487934277558;47.21159141344169;de -Untersteckholz;4916;0;Langenthal;329;BE;7.8467294234252805;47.204966770071735;de -Obersteckholz;4924;0;Langenthal;329;BE;7.8183500482522055;47.19951338522244;de -Bleienbach;3368;0;Lotzwil;331;BE;7.763686576027336;47.18993523048355;de -Lotzwil;4932;0;Lotzwil;331;BE;7.7883218274796215;47.18973590235411;de -Reisiswil;4919;0;Madiswil;332;BE;7.832666063940683;47.15955550716049;de -Gutenburg;4932;2;Madiswil;332;BE;7.795515802757709;47.18157958772209;de -Madiswil;4934;0;Madiswil;332;BE;7.799396161691377;47.167371395654165;de -Leimiswil;4935;0;Madiswil;332;BE;7.761064527199425;47.14892345591717;de -Kleindietwil;4936;0;Madiswil;332;BE;7.791107572605074;47.14624337415411;de -Melchnau;4917;0;Melchnau;333;BE;7.8553230108107055;47.17937907287753;de -Grossdietwil;6146;0;Melchnau;333;BE;7.876154286807514;47.16632812994853;de -Altbüron;6147;0;Melchnau;333;BE;7.877103033013798;47.17918653537105;de -Oeschenbach;4943;0;Oeschenbach;335;BE;7.747163114344675;47.101710974118376;de -Reisiswil;4919;0;Reisiswil;336;BE;7.844580300317651;47.1638840126317;de -Roggwil BE;4914;0;Roggwil (BE);337;BE;7.821681268643192;47.239910457501495;de -Rohrbach;4938;0;Rohrbach;338;BE;7.812227681281746;47.13288649907291;de -Rohrbachgraben;4938;2;Rohrbachgraben;339;BE;7.800495668996686;47.12084443080664;de -Rütschelen;4933;0;Rütschelen;340;BE;7.771088532427965;47.17322300990655;de -Schwarzhäusern;4911;0;Schwarzhäusern;341;BE;7.766337358156636;47.25382881063351;de -Bützberg;4922;0;Thunstetten;342;BE;7.746565680800902;47.21581147419685;de -Thunstetten;4922;2;Thunstetten;342;BE;7.753937898794297;47.20384200688763;de -Kleindietwil;4936;0;Ursenbach;344;BE;7.780713411282897;47.148000992460375;de -Ursenbach;4937;0;Ursenbach;344;BE;7.772910070652556;47.13568467196431;de -Walterswil BE;4942;0;Ursenbach;344;BE;7.766130677116875;47.11417422774772;de -Oeschenbach;4943;0;Ursenbach;344;BE;7.754928287788458;47.11865559282504;de -Wynau;4923;0;Wynau;345;BE;7.813477965108926;47.25776893020263;de -Bern;3004;0;Bern;351;BE;7.4520107074682755;46.9804871926737;de -Bern;3005;0;Bern;351;BE;7.449931552415316;46.93938995355346;de -Bern;3006;0;Bern;351;BE;7.471278342654534;46.94581211618737;de -Bern;3007;0;Bern;351;BE;7.434082441559162;46.9393824255885;de -Bern;3008;0;Bern;351;BE;7.413896593247755;46.945100555345846;de -Bern;3010;0;Bern;351;BE;7.424737508045922;46.94728049515075;de -Bern;3011;0;Bern;351;BE;7.447957834220311;46.94723895051563;de -Bern;3012;0;Bern;351;BE;7.426024833698223;46.96158403101272;de -Bern;3013;0;Bern;351;BE;7.446200709077208;46.95620888748941;de -Bern;3014;0;Bern;351;BE;7.458409753622983;46.962199665011134;de -Bern;3015;0;Bern;351;BE;7.484808363287374;46.94020835960618;de -Bern;3018;0;Bern;351;BE;7.389112617746961;46.93388884623948;de -Bern;3019;0;Bern;351;BE;7.3479518639380155;46.93098262568504;de -Bern;3020;0;Bern;351;BE;7.320873485656937;46.937079958356065;de -Bern;3027;0;Bern;351;BE;7.3870173473792935;46.9555525004704;de -Hinterkappelen;3032;0;Bern;351;BE;7.390080721455932;46.96324153219061;de -Herrenschwanden;3037;0;Bern;351;BE;7.4300487245633;46.97197720581497;de -Worblaufen;3048;0;Bern;351;BE;7.468480465943376;46.97245660092444;de -Ittigen;3063;0;Bern;351;BE;7.472104485273748;46.96835029960199;de -Ostermundigen;3072;0;Bern;351;BE;7.47947880750087;46.9677635785629;de -Gümligen;3073;0;Bern;351;BE;7.4928780017508405;46.938651346272934;de -Wabern;3084;0;Bern;351;BE;7.44750522218671;46.931544389216306;de -Liebefeld;3097;0;Bern;351;BE;7.424243642969393;46.93437726466453;de -Niederwangen b. Bern;3172;0;Bern;351;BE;7.381030608350197;46.930749373180106;de -Bolligen;3065;0;Bolligen;352;BE;7.496274643643378;46.97503186167681;de -Stettlen;3066;0;Bolligen;352;BE;7.534797118766119;46.97136847500137;de -Krauchthal;3326;0;Bolligen;352;BE;7.535797498159322;46.99659504656812;de -Bremgarten b. Bern;3047;0;Bremgarten bei Bern;353;BE;7.437267150415529;46.97560640745635;de -Herrenschwanden;3037;0;Kirchlindach;354;BE;7.4182986486416995;46.97822795495022;de -Kirchlindach;3038;0;Kirchlindach;354;BE;7.41429839450897;46.999655913785475;de -Ortschwaben;3042;0;Kirchlindach;354;BE;7.408683048296076;46.988402859980155;de -Bern;3007;0;Köniz;355;BE;7.436297874878721;46.93369297464334;de -Wabern;3084;0;Köniz;355;BE;7.449534817204611;46.928587500902175;de -Spiegel b. Bern;3095;0;Köniz;355;BE;7.43293430753073;46.92556695161132;de -Liebefeld;3097;0;Köniz;355;BE;7.415781571292609;46.929726140639936;de -Köniz;3098;0;Köniz;355;BE;7.413420499386784;46.92111072253153;de -Köniz;3098;0;Köniz;355;BE;7.435272380867865;46.93035927807075;de -Schliern b. Köniz;3098;1;Köniz;355;BE;7.416125722973052;46.90924238661325;de -Gasel;3144;0;Köniz;355;BE;7.400727583857717;46.90087165575823;de -Niederscherli;3145;0;Köniz;355;BE;7.385512193538206;46.88567018784211;de -Mittelhäusern;3147;0;Köniz;355;BE;7.368002076549886;46.87647198995243;de -Niederwangen b. Bern;3172;0;Köniz;355;BE;7.376883685135721;46.92586864250323;de -Oberwangen b. Bern;3173;0;Köniz;355;BE;7.361157807001169;46.91585618738992;de -Thörishaus;3174;0;Köniz;355;BE;7.351795846252995;46.89404983039866;de -Gümligen;3073;0;Muri bei Bern;356;BE;7.509268304033052;46.93505098371397;de -Muri b. Bern;3074;0;Muri bei Bern;356;BE;7.488481690919198;46.928369095380425;de -Worb;3076;0;Muri bei Bern;356;BE;7.517527458679476;46.942246575253655;de -Zimmerwald;3086;0;Oberbalm;357;BE;7.438863839334745;46.877954168745184;de -Oberbalm;3096;0;Oberbalm;357;BE;7.404624948512457;46.87296727268848;de -Niederscherli;3145;0;Oberbalm;357;BE;7.387814853143187;46.88150684407973;de -Mittelhäusern;3147;0;Oberbalm;357;BE;7.386275613478731;46.85671990978862;de -Stettlen;3066;0;Stettlen;358;BE;7.522595985777529;46.95913847895951;de -Boll;3067;0;Stettlen;358;BE;7.536934052778588;46.96301558565482;de -Worb;3076;0;Stettlen;358;BE;7.522459238492036;46.94335774089832;de -Stettlen;3066;0;Vechigen;359;BE;7.549261735691321;46.97464420889996;de -Boll;3067;0;Vechigen;359;BE;7.547609493046736;46.95352738499335;de -Utzigen;3068;0;Vechigen;359;BE;7.564664507426845;46.96081807179524;de -Worb;3076;0;Vechigen;359;BE;7.533245689464507;46.94238915273542;de -Bigenthal;3513;0;Vechigen;359;BE;7.612365191669734;46.96982777190534;de -Hinterkappelen;3032;0;Wohlen bei Bern;360;BE;7.377457533372591;46.967890570542714;de -Wohlen b. Bern;3033;0;Wohlen bei Bern;360;BE;7.3556712353509415;46.97061613493138;de -Murzelen;3034;0;Wohlen bei Bern;360;BE;7.31483523575102;46.98179044732681;de -Frieswil;3035;0;Wohlen bei Bern;360;BE;7.296644476190814;46.99227974726821;de -Detligen;3036;0;Wohlen bei Bern;360;BE;7.284844767981696;46.97616210878394;de -Herrenschwanden;3037;0;Wohlen bei Bern;360;BE;7.408636588995277;46.97025026644755;de -Ortschwaben;3042;0;Wohlen bei Bern;360;BE;7.388784659217899;46.995869712122804;de -Uettligen;3043;0;Wohlen bei Bern;360;BE;7.3856886176686745;46.987283239898765;de -Innerberg;3044;2;Wohlen bei Bern;360;BE;7.309498303073987;46.99531843802628;de -Meikirch;3045;0;Wohlen bei Bern;360;BE;7.3807753520204;47.00057693753254;de -Säriswil;3049;0;Wohlen bei Bern;360;BE;7.3341691689328385;46.991791206360496;de -Zollikofen;3052;0;Zollikofen;361;BE;7.461419686849904;46.99290346352701;de -Worblaufen;3048;0;Ittigen;362;BE;7.457665419230947;46.97879768105429;de -Ittigen;3063;0;Ittigen;362;BE;7.479871609207618;46.97526372862298;de -Ittigen;3063;0;Ostermundigen;363;BE;7.485529075370545;46.96958987172736;de -Bolligen;3065;0;Ostermundigen;363;BE;7.49288556606719;46.96657919307528;de -Stettlen;3066;0;Ostermundigen;363;BE;7.51096421082949;46.96043060047113;de -Ostermundigen;3072;0;Ostermundigen;363;BE;7.487030424911038;46.956628803711126;de -Gümligen;3073;0;Ostermundigen;363;BE;7.509793740788513;46.951731803852674;de -Biel/Bienne;2502;0;Biel/Bienne;371;BE;7.24572514928842;47.1419838725423;de -Biel/Bienne;2503;0;Biel/Bienne;371;BE;7.25855392423261;47.13168580313932;de -Biel/Bienne;2504;0;Biel/Bienne;371;BE;7.282648870265133;47.156327786327054;de -Biel/Bienne;2505;0;Biel/Bienne;371;BE;7.217987605048909;47.133699492272086;de -Magglingen/Macolin;2532;0;Biel/Bienne;371;BE;7.213153174921253;47.13794400649169;fr -Magglingen/Macolin;2532;0;Evilard;372;BE;7.216705383781767;47.14205784741345;fr -Evilard;2533;0;Evilard;372;BE;7.239625015125592;47.14981495604012;fr -Arch;3296;0;Arch;381;BE;7.433383723612437;47.16320151835406;de -Studen BE;2557;0;Büetigen;382;BE;7.319822967204783;47.111765792152575;de -Büetigen;3263;0;Büetigen;382;BE;7.34275941802786;47.106166867372245;de -Büren an der Aare;3294;0;Büren an der Aare;383;BE;7.37406099207307;47.13989347551852;de -Diessbach b. Büren;3264;0;Diessbach bei Büren;385;BE;7.362001222662157;47.108303439131284;de -Dotzigen;3293;0;Dotzigen;386;BE;7.3434229042494295;47.12093972626486;de -Büren an der Aare;3294;0;Dotzigen;386;BE;7.354792547584343;47.140052861851636;de -Lengnau BE;2543;0;Lengnau (BE);387;BE;7.369178285729735;47.18237568499743;de -Leuzigen;3297;0;Leuzigen;388;BE;7.452702457428228;47.17453657051951;de -Meienried;3294;2;Meienried;389;BE;7.3413715038233445;47.13868003254057;de -Meinisberg;2554;0;Meinisberg;390;BE;7.347898718278251;47.15950908175526;de -Oberwil b. Büren;3298;0;Oberwil bei Büren;391;BE;7.404547650932702;47.12839918937849;de -Pieterlen;2542;0;Pieterlen;392;BE;7.3403998016796494;47.171458651541364;de -Rüti b. Büren;3295;0;Rüti bei Büren;393;BE;7.4038274846294145;47.15193259740487;de -Wengi b. Büren;3251;0;Wengi;394;BE;7.400101911654371;47.08225371994076;de -Grossaffoltern;3257;0;Wengi;394;BE;7.384291709871427;47.08058036267722;de -Aefligen;3426;0;Aefligen;401;BE;7.551745253616114;47.09571293161141;de -Alchenstorf;3473;0;Alchenstorf;402;BE;7.639713242891192;47.12496088052823;de -Bäriswil BE;3323;0;Bäriswil;403;BE;7.527892521869978;47.01889249304195;de -Burgdorf;3400;0;Burgdorf;404;BE;7.624661648027415;47.05652532310535;de -Kaltacker;3413;0;Burgdorf;404;BE;7.6476017760428965;47.068705597652574;de -Oberburg;3414;0;Burgdorf;404;BE;7.631295666887966;47.039007870304445;de -Wynigen;3472;0;Burgdorf;404;BE;7.64452094052108;47.081943278252;de -Kirchberg BE;3422;0;Ersigen;405;BE;7.588967607164077;47.09262723180749;de -Ersigen;3423;0;Ersigen;405;BE;7.596145047572491;47.094925256934296;de -Niederösch;3424;0;Ersigen;405;BE;7.615213172765394;47.11710738952489;de -Oberösch;3424;2;Ersigen;405;BE;7.6095253439591675;47.10829952056307;de -Koppigen;3425;0;Ersigen;405;BE;7.609163039541604;47.124112831376664;de -Rumendingen;3472;2;Ersigen;405;BE;7.628727169020804;47.108314396621594;de -Hasle b. Burgdorf;3415;1;Hasle bei Burgdorf;406;BE;7.6465130104436465;47.01643569452256;de -Schafhausen im Emmental;3415;2;Hasle bei Burgdorf;406;BE;7.6562977357730455;46.99544678049945;de -Biembach im Emmental;3419;0;Hasle bei Burgdorf;406;BE;7.616170176479505;46.993179537758415;de -Lützelflüh-Goldbach;3432;0;Hasle bei Burgdorf;406;BE;7.6685883499982435;46.99511614403118;de -Schwanden im Emmental;3433;0;Hasle bei Burgdorf;406;BE;7.683923605431313;46.985741846338385;de -Bigenthal;3513;0;Hasle bei Burgdorf;406;BE;7.618102437062756;46.98191254466319;de -Heimiswil;3412;0;Heimiswil;407;BE;7.659926832466068;47.064802112882944;de -Kaltacker;3413;0;Heimiswil;407;BE;7.6756014909387815;47.076772570902286;de -Rüegsauschachen;3415;3;Heimiswil;407;BE;7.647696399259114;47.029497485037695;de -Affoltern im Emmental;3416;0;Heimiswil;407;BE;7.717348025036895;47.08185386477818;de -Rüegsbach;3418;0;Heimiswil;407;BE;7.697569530351235;47.06037552665249;de -Wynigen;3472;0;Heimiswil;407;BE;7.716007237354558;47.087781030730675;de -Hellsau;3429;3;Hellsau;408;BE;7.651748720512438;47.1458251220991;de -Hindelbank;3324;0;Hindelbank;409;BE;7.540033928893843;47.041769023357176;de -Mötschwil;3324;2;Hindelbank;409;BE;7.567400395789558;47.04883024609718;de -Hettiswil b. Hindelbank;3325;0;Hindelbank;409;BE;7.574051690766657;47.03964975351062;de -Lyssach;3421;0;Hindelbank;409;BE;7.5803250148469274;47.05111009521904;de -Höchstetten;3429;2;Höchstetten;410;BE;7.632085564998332;47.14411367284157;de -Kernenried;3309;0;Kernenried;411;BE;7.546606401938981;47.069869484775964;de -Burgdorf;3400;0;Kirchberg (BE);412;BE;7.626115931920215;47.07232474817563;de -Kirchberg BE;3422;0;Kirchberg (BE);412;BE;7.585370116961041;47.08378025548306;de -Koppigen;3425;0;Koppigen;413;BE;7.60288868400621;47.13398770785903;de -Hettiswil b. Hindelbank;3325;0;Krauchthal;414;BE;7.5548379070562035;47.03117453741054;de -Krauchthal;3326;0;Krauchthal;414;BE;7.56851666739451;47.008984907587454;de -Hindelbank;3324;0;Lyssach;415;BE;7.5571745221123185;47.05586503307867;de -Lyssach;3421;0;Lyssach;415;BE;7.580871683398337;47.063296943083806;de -Oberburg;3414;0;Oberburg;418;BE;7.620478129067245;47.03948013559786;de -Lyssach;3421;0;Oberburg;418;BE;7.5932973979156255;47.04864679208871;de -Rüdtligen;3422;1;Rüdtligen-Alchenflüh;420;BE;7.569809662309439;47.087315961529654;de -Alchenflüh;3422;2;Rüdtligen-Alchenflüh;420;BE;7.58082164353708;47.08304844611828;de -Rumendingen;3472;2;Rumendingen;421;BE;7.644185197173623;47.105566073103326;de -Rüti b. Lyssach;3421;2;Rüti bei Lyssach;422;BE;7.576910861191669;47.05664777452245;de -Willadingen;3425;2;Willadingen;423;BE;7.614014064334955;47.14538125785877;de -Schmidigen-Mühleweg;3464;0;Wynigen;424;BE;7.732034226442626;47.09448942231644;de -Wynigen;3472;0;Wynigen;424;BE;7.6666807385485924;47.106115321435354;de -Rüedisbach;3474;0;Wynigen;424;BE;7.702757615323031;47.11968062250595;de -Les Prés-d'Orvin;2534;2;Corgémont;431;BE;7.149470446007434;47.164420184145214;fr -Corgémont;2606;0;Corgémont;431;BE;7.140839347701334;47.19424543518053;fr -Montagne-de-Courtelary;2608;2;Corgémont;431;BE;7.145491333034769;47.17206319243021;fr -La Tanne;2720;2;Corgémont;431;BE;7.127713919191193;47.20917136666942;fr -Montagne-de-Courtelary;2608;2;Cormoret;432;BE;7.059677765635179;47.145813834655435;fr -Mont-Crosin;2610;4;Cormoret;432;BE;7.035399598527798;47.18409808410651;fr -Cormoret;2612;0;Cormoret;432;BE;7.054087709612769;47.17289853720371;fr -Villeret;2613;0;Cormoret;432;BE;7.0473701051347435;47.154770803074925;fr -Cortébert;2607;0;Cortébert;433;BE;7.106665131075737;47.19159026704515;fr -Montagne-de-Courtelary;2608;2;Cortébert;433;BE;7.115632698780751;47.170412014959076;fr -Mont-Tramelan;2723;0;Cortébert;433;BE;7.093996336217885;47.20340121201719;fr -Courtelary;2608;0;Courtelary;434;BE;7.069229173090898;47.18020086160459;fr -Montagne-de-Courtelary;2608;2;Courtelary;434;BE;7.083331448026059;47.15826736192191;fr -Mont-Crosin;2610;4;Courtelary;434;BE;7.049984787099523;47.19622916920017;fr -Mont-Tramelan;2723;0;Courtelary;434;BE;7.036134072085519;47.20454991203874;fr -La Ferrière;2333;0;La Ferrière;435;BE;6.894333694874212;47.141042617242775;fr -La Cibourg;2333;2;La Ferrière;435;BE;6.889950730651166;47.12523149830889;fr -Mont-Soleil;2610;2;La Ferrière;435;BE;6.9302386734629176;47.13754871569254;fr -Tramelan;2720;0;Mont-Tramelan;437;BE;7.150115605443933;47.236913388058035;fr -Mont-Tramelan;2723;0;Mont-Tramelan;437;BE;7.053377236712487;47.20782281359643;fr -Orvin;2534;0;Orvin;438;BE;7.216379298323659;47.15914479975399;fr -Les Prés-d'Orvin;2534;2;Orvin;438;BE;7.173689381869929;47.153560078085654;fr -Frinvillier;2535;0;Orvin;438;BE;7.2515501003551455;47.16720104993025;fr -Renan BE;2616;0;Renan (BE);441;BE;6.929078128309582;47.12714844983761;fr -La Cibourg;2616;2;Renan (BE);441;BE;6.893268598685557;47.118307229373485;fr -Plagne;2536;0;Romont (BE);442;BE;7.321151847258162;47.20130745665807;fr -Romont BE;2538;0;Romont (BE);442;BE;7.340381182468996;47.18886453935115;fr -Péry;2603;0;Romont (BE);442;BE;7.331042010249605;47.212940136151694;fr -Le Cerneux-Veusil;2345;2;Saint-Imier;443;BE;6.962118949600263;47.17553700090313;fr -St-Imier;2610;0;Saint-Imier;443;BE;6.996713279628029;47.15259461873656;fr -Mont-Soleil;2610;2;Saint-Imier;443;BE;6.988677500000179;47.15851687170501;fr -Les Pontins;2610;3;Saint-Imier;443;BE;6.996721405864668;47.13152975031012;fr -Sonceboz-Sombeval;2605;0;Sonceboz-Sombeval;444;BE;7.168574136299215;47.19508285568544;fr -Corgémont;2606;0;Sonceboz-Sombeval;444;BE;7.168020521864249;47.177607314223586;fr -La Tanne;2720;2;Sonceboz-Sombeval;444;BE;7.1718927075290315;47.20923400556173;fr -La Ferrière;2333;0;Sonvilier;445;BE;6.93410500250423;47.16432828148701;fr -Le Cerneux-Veusil;2345;2;Sonvilier;445;BE;6.9409888660653785;47.1796990545629;fr -Mont-Soleil;2610;2;Sonvilier;445;BE;6.950904782517176;47.15190301577665;fr -Sonvilier;2615;0;Sonvilier;445;BE;6.964328626197475;47.13998170419069;fr -Montagne-de-Sonvilier;2615;2;Sonvilier;445;BE;6.946831256134526;47.12093043846955;fr -Tramelan;2720;0;Tramelan;446;BE;7.09717375062631;47.22313196043226;fr -La Tanne;2720;2;Tramelan;446;BE;7.129621571711727;47.21959998751226;fr -Les Reussilles;2722;0;Tramelan;446;BE;7.08251951902742;47.22430057278718;fr -Mont-Tramelan;2723;0;Tramelan;446;BE;7.074577638651996;47.2100606165547;fr -Les Breuleux;2345;0;Villeret;448;BE;7.005234270048092;47.18946344413797;fr -Les Pontins;2610;3;Villeret;448;BE;7.028086034790586;47.134476545919334;fr -Mont-Crosin;2610;4;Villeret;448;BE;7.005696988545624;47.176026897161044;fr -Villeret;2613;0;Villeret;448;BE;7.017234902310916;47.15644633246698;fr -Frinvillier;2535;0;Sauge;449;BE;7.25741009104355;47.169531954236646;fr -Plagne;2536;0;Sauge;449;BE;7.287394249182585;47.18838882210955;fr -Vauffelin;2537;0;Sauge;449;BE;7.303347843044944;47.18701919449778;fr -Frinvillier;2535;0;Péry-La Heutte;450;BE;7.251935380483069;47.17140974859118;fr -Péry;2603;0;Péry-La Heutte;450;BE;7.249542299753056;47.19494893468344;fr -La Heutte;2604;0;Péry-La Heutte;450;BE;7.224691549223251;47.18968562111596;fr -Reconvilier;2732;0;Péry-La Heutte;450;BE;7.22348790721438;47.206405676352155;fr -Malleray;2735;4;Péry-La Heutte;450;BE;7.244957854982376;47.210557735196616;fr -Brüttelen;3237;0;Brüttelen;491;BE;7.147408635427688;47.02232103404785;de -Ins;3232;0;Erlach;492;BE;7.0914057020200545;47.0216249049403;de -Tschugg;3233;0;Erlach;492;BE;7.0924848887568555;47.0320742014242;de -Erlach;3235;0;Erlach;492;BE;7.095379555301775;47.041987435639584;de -Finsterhennen;2577;2;Finsterhennen;493;BE;7.178366123511715;47.02601876632701;de -Le Landeron;2525;0;Gals;494;BE;7.068903331011493;47.044645519017905;fr -Erlach;3235;0;Gals;494;BE;7.081851564370472;47.03456946966674;de -Gals;3238;0;Gals;494;BE;7.04964162742748;47.027851573159325;de -Gampelen;3236;0;Gampelen;495;BE;7.0592346482919055;47.014592053964975;de -Ins;3232;0;Ins;496;BE;7.101916542426133;47.009096208437064;de -Gampelen;3236;0;Ins;496;BE;7.073415808475251;46.9872235272224;de -Hagneck;2575;2;Lüscherz;497;BE;7.177758242601921;47.05858471225396;de -Lüscherz;2576;0;Lüscherz;497;BE;7.151551287281054;47.04665183095972;de -Müntschemier;3225;0;Müntschemier;498;BE;7.142115970410717;46.99337062851557;de -Siselen BE;2577;0;Siselen;499;BE;7.188282741579047;47.03129034577671;de -Treiten;3226;0;Treiten;500;BE;7.160944814282907;47.00907433554881;de -Tschugg;3233;0;Tschugg;501;BE;7.076034442099886;47.02681609560448;de -Lüscherz;2576;0;Vinelz;502;BE;7.135956937583379;47.04126707060194;de -Vinelz;3234;0;Vinelz;502;BE;7.111246429897441;47.033788694904636;de -Schalunen;3314;0;Bätterkinden;533;BE;7.532407110945122;47.11304607440384;de -Bätterkinden;3315;0;Bätterkinden;533;BE;7.540340673059875;47.12899379404853;de -Kräiligen;3315;1;Bätterkinden;533;BE;7.533259427568892;47.14932136356666;de -Lohn-Ammannsegg;4573;0;Bätterkinden;533;BE;7.525531175065007;47.15952077030595;de -Deisswil b. Münchenbuchsee;3053;2;Deisswil bei Münchenbuchsee;535;BE;7.455739540975125;47.03451383262788;de -Etzelkofen;3306;0;Fraubrunnen;538;BE;7.4786376766807825;47.08518510236259;de -Grafenried;3308;0;Fraubrunnen;538;BE;7.511464898982585;47.08011815574356;de -Zauggenried;3309;2;Fraubrunnen;538;BE;7.540935742713866;47.07318892873043;de -Fraubrunnen;3312;0;Fraubrunnen;538;BE;7.522035111916391;47.086989896510104;de -Büren zum Hof;3313;0;Fraubrunnen;538;BE;7.5137349407349765;47.0957799774994;de -Schalunen;3314;0;Fraubrunnen;538;BE;7.524439419975222;47.11037602831214;de -Limpach;3317;0;Fraubrunnen;538;BE;7.497873013473113;47.10768795620516;de -Mülchi;3317;1;Fraubrunnen;538;BE;7.4736407950672135;47.101787214717845;de -Rüdtligen;3422;1;Fraubrunnen;538;BE;7.563834331868659;47.07864111515182;de -Jegenstorf;3303;0;Jegenstorf;540;BE;7.507000259526521;47.05023081669221;de -Münchringen;3303;2;Jegenstorf;540;BE;7.522191429956802;47.04619665007175;de -Ballmoos;3303;4;Jegenstorf;540;BE;7.473751457622033;47.040888658043855;de -Scheunen;3305;2;Jegenstorf;540;BE;7.457250746888261;47.06837638327134;de -Iffwil;3305;0;Iffwil;541;BE;7.478234149123487;47.06401496885493;de -Urtenen-Schönbühl;3322;0;Mattstetten;543;BE;7.51387773113915;47.01904063075953;de -Mattstetten;3322;1;Mattstetten;543;BE;7.513761406507638;47.02993395876909;de -Münchenbuchsee;3053;0;Moosseedorf;544;BE;7.463520811013719;47.01456327679102;de -Moosseedorf;3302;0;Moosseedorf;544;BE;7.482209551843116;47.017519452710474;de -Urtenen-Schönbühl;3322;0;Moosseedorf;544;BE;7.497111462762297;47.00948730209086;de -Zollikofen;3052;0;Münchenbuchsee;546;BE;7.465377539985842;47.004003642972926;de -Münchenbuchsee;3053;0;Münchenbuchsee;546;BE;7.451887360331703;47.02154206558304;de -Diemerswil;3053;3;Münchenbuchsee;546;BE;7.427920945398984;47.019082092597486;de -Urtenen-Schönbühl;3322;0;Urtenen-Schönbühl;551;BE;7.499897886858259;47.025566197319975;de -Utzenstorf;3427;0;Utzenstorf;552;BE;7.557280029942148;47.12680972039498;de -Wiggiswil;3053;4;Wiggiswil;553;BE;7.468838168703398;47.03037223697536;de -Utzenstorf;3427;0;Wiler bei Utzenstorf;554;BE;7.555223899952713;47.14217140253698;de -Wiler b. Utzenstorf;3428;0;Wiler bei Utzenstorf;554;BE;7.555844253350729;47.15237161870326;de -Zielebach;4564;1;Zielebach;556;BE;7.57238315503651;47.15849929179405;de -Zuzwil BE;3303;3;Zuzwil (BE);557;BE;7.4715739174327584;47.05133694533313;de -Adelboden;3715;0;Adelboden;561;BE;7.558821777117628;46.49291136873533;de -Achseten;3725;0;Adelboden;561;BE;7.58516612422755;46.518952695775354;de -Hondrich;3702;0;Aeschi bei Spiez;562;BE;7.677899009002099;46.66695340163787;de -Aeschi b. Spiez;3703;0;Aeschi bei Spiez;562;BE;7.694426444127123;46.659914045982056;de -Aeschiried;3703;41;Aeschi bei Spiez;562;BE;7.725560600567881;46.645246985275854;de -Krattigen;3704;0;Aeschi bei Spiez;562;BE;7.713429352093048;46.65963658447959;de -Emdthal;3711;0;Aeschi bei Spiez;562;BE;7.6836880677077675;46.65493441248131;de -Mülenen;3711;2;Aeschi bei Spiez;562;BE;7.689282156582245;46.64137209794524;de -Reichenbach im Kandertal;3713;0;Frutigen;563;BE;7.664376547396944;46.596360558572016;de -Frutigen;3714;0;Frutigen;563;BE;7.642719214392651;46.58807980112951;de -Adelboden;3715;0;Frutigen;563;BE;7.547901342302948;46.52718411135506;de -Kandergrund;3716;0;Frutigen;563;BE;7.666684457882992;46.57055116157041;de -Ried (Frutigen);3724;0;Frutigen;563;BE;7.611857968783074;46.56425400261272;de -Achseten;3725;0;Frutigen;563;BE;7.598418290300473;46.52701595207362;de -Kandergrund;3716;0;Kandergrund;564;BE;7.662993835267664;46.54563766632806;de -Blausee-Mitholz;3717;0;Kandergrund;564;BE;7.675388800829906;46.52891450657587;de -Kandersteg;3718;0;Kandersteg;565;BE;7.674723670866165;46.49466750991525;de -Krattigen;3704;0;Krattigen;566;BE;7.720748183953582;46.65835206539378;de -Faulensee;3705;0;Krattigen;566;BE;7.726878719501779;46.66497411241577;de -Mülenen;3711;2;Reichenbach im Kandertal;567;BE;7.693016913577753;46.63806006989572;de -Reichenbach im Kandertal;3713;0;Reichenbach im Kandertal;567;BE;7.6940472975115615;46.626153304292416;de -Wengi b. Frutigen;3714;3;Reichenbach im Kandertal;567;BE;7.6623289455762364;46.607563115802975;de -Scharnachtal;3722;0;Reichenbach im Kandertal;567;BE;7.698120662722932;46.61487338306163;de -Kiental;3723;0;Reichenbach im Kandertal;567;BE;7.724379026729816;46.58940466545534;de -Sundlauenen;3800;5;Beatenberg;571;BE;7.795565884161337;46.68748717266551;de -Beatenberg;3803;0;Beatenberg;571;BE;7.790785446698734;46.69600678950565;de -Bönigen b. Interlaken;3806;0;Bönigen;572;BE;7.900487465494714;46.684030038218204;de -Brienz BE;3855;0;Brienz (BE);573;BE;8.02352880856716;46.75622895584119;de -Axalp;3855;1;Brienz (BE);573;BE;8.038306210407175;46.721438646006014;de -Brienzwiler;3856;0;Brienzwiler;574;BE;8.098936829535555;46.75016107279983;de -Meiringen;3860;0;Brienzwiler;574;BE;8.09067333568745;46.70968939031624;de -Leissigen;3706;0;Därligen;575;BE;7.7928349501525265;46.66020634787846;de -Därligen;3707;0;Därligen;575;BE;7.807943970674385;46.66161552056425;de -Lütschental;3816;0;Grindelwald;576;BE;7.9739181172700615;46.64179758227599;de -Burglauenen;3816;1;Grindelwald;576;BE;7.978089139826497;46.637928228898026;de -Grindelwald;3818;0;Grindelwald;576;BE;8.04584348646453;46.62475728741999;de -Kleine Scheidegg;3823;1;Grindelwald;576;BE;7.962610412924228;46.58627451656545;de -Wilderswil;3812;0;Gsteigwiler;577;BE;7.9091413594824616;46.65166096299907;de -Gsteigwiler;3814;0;Gsteigwiler;577;BE;7.872673212320063;46.65484750907099;de -Wilderswil;3812;0;Gündlischwand;578;BE;7.911296368039866;46.652414918088546;de -Zweilütschinen;3815;0;Gündlischwand;578;BE;7.89991247324517;46.632935158564486;de -Gündlischwand;3815;2;Gündlischwand;578;BE;7.911784104358153;46.63425200733556;de -Habkern;3804;0;Habkern;579;BE;7.862764760652455;46.72512522982462;de -Schangnau;6197;0;Habkern;579;BE;7.951767755682553;46.791958778723874;de -Hofstetten b. Brienz;3858;0;Hofstetten bei Brienz;580;BE;8.071364174155438;46.75398148125773;de -Interlaken;3800;0;Interlaken;581;BE;7.862870322226102;46.68689296718228;de -Iseltwald;3807;0;Iseltwald;582;BE;7.964747713626513;46.709649244345016;de -Jungfraujoch;3801;33;Lauterbrunnen;584;BE;7.9773361665787;46.54739593295613;de -Lauterbrunnen;3822;0;Lauterbrunnen;584;BE;7.908619283840012;46.592749253201205;de -Isenfluh;3822;2;Lauterbrunnen;584;BE;7.895628243293009;46.620247555566074;de -Wengen;3823;0;Lauterbrunnen;584;BE;7.919347169686746;46.60722648402512;de -Kleine Scheidegg;3823;1;Lauterbrunnen;584;BE;7.960511769452786;46.585095892941844;de -Eigergletscher;3823;2;Lauterbrunnen;584;BE;7.973830991975496;46.57493020738182;de -Stechelberg;3824;0;Lauterbrunnen;584;BE;7.901592260541026;46.548070179004824;de -Mürren;3825;0;Lauterbrunnen;584;BE;7.894530238421468;46.560557854937905;de -Gimmelwald;3826;0;Lauterbrunnen;584;BE;7.8932987867012905;46.54709548885897;de -Leissigen;3706;0;Leissigen;585;BE;7.772862877989464;46.65497296794026;de -Lütschental;3816;0;Lütschental;586;BE;7.948795873240794;46.63708882874521;de -Matten b. Interlaken;3800;3;Matten bei Interlaken;587;BE;7.869714885224609;46.67727184286673;de -Wilderswil;3812;0;Matten bei Interlaken;587;BE;7.888334595124506;46.666963221080124;de -Niederried b. Interlaken;3853;0;Niederried bei Interlaken;588;BE;7.9293990369517;46.716716758995936;de -Oberried am Brienzersee;3854;0;Oberried am Brienzersee;589;BE;7.956708826000279;46.73796841469702;de -Brienz BE;3855;0;Oberried am Brienzersee;589;BE;7.987880942576918;46.7524639659929;de -Goldswil b. Interlaken;3805;0;Ringgenberg (BE);590;BE;7.88027320144703;46.69658466666908;de -Ringgenberg BE;3852;0;Ringgenberg (BE);590;BE;7.896498107019517;46.700860554272026;de -Saxeten;3813;0;Saxeten;591;BE;7.830979929993655;46.636529195705926;de -Schwanden b. Brienz;3855;41;Schwanden bei Brienz;592;BE;8.058321692967876;46.75727590871033;de -Unterseen;3800;2;Unterseen;593;BE;7.84954014689376;46.68762137783323;de -Wilderswil;3812;0;Wilderswil;594;BE;7.869480593649234;46.6660860269379;de -Biglen;3507;0;Arni (BE);602;BE;7.631980249231174;46.93879253447131;de -Arni BE;3508;0;Arni (BE);602;BE;7.668092794762981;46.93611512463175;de -Biglen;3507;0;Biglen;603;BE;7.627553266150162;46.92845519503444;de -Oberthal;3531;0;Bowil;605;BE;7.691901203747758;46.90575868957661;de -Bowil;3533;0;Bowil;605;BE;7.695002336025524;46.89303663821882;de -Signau;3534;0;Bowil;605;BE;7.722142300036326;46.90195384263816;de -Röthenbach im Emmental;3538;0;Bowil;605;BE;7.712777378199762;46.86714809066459;de -Linden;3673;0;Bowil;605;BE;7.691339858695814;46.86581846861945;de -Brenzikofen;3671;0;Brenzikofen;606;BE;7.613781511781634;46.816138929880964;de -Freimettigen;3510;8;Freimettigen;607;BE;7.6273833271169424;46.867948594387016;de -Schlosswil;3082;0;Grosshöchstetten;608;BE;7.605592383998515;46.909083507618426;de -Grosshöchstetten;3506;0;Grosshöchstetten;608;BE;7.641654168702469;46.907074935399685;de -Häutligen;3510;9;Häutligen;609;BE;7.606704117727015;46.85759870208678;de -Herbligen;3671;2;Herbligen;610;BE;7.608183985485812;46.827310975670954;de -Wichtrach;3114;0;Kiesen;611;BE;7.579821632280442;46.827176087547244;de -Kiesen;3629;0;Kiesen;611;BE;7.575430544219443;46.81945545300611;de -Gysenstein;3503;0;Konolfingen;612;BE;7.594782374172376;46.88957279196664;de -Konolfingen;3510;0;Konolfingen;612;BE;7.619468712442099;46.87816924513494;de -Obergoldbach;3434;0;Landiswil;613;BE;7.672820622749505;46.960602268225394;de -Landiswil;3434;1;Landiswil;613;BE;7.6800127125666275;46.95837669763752;de -Arni BE;3508;0;Landiswil;613;BE;7.680001075430006;46.94374781675441;de -Walkringen;3512;0;Landiswil;613;BE;7.644666321122995;46.9542406731894;de -Röthenbach im Emmental;3538;0;Linden;614;BE;7.712671782037555;46.865062604370756;de -Heimenschwand;3615;0;Linden;614;BE;7.675059723291456;46.829821479037136;de -Oberdiessbach;3672;0;Linden;614;BE;7.648529534495701;46.84304179380359;de -Linden;3673;0;Linden;614;BE;7.677174908075054;46.84723832642659;de -Grosshöchstetten;3506;0;Mirchel;615;BE;7.640854929559791;46.899031062867586;de -Mirchel;3532;2;Mirchel;615;BE;7.647224437014446;46.895615995732356;de -Trimstein;3083;0;Münsingen;616;BE;7.581081007087135;46.90448515339123;de -Münsingen;3110;0;Münsingen;616;BE;7.555372010889105;46.876452532223304;de -Tägertschi;3111;0;Münsingen;616;BE;7.586572618633995;46.8740008910727;de -Niederhünigen;3504;0;Niederhünigen;617;BE;7.636502702004574;46.8778483438857;de -Oberdiessbach;3672;0;Oberdiessbach;619;BE;7.619329234719528;46.84013667683819;de -Aeschlen b. Oberdiessbach;3672;2;Oberdiessbach;619;BE;7.646468933367525;46.837543055283035;de -Bleiken b. Oberdiessbach;3674;0;Oberdiessbach;619;BE;7.6388768632332305;46.81624656105524;de -Grosshöchstetten;3506;0;Oberthal;620;BE;7.646635741569893;46.91180822103286;de -Arni BE;3508;0;Oberthal;620;BE;7.651416199392248;46.91935400647624;de -Oberthal;3531;0;Oberthal;620;BE;7.674852918930047;46.91663731822342;de -Oppligen;3629;2;Oppligen;622;BE;7.594840022633883;46.82005720011902;de -Allmendingen b. Bern;3112;0;Rubigen;623;BE;7.533662995001887;46.90935879646752;de -Rubigen;3113;0;Rubigen;623;BE;7.549246218282001;46.89791492991287;de -Utzigen;3068;0;Walkringen;626;BE;7.6066180846075735;46.95900401671095;de -Schafhausen im Emmental;3415;2;Walkringen;626;BE;7.637191660426766;46.9823020454343;de -Walkringen;3512;0;Walkringen;626;BE;7.619896828189332;46.94715149504349;de -Bigenthal;3513;0;Walkringen;626;BE;7.62344396515029;46.96566027971444;de -Utzigen;3068;0;Worb;627;BE;7.591871157089698;46.95035975411167;de -Rüfenacht BE;3075;0;Worb;627;BE;7.5385179368764845;46.929707973118006;de -Vielbringen b. Worb;3075;2;Worb;627;BE;7.549083729481924;46.91532479343101;de -Worb;3076;0;Worb;627;BE;7.564317368394192;46.93014238271044;de -Enggistein;3077;0;Worb;627;BE;7.596896834257903;46.932190938029294;de -Richigen;3078;0;Worb;627;BE;7.583783932050262;46.918262631574926;de -Schlosswil;3082;0;Worb;627;BE;7.605648856825499;46.91787366205222;de -Rubigen;3113;0;Worb;627;BE;7.559187702547251;46.91278333584961;de -Grosshöchstetten;3506;0;Zäziwil;628;BE;7.649493298312264;46.903928293885755;de -Oberthal;3531;0;Zäziwil;628;BE;7.666748804516158;46.90817533111743;de -Zäziwil;3532;0;Zäziwil;628;BE;7.661085276969708;46.90244598344191;de -Bowil;3533;0;Zäziwil;628;BE;7.684266196564432;46.8823714550655;de -Oberhünigen;3504;2;Oberhünigen;629;BE;7.658559075606065;46.879740144059;de -Zäziwil;3532;0;Oberhünigen;629;BE;7.679909570624556;46.8818412435095;de -Mirchel;3532;2;Oberhünigen;629;BE;7.656982169305287;46.88240624587706;de -Bowil;3533;0;Oberhünigen;629;BE;7.685698648083549;46.87667610236387;de -Linden;3673;0;Oberhünigen;629;BE;7.676729130619845;46.85913427386152;de -Allmendingen b. Bern;3112;0;Allmendingen;630;BE;7.524133983324439;46.91477981768784;de -Wichtrach;3114;0;Wichtrach;632;BE;7.579436690202883;46.845526626702046;de -Häutligen;3510;9;Wichtrach;632;BE;7.6041387209074225;46.85046547101398;de -Laupen BE;3177;0;Ferenbalm;662;BE;7.232617512985863;46.91901745043667;de -Gümmenen;3205;0;Ferenbalm;662;BE;7.235409952578845;46.941454755327264;de -Rizenbach;3206;0;Ferenbalm;662;BE;7.227087081067931;46.94348634422656;de -Ferenbalm;3206;1;Ferenbalm;662;BE;7.211446768368123;46.948342500282976;de -Biberen;3206;3;Ferenbalm;662;BE;7.212039549735892;46.94006035095241;de -Gammen;3206;4;Ferenbalm;662;BE;7.227081827835487;46.919604068435234;de -Wileroltigen;3207;0;Ferenbalm;662;BE;7.2337569786348395;46.958444669891456;de -Bern;3020;0;Frauenkappelen;663;BE;7.326009372956072;46.94566670259823;de -Wohlen b. Bern;3033;0;Frauenkappelen;663;BE;7.357748942824855;46.96364560287701;de -Frauenkappelen;3202;0;Frauenkappelen;663;BE;7.337651452300777;46.955654591981;de -Gurbrü;3208;0;Gurbrü;665;BE;7.218054807709888;46.9641008528358;de -Kerzers;3210;0;Gurbrü;665;BE;7.196626496349042;46.9623243499202;de -Kriechenwil;3179;0;Kriechenwil;666;BE;7.226784497673145;46.910780839976304;de -Laupen BE;3177;0;Laupen;667;BE;7.240793504282818;46.90293598974355;de -Frauenkappelen;3202;0;Mühleberg;668;BE;7.302246353769883;46.953573009736076;de -Mühleberg;3203;0;Mühleberg;668;BE;7.26194141112139;46.95380375061137;de -Rosshäusern;3204;0;Mühleberg;668;BE;7.275860775530531;46.933536432571316;de -Gümmenen;3205;0;Mühleberg;668;BE;7.257668797323451;46.94396671351746;de -Münchenwiler;1797;0;Münchenwiler;669;BE;7.126343629727982;46.91173691659865;de -Thörishaus;3174;0;Neuenegg;670;BE;7.339491813754632;46.89354755761837;de -Neuenegg;3176;0;Neuenegg;670;BE;7.2984935852881545;46.897113313705596;de -Laupen BE;3177;0;Neuenegg;670;BE;7.261398385627607;46.91349528007742;de -Rosshäusern;3204;0;Neuenegg;670;BE;7.266905284157227;46.91816574310224;de -Wileroltigen;3207;0;Wileroltigen;671;BE;7.2388535727975185;46.97080550195977;de -Belprahon;2744;0;Belprahon;681;BE;7.405885746377233;47.28635327975539;fr -Champoz;2735;3;Champoz;683;BE;7.2985575410581145;47.25555024666685;fr -Corcelles BE;2747;0;Corcelles (BE);687;BE;7.455017560635988;47.28545578382941;fr -Champoz;2735;3;Court;690;BE;7.324876336144596;47.25341286945743;fr -Court;2738;0;Court;690;BE;7.3322068051605225;47.23996324877057;fr -Crémines;2746;0;Crémines;691;BE;7.439085810903301;47.28421553962509;fr -Corcelles BE;2747;0;Crémines;691;BE;7.452902577938895;47.298572534603;fr -Gänsbrunnen;4716;1;Crémines;691;BE;7.465065704248254;47.26831547145059;de -Eschert;2743;0;Eschert;692;BE;7.398845728049994;47.2755927232791;fr -Grandval;2745;0;Grandval;694;BE;7.425224072953813;47.28344509415524;fr -Loveresse;2732;4;Loveresse;696;BE;7.236140948876453;47.24214780562038;fr -Pontenet;2733;0;Loveresse;696;BE;7.247776668390644;47.23782957920533;fr -Moutier;2740;0;Moutier;700;BE;7.37215732860315;47.28048944360926;fr -Perrefitte;2742;0;Perrefitte;701;BE;7.341900022317364;47.274740636125884;fr -Tavannes;2710;0;Reconvilier;703;BE;7.182319328998652;47.23692767001666;fr -Reconvilier;2732;0;Reconvilier;703;BE;7.2272971197426195;47.2352507323324;fr -Moutier;2740;0;Roches (BE);704;BE;7.344161079922159;47.295588639558346;fr -Roches BE;2762;0;Roches (BE);704;BE;7.3825311399396805;47.30205988125902;fr -Le Fuet;2712;0;Saicourt;706;BE;7.182495234047515;47.24317920908201;fr -Bellelay;2713;0;Saicourt;706;BE;7.16831029109815;47.26396592046159;fr -Tramelan;2720;0;Saicourt;706;BE;7.15353588796821;47.24042686653875;fr -Saicourt;2732;2;Saicourt;706;BE;7.207578816280032;47.24298255685019;fr -Saules BE;2732;3;Saules (BE);707;BE;7.21889171176332;47.2449247925739;fr -Schelten;2827;2;Schelten;708;BE;7.551276321413564;47.33199589609328;de -Seehof;2747;2;Seehof;709;BE;7.524964811014152;47.304673143876705;de -Sorvilier;2736;0;Sorvilier;711;BE;7.305662346018428;47.239416412375775;fr -Tavannes;2710;0;Tavannes;713;BE;7.197395426855509;47.22149972508877;fr -La Tanne;2720;2;Tavannes;713;BE;7.155464237788951;47.22057788318872;fr -Rebévelier;2717;2;Rebévelier;715;BE;7.1926049413443565;47.29115789448774;fr -Le Fuet;2712;0;Petit-Val;716;BE;7.191474772340567;47.25755179574217;fr -Châtelat;2715;1;Petit-Val;716;BE;7.194422345217093;47.272060095296176;fr -Monible;2715;2;Petit-Val;716;BE;7.200256844649066;47.27633442944272;fr -Sornetan;2716;0;Petit-Val;716;BE;7.213956021489402;47.274057346631146;fr -Fornet-Dessous;2717;0;Petit-Val;716;BE;7.173107778002105;47.28026772914625;fr -Souboz;2748;0;Petit-Val;716;BE;7.243225452394408;47.27413142062203;fr -Les Ecorcheresses;2748;2;Petit-Val;716;BE;7.27963928804408;47.27679759999367;fr -Pontenet;2733;0;Valbirse;717;BE;7.25443204981649;47.238923799792026;fr -Bévilard;2735;2;Valbirse;717;BE;7.282412268310263;47.23797620072621;fr -Malleray;2735;4;Valbirse;717;BE;7.27489507576164;47.238281771797595;fr -Ligerz;2514;0;La Neuveville;723;BE;7.130720687744168;47.08332330525122;de -La Neuveville;2520;0;La Neuveville;723;BE;7.097054740549072;47.06445424867817;fr -Lignières;2523;0;La Neuveville;723;BE;7.089000061975158;47.08004931134741;fr -Nods;2518;0;Nods;724;BE;7.080301113431255;47.11230785015018;fr -Lignières;2523;0;Nods;724;BE;7.084836730951511;47.09281932952296;fr -Les Prés-d'Orvin;2534;2;Nods;724;BE;7.133822585468896;47.15013548723649;fr -Prêles;2515;0;Plateau de Diesse;726;BE;7.129879178111397;47.09932293207564;fr -Lamboing;2516;0;Plateau de Diesse;726;BE;7.136356442884726;47.11735685855093;fr -Diesse;2517;0;Plateau de Diesse;726;BE;7.117423889833986;47.11226080078306;fr -Aegerten;2558;0;Aegerten;731;BE;7.2854941707895575;47.119647298973625;de -Port;2562;0;Bellmund;732;BE;7.247167525881075;47.1122739878068;de -Ipsach;2563;0;Bellmund;732;BE;7.2395056154831385;47.110210327253334;de -Bellmund;2564;0;Bellmund;732;BE;7.245389819388054;47.106990755449345;de -Biel/Bienne;2503;0;Brügg;733;BE;7.257402629499118;47.122761435769355;de -Biel/Bienne;2504;0;Brügg;733;BE;7.286502746086972;47.13965010390646;de -Orpund;2552;0;Brügg;733;BE;7.289819513548054;47.136414837206615;de -Brügg BE;2555;0;Brügg;733;BE;7.278120935344228;47.123540139879466;de -Bühl b. Aarberg;3274;2;Bühl;734;BE;7.244544036126464;47.07070240181292;de -Epsach;3272;2;Epsach;735;BE;7.219501677008539;47.06960609437653;de -Täuffelen;2575;0;Hagneck;736;BE;7.1925351563951585;47.0607508734252;de -Hagneck;2575;2;Hagneck;736;BE;7.187962326665396;47.05813326120018;de -Hermrigen;3274;0;Hermrigen;737;BE;7.243961208098476;47.08144667892807;de -Jens;2565;0;Jens;738;BE;7.263767299128725;47.09790556418634;de -Ipsach;2563;0;Ipsach;739;BE;7.235222382419012;47.117259980742595;de -Twann;2513;0;Ligerz;740;BE;7.151219070366642;47.091994872984536;de -Ligerz;2514;0;Ligerz;740;BE;7.13539234692458;47.085850216827765;de -Merzligen;3274;3;Merzligen;741;BE;7.251628525907363;47.08728105774904;de -Mörigen;2572;2;Mörigen;742;BE;7.211954219025885;47.08432178064324;de -Biel/Bienne;2503;0;Nidau;743;BE;7.246801563303573;47.12916077672658;de -Nidau;2560;0;Nidau;743;BE;7.24055625717782;47.12504013431118;de -Biel/Bienne;2504;0;Orpund;744;BE;7.287395357687412;47.14579193972629;de -Orpund;2552;0;Orpund;744;BE;7.312835709244282;47.13724075284577;de -Nidau;2560;0;Port;745;BE;7.251683648177386;47.1216726288524;de -Port;2562;0;Port;745;BE;7.255418578892297;47.11722310795502;de -Safnern;2553;0;Safnern;746;BE;7.321886508841783;47.15144674370312;de -Scheuren;2556;0;Scheuren;747;BE;7.31588049752416;47.133954422590286;de -Schwadernau;2556;2;Schwadernau;748;BE;7.306158534624176;47.12953044259707;de -Studen BE;2557;0;Studen (BE);749;BE;7.300711250590156;47.111817297847466;de -Sutz;2572;0;Sutz-Lattrigen;750;BE;7.216905082994309;47.10399365189827;de -Täuffelen;2575;0;Täuffelen;751;BE;7.1986834405362;47.065086318511256;de -Gerolfingen;2575;1;Täuffelen;751;BE;7.201264806563552;47.075008963867546;de -Hagneck;2575;2;Täuffelen;751;BE;7.193170867620074;47.05734218217367;de -Walperswil;3272;0;Walperswil;754;BE;7.230081248891555;47.05917004714972;de -Worben;3252;0;Worben;755;BE;7.29227482672257;47.10013223810568;de -Biel/Bienne;2505;0;Twann-Tüscherz;756;BE;7.205175516765312;47.12742284746711;de -Tüscherz-Alfermée;2512;0;Twann-Tüscherz;756;BE;7.195776528669751;47.115600400379904;de -Twann;2513;0;Twann-Tüscherz;756;BE;7.159885286511861;47.095331391175435;de -Lamboing;2516;0;Twann-Tüscherz;756;BE;7.163639212413252;47.11784034834225;fr -Erlach;3235;0;Twann-Tüscherz;756;BE;7.134024054351635;47.062809189381284;de -Därstetten;3763;0;Därstetten;761;BE;7.495710542081859;46.65879117178778;de -Weissenburg;3764;0;Därstetten;761;BE;7.4756001336723035;46.658499686642976;de -Oey;3753;0;Diemtigen;762;BE;7.579411370946591;46.659918109424396;de -Diemtigen;3754;0;Diemtigen;762;BE;7.566115711304058;46.64938584283213;de -Horboden;3755;0;Diemtigen;762;BE;7.564187093252929;46.630392724635406;de -Zwischenflüh;3756;0;Diemtigen;762;BE;7.515596063393855;46.60744551336719;de -Schwenden im Diemtigtal;3757;0;Diemtigen;762;BE;7.4870959728714155;46.57511706263711;de -Diemtigen;3754;0;Erlenbach im Simmental;763;BE;7.565411882181793;46.65830670698967;de -Latterbach;3758;0;Erlenbach im Simmental;763;BE;7.578066907766267;46.66407638762859;de -Erlenbach im Simmental;3762;0;Erlenbach im Simmental;763;BE;7.55208540301887;46.66096676059531;de -Weissenburg;3764;0;Oberwil im Simmental;766;BE;7.469379859880428;46.655058596972545;de -Oberwil im Simmental;3765;0;Oberwil im Simmental;766;BE;7.432576710845918;46.65735786274057;de -Boltigen;3766;0;Oberwil im Simmental;766;BE;7.420858711917895;46.636611401377195;de -Reutigen;3647;0;Reutigen;767;BE;7.619495082836563;46.6931818500118;de -Gwatt (Thun);3645;0;Spiez;768;BE;7.631160489635498;46.71689421941398;de -Einigen;3646;0;Spiez;768;BE;7.64601805342903;46.70943275546603;de -Spiez;3700;0;Spiez;768;BE;7.6771697089353585;46.69072690372952;de -Hondrich;3702;0;Spiez;768;BE;7.680415409539426;46.67237796833778;de -Krattigen;3704;0;Spiez;768;BE;7.714230438119036;46.661368384400376;de -Faulensee;3705;0;Spiez;768;BE;7.702631079861316;46.67614206945218;de -Emdthal;3711;0;Wimmis;769;BE;7.679862939258282;46.651740822957834;de -Wimmis;3752;0;Wimmis;769;BE;7.635291179645352;46.67297348306544;de -Höfen b. Thun;3631;0;Stocken-Höfen;770;BE;7.563742976663338;46.723184678900566;de -Niederstocken;3632;2;Stocken-Höfen;770;BE;7.57309034502133;46.71054953722246;de -Oberstocken;3632;3;Stocken-Höfen;770;BE;7.5544033923402;46.715788612224756;de -Guttannen;3864;0;Guttannen;782;BE;8.28973712978342;46.65500418330469;de -Hasliberg Hohfluh;6083;0;Hasliberg;783;BE;8.17395629548176;46.751597442571914;de -Hasliberg Wasserwendi;6084;0;Hasliberg;783;BE;8.197250748331482;46.74665263773396;de -Hasliberg Goldern;6085;0;Hasliberg;783;BE;8.19858968743095;46.739625297353705;de -Hasliberg Reuti;6086;0;Hasliberg;783;BE;8.209168880437149;46.73275630591557;de -Innertkirchen;3862;0;Innertkirchen;784;BE;8.230780441274858;46.70637152349941;de -Gadmen;3863;0;Innertkirchen;784;BE;8.352955401450401;46.7383332578149;de -Brienzwiler;3856;0;Meiringen;785;BE;8.102403337645077;46.7470861602305;de -Unterbach BE;3857;0;Meiringen;785;BE;8.11214759228421;46.73918522264444;de -Meiringen;3860;0;Meiringen;785;BE;8.189185833634088;46.72944912777304;de -Brünig;3860;4;Meiringen;785;BE;8.13819550392973;46.75757235716501;de -Rosenlaui;3860;2;Schattenhalb;786;BE;8.153901135243585;46.67958082016252;de -Schattenhalb;3860;3;Schattenhalb;786;BE;8.190340358852279;46.70700634028728;de -Abländschen;1657;0;Boltigen;791;BE;7.288496404712496;46.56253167377991;de -Boltigen;3766;0;Boltigen;791;BE;7.394266937755761;46.63039839755104;de -Zweisimmen;3770;0;Boltigen;791;BE;7.387055719256669;46.59456615760289;de -Matten (St. Stephan);3773;0;Lenk;792;BE;7.421266856381804;46.48404668793366;de -Lenk im Simmental;3775;0;Lenk;792;BE;7.4408957465026875;46.456462799987435;de -St. Stephan;3772;0;St. Stephan;793;BE;7.400318092955496;46.50551980569306;de -Matten (St. Stephan);3773;0;St. Stephan;793;BE;7.421574532870478;46.49375262661221;de -Zweisimmen;3770;0;Zweisimmen;794;BE;7.371831811184776;46.55201672897794;de -Blankenburg;3771;0;Zweisimmen;794;BE;7.389479681159374;46.541516307652046;de -Oeschseite;3776;0;Zweisimmen;794;BE;7.351517429532115;46.53096235356296;de -Saanenmöser;3777;0;Zweisimmen;794;BE;7.333314541968631;46.5075543294635;de -Feutersoey;3784;0;Gsteig;841;BE;7.270797093911569;46.41789250793217;de -Gsteig b. Gstaad;3785;0;Gsteig;841;BE;7.267212527327074;46.384655783284686;de -Lauenen b. Gstaad;3782;0;Lauenen;842;BE;7.321070322690279;46.42477983046758;de -Abländschen;1657;0;Saanen;843;BE;7.29280822987617;46.577034648401906;de -Saanenmöser;3777;0;Saanen;843;BE;7.311731451556002;46.517473854436375;de -Schönried;3778;0;Saanen;843;BE;7.291013145163885;46.5041622963315;de -Gstaad;3780;0;Saanen;843;BE;7.286286858352668;46.47496339409069;de -Turbach;3781;0;Saanen;843;BE;7.3356575191014795;46.478962898221816;de -Grund b. Gstaad;3783;0;Saanen;843;BE;7.274335181476447;46.44554256780215;de -Saanen;3792;0;Saanen;843;BE;7.258479405362266;46.490336146344745;de -Sangernboden;1738;0;Guggisberg;852;BE;7.3533759150098215;46.713082166095184;de -Schwarzenburg;3150;0;Guggisberg;852;BE;7.3453539963102825;46.79592963894447;de -Riffenmatt;3156;0;Guggisberg;852;BE;7.352927231547025;46.76560172600021;de -Milken;3157;0;Guggisberg;852;BE;7.349314659846687;46.785249311142636;de -Guggisberg;3158;0;Guggisberg;852;BE;7.329234065713339;46.76661953277998;de -Riedstätt;3159;0;Guggisberg;852;BE;7.3198153824304;46.78380400006939;de -Sangernboden;1738;0;Rüschegg;853;BE;7.409542297504989;46.710464808711535;de -Rüti b. Riggisberg;3099;0;Rüschegg;853;BE;7.440173196962035;46.73096397376868;de -Mamishaus;3152;0;Rüschegg;853;BE;7.398795319291259;46.80617688695497;de -Rüschegg Gambach;3153;0;Rüschegg;853;BE;7.3740407117850735;46.776218638711356;de -Rüschegg Heubach;3154;0;Rüschegg;853;BE;7.407255321147968;46.78203361072426;de -Riffenmatt;3156;0;Rüschegg;853;BE;7.388926249273531;46.74492277390016;de -Milken;3157;0;Rüschegg;853;BE;7.364132909632304;46.784177152379144;de -Lanzenhäusern;3148;0;Schwarzenburg;855;BE;7.347214349772513;46.84188670438746;de -Schwarzenburg;3150;0;Schwarzenburg;855;BE;7.341858607447384;46.8169815477656;de -Mamishaus;3152;0;Schwarzenburg;855;BE;7.378596913756841;46.80976896276145;de -Rüschegg Heubach;3154;0;Schwarzenburg;855;BE;7.399164548192674;46.8013267259617;de -Milken;3157;0;Schwarzenburg;855;BE;7.358698120458983;46.792571006902456;de -Albligen;3183;0;Schwarzenburg;855;BE;7.319128163106373;46.85175301948025;de -Zimmerwald;3086;0;Belp;861;BE;7.4857351866330255;46.88514678830754;de -Gerzensee;3115;0;Belp;861;BE;7.541042283786407;46.865193236577106;de -Kehrsatz;3122;0;Belp;861;BE;7.480972154200536;46.897593987368175;de -Belp;3123;0;Belp;861;BE;7.500502388411209;46.89090972549944;de -Belpberg;3124;0;Belp;861;BE;7.52129780288839;46.86731252122218;de -Toffen;3125;0;Belp;861;BE;7.504154314628055;46.863012170427204;de -Burgistein;3664;0;Burgistein;863;BE;7.505175769493035;46.79627544575291;de -Wattenwil;3665;0;Burgistein;863;BE;7.495620912093532;46.779454435479515;de -Gerzensee;3115;0;Gerzensee;866;BE;7.547413796871272;46.83830708939187;de -Gurzelen;3663;0;Gurzelen;867;BE;7.5333013545454826;46.77972178413199;de -Burgistein;3664;0;Gurzelen;867;BE;7.518040789652543;46.78349139322039;de -Jaberg;3629;3;Jaberg;868;BE;7.568439634196021;46.81805511353207;de -Kaufdorf;3126;0;Kaufdorf;869;BE;7.498690246252994;46.83803285916868;de -Kehrsatz;3122;0;Kehrsatz;870;BE;7.473546514439985;46.912634532900434;de -Belp;3123;0;Kehrsatz;870;BE;7.48135781965305;46.90307507500613;de -Gerzensee;3115;0;Kirchdorf (BE);872;BE;7.528919390104896;46.83422063888884;de -Kirchdorf BE;3116;0;Kirchdorf (BE);872;BE;7.550597945800512;46.82049005878597;de -Mühledorf BE;3116;2;Kirchdorf (BE);872;BE;7.529944415810914;46.82798053715882;de -Noflen BE;3116;3;Kirchdorf (BE);872;BE;7.542178655996301;46.80755263300464;de -Toffen;3125;0;Kirchdorf (BE);872;BE;7.506034694671776;46.8556242984353;de -Gelterfingen;3126;2;Kirchdorf (BE);872;BE;7.515639230243542;46.844489838588544;de -Kiesen;3629;0;Kirchdorf (BE);872;BE;7.563948478302734;46.810743536883535;de -Zimmerwald;3086;0;Niedermuhlern;877;BE;7.468642115220756;46.86993882862417;de -Niedermuhlern;3087;0;Niedermuhlern;877;BE;7.4653305355476;46.86137920879441;de -Rüti b. Riggisberg;3099;0;Riggisberg;879;BE;7.4475214310092985;46.78280205325471;de -Rümligen;3128;2;Riggisberg;879;BE;7.49569327238644;46.83102063280934;de -Riggisberg;3132;0;Riggisberg;879;BE;7.47667867704334;46.811621346220626;de -Burgistein;3664;0;Riggisberg;879;BE;7.491217428601277;46.78269393646472;de -Niedermuhlern;3087;0;Rüeggisberg;880;BE;7.435206623037086;46.850450476421436;de -Rüeggisberg;3088;0;Rüeggisberg;880;BE;7.43870060145399;46.82125528972767;de -Oberbütschel;3088;2;Rüeggisberg;880;BE;7.463152927010457;46.837665934662574;de -Hinterfultigen;3089;0;Rüeggisberg;880;BE;7.401155906088703;46.83911316641459;de -Rüti b. Riggisberg;3099;0;Rüeggisberg;880;BE;7.453417686903247;46.71911960789564;de -Riggisberg;3132;0;Rüeggisberg;880;BE;7.470298929921163;46.828392682246445;de -Rüschegg Heubach;3154;0;Rüeggisberg;880;BE;7.420626385003301;46.7927557486089;de -Helgisried-Rohrbach;3155;0;Rüeggisberg;880;BE;7.423715846595291;46.81194630691353;de -Seftigen;3662;0;Seftigen;883;BE;7.540671423708006;46.78683109298828;de -Belp;3123;0;Toffen;884;BE;7.493936564421257;46.8761286325515;de -Toffen;3125;0;Toffen;884;BE;7.492819757300539;46.85851826197869;de -Kaufdorf;3126;0;Toffen;884;BE;7.497567470792662;46.8462347685957;de -Uttigen;3628;0;Uttigen;885;BE;7.582727284274817;46.794606468932045;de -Burgistein;3664;0;Wattenwil;886;BE;7.516871248785996;46.783810129077914;de -Wattenwil;3665;0;Wattenwil;886;BE;7.504873153234969;46.77053120682832;de -Zimmerwald;3086;0;Wald (BE);888;BE;7.470174524818954;46.87649098732257;de -Englisberg;3086;2;Wald (BE);888;BE;7.4683970450522725;46.89789795356609;de -Niedermuhlern;3087;0;Wald (BE);888;BE;7.44223433502342;46.86527889028548;de -Oberbalm;3096;0;Wald (BE);888;BE;7.437116235360147;46.87200992896327;de -Mühlethurnen;3127;0;Thurnen;889;BE;7.507613112636157;46.81405487218582;de -Lohnstorf;3127;2;Thurnen;889;BE;7.510822651530153;46.80676666570011;de -Kirchenthurnen;3128;0;Thurnen;889;BE;7.506315577734293;46.82500159441789;de -Aeschau;3536;0;Eggiwil;901;BE;7.766453854044007;46.908883141396586;de -Eggiwil;3537;0;Eggiwil;901;BE;7.795775950459093;46.874426330822516;de -Langnau im Emmental;3550;0;Eggiwil;901;BE;7.794157476065728;46.91118223225804;de -Süderen;3618;0;Eggiwil;901;BE;7.811201718673547;46.815441939979955;de -Schangnau;6197;0;Eggiwil;901;BE;7.83905745716766;46.83085914664643;de -Schüpbach;3535;0;Langnau im Emmental;902;BE;7.7572667997439;46.93424447388132;de -Emmenmatt;3543;0;Langnau im Emmental;902;BE;7.753314790589021;46.94840474960708;de -Langnau im Emmental;3550;0;Langnau im Emmental;902;BE;7.785107753847711;46.94186216351227;de -Oberfrittenbach;3551;0;Langnau im Emmental;902;BE;7.8000319110587935;46.97767876075739;de -Bärau;3552;0;Langnau im Emmental;902;BE;7.8110599284731626;46.93299267614589;de -Gohl;3553;0;Langnau im Emmental;902;BE;7.808335943475956;46.95596305616606;de -Trubschachen;3555;0;Langnau im Emmental;902;BE;7.824317836875019;46.923619076983705;de -Landiswil;3434;1;Lauperswil;903;BE;7.703151379522391;46.952645489716;de -Zollbrück;3436;0;Lauperswil;903;BE;7.760657770477135;46.972699049617866;de -Lauperswil;3438;0;Lauperswil;903;BE;7.73789382824007;46.96653915221448;de -Emmenmatt;3543;0;Lauperswil;903;BE;7.7476165574258875;46.94803202869673;de -Langnau im Emmental;3550;0;Lauperswil;903;BE;7.762396070437749;46.95442878112314;de -Oberfrittenbach;3551;0;Lauperswil;903;BE;7.793462713604832;46.98097761571724;de -Bowil;3533;0;Röthenbach im Emmental;904;BE;7.719792053128372;46.883546212938626;de -Eggiwil;3537;0;Röthenbach im Emmental;904;BE;7.793654273793137;46.82600030953451;de -Röthenbach im Emmental;3538;0;Röthenbach im Emmental;904;BE;7.74144902578741;46.854325898796056;de -Heimenschwand;3615;0;Röthenbach im Emmental;904;BE;7.714709008845082;46.84048136131957;de -Süderen;3618;0;Röthenbach im Emmental;904;BE;7.783063255999857;46.8208925946273;de -Lützelflüh-Goldbach;3432;0;Rüderswil;905;BE;7.686768126570188;46.99145472003522;de -Schwanden im Emmental;3433;0;Rüderswil;905;BE;7.694470757804733;46.98559679301996;de -Zollbrück;3436;0;Rüderswil;905;BE;7.741319474978465;46.97581055037813;de -Rüderswil;3437;0;Rüderswil;905;BE;7.719590363055355;46.982765742928024;de -Lauperswil;3438;0;Rüderswil;905;BE;7.7162934933119764;46.960507803824925;de -Ranflüh;3439;0;Rüderswil;905;BE;7.73623409129287;46.98555160514144;de -Heimisbach;3453;0;Rüderswil;905;BE;7.776131497850853;46.9911605562075;de -Schangnau;6197;0;Schangnau;906;BE;7.863773546917171;46.82823361985927;de -Signau;3534;0;Signau;907;BE;7.724510044243205;46.92057165006197;de -Schüpbach;3535;0;Signau;907;BE;7.734789806007488;46.9286160548714;de -Emmenmatt;3543;0;Signau;907;BE;7.751263014208465;46.94928266877518;de -Eggiwil;3537;0;Trub;908;BE;7.863979574967;46.887653941421945;de -Bärau;3552;0;Trub;908;BE;7.8414256096007655;46.949957523244265;de -Trubschachen;3555;0;Trub;908;BE;7.885718824201844;46.93335223379776;de -Trub;3556;0;Trub;908;BE;7.8774235899654395;46.94314060455192;de -Fankhaus (Trub);3557;0;Trub;908;BE;7.908634481503582;46.967261272061435;de -Eggiwil;3537;0;Trubschachen;909;BE;7.830400146275873;46.88616474338072;de -Trubschachen;3555;0;Trubschachen;909;BE;7.845703574511871;46.9229091781267;de -Trub;3556;0;Trubschachen;909;BE;7.852392115242776;46.93269925325341;de -Amsoldingen;3633;0;Amsoldingen;921;BE;7.579183783690713;46.727147358264965;de -Blumenstein;3638;0;Blumenstein;922;BE;7.52038436514855;46.7411494029496;de -Unterlangenegg;3614;0;Buchholterberg;923;BE;7.684624900749824;46.80548424842911;de -Heimenschwand;3615;0;Buchholterberg;923;BE;7.697295418925797;46.82846100309827;de -Süderen;3618;0;Buchholterberg;923;BE;7.718133038332178;46.8184136438574;de -Bleiken b. Oberdiessbach;3674;0;Buchholterberg;923;BE;7.655699237800566;46.82280378827963;de -Schwarzenegg;3616;0;Eriz;924;BE;7.730010424402837;46.7827590839267;de -Eriz;3619;0;Eriz;924;BE;7.777500137070619;46.78826364158483;de -Schangnau;6197;0;Eriz;924;BE;7.838258768791269;46.799710397118986;de -Steffisburg;3612;0;Fahrni;925;BE;7.652803986584583;46.78393477205073;de -Fahrni b. Thun;3617;0;Fahrni;925;BE;7.669704804046989;46.79715995784706;de -Heiligenschwendi;3625;0;Heiligenschwendi;927;BE;7.689548835417125;46.74989587884127;de -Steffisburg;3613;0;Heimberg;928;BE;7.6116820138992916;46.774724916840015;de -Heimberg;3627;0;Heimberg;928;BE;7.6015527578903574;46.789615046180174;de -Brenzikofen;3671;0;Heimberg;928;BE;7.612011656660127;46.808828123275845;de -Thun;3600;0;Hilterfingen;929;BE;7.638942155305567;46.747797660570825;de -Heiligenschwendi;3625;0;Hilterfingen;929;BE;7.656149512813545;46.75044576815211;de -Hünibach;3626;0;Hilterfingen;929;BE;7.651250010405704;46.745241025991504;de -Hilterfingen;3652;0;Hilterfingen;929;BE;7.659118304820292;46.73634821815712;de -Homberg b. Thun;3622;0;Homberg;931;BE;7.683809773149117;46.7768968947765;de -Eriz;3619;0;Horrenbach-Buchen;932;BE;7.80113271056305;46.76884841232787;de -Horrenbach;3623;2;Horrenbach-Buchen;932;BE;7.752449493146565;46.77787754081303;de -Buchen BE;3623;3;Horrenbach-Buchen;932;BE;7.700148277852866;46.78037340279652;de -Hilterfingen;3652;0;Oberhofen am Thunersee;934;BE;7.661742592580314;46.73387980563638;de -Oberhofen am Thunersee;3653;0;Oberhofen am Thunersee;934;BE;7.668508290192274;46.73119687478233;de -Gunten;3654;0;Oberhofen am Thunersee;934;BE;7.6888091786225825;46.7176418250152;de -Schwarzenegg;3616;0;Oberlangenegg;935;BE;7.743595190444154;46.79912855462237;de -Süderen;3618;0;Oberlangenegg;935;BE;7.756385940823289;46.81134391120479;de -Pohlern;3638;1;Pohlern;936;BE;7.535254702213442;46.72515071335632;de -Eriz;3619;0;Sigriswil;938;BE;7.782730783969792;46.76124760310065;de -Teuffenthal b. Thun;3623;0;Sigriswil;938;BE;7.7481965777922035;46.77034055421958;de -Gunten;3654;0;Sigriswil;938;BE;7.701540588101549;46.71283105970267;de -Sigriswil;3655;0;Sigriswil;938;BE;7.711252120191758;46.71693613789569;de -Tschingel ob Gunten;3656;0;Sigriswil;938;BE;7.70863472347316;46.72388602006089;de -Aeschlen ob Gunten;3656;1;Sigriswil;938;BE;7.698898760469301;46.71981507486961;de -Ringoldswil;3656;2;Sigriswil;938;BE;7.694541343500279;46.73340609073297;de -Schwanden (Sigriswil);3657;0;Sigriswil;938;BE;7.716303703564201;46.735644269968546;de -Merligen;3658;0;Sigriswil;938;BE;7.737603394009352;46.69893125195276;de -Steffisburg;3612;0;Steffisburg;939;BE;7.638250765273578;46.78268271807966;de -Steffisburg;3613;0;Steffisburg;939;BE;7.614530432913175;46.771039566980285;de -Fahrni b. Thun;3617;0;Steffisburg;939;BE;7.65781484690462;46.7894741610047;de -Schwendibach;3624;2;Steffisburg;939;BE;7.661917560879021;46.76992927409472;de -Heimberg;3627;0;Steffisburg;939;BE;7.608891359638692;46.78815465266594;de -Teuffenthal b. Thun;3623;0;Teuffenthal (BE);940;BE;7.710830701679088;46.76718576025637;de -Amsoldingen;3633;0;Thierachern;941;BE;7.580594961924704;46.73554109603824;de -Thierachern;3634;0;Thierachern;941;BE;7.573573472736505;46.75410585082208;de -Uebeschi;3635;0;Thierachern;941;BE;7.545248503246304;46.750416304016646;de -Längenbühl;3636;0;Thierachern;941;BE;7.548923417372319;46.75611545291221;de -Thun;3600;0;Thun;942;BE;7.623636969722557;46.75541428405191;de -Thun;3603;0;Thun;942;BE;7.600145158663502;46.76204220664741;de -Thun;3604;0;Thun;942;BE;7.62078693959625;46.74050917459341;de -Thun;3608;0;Thun;942;BE;7.598845359148188;46.73993775582931;de -Steffisburg;3612;0;Thun;942;BE;7.640400557247101;46.76573874244816;de -Goldiwil (Thun);3624;0;Thun;942;BE;7.666707353304586;46.763627134249006;de -Hünibach;3626;0;Thun;942;BE;7.6466643991833285;46.75223841506192;de -Gwatt (Thun);3645;0;Thun;942;BE;7.623122556980317;46.72850511833907;de -Höfen b. Thun;3631;0;Uebeschi;943;BE;7.544556765396123;46.72962611987953;de -Uebeschi;3635;0;Uebeschi;943;BE;7.5549146776499185;46.738166988284675;de -Uetendorf;3661;0;Uetendorf;944;BE;7.573894651224135;46.774755816441115;de -Unterlangenegg;3614;0;Unterlangenegg;945;BE;7.68477071891869;46.79786557243752;de -Schwarzenegg;3616;0;Unterlangenegg;945;BE;7.714808335614469;46.79585624603224;de -Süderen;3618;0;Wachseldorn;946;BE;7.7563896521537306;46.81804329327336;de -Zwieselberg;3645;2;Zwieselberg;947;BE;7.617301000262844;46.70848160706161;de -Längenbühl;3636;0;Forst-Längenbühl;948;BE;7.528942462415077;46.756007281503656;de -Forst b. Längenbühl;3636;2;Forst-Längenbühl;948;BE;7.522372838559948;46.76339362585183;de -Gurzelen;3663;0;Forst-Längenbühl;948;BE;7.521454774190185;46.77367182674167;de -Wattenwil;3665;0;Forst-Längenbühl;948;BE;7.520957300013336;46.77167670797813;de -Kaltacker;3413;0;Affoltern im Emmental;951;BE;7.699125626784644;47.07664621952388;de -Affoltern im Emmental;3416;0;Affoltern im Emmental;951;BE;7.734751217233985;47.06450812358541;de -Rüegsbach;3418;0;Affoltern im Emmental;951;BE;7.716814908033223;47.055411542470026;de -Weier im Emmental;3462;0;Affoltern im Emmental;951;BE;7.753373493234869;47.06256895513344;de -Häusernmoos im Emmental;3463;0;Affoltern im Emmental;951;BE;7.749060566808205;47.079433583527646;de -Schmidigen-Mühleweg;3464;0;Affoltern im Emmental;951;BE;7.745508387948559;47.086483186949636;de -Häusernmoos im Emmental;3463;0;Dürrenroth;952;BE;7.757591566340037;47.0812889174255;de -Schmidigen-Mühleweg;3464;0;Dürrenroth;952;BE;7.748370121887799;47.089765447148594;de -Dürrenroth;3465;0;Dürrenroth;952;BE;7.791371075873477;47.09049319949659;de -Walterswil BE;4942;0;Dürrenroth;952;BE;7.774489738908107;47.09088666090661;de -Huttwil;4950;0;Eriswil;953;BE;7.852755567580003;47.09091551033445;de -Eriswil;4952;0;Eriswil;953;BE;7.85072608189866;47.078117326387485;de -Rohrbachgraben;4938;2;Huttwil;954;BE;7.810811794452372;47.10102945746864;de -Huttwil;4950;0;Huttwil;954;BE;7.849953943966639;47.11372038094467;de -Eriswil;4952;0;Huttwil;954;BE;7.870506630917272;47.089467730079086;de -Schwarzenbach (Huttwil);4953;0;Huttwil;954;BE;7.832424015096589;47.106369306447576;de -Oberburg;3414;0;Lützelflüh;955;BE;7.594865134290495;47.00017754681815;de -Rüegsauschachen;3415;3;Lützelflüh;955;BE;7.666468670755014;47.01413257671893;de -Rüegsbach;3418;0;Lützelflüh;955;BE;7.707769577329787;47.034814511170524;de -Biembach im Emmental;3419;0;Lützelflüh;955;BE;7.5990182288153685;46.993524695269365;de -Lützelflüh-Goldbach;3432;0;Lützelflüh;955;BE;7.682327667894533;47.005112768312195;de -Schwanden im Emmental;3433;0;Lützelflüh;955;BE;7.680222734587675;46.97575966701601;de -Obergoldbach;3434;0;Lützelflüh;955;BE;7.6660362649288425;46.96644164698315;de -Ramsei;3435;0;Lützelflüh;955;BE;7.708427516385098;46.99845045636337;de -Ranflüh;3439;0;Lützelflüh;955;BE;7.737947242253612;46.988559527045005;de -Grünenmatt;3452;0;Lützelflüh;955;BE;7.723995619801704;47.008842809188955;de -Heimisbach;3453;0;Lützelflüh;955;BE;7.745913072449142;47.004413404540706;de -Sumiswald;3454;0;Lützelflüh;955;BE;7.718921994985817;47.04306185993914;de -Trachselwald;3456;0;Lützelflüh;955;BE;7.737050261550027;47.0148096977576;de -Rüegsauschachen;3415;3;Rüegsau;956;BE;7.660688112484303;47.01821194724288;de -Affoltern im Emmental;3416;0;Rüegsau;956;BE;7.71055192348222;47.0659526224459;de -Rüegsau;3417;0;Rüegsau;956;BE;7.674543290911989;47.02477540829484;de -Rüegsbach;3418;0;Rüegsau;956;BE;7.691750512019501;47.033929485357326;de -Sumiswald;3454;0;Rüegsau;956;BE;7.724420790014062;47.04154087752251;de -Affoltern im Emmental;3416;0;Sumiswald;957;BE;7.728862383394629;47.050444871368384;de -Sumiswald;3454;0;Sumiswald;957;BE;7.744992014523709;47.02777136699576;de -Grünen;3455;0;Sumiswald;957;BE;7.741121547090813;47.02493666395518;de -Wasen im Emmental;3457;0;Sumiswald;957;BE;7.797132554587479;47.04307573648073;de -Weier im Emmental;3462;0;Sumiswald;957;BE;7.773055102367754;47.05716610242929;de -Eriswil;4952;0;Sumiswald;957;BE;7.8681093058202185;47.04523052954194;de -Wyssachen;4954;0;Sumiswald;957;BE;7.800082206902281;47.05906327556358;de -Heimisbach;3453;0;Trachselwald;958;BE;7.76098550187369;47.012005419611974;de -Trachselwald;3456;0;Trachselwald;958;BE;7.737771722187725;47.0165878247912;de -Oberfrittenbach;3551;0;Trachselwald;958;BE;7.806308541182535;46.99841309624376;de -Häusernmoos im Emmental;3463;0;Walterswil (BE);959;BE;7.762306867894299;47.09353458769506;de -Schmidigen-Mühleweg;3464;0;Walterswil (BE);959;BE;7.743642530139465;47.09473672207892;de -Rohrbachgraben;4938;2;Walterswil (BE);959;BE;7.790934352510238;47.11234400773883;de -Walterswil BE;4942;0;Walterswil (BE);959;BE;7.776437558302435;47.11283883785357;de -Oeschenbach;4943;0;Walterswil (BE);959;BE;7.748458648005363;47.09916746907811;de -Wasen im Emmental;3457;0;Wyssachen;960;BE;7.817903355034628;47.05622177750738;de -Schwarzenbach (Huttwil);4953;0;Wyssachen;960;BE;7.814727144671198;47.09160914903695;de -Wyssachen;4954;0;Wyssachen;960;BE;7.828396369848448;47.078770704147175;de -Attiswil;4536;0;Attiswil;971;BE;7.614019170608872;47.246526951772786;de -Berken;3376;2;Berken;972;BE;7.705945691391089;47.22577489017535;de -Bettenhausen;3366;0;Bettenhausen;973;BE;7.718286781678835;47.17331809702935;de -Bollodingen;3366;2;Bettenhausen;973;BE;7.705620316310311;47.16618009967446;de -Farnern;4539;2;Farnern;975;BE;7.621951246068979;47.266485848244706;de -Graben;3376;0;Graben;976;BE;7.717802410199845;47.21527238828845;de -Wanzwil;3372;0;Heimenhausen;977;BE;7.691999405427046;47.19890459109637;de -Röthenbach Herzogenbuchsee;3373;0;Heimenhausen;977;BE;7.683439749662232;47.20663189120699;de -Heimenhausen;3373;2;Heimenhausen;977;BE;7.697933446623731;47.21360131687935;de -Herzogenbuchsee;3360;0;Herzogenbuchsee;979;BE;7.714362194025975;47.19453410036497;de -Oberönz;3363;0;Herzogenbuchsee;979;BE;7.694315146197812;47.17943485640302;de -Inkwil;3375;0;Inkwil;980;BE;7.673676168370711;47.20140889385853;de -Niederbipp;4704;0;Niederbipp;981;BE;7.701828054904519;47.268390794142505;de -Wolfisberg;4704;2;Niederbipp;981;BE;7.661317120354611;47.27264850818092;de -Niederönz;3362;0;Niederönz;982;BE;7.691470435308258;47.18435637534735;de -Burgäschi;4556;3;Niederönz;982;BE;7.675327157359822;47.17456709743556;de -Oberbipp;4538;0;Oberbipp;983;BE;7.659559643300076;47.26291321224908;de -Ochlenberg;3367;2;Ochlenberg;985;BE;7.736038004799576;47.14995127361391;de -Oschwand;3476;0;Ochlenberg;985;BE;7.713036211695824;47.14055057835774;de -Rumisberg;4539;0;Rumisberg;987;BE;7.641203765567874;47.264103825705625;de -Farnern;4539;2;Rumisberg;987;BE;7.623565219039079;47.273191753771314;de -Grasswil;3365;0;Seeberg;988;BE;7.666812110163827;47.145751125190614;de -Seeberg;3365;2;Seeberg;988;BE;7.664544112613465;47.15494020101881;de -Rüedisbach;3474;0;Seeberg;988;BE;7.697373012806141;47.1360871974065;de -Riedtwil;3475;0;Seeberg;988;BE;7.697140781117976;47.14240762569899;de -Hermiswil;3475;1;Seeberg;988;BE;7.700566903156392;47.155929291892114;de -Oschwand;3476;0;Seeberg;988;BE;7.715135220157195;47.128683992346176;de -Oeschenbach;4943;0;Seeberg;988;BE;7.728383115602629;47.113458275283584;de -Herzogenbuchsee;3360;0;Thörigen;989;BE;7.716332201091647;47.182888300234104;de -Thörigen;3367;0;Thörigen;989;BE;7.7297111726920225;47.17495667485223;de -Oschwand;3476;0;Thörigen;989;BE;7.722809835579021;47.1588923987879;de -Walliswil b. Niederbipp;3380;2;Walliswil bei Niederbipp;990;BE;7.6917830808013035;47.23736749093206;de -Walliswil b. Wangen;3377;0;Walliswil bei Wangen;991;BE;7.682899722420797;47.22885573059148;de -Wangen an der Aare;3380;0;Wangen an der Aare;992;BE;7.656026423123099;47.2359176240779;de -Attiswil;4536;0;Wangen an der Aare;992;BE;7.620642579574036;47.232938957329274;de -Wangenried;3374;0;Wangenried;993;BE;7.655651501195018;47.21712844835686;de -Wangen an der Aare;3380;0;Wiedlisbach;995;BE;7.659240212954305;47.239114239888806;de -Wiedlisbach;4537;0;Wiedlisbach;995;BE;7.647290603486621;47.252621920486796;de -Rumisberg;4539;0;Wiedlisbach;995;BE;7.633472103479639;47.25684567700896;de -Wolhusen;6110;0;Doppleschwand;1001;LU;8.058444204633165;47.028744780096346;de -Doppleschwand;6112;0;Doppleschwand;1001;LU;8.055450010086613;47.018924170998105;de -Schachen LU;6105;0;Entlebuch;1002;LU;8.119344487431281;47.00716075219895;de -Wolhusen;6110;0;Entlebuch;1002;LU;8.067942026486284;47.03108440905073;de -Entlebuch;6162;0;Entlebuch;1002;LU;8.06472889235839;46.99222240010738;de -Rengg;6162;2;Entlebuch;1002;LU;8.0913058628689;47.00346515621899;de -Finsterwald b. Entlebuch;6162;3;Entlebuch;1002;LU;8.10239221385985;46.973482678069686;de -Ebnet;6163;0;Entlebuch;1002;LU;8.077154142393733;47.02178538251775;de -Hasle LU;6166;0;Entlebuch;1002;LU;8.016259494458295;46.97825445076841;de -Schüpfheim;6170;0;Entlebuch;1002;LU;8.015728049782735;46.973084543318095;de -Schüpfheim;6170;0;Flühli;1004;LU;8.041656369875682;46.91327924993643;de -Flühli LU;6173;0;Flühli;1004;LU;8.015381843686518;46.884905360558676;de -Sörenberg;6174;0;Flühli;1004;LU;8.032298241001653;46.82337914881031;de -Wiggen;6192;0;Flühli;1004;LU;7.975052480138033;46.86870366927372;de -Schangnau;6197;0;Flühli;1004;LU;7.96854063851931;46.79050901975717;de -Entlebuch;6162;0;Hasle (LU);1005;LU;8.059205046404397;46.99374153870197;de -Finsterwald b. Entlebuch;6162;3;Hasle (LU);1005;LU;8.103219872493275;46.92772079746663;de -Hasle LU;6166;0;Hasle (LU);1005;LU;8.05138603702749;46.98015549314039;de -Schüpfheim;6170;0;Hasle (LU);1005;LU;8.071027459372068;46.92289049919669;de -Fontannen b. Wolhusen;6110;2;Romoos;1007;LU;7.985963885645713;47.025957178308175;de -Romoos;6113;0;Romoos;1007;LU;8.024017757323788;47.011001832493115;de -Hasle LU;6166;0;Romoos;1007;LU;8.02823643502897;46.991582115037055;de -Bramboden;6167;0;Romoos;1007;LU;7.985526167683116;46.979034372980266;de -Schüpfheim;6170;0;Romoos;1007;LU;7.973575967881931;46.974313731884564;de -Schüpfheim;6170;0;Schüpfheim;1008;LU;8.019775159318362;46.95316622432971;de -Schachen LU;6105;0;Werthenstein;1009;LU;8.14281197829824;47.03829045492216;de -Werthenstein;6106;0;Werthenstein;1009;LU;8.103452949849679;47.05439260636268;de -Wolhusen;6110;0;Werthenstein;1009;LU;8.07863681031579;47.043640835318314;de -Trubschachen;3555;0;Escholzmatt-Marbach;1010;LU;7.8698706090240425;46.886551437932475;de -Schüpfheim;6170;0;Escholzmatt-Marbach;1010;LU;7.990549777689393;46.924904432999426;de -Flühli LU;6173;0;Escholzmatt-Marbach;1010;LU;8.008512322035225;46.91999849254625;de -Escholzmatt;6182;0;Escholzmatt-Marbach;1010;LU;7.9347387149870325;46.913977324865705;de -Wiggen;6192;0;Escholzmatt-Marbach;1010;LU;7.909791585139591;46.89547019714946;de -Marbach LU;6196;0;Escholzmatt-Marbach;1010;LU;7.900732559144851;46.852910800813106;de -Schangnau;6197;0;Escholzmatt-Marbach;1010;LU;7.919370593350818;46.82504943124311;de -Aesch LU;6287;0;Aesch (LU);1021;LU;8.239119923658713;47.254709748997456;de -Inwil;6034;0;Ballwil;1023;LU;8.349493919368882;47.13940354700509;de -Eschenbach LU;6274;0;Ballwil;1023;LU;8.336631242197749;47.13648280427842;de -Ballwil;6275;0;Ballwil;1023;LU;8.320719192730362;47.152289182070085;de -Emmenbrücke;6020;0;Emmen;1024;LU;8.273687163555472;47.07730244766744;de -Rothenburg;6023;0;Emmen;1024;LU;8.24723201846502;47.08489158292622;de -Emmen;6032;0;Emmen;1024;LU;8.302483974169057;47.07901664764685;de -Neuenkirch;6206;0;Emmen;1024;LU;8.231789160931278;47.087862773983375;de -Ermensee;6294;0;Ermensee;1025;LU;8.24275630088384;47.227900290538095;de -Rain;6026;0;Eschenbach (LU);1026;LU;8.282795272153242;47.127725586832725;de -Inwil;6034;0;Eschenbach (LU);1026;LU;8.337658423207424;47.11463276837983;de -Eschenbach LU;6274;0;Eschenbach (LU);1026;LU;8.320291928946752;47.13277524760257;de -Gelfingen;6284;0;Hitzkirch;1030;LU;8.271534155916937;47.214611339528076;de -Sulz LU;6284;2;Hitzkirch;1030;LU;8.288927851799354;47.22011541741184;de -Hitzkirch;6285;0;Hitzkirch;1030;LU;8.264382548752486;47.225227795472485;de -Retschwil;6285;2;Hitzkirch;1030;LU;8.253482284276659;47.19290976069335;de -Altwis;6286;0;Hitzkirch;1030;LU;8.247821559432232;47.23846182725806;de -Schongau;6288;0;Hitzkirch;1030;LU;8.293238331738817;47.25077654345321;de -Müswangen;6289;0;Hitzkirch;1030;LU;8.289171108206192;47.23831015379594;de -Hämikon;6289;2;Hitzkirch;1030;LU;8.299981284108041;47.243191852970256;de -Hämikon;6289;2;Hitzkirch;1030;LU;8.27188577341186;47.23732824690194;de -Mosen;6295;0;Hitzkirch;1030;LU;8.227781363029864;47.242831942300796;de -Eschenbach LU;6274;0;Hochdorf;1031;LU;8.309161930873861;47.14489635624464;de -Ballwil;6275;0;Hochdorf;1031;LU;8.307536723830433;47.15257601559019;de -Hochdorf;6280;0;Hochdorf;1031;LU;8.293029699626281;47.16689199084022;de -Urswil;6280;2;Hochdorf;1031;LU;8.293044783583102;47.14955276324934;de -Baldegg;6283;0;Hochdorf;1031;LU;8.280476624561453;47.18563284891842;de -Ballwil;6275;0;Hohenrain;1032;LU;8.334739415743456;47.1628771612093;de -Hohenrain;6276;0;Hohenrain;1032;LU;8.318349737837538;47.179486510099686;de -Kleinwangen;6277;0;Hohenrain;1032;LU;8.294645319114647;47.19492452468058;de -Lieli LU;6277;2;Hohenrain;1032;LU;8.29877585307485;47.209713095538504;de -Hochdorf;6280;0;Hohenrain;1032;LU;8.304023823759847;47.167955579222806;de -Baldegg;6283;0;Hohenrain;1032;LU;8.27563521323621;47.1959807122771;de -Inwil;6034;0;Inwil;1033;LU;8.35028079588642;47.12219475683984;de -Gisikon;6038;0;Inwil;1033;LU;8.395844732877627;47.13361418125361;de -Rain;6026;0;Rain;1037;LU;8.263189012033356;47.1297286336635;de -Rain;6026;0;Römerswil;1039;LU;8.2556041571264;47.14642642564078;de -Römerswil LU;6027;0;Römerswil;1039;LU;8.24591599424094;47.169712986895036;de -Herlisberg;6028;0;Römerswil;1039;LU;8.230108193292716;47.19844005669513;de -Hochdorf;6280;0;Römerswil;1039;LU;8.271770091365855;47.16511739053257;de -Urswil;6280;2;Römerswil;1039;LU;8.274946905307639;47.14977335702363;de -Baldegg;6283;0;Römerswil;1039;LU;8.264288608891484;47.178042277507096;de -Rothenburg;6023;0;Rothenburg;1040;LU;8.273056533997972;47.09392638895981;de -Rain;6026;0;Rothenburg;1040;LU;8.28302205785931;47.118472778875216;de -Neuenkirch;6206;0;Rothenburg;1040;LU;8.231488768633634;47.099237521179425;de -Aesch LU;6287;0;Schongau;1041;LU;8.24672947990773;47.26652759467585;de -Schongau;6288;0;Schongau;1041;LU;8.267460043734024;47.269097748925965;de -Ebikon;6030;0;Adligenswil;1051;LU;8.355642876260811;47.0781503026271;de -Adligenswil;6043;0;Adligenswil;1051;LU;8.365095622611106;47.070576874814634;de -Ebikon;6030;0;Buchrain;1052;LU;8.346993041295958;47.090256291844405;de -Buchrain;6033;0;Buchrain;1052;LU;8.346013670169837;47.094766672207015;de -Perlen;6035;0;Buchrain;1052;LU;8.36108465671376;47.11029860216799;de -Dierikon;6036;0;Dierikon;1053;LU;8.37187899909396;47.09734982285052;de -Root;6037;0;Dierikon;1053;LU;8.368557371956792;47.10225936263222;de -Luzern;6004;0;Ebikon;1054;LU;8.303032935657846;47.06600604556176;de -Luzern;6006;0;Ebikon;1054;LU;8.31536266446129;47.06797805443429;de -Emmenbrücke;6020;0;Ebikon;1054;LU;8.298709506782833;47.067277130654844;de -Ebikon;6030;0;Ebikon;1054;LU;8.340223080658925;47.081791064545996;de -Emmen;6032;0;Ebikon;1054;LU;8.316494929707778;47.07956978051411;de -Gisikon;6038;0;Gisikon;1055;LU;8.399282324064968;47.12712616408421;de -Weggis;6353;0;Greppen;1056;LU;8.440734555186596;47.05161028049071;de -Greppen;6404;0;Greppen;1056;LU;8.430056872868333;47.05550728696109;de -Gisikon;6038;0;Honau;1057;LU;8.408627580600326;47.12820744034463;de -Honau;6038;2;Honau;1057;LU;8.406206456615939;47.13286037421615;de -Luzern;6005;0;Horw;1058;LU;8.318001293068468;47.03103788300108;de -St. Niklausen LU;6005;2;Horw;1058;LU;8.34039129811869;47.01932611652858;de -Kastanienbaum;6047;0;Horw;1058;LU;8.333815486200097;47.01343857273474;de -Horw;6048;0;Horw;1058;LU;8.312697569206277;47.01919161084247;de -Hergiswil NW;6052;0;Horw;1058;LU;8.31161752756616;46.998558650751896;de -Luzern;6005;0;Kriens;1059;LU;8.292933754932381;47.040633550540896;de -Kriens;6010;0;Kriens;1059;LU;8.279095240554934;47.033003962707575;de -Obernau;6012;0;Kriens;1059;LU;8.253408051053777;47.03215214032783;de -Eigenthal;6013;0;Kriens;1059;LU;8.223724930214914;47.015257456462685;de -Horw;6048;0;Kriens;1059;LU;8.303980495274173;47.021295927938155;de -Luzern;6003;0;Luzern;1061;LU;8.297059748053874;47.05002942435689;de -Luzern;6004;0;Luzern;1061;LU;8.29813922380168;47.060213436207164;de -Luzern;6005;0;Luzern;1061;LU;8.31959108259747;47.039340974649214;de -Luzern;6006;0;Luzern;1061;LU;8.345714128191242;47.053622380749694;de -Luzern;6014;0;Luzern;1061;LU;8.24173296984837;47.05758694143725;de -Luzern;6015;0;Luzern;1061;LU;8.277856714640482;47.06370452585225;de -Hellbühl;6016;0;Luzern;1061;LU;8.220174585847644;47.07444488590606;de -Emmenbrücke;6020;0;Luzern;1061;LU;8.262942037408237;47.06324801255147;de -Kehrsiten;6365;0;Luzern;1061;LU;8.404820225673104;47.00105943325377;de -Luzern;6014;0;Malters;1062;LU;8.233657998979856;47.05622791642415;de -Hellbühl;6016;0;Malters;1062;LU;8.193520753112429;47.05853124674833;de -Sigigen;6019;0;Malters;1062;LU;8.148073973168321;47.046398225323166;de -Malters;6102;0;Malters;1062;LU;8.183441946697377;47.03594411660316;de -Luzern;6006;0;Meggen;1063;LU;8.355132200062393;47.03833486080875;de -Meggen;6045;0;Meggen;1063;LU;8.37206236632325;47.04648663485243;de -Meierskappel;6344;0;Meierskappel;1064;LU;8.442683194463292;47.125286232550415;de -Perlen;6035;0;Root;1065;LU;8.371477113821095;47.11292395969138;de -Root;6037;0;Root;1065;LU;8.391598702078447;47.11422737335049;de -Gisikon;6038;0;Root;1065;LU;8.403135833488607;47.12065208640604;de -Root D4;6039;0;Root;1065;LU;8.373467402277159;47.1044257517085;de -Udligenswil;6044;0;Root;1065;LU;8.4000807563484;47.105843356597816;de -Eigenthal;6013;0;Schwarzenberg;1066;LU;8.21923790153906;47.007053792398175;de -Schwarzenberg LU;6103;0;Schwarzenberg;1066;LU;8.17419633802736;47.016084544592516;de -Udligenswil;6044;0;Udligenswil;1067;LU;8.399286230353512;47.0911185265971;de -Vitznau;6354;0;Vitznau;1068;LU;8.483786092666932;47.01037569383016;de -Rigi Kaltbad;6356;0;Vitznau;1068;LU;8.478086894396888;47.040020886935864;de -Weggis;6353;0;Weggis;1069;LU;8.43432196164318;47.0326962889073;de -Vitznau;6354;0;Weggis;1069;LU;8.47644079953355;47.03067406343367;de -Rigi Kaltbad;6356;0;Weggis;1069;LU;8.470984852816969;47.043952270720155;de -Neudorf;6025;0;Beromünster;1081;LU;8.209876141436043;47.176609511723676;de -Herlisberg;6028;0;Beromünster;1081;LU;8.221231085563034;47.20690808666968;de -Beromünster;6215;0;Beromünster;1081;LU;8.193146251216115;47.20702180932944;de -Schwarzenbach LU;6215;2;Beromünster;1081;LU;8.212548702225073;47.233876739450416;de -Rickenbach LU;6221;0;Beromünster;1081;LU;8.150765506256569;47.20041623015794;de -Gunzwil;6222;0;Beromünster;1081;LU;8.179656481827903;47.21123375248394;de -Büron;6233;0;Büron;1082;LU;8.090955117676414;47.214738867624334;de -Buttisholz;6018;0;Buttisholz;1083;LU;8.094575452171306;47.1148614855487;de -Grosswangen;6022;0;Buttisholz;1083;LU;8.083459040045563;47.13160534359103;de -Eich;6205;0;Eich;1084;LU;8.169558706326251;47.152997662374084;de -Schenkon;6214;0;Eich;1084;LU;8.152961938763676;47.16695781946653;de -Geuensee;6232;0;Geuensee;1085;LU;8.110137961263213;47.198443256368336;de -Grosswangen;6022;0;Grosswangen;1086;LU;8.050048288443413;47.13329676669661;de -Hildisrieden;6024;0;Hildisrieden;1088;LU;8.22986186957681;47.150648890466734;de -St. Erhard;6212;0;Knutwil;1089;LU;8.074215912966304;47.182681438538054;de -Knutwil;6213;0;Knutwil;1089;LU;8.07279188836567;47.20161476186219;de -Sursee;6210;0;Mauensee;1091;LU;8.091305892208513;47.171431970879866;de -Kaltbach;6212;2;Mauensee;1091;LU;8.05882310644225;47.183790518770685;de -Mauensee;6216;0;Mauensee;1091;LU;8.067031774250102;47.167739878356144;de -Wauwil;6242;0;Mauensee;1091;LU;8.042617983147956;47.18382413144631;de -Hellbühl;6016;0;Neuenkirch;1093;LU;8.196854816921798;47.070139146903394;de -Rothenburg;6023;0;Neuenkirch;1093;LU;8.232209003984474;47.11121388190641;de -Hildisrieden;6024;0;Neuenkirch;1093;LU;8.228113405633882;47.13379783026064;de -Sempach Station;6203;0;Neuenkirch;1093;LU;8.19557985423292;47.11616328590953;de -Sempach;6204;0;Neuenkirch;1093;LU;8.225897000879055;47.13052178673352;de -Neuenkirch;6206;0;Neuenkirch;1093;LU;8.203581931883939;47.09994938262153;de -Nottwil;6207;0;Neuenkirch;1093;LU;8.16062007442368;47.11315976226973;de -Nottwil;6207;0;Nottwil;1094;LU;8.133839955617614;47.13437117298262;de -Buttisholz;6018;0;Oberkirch;1095;LU;8.098759372147754;47.14042198162651;de -Nottwil;6207;0;Oberkirch;1095;LU;8.112075434334047;47.141421709262715;de -Oberkirch LU;6208;0;Oberkirch;1095;LU;8.11531983634173;47.158520012243564;de -Sursee;6210;0;Oberkirch;1095;LU;8.098522023897914;47.1671812479332;de -Mauensee;6216;0;Oberkirch;1095;LU;8.090932265372592;47.166889320854395;de -Pfeffikon LU;5735;0;Rickenbach (LU);1097;LU;8.177617971695085;47.249777527870165;de -Rickenbach LU;6221;0;Rickenbach (LU);1097;LU;8.152954262610207;47.21984563867503;de -Hellbühl;6016;0;Ruswil;1098;LU;8.183152924424927;47.073103146760786;de -Ruswil;6017;0;Ruswil;1098;LU;8.126659026954066;47.08511563851099;de -Buttisholz;6018;0;Ruswil;1098;LU;8.095947313480142;47.098143085284725;de -Sigigen;6019;0;Ruswil;1098;LU;8.135132202908224;47.06334464620814;de -Schachen LU;6105;0;Ruswil;1098;LU;8.132197226996174;47.04740053607777;de -Werthenstein;6106;0;Ruswil;1098;LU;8.111678297977805;47.05583119576392;de -Wolhusen;6110;0;Ruswil;1098;LU;8.092049244210594;47.065210534978796;de -Neuenkirch;6206;0;Ruswil;1098;LU;8.171604470182306;47.089659532342495;de -Nottwil;6207;0;Ruswil;1098;LU;8.134085054043856;47.11305679921192;de -Sursee;6210;0;Schenkon;1099;LU;8.124045114229137;47.17520494411565;de -Schenkon;6214;0;Schenkon;1099;LU;8.135521302529812;47.17325389702379;de -Gunzwil;6222;0;Schenkon;1099;LU;8.154514369260557;47.17342973067906;de -Schlierbach;6231;0;Schlierbach;1100;LU;8.109973294745453;47.226005367280536;de -Hildisrieden;6024;0;Sempach;1102;LU;8.206575312616755;47.158180879846014;de -Sempach;6204;0;Sempach;1102;LU;8.192821308199076;47.134669245530624;de -Sursee;6210;0;Sursee;1103;LU;8.109416461455258;47.17332165623581;de -Knutwil;6213;0;Triengen;1104;LU;8.07161782726238;47.21393579692238;de -Triengen;6234;0;Triengen;1104;LU;8.077336561960633;47.23407612784961;de -Kulmerau;6234;1;Triengen;1104;LU;8.087448832274884;47.254972300538235;de -Winikon;6235;0;Triengen;1104;LU;8.049299444826515;47.2372775609714;de -Wilihof;6236;0;Triengen;1104;LU;8.064859812999343;47.22478219701255;de -Wolhusen;6110;0;Wolhusen;1107;LU;8.074791751149538;47.05974030069346;de -Steinhuserberg;6114;0;Wolhusen;1107;LU;8.046410745735095;47.042956740605746;de -Menznau;6122;0;Wolhusen;1107;LU;8.040636582677383;47.05567986775277;de -Alberswil;6248;0;Alberswil;1121;LU;8.00205601244682;47.15086503334736;de -Altbüron;6147;0;Altbüron;1122;LU;7.882414517276862;47.17991505899691;de -Zell LU;6144;0;Altishofen;1123;LU;7.929495387854952;47.162106188291716;de -Nebikon;6244;0;Altishofen;1123;LU;7.9644278581521855;47.183219776517554;de -Ebersecken;6245;0;Altishofen;1123;LU;7.932876546486874;47.182623019071436;de -Altishofen;6246;0;Altishofen;1123;LU;7.96035745130045;47.20158782075407;de -Schötz;6247;0;Altishofen;1123;LU;7.960933345492505;47.16903096010677;de -Richenthal;6263;0;Altishofen;1123;LU;7.947701446302561;47.202806220784076;de -Buchs LU;6211;1;Dagmersellen;1125;LU;8.037126332788255;47.20090200668863;de -Winikon;6235;0;Dagmersellen;1125;LU;8.029019627881901;47.22988624491256;de -Altishofen;6246;0;Dagmersellen;1125;LU;7.959098616802791;47.214215209124156;de -Dagmersellen;6252;0;Dagmersellen;1125;LU;7.9903327382271145;47.214183078022096;de -Uffikon;6253;0;Dagmersellen;1125;LU;8.018266988456094;47.211356728287875;de -Reidermoos;6260;2;Dagmersellen;1125;LU;8.011915397632915;47.234520446526375;de -Egolzwil;6243;0;Egolzwil;1127;LU;8.006360743343619;47.185464443188195;de -Nebikon;6244;0;Egolzwil;1127;LU;7.978435927945914;47.18480937972877;de -Grosswangen;6022;0;Ettiswil;1128;LU;8.03177041224178;47.143538708653146;de -Kottwil;6217;0;Ettiswil;1128;LU;8.04510196662251;47.162773137225194;de -Ettiswil;6218;0;Ettiswil;1128;LU;8.017764111093584;47.14997213931745;de -Alberswil;6248;0;Ettiswil;1128;LU;8.004083495446375;47.13738288227026;de -Fischbach LU;6145;0;Fischbach;1129;LU;7.9078543246065855;47.156094323014926;de -Hüswil;6152;0;Fischbach;1129;LU;7.89074890661877;47.13124368503668;de -Ufhusen;6153;0;Fischbach;1129;LU;7.888505699675819;47.128006609624684;de -Fischbach LU;6145;0;Grossdietwil;1131;LU;7.8870968873648595;47.15048093588555;de -Grossdietwil;6146;0;Grossdietwil;1131;LU;7.888587391913414;47.17153976508412;de -Altbüron;6147;0;Grossdietwil;1131;LU;7.9043171405539825;47.19483419545194;de -Ebersecken;6245;0;Grossdietwil;1131;LU;7.926401646855539;47.187732444249136;de -Menzberg;6125;0;Hergiswil bei Willisau;1132;LU;7.981219760063645;47.04301034224377;de -Willisau;6130;0;Hergiswil bei Willisau;1132;LU;7.977180176956432;47.08717175042608;de -Rohrmatt;6132;0;Hergiswil bei Willisau;1132;LU;7.97902111376446;47.075234449185906;de -Hergiswil b. Willisau;6133;0;Hergiswil bei Willisau;1132;LU;7.959182345934445;47.085897069395564;de -Luthern;6156;0;Hergiswil bei Willisau;1132;LU;7.927876449359943;47.07775276629503;de -Eriswil;4952;0;Luthern;1135;LU;7.872936140376925;47.04875179333526;de -Ufhusen;6153;0;Luthern;1135;LU;7.90438200653674;47.0961118114046;de -Hofstatt;6154;0;Luthern;1135;LU;7.915058737440647;47.08474536159038;de -Luthern;6156;0;Luthern;1135;LU;7.916404410933564;47.05911021417226;de -Luthern Bad;6156;2;Luthern;1135;LU;7.927142130988971;47.02814856037989;de -Wolhusen;6110;0;Menznau;1136;LU;8.022938167281758;47.0310070966826;de -Menznau;6122;0;Menznau;1136;LU;8.039328362260859;47.08403269981633;de -Geiss;6123;0;Menznau;1136;LU;8.05600798716842;47.09023045800154;de -Menzberg;6125;0;Menznau;1136;LU;7.998292097031851;47.04119034920289;de -Willisau;6130;0;Menznau;1136;LU;8.030915300775913;47.10369828597563;de -Nebikon;6244;0;Nebikon;1137;LU;7.974658823427288;47.1912289696308;de -St. Urban;4915;0;Pfaffnau;1139;LU;7.839722033120163;47.23241342989016;de -Altbüron;6147;0;Pfaffnau;1139;LU;7.86259431796179;47.201530489286675;de -Pfaffnau;6264;0;Pfaffnau;1139;LU;7.898301103727612;47.22854055900866;de -Roggliswil;6265;0;Pfaffnau;1139;LU;7.903982895967664;47.20361820331941;de -Dagmersellen;6252;0;Reiden;1140;LU;7.9722592112900506;47.23155138105079;de -Reiden;6260;0;Reiden;1140;LU;7.972170729587732;47.243542771731896;de -Reidermoos;6260;2;Reiden;1140;LU;7.990077536570538;47.25451984662484;de -Hintermoos;6260;3;Reiden;1140;LU;8.014783639729261;47.25936034149547;de -Mehlsecken;6260;4;Reiden;1140;LU;7.9591227099059045;47.24547708651597;de -Langnau b. Reiden;6262;0;Reiden;1140;LU;7.963207103011526;47.23111299102361;de -Richenthal;6263;0;Reiden;1140;LU;7.946415434035658;47.219381773136135;de -Roggliswil;6265;0;Roggliswil;1142;LU;7.8862764899628575;47.21208781334097;de -Ohmstal;6143;0;Schötz;1143;LU;7.951183491885023;47.16305858326168;de -Schötz;6247;0;Schötz;1143;LU;7.988979985120399;47.169418531122346;de -Eriswil;4952;0;Ufhusen;1145;LU;7.880937831579124;47.086198096358636;de -Gondiswil;4955;0;Ufhusen;1145;LU;7.884986746889005;47.12800021049018;de -Ufhusen;6153;0;Ufhusen;1145;LU;7.899981324432911;47.11756593384872;de -Wauwil;6242;0;Wauwil;1146;LU;8.022582970589804;47.18629358675157;de -Wikon;4806;0;Wikon;1147;LU;7.967194366576966;47.26322002190174;de -Reidermoos;6260;2;Wikon;1147;LU;8.002414282682384;47.26188980950188;de -Hintermoos;6260;3;Wikon;1147;LU;7.9984501609901395;47.270130033277326;de -Zell LU;6144;0;Zell (LU);1150;LU;7.922643782523075;47.140010397776116;de -Hüswil;6152;0;Zell (LU);1150;LU;7.9025482622154755;47.12788212985593;de -Ufhusen;6153;0;Zell (LU);1150;LU;7.917866344767677;47.111026469625614;de -Menznau;6122;0;Willisau;1151;LU;8.022505514233238;47.09361817167719;de -Menzberg;6125;0;Willisau;1151;LU;7.991930691248074;47.052318708938024;de -Daiwil;6126;0;Willisau;1151;LU;8.01280225698455;47.09709787757798;de -Willisau;6130;0;Willisau;1151;LU;7.989682769193232;47.11993344813139;de -Rohrmatt;6132;0;Willisau;1151;LU;7.985366166423749;47.082787654627275;de -Hergiswil b. Willisau;6133;0;Willisau;1151;LU;7.948854852718595;47.09739478262885;de -Gettnau;6142;0;Willisau;1151;LU;7.970004140658078;47.14216679281067;de -Ohmstal;6143;0;Willisau;1151;LU;7.969945520548584;47.148377692880736;de -Zell LU;6144;0;Willisau;1151;LU;7.927416168039038;47.1178291050208;de -Hofstatt;6154;0;Willisau;1151;LU;7.9278620178238155;47.10069344156392;de -Luthern;6156;0;Willisau;1151;LU;7.928075588526781;47.088374020116284;de -Alberswil;6248;0;Willisau;1151;LU;8.002916949766336;47.13661990746177;de -Altdorf UR;6460;0;Altdorf (UR);1201;UR;8.642259004032088;46.883324772887676;de -Andermatt;6490;0;Andermatt;1202;UR;8.594578459978015;46.63394867614978;de -Engelberg;6390;0;Attinghausen;1203;UR;8.507928934473432;46.8120484527046;de -Attinghausen;6468;0;Attinghausen;1203;UR;8.630044487889869;46.86358930918644;de -Muotathal;6436;0;Bürglen (UR);1205;UR;8.750714789104531;46.91722023627938;de -Bisisthal;6436;2;Bürglen (UR);1205;UR;8.810306501867624;46.92748978952606;de -Altdorf UR;6460;0;Bürglen (UR);1205;UR;8.644252539708928;46.869170620270566;de -Bürglen UR;6463;0;Bürglen (UR);1205;UR;8.662451959167868;46.87520848211418;de -Spiringen;6464;0;Bürglen (UR);1205;UR;8.698240043203706;46.87120142354186;de -Haldi b. Schattdorf;6469;0;Bürglen (UR);1205;UR;8.685285478856894;46.86063668171385;de -Erstfeld;6472;0;Erstfeld;1206;UR;8.65037223119659;46.82031203982235;de -Flüelen;6454;0;Flüelen;1207;UR;8.628644801749704;46.90537642213223;de -Altdorf UR;6460;0;Flüelen;1207;UR;8.651527087579518;46.91055840841531;de -Göschenen;6487;0;Göschenen;1208;UR;8.586247722253486;46.66782177641259;de -Silenen;6473;0;Gurtnellen;1209;UR;8.654614189488028;46.79158595748356;de -Amsteg;6474;0;Gurtnellen;1209;UR;8.650816618040526;46.77933528182742;de -Intschi;6476;0;Gurtnellen;1209;UR;8.64972981574607;46.7604616895297;de -Gurtnellen;6482;0;Gurtnellen;1209;UR;8.628466949462402;46.73800246076228;de -Hospental;6493;0;Hospental;1210;UR;8.567985166940641;46.61963049102924;de -Isenthal;6461;0;Isenthal;1211;UR;8.563246028115662;46.91060015213315;de -Realp;6491;0;Realp;1212;UR;8.501881527377192;46.59874808916048;de -Schattdorf;6467;0;Schattdorf;1213;UR;8.656757751772703;46.863793035452034;de -Haldi b. Schattdorf;6469;0;Schattdorf;1213;UR;8.67503194717096;46.861831943615115;de -Seedorf UR;6462;0;Seedorf (UR);1214;UR;8.61265195792506;46.881958631010804;de -Bauen;6466;0;Seedorf (UR);1214;UR;8.579658663449475;46.93648434608183;de -Seelisberg;6377;0;Seelisberg;1215;UR;8.585965132381244;46.97617344669505;de -Rütli;6441;2;Seelisberg;1215;UR;8.593159284959418;46.970360289913046;de -Erstfeld;6472;0;Silenen;1216;UR;8.678547727815076;46.81475693449071;de -Silenen;6473;0;Silenen;1216;UR;8.672756323331607;46.79186334281251;de -Amsteg;6474;0;Silenen;1216;UR;8.670717879341607;46.770666989365445;de -Bristen;6475;0;Silenen;1216;UR;8.691042614460216;46.76938554669943;de -Intschi;6476;0;Silenen;1216;UR;8.6576017523807;46.758332842207246;de -Sisikon;6452;0;Sisikon;1217;UR;8.62064192369179;46.94896802289169;de -Riemenstalden;6452;2;Sisikon;1217;UR;8.677848633051221;46.93104924793734;de -Spiringen;6464;0;Spiringen;1218;UR;8.727027245049266;46.87280865406782;de -Urnerboden;8751;0;Spiringen;1218;UR;8.902403687950075;46.8889649784822;de -Bisisthal;6436;2;Unterschächen;1219;UR;8.821026502191781;46.900037839245826;de -Unterschächen;6465;0;Unterschächen;1219;UR;8.769196333242284;46.864056110727134;de -Wassen UR;6484;0;Wassen;1220;UR;8.60134984091281;46.70706436869787;de -Meien;6485;0;Wassen;1220;UR;8.553338528022218;46.725212468306914;de -Bennau;8836;0;Einsiedeln;1301;SZ;8.729904864114653;47.14859463487049;de -Einsiedeln;8840;0;Einsiedeln;1301;SZ;8.74981185642266;47.12836941504669;de -Trachslau;8840;2;Einsiedeln;1301;SZ;8.72541253849389;47.097796398926924;de -Gross;8841;0;Einsiedeln;1301;SZ;8.776452319662361;47.1158722898197;de -Euthal;8844;0;Einsiedeln;1301;SZ;8.816409905174293;47.095743603053045;de -Willerzell;8846;0;Einsiedeln;1301;SZ;8.794107792181894;47.12984631308502;de -Egg SZ;8847;0;Einsiedeln;1301;SZ;8.780634245533838;47.161310417717424;de -Rigi Scheidegg;6410;5;Gersau;1311;SZ;8.52097041321704;47.027283658518584;de -Gersau;6442;0;Gersau;1311;SZ;8.527020853408178;46.992832726398994;de -Wollerau;8832;0;Feusisberg;1321;SZ;8.71285180312004;47.1862129778722;de -Schindellegi;8834;0;Feusisberg;1321;SZ;8.712700977990258;47.17437572191876;de -Feusisberg;8835;0;Feusisberg;1321;SZ;8.747752202621161;47.18772261952735;de -Bennau;8836;0;Feusisberg;1321;SZ;8.711516678867184;47.156681539892396;de -Egg SZ;8847;0;Feusisberg;1321;SZ;8.756304196072362;47.17295440503299;de -Hurden;8640;3;Freienbach;1322;SZ;8.805847454948447;47.214285017508224;de -Bäch SZ;8806;0;Freienbach;1322;SZ;8.732677963289495;47.203912424806454;de -Freienbach;8807;0;Freienbach;1322;SZ;8.760536655644964;47.205327351840914;de -Pfäffikon SZ;8808;0;Freienbach;1322;SZ;8.7779846938592;47.20037884394819;de -Wollerau;8832;0;Freienbach;1322;SZ;8.752456996109776;47.19624500808909;de -Wilen b. Wollerau;8832;2;Freienbach;1322;SZ;8.734616890418412;47.197003537039755;de -Bäch SZ;8806;0;Wollerau;1323;SZ;8.717650029813786;47.200613922830286;de -Wollerau;8832;0;Wollerau;1323;SZ;8.718853429640285;47.195965752038255;de -Samstagern;8833;0;Wollerau;1323;SZ;8.689213595684759;47.188965529526094;de -Schindellegi;8834;0;Wollerau;1323;SZ;8.69260454152566;47.17507732209839;de -Merlischachen;6402;0;Küssnacht (SZ);1331;SZ;8.408048462322515;47.066377956430586;de -Küssnacht am Rigi;6403;0;Küssnacht (SZ);1331;SZ;8.440080606716098;47.08039502353354;de -Immensee;6405;0;Küssnacht (SZ);1331;SZ;8.461457014344154;47.095696328233316;de -Willerzell;8846;0;Altendorf;1341;SZ;8.824980531454901;47.14948541308691;de -Altendorf;8852;0;Altendorf;1341;SZ;8.83089014200731;47.191955047083674;de -Lachen SZ;8853;0;Galgenen;1342;SZ;8.862109289944224;47.18538116443705;de -Siebnen;8854;0;Galgenen;1342;SZ;8.884598041009198;47.15319276031157;de -Galgenen;8854;2;Galgenen;1342;SZ;8.874186772458803;47.18231280741017;de -Innerthal;8858;0;Innerthal;1343;SZ;8.919226853655152;47.10621099533646;de -Lachen SZ;8853;0;Lachen;1344;SZ;8.857823145434901;47.19745531023492;de -Reichenburg;8864;0;Reichenburg;1345;SZ;8.974202853134715;47.17144478330685;de -Siebnen;8854;0;Schübelbach;1346;SZ;8.897142665758926;47.1761568069731;de -Wangen SZ;8855;0;Schübelbach;1346;SZ;8.910991595033108;47.18402564747529;de -Schübelbach;8862;0;Schübelbach;1346;SZ;8.928175315340766;47.17324369130604;de -Buttikon SZ;8863;0;Schübelbach;1346;SZ;8.953337119235128;47.17376212348901;de -Uznach;8730;0;Tuggen;1347;SZ;8.968888135881809;47.21375848476236;de -Wangen SZ;8855;0;Tuggen;1347;SZ;8.912107909578179;47.19158711998184;de -Tuggen;8856;0;Tuggen;1347;SZ;8.940498218966773;47.20347118981199;de -Vorderthal;8857;0;Vorderthal;1348;SZ;8.899537972261038;47.12273616946196;de -Lachen SZ;8853;0;Wangen (SZ);1349;SZ;8.86244467490916;47.2023543178504;de -Siebnen;8854;0;Wangen (SZ);1349;SZ;8.894941941620397;47.18095331597968;de -Wangen SZ;8855;0;Wangen (SZ);1349;SZ;8.895594576155046;47.19273639901032;de -Schwyz;6430;0;Alpthal;1361;SZ;8.691241121971538;47.05612900354176;de -Oberiberg;8843;0;Alpthal;1361;SZ;8.720422376775018;47.02391544040954;de -Alpthal;8849;0;Alpthal;1361;SZ;8.716168005568507;47.070725849512364;de -Walchwil;6318;0;Arth;1362;SZ;8.523389525288987;47.089874608857805;de -Rigi Kaltbad;6356;0;Arth;1362;SZ;8.502824578041917;47.03424553169242;de -Goldau;6410;0;Arth;1362;SZ;8.54489804229782;47.046612301829846;de -Rigi Klösterli;6410;2;Arth;1362;SZ;8.485725007407838;47.04350953759223;de -Rigi Staffel;6410;3;Arth;1362;SZ;8.475288414502137;47.05369250579868;de -Rigi Kulm;6410;4;Arth;1362;SZ;8.4828822243589;47.05518012643456;de -Oberarth;6414;0;Arth;1362;SZ;8.533625449923258;47.05608939427683;de -Arth;6415;0;Arth;1362;SZ;8.52313917025415;47.06359211187134;de -Steinerberg;6416;0;Arth;1362;SZ;8.566565448511263;47.0673695003601;de -Illgau;6434;0;Illgau;1363;SZ;8.723323422892836;46.987618046302394;de -Seewen SZ;6423;0;Ingenbohl;1364;SZ;8.603594260237303;47.01611629257144;de -Brunnen;6440;0;Ingenbohl;1364;SZ;8.605264100865304;46.99440378038075;de -Lauerz;6424;0;Lauerz;1365;SZ;8.580071323579766;47.03540115075;de -Stoos SZ;6433;0;Morschach;1366;SZ;8.664557162698015;46.98045441910602;de -Brunnen;6440;0;Morschach;1366;SZ;8.611550403708993;46.976723332786946;de -Morschach;6443;0;Morschach;1366;SZ;8.620376225645973;46.9816329239711;de -Sisikon;6452;0;Morschach;1366;SZ;8.627719201510818;46.95537281841987;de -Stoos SZ;6433;0;Muotathal;1367;SZ;8.695067665348576;46.98189681429279;de -Muotathal;6436;0;Muotathal;1367;SZ;8.759935806286776;46.97753988559065;de -Bisisthal;6436;2;Muotathal;1367;SZ;8.831433707658608;46.94392880391271;de -Ried (Muotathal);6436;3;Muotathal;1367;SZ;8.713907552308894;46.986373745475916;de -Klöntal;8750;3;Muotathal;1367;SZ;8.897493885288425;47.01668742764619;de -Unteriberg;8842;0;Oberiberg;1368;SZ;8.824058575584404;47.01462527335103;de -Oberiberg;8843;0;Oberiberg;1368;SZ;8.786479410839526;47.0417017184755;de -Riemenstalden;6452;2;Riemenstalden;1369;SZ;8.666355942439083;46.94699172307376;de -Rothenthurm;6418;0;Rothenthurm;1370;SZ;8.67513800852901;47.10507040063632;de -Morgarten;6315;3;Sattel;1371;SZ;8.650216873701696;47.09962156052492;de -Sattel;6417;0;Sattel;1371;SZ;8.637750660769395;47.083746414808125;de -Rothenthurm;6418;0;Sattel;1371;SZ;8.652591805173763;47.09568530698225;de -Steinen;6422;0;Sattel;1371;SZ;8.611931731979245;47.06761266199765;de -Sattel;6417;0;Schwyz;1372;SZ;8.662566615563312;47.06151573125536;de -Seewen SZ;6423;0;Schwyz;1372;SZ;8.63089404741689;47.02976149443008;de -Schwyz;6430;0;Schwyz;1372;SZ;8.653676072823743;47.02135764425363;de -Rickenbach b. Schwyz;6432;0;Schwyz;1372;SZ;8.665841138088787;47.0164033742265;de -Ibach;6438;0;Schwyz;1372;SZ;8.644887031248775;47.012853553932736;de -Unteriberg;8842;0;Schwyz;1372;SZ;8.772441385404267;47.00266270566474;de -Oberiberg;8843;0;Schwyz;1372;SZ;8.742364251977646;47.0172157224259;de -Steinen;6422;0;Steinen;1373;SZ;8.61317898513281;47.05007761808494;de -Steinerberg;6416;0;Steinerberg;1374;SZ;8.585308074953968;47.05208230635589;de -Unteriberg;8842;0;Unteriberg;1375;SZ;8.80324954943286;47.056371820448575;de -Euthal;8844;0;Unteriberg;1375;SZ;8.85034251298905;47.07236208068416;de -Studen SZ;8845;0;Unteriberg;1375;SZ;8.83372908458336;47.073392371959706;de -Pilatus Kulm;6010;2;Alpnach;1401;OW;8.254704422042028;46.979264449024846;de -Alpnachstad;6053;0;Alpnach;1401;OW;8.276409475587268;46.9537255507979;de -Alpnach Dorf;6055;0;Alpnach;1401;OW;8.271825689533465;46.94107230060818;de -Kerns;6064;0;Alpnach;1401;OW;8.280829088294569;46.926512745247514;de -Grafenort;6388;0;Engelberg;1402;OW;8.372401249810476;46.8705073418544;de -Engelberg;6390;0;Engelberg;1402;OW;8.400251930293782;46.820109761516946;de -Giswil;6074;0;Giswil;1403;OW;8.181304942337116;46.836864053836734;de -Sörenberg;6174;0;Giswil;1403;OW;8.064772626303574;46.80029029747112;de -Kerns;6064;0;Kerns;1404;OW;8.275866578550282;46.90199803831832;de -St. Niklausen OW;6066;0;Kerns;1404;OW;8.279002707945171;46.8701625081024;de -Melchtal;6067;0;Kerns;1404;OW;8.28931684497549;46.83391410944414;de -Melchsee-Frutt;6068;0;Kerns;1404;OW;8.269084824751816;46.773564466000096;de -Lungern;6078;0;Lungern;1405;OW;8.158997767527946;46.782539997550145;de -Bürglen OW;6078;2;Lungern;1405;OW;8.166072702551569;46.81206504044235;de -Melchtal;6067;0;Sachseln;1406;OW;8.286260827281767;46.83838215153872;de -Sachseln;6072;0;Sachseln;1406;OW;8.240037315833986;46.867549716880845;de -Flüeli-Ranft;6073;0;Sachseln;1406;OW;8.268196670034198;46.87253782533824;de -Giswil;6074;0;Sachseln;1406;OW;8.195295841165438;46.84541437710171;de -Kägiswil;6056;0;Sarnen;1407;OW;8.260436275713834;46.92287915407507;de -Sarnen;6060;0;Sarnen;1407;OW;8.245624327021739;46.895333246797776;de -Ramersberg;6060;2;Sarnen;1407;OW;8.235308254634923;46.89803085663596;de -Wilen (Sarnen);6062;0;Sarnen;1407;OW;8.224506212019485;46.880774016977604;de -Stalden (Sarnen);6063;0;Sarnen;1407;OW;8.212424572653207;46.8861459185451;de -Beckenried;6375;0;Beckenried;1501;NW;8.468746764538258;46.96508858588754;de -Emmetten;6376;0;Beckenried;1501;NW;8.484188858277681;46.952668548680386;de -Buochs;6374;0;Buochs;1502;NW;8.420093585467608;46.97139614111511;de -Dallenwil;6383;0;Dallenwil;1503;NW;8.390657837931299;46.93276379401141;de -Wiesenberg;6383;3;Dallenwil;1503;NW;8.364122487633844;46.925043143544144;de -Wirzweli;6383;4;Dallenwil;1503;NW;8.365793821755659;46.91341760639346;de -Emmetten;6376;0;Emmetten;1504;NW;8.519208085982156;46.95663554317602;de -Seelisberg;6377;0;Emmetten;1504;NW;8.558723804130357;46.97360568162183;de -Obbürgen;6363;0;Ennetbürgen;1505;NW;8.390916766051141;46.99261747642814;de -Bürgenstock;6363;2;Ennetbürgen;1505;NW;8.382295323579017;46.99722755018291;de -Ennetbürgen;6373;0;Ennetbürgen;1505;NW;8.414481579619247;46.98487339917616;de -Buochs;6374;0;Ennetbürgen;1505;NW;8.415462637640916;46.97942643960581;de -Stansstad;6362;0;Ennetmoos;1506;NW;8.330051099459856;46.96506766079923;de -Stans;6370;0;Ennetmoos;1506;NW;8.342716167330245;46.96152957416872;de -Ennetmoos;6372;0;Ennetmoos;1506;NW;8.338118937122339;46.95669683484182;de -Kriens;6010;0;Hergiswil (NW);1507;NW;8.252522357189633;46.990417542706695;de -Eigenthal;6013;0;Hergiswil (NW);1507;NW;8.223931627158159;46.98481744781189;de -Hergiswil NW;6052;0;Hergiswil (NW);1507;NW;8.310561202406875;46.984019907747836;de -Stans;6370;0;Oberdorf (NW);1508;NW;8.37468667362557;46.95728890182144;de -Oberdorf NW;6370;41;Oberdorf (NW);1508;NW;8.386678204838237;46.95856866282218;de -Buochs;6374;0;Oberdorf (NW);1508;NW;8.405645146264948;46.956198667062445;de -Büren NW;6382;0;Oberdorf (NW);1508;NW;8.397975951231592;46.94029294866814;de -Niederrickenbach;6383;2;Oberdorf (NW);1508;NW;8.43686531459999;46.92136808318073;de -Stansstad;6362;0;Stans;1509;NW;8.351879983646194;46.97050933644358;de -Stans;6370;0;Stans;1509;NW;8.366368336591393;46.95842604448835;de -Ennetmoos;6372;0;Stans;1509;NW;8.348632484756518;46.956502222258656;de -Ennetbürgen;6373;0;Stans;1509;NW;8.387455785438966;46.97665683617936;de -Stansstad;6362;0;Stansstad;1510;NW;8.339574512579132;46.97659455955361;de -Obbürgen;6363;0;Stansstad;1510;NW;8.360483482103874;46.981580218048755;de -Fürigen;6363;1;Stansstad;1510;NW;8.351862986487356;46.98189564712591;de -Bürgenstock;6363;2;Stansstad;1510;NW;8.374677587622314;46.99589194167603;de -Kehrsiten;6365;0;Stansstad;1510;NW;8.369864149637252;47.00105886097693;de -Dallenwil;6383;0;Wolfenschiessen;1511;NW;8.395347172140271;46.930088512333654;de -Niederrickenbach;6383;2;Wolfenschiessen;1511;NW;8.444745946994132;46.9101419281003;de -Wolfenschiessen;6386;0;Wolfenschiessen;1511;NW;8.396490721226481;46.90881021919879;de -Oberrickenbach;6387;0;Wolfenschiessen;1511;NW;8.423985898578122;46.888134095609736;de -Grafenort;6388;0;Wolfenschiessen;1511;NW;8.348622316623041;46.86011483263598;de -Engelberg;6390;0;Wolfenschiessen;1511;NW;8.361527841901063;46.80887517468135;de -Näfels;8752;0;Glarus Nord;1630;GL;9.057086288722168;47.101118935764944;de -Mollis;8753;0;Glarus Nord;1630;GL;9.075755950325455;47.09370121465777;de -Netstal;8754;0;Glarus Nord;1630;GL;9.066618874827125;47.06972354487086;de -Filzbach;8757;0;Glarus Nord;1630;GL;9.131208745646921;47.120447959039765;de -Obstalden;8758;0;Glarus Nord;1630;GL;9.151113171791364;47.11753262351983;de -Bilten;8865;0;Glarus Nord;1630;GL;9.024858959411374;47.15013985215546;de -Ziegelbrücke;8866;0;Glarus Nord;1630;GL;9.056305483398392;47.135599974256586;de -Niederurnen;8867;0;Glarus Nord;1630;GL;9.05293704360893;47.12571176415749;de -Oberurnen;8868;0;Glarus Nord;1630;GL;9.058816007012775;47.11461934488147;de -Weesen;8872;0;Glarus Nord;1630;GL;9.094577601587767;47.12595374052485;de -Mühlehorn;8874;0;Glarus Nord;1630;GL;9.172677572785775;47.11734514333962;de -Glarus;8750;0;Glarus Süd;1631;GL;9.075480027632448;47.028318570992454;de -Ennenda;8755;0;Glarus Süd;1631;GL;9.07775925568146;47.02881470013343;de -Mitlödi;8756;0;Glarus Süd;1631;GL;9.079020044311086;47.01046280452582;de -Schwanden GL;8762;0;Glarus Süd;1631;GL;9.07477799159712;46.99522162922389;de -Schwändi b. Schwanden;8762;2;Glarus Süd;1631;GL;9.066724795078267;47.00570675138464;de -Sool;8762;3;Glarus Süd;1631;GL;9.08575553558878;47.00073021736665;de -Engi;8765;0;Glarus Süd;1631;GL;9.148077409194805;46.983255367261755;de -Matt;8766;0;Glarus Süd;1631;GL;9.170194880862205;46.96323914549704;de -Elm;8767;0;Glarus Süd;1631;GL;9.172159286192429;46.91859905132632;de -Nidfurn;8772;0;Glarus Süd;1631;GL;9.051349760628717;46.9869167377797;de -Haslen GL;8773;0;Glarus Süd;1631;GL;9.060056869149708;46.98069110820455;de -Leuggelbach;8774;0;Glarus Süd;1631;GL;9.041053369030077;46.97672906783498;de -Luchsingen;8775;1;Glarus Süd;1631;GL;9.03573546089803;46.96668367375881;de -Hätzingen;8775;2;Glarus Süd;1631;GL;9.040465772031322;46.9614798488253;de -Diesbach GL;8777;0;Glarus Süd;1631;GL;9.035394884650735;46.95192958691121;de -Betschwanden;8777;2;Glarus Süd;1631;GL;9.027380749625632;46.94413506621851;de -Rüti GL;8782;0;Glarus Süd;1631;GL;9.012876246427325;46.934607503689975;de -Linthal;8783;0;Glarus Süd;1631;GL;9.002353130432041;46.924589668305835;de -Braunwald;8784;0;Glarus Süd;1631;GL;8.998127569376901;46.940681904723135;de -Glarus;8750;0;Glarus;1632;GL;9.06566582573054;47.040467670605736;de -Riedern;8750;2;Glarus;1632;GL;9.051430065342183;47.04978073925164;de -Klöntal;8750;3;Glarus;1632;GL;8.942329661415227;47.02555826809832;de -Netstal;8754;0;Glarus;1632;GL;9.050862325692757;47.063636528428674;de -Ennenda;8755;0;Glarus;1632;GL;9.07901381966247;47.03383200223124;de -Zug;6300;0;Baar;1701;ZG;8.500370073246028;47.186178014963126;de -Steinhausen;6312;0;Baar;1701;ZG;8.50247357540067;47.19276533897112;de -Neuägeri;6314;1;Baar;1701;ZG;8.559960411021775;47.15364372680041;de -Allenwinden;6319;0;Baar;1701;ZG;8.550978056950855;47.16454533492718;de -Baar;6340;0;Baar;1701;ZG;8.522800423001938;47.19325036558098;de -Neuheim;6345;0;Baar;1701;ZG;8.562367725901833;47.204055318901155;de -Cham;6330;0;Cham;1702;ZG;8.4596239998271;47.179291850673195;de -Hünenberg;6331;0;Cham;1702;ZG;8.416668579942296;47.22315788565221;de -Hagendorn;6332;0;Cham;1702;ZG;8.431923586916659;47.20293661923734;de -Mühlau;5642;0;Hünenberg;1703;ZG;8.398750098693624;47.22821915205027;de -Hünenberg;6331;0;Hünenberg;1703;ZG;8.42802256502576;47.1747198488631;de -Hagendorn;6332;0;Hünenberg;1703;ZG;8.422869315789885;47.20226299034022;de -Hünenberg See;6333;0;Hünenberg;1703;ZG;8.45031724868118;47.169258183079;de -Menzingen;6313;0;Menzingen;1704;ZG;8.636676674809092;47.170620796438136;de -Menzingen;6313;0;Menzingen;1704;ZG;8.590315250331496;47.17878234303276;de -Edlibach;6313;2;Menzingen;1704;ZG;8.571487954362382;47.17974648293293;de -Finstersee;6313;3;Menzingen;1704;ZG;8.62976541027466;47.16712008775879;de -Neuägeri;6314;1;Menzingen;1704;ZG;8.56413373579806;47.1531855575435;de -Alosen;6315;2;Menzingen;1704;ZG;8.652531746888698;47.154407209096526;de -Menzingen;6313;0;Neuheim;1705;ZG;8.607530428416014;47.19705771078179;de -Baar;6340;0;Neuheim;1705;ZG;8.560666676831524;47.18997713666696;de -Sihlbrugg;6340;4;Neuheim;1705;ZG;8.576983157150025;47.21756397311705;de -Neuheim;6345;0;Neuheim;1705;ZG;8.575743613892822;47.20553904846143;de -Unterägeri;6314;0;Oberägeri;1706;ZG;8.605471270107598;47.11808822876098;de -Oberägeri;6315;0;Oberägeri;1706;ZG;8.614365222449686;47.13457929417888;de -Alosen;6315;2;Oberägeri;1706;ZG;8.634769996334722;47.14075026280166;de -Morgarten;6315;3;Oberägeri;1706;ZG;8.640502172382854;47.10427808004265;de -Sattel;6417;0;Oberägeri;1706;ZG;8.614028108690992;47.09863176159706;de -Rothenthurm;6418;0;Oberägeri;1706;ZG;8.665275308209457;47.12083994718851;de -Bennau;8836;0;Oberägeri;1706;ZG;8.688743417324824;47.154433196930725;de -Rotkreuz;6343;0;Risch;1707;ZG;8.429562988107236;47.13969131529635;de -Buonas;6343;2;Risch;1707;ZG;8.456828588748097;47.14104138292429;de -Risch;6343;3;Risch;1707;ZG;8.46685000744634;47.13395936856151;de -Holzhäusern ZG;6343;4;Risch;1707;ZG;8.440764621026029;47.153987574778505;de -Steinhausen;6312;0;Steinhausen;1708;ZG;8.485180481939082;47.19601553569031;de -Cham;6330;0;Steinhausen;1708;ZG;8.476280939076902;47.206469852857886;de -Unterägeri;6314;0;Unterägeri;1709;ZG;8.582707151888815;47.13839623010423;de -Neuägeri;6314;1;Unterägeri;1709;ZG;8.562794429437766;47.152376379724934;de -Oberägeri;6315;0;Unterägeri;1709;ZG;8.591988853711428;47.147488280833485;de -Walchwil;6318;0;Walchwil;1710;ZG;8.514775843102981;47.10025366993192;de -Zug;6300;0;Zug;1711;ZG;8.516015202206233;47.16518203460534;de -Zugerberg;6300;5;Zug;1711;ZG;8.533432416047136;47.143378251004854;de -Neuägeri;6314;1;Zug;1711;ZG;8.55217144594946;47.15164522296251;de -Oberwil b. Zug;6317;0;Zug;1711;ZG;8.507117232422871;47.147797031542765;de -Walchwil;6318;0;Zug;1711;ZG;8.570102290356552;47.08691718327084;de -Cham;6330;0;Zug;1711;ZG;8.478097059305181;47.18387043720309;de -Châtillon FR;1473;2;Châtillon (FR);2008;FR;6.827678547960659;46.833080258975656;fr -Cugy FR;1482;0;Cugy (FR);2011;FR;6.8930847668324775;46.81487881991763;fr -Vesin;1483;3;Cugy (FR);2011;FR;6.872771693078458;46.80765768611021;fr -Fétigny;1532;0;Fétigny;2016;FR;6.915476854757149;46.797094077654734;fr -Gletterens;1544;0;Gletterens;2022;FR;6.937160160342521;46.895229412493656;fr -Lully FR;1470;2;Lully (FR);2025;FR;6.8480561434049845;46.83498533104719;fr -Seiry;1470;3;Lully (FR);2025;FR;6.832075593049882;46.81208489988894;fr -Bollion;1470;4;Lully (FR);2025;FR;6.827201895009213;46.81707901767078;fr -Ménières;1533;0;Ménières;2027;FR;6.881446285753564;46.784150582385095;fr -Corcelles-près-Payerne;1562;0;Montagny (FR);2029;FR;6.965516554487288;46.82724703582758;fr -Cousset;1774;0;Montagny (FR);2029;FR;6.977969902946301;46.81854330545062;fr -Cousset;1774;0;Montagny (FR);2029;FR;6.971310385323282;46.82674089902113;fr -Montagny-les-Monts;1774;2;Montagny (FR);2029;FR;6.991999238565902;46.81048745731625;fr -Mannens;1775;2;Montagny (FR);2029;FR;6.970143460654709;46.792567191186556;fr -Grandsivaz;1775;3;Montagny (FR);2029;FR;6.980800480808882;46.78537255936349;fr -Montagny-la-Ville;1776;0;Montagny (FR);2029;FR;6.995437259907552;46.817501507282365;fr -Nuvilly;1485;0;Nuvilly;2035;FR;6.830635293386879;46.78405300345526;fr -Prévondavaux;1410;4;Prévondavaux;2038;FR;6.793274545737169;46.72736648493999;fr -St-Aubin FR;1566;0;Saint-Aubin (FR);2041;FR;6.980355915675773;46.89013338685743;fr -Les Friques;1566;2;Saint-Aubin (FR);2041;FR;6.98803439680489;46.903331790554574;fr -Sévaz;1541;3;Sévaz;2043;FR;6.87549917465978;46.838993307792926;fr -Seigneux;1525;2;Surpierre;2044;FR;6.863221685510188;46.72822705426141;fr -Villeneuve FR;1527;0;Surpierre;2044;FR;6.8685888555064185;46.74595938430182;fr -Surpierre;1528;0;Surpierre;2044;FR;6.861327067544251;46.74498594315022;fr -Praratoud;1528;2;Surpierre;2044;FR;6.847532671303208;46.73460974180143;fr -Cheiry;1529;0;Surpierre;2044;FR;6.83357183288445;46.74932777817412;fr -Chapelle (Broye);1534;2;Surpierre;2044;FR;6.851573710524151;46.77007141283169;fr -Vallon;1565;2;Vallon;2045;FR;6.953352500780985;46.884774934526234;fr -Montet (Broye);1483;0;Les Montets;2050;FR;6.868698907080176;46.81602250355355;fr -Frasses;1483;2;Les Montets;2050;FR;6.863561718555631;46.826755260352265;fr -Aumont;1484;0;Les Montets;2050;FR;6.848617506774422;46.801185659359895;fr -Granges-de-Vesin;1484;2;Les Montets;2050;FR;6.842653722454938;46.812285207658945;fr -Sassel;1534;0;Les Montets;2050;FR;6.86576955206431;46.78876786306757;fr -Delley;1567;0;Delley-Portalban;2051;FR;6.967580020473803;46.91314164096961;fr -Portalban;1568;0;Delley-Portalban;2051;FR;6.955467334938451;46.91794697886919;fr -Dompierre FR;1563;0;Belmont-Broye;2053;FR;6.988572903479869;46.85304478226283;fr -Domdidier;1564;0;Belmont-Broye;2053;FR;7.0153536158649334;46.86476353351189;fr -Avenches;1580;0;Belmont-Broye;2053;FR;7.031628071785625;46.87317385058813;fr -Oleyres;1580;2;Belmont-Broye;2053;FR;7.033628567585844;46.8591673401713;fr -Grolley;1772;0;Belmont-Broye;2053;FR;7.0528546793239775;46.839061686831435;fr -Léchelles;1773;0;Belmont-Broye;2053;FR;7.015969856806609;46.829032359545494;fr -Chandon;1773;2;Belmont-Broye;2053;FR;7.048135273648606;46.83905118922377;fr -Russy;1773;3;Belmont-Broye;2053;FR;7.001459068848521;46.84280282649668;fr -Montagny-la-Ville;1776;0;Belmont-Broye;2053;FR;6.993000752091615;46.83359100416011;fr -Estavayer-le-Lac;1470;0;Estavayer;2054;FR;6.847202235029403;46.84999406638053;fr -Font;1473;0;Estavayer;2054;FR;6.820039236723408;46.8361348370991;fr -Font;1473;0;Estavayer;2054;FR;6.837935415755718;46.825392919028744;fr -Autavaux;1475;0;Estavayer;2054;FR;6.877477058569439;46.86520029454107;fr -Forel FR;1475;2;Estavayer;2054;FR;6.888105128571267;46.87555267002113;fr -Montbrelloz;1475;3;Estavayer;2054;FR;6.885822633164666;46.85358606193964;fr -Vuissens;1486;0;Estavayer;2054;FR;6.765779442291755;46.73798107356057;fr -Murist;1489;0;Estavayer;2054;FR;6.807318848051698;46.790439755160484;fr -Bussy FR;1541;0;Estavayer;2054;FR;6.889286137427905;46.83487455210133;fr -Morens FR;1541;2;Estavayer;2054;FR;6.907500119970423;46.844449406167236;fr -Rueyres-les-Prés;1542;0;Estavayer;2054;FR;6.91670869219848;46.85963047388085;fr -Cheyres;1468;0;Cheyres-Châbles;2055;FR;6.787127315449445;46.8142463904499;fr -Châbles FR;1474;0;Cheyres-Châbles;2055;FR;6.809435193807093;46.82620487396004;fr -Auboranges;1673;3;Auboranges;2061;FR;6.80570609359013;46.5826947310904;fr -Billens;1681;0;Billens-Hennens;2063;FR;6.900092751401324;46.69091223887412;fr -Hennens;1681;2;Billens-Hennens;2063;FR;6.884565207548906;46.68314500670693;fr -Chapelle (Glâne);1608;4;Chapelle (Glâne);2066;FR;6.834287131002601;46.58782635981065;fr -Le Châtelard-près-Romont;1689;0;Le Châtelard;2067;FR;6.9782842532172005;46.677540169506116;fr -Châtonnaye;1553;0;Châtonnaye;2068;FR;6.938259368902964;46.754100936957734;fr -Vulliens;1085;0;Ecublens (FR);2072;FR;6.804285074601368;46.644165008476605;fr -Ecublens FR;1673;4;Ecublens (FR);2072;FR;6.808471569818219;46.608594308708355;fr -Grangettes-près-Romont;1686;0;Grangettes;2079;FR;6.964700642938517;46.67643316184452;fr -Massonnens;1692;0;Massonnens;2086;FR;6.973414367378421;46.700642725008606;fr -Romont FR;1680;0;Mézières (FR);2087;FR;6.935215090302685;46.69151611030843;fr -Berlens;1680;2;Mézières (FR);2087;FR;6.953270397636425;46.69319586728001;fr -Mézières FR;1684;0;Mézières (FR);2087;FR;6.926342778252776;46.67912420752719;fr -Montet (Glâne);1674;2;Montet (Glâne);2089;FR;6.813973265527141;46.644584944545954;fr -Romont FR;1680;0;Romont (FR);2096;FR;6.918222835036331;46.69540239523799;fr -Chapelle (Glâne);1608;4;Rue;2097;FR;6.832289200076046;46.58737541122196;fr -Promasens;1673;0;Rue;2097;FR;6.823068014237434;46.601410752964505;fr -Gillarens;1673;2;Rue;2097;FR;6.826870646080041;46.587487881060646;fr -Rue;1673;5;Rue;2097;FR;6.822306019298082;46.61962745669846;fr -Blessens;1675;2;Rue;2097;FR;6.838109227634991;46.610769532942335;fr -Chavannes-les-Forts;1676;0;Siviriez;2099;FR;6.897687959619757;46.651756229326104;fr -Prez-vers-Siviriez;1677;0;Siviriez;2099;FR;6.874472578794484;46.638112962346476;fr -Siviriez;1678;0;Siviriez;2099;FR;6.880088849419016;46.65785182314887;fr -Villaraboud;1679;0;Siviriez;2099;FR;6.912872349262875;46.65893739948573;fr -Romont FR;1680;0;Siviriez;2099;FR;6.894169453382344;46.67279083028776;fr -Ursy;1670;0;Ursy;2102;FR;6.834187548369254;46.63558637062394;fr -Bionnens;1670;2;Ursy;2102;FR;6.855452222850443;46.63505165402045;fr -Esmonts;1670;3;Ursy;2102;FR;6.8442103252116935;46.64206167575751;fr -Vuarmarens;1674;0;Ursy;2102;FR;6.826926012689228;46.64494450623839;fr -Morlens;1674;3;Ursy;2102;FR;6.836674063920005;46.65304200650842;fr -Vauderens;1675;0;Ursy;2102;FR;6.8475443931719;46.623252923543404;fr -Blessens;1675;2;Ursy;2102;FR;6.844044790647582;46.60677394254497;fr -Mossel;1675;3;Ursy;2102;FR;6.8556285869925935;46.61042941291315;fr -Villariaz;1685;0;Vuisternens-devant-Romont;2113;FR;6.939938220079072;46.66482624749624;fr -La Neirigue;1686;2;Vuisternens-devant-Romont;2113;FR;6.954699842186094;46.683880374448044;fr -Vuisternens-devant-Romont;1687;0;Vuisternens-devant-Romont;2113;FR;6.929732651597969;46.65620407822902;fr -La Magne;1687;2;Vuisternens-devant-Romont;2113;FR;6.932433493396007;46.6344523679787;fr -Estévenens;1687;3;Vuisternens-devant-Romont;2113;FR;6.9565819092115;46.66905566731449;fr -Sommentier;1688;0;Vuisternens-devant-Romont;2113;FR;6.912210633896341;46.63833380724093;fr -Lieffrens;1688;2;Vuisternens-devant-Romont;2113;FR;6.900711859372619;46.63669806745787;fr -La Joux FR;1697;0;Vuisternens-devant-Romont;2113;FR;6.939077019446706;46.62913001606489;fr -Les Ecasseys;1697;2;Vuisternens-devant-Romont;2113;FR;6.909286769399396;46.62229236457578;fr -Villaz-St-Pierre;1690;0;Villorsonnens;2114;FR;6.97348264946682;46.723792302310535;fr -Villarsiviriaux;1694;0;Villorsonnens;2114;FR;7.011757679710777;46.70022353927019;fr -Villargiroud;1694;2;Villorsonnens;2114;FR;7.001294099697326;46.70424148428428;fr -Orsonnens;1694;3;Villorsonnens;2114;FR;6.993913503681291;46.71740532842841;fr -Chavannes-sous-Orsonnens;1694;4;Villorsonnens;2114;FR;6.99200054846297;46.72786361898152;fr -Torny-le-Grand;1748;0;Torny;2115;FR;6.968545609974462;46.77062744294636;fr -Middes;1749;0;Torny;2115;FR;6.949353779734668;46.76807374518535;fr -Romont FR;1680;0;Villaz;2117;FR;6.9398932413322205;46.70647051076375;fr -Villaz-St-Pierre;1690;0;Villaz;2117;FR;6.956950658841963;46.719996606694025;fr -Lussy FR;1690;2;Villaz;2117;FR;6.944152477520775;46.71503761334653;fr -Villarimboud;1691;0;Villaz;2117;FR;6.962841422212812;46.73948156294017;fr -Albeuve;1669;0;Haut-Intyamon;2121;FR;7.055989796183403;46.516905024418804;fr -Lessoc;1669;2;Haut-Intyamon;2121;FR;7.062494209809571;46.50566580443217;fr -Les Sciernes-d'Albeuve;1669;3;Haut-Intyamon;2121;FR;7.035085954281547;46.49688349271792;fr -Neirivue;1669;4;Haut-Intyamon;2121;FR;7.058021305289897;46.5252590169651;fr -Montbovon;1669;5;Haut-Intyamon;2121;FR;7.045717185713117;46.48624352869882;fr -Gumefens;1643;0;Pont-en-Ogoz;2122;FR;7.076831952809178;46.67698971595168;fr -Avry-devant-Pont;1644;0;Pont-en-Ogoz;2122;FR;7.086402113165081;46.68720690656094;fr -Le Bry;1645;0;Pont-en-Ogoz;2122;FR;7.083571170108608;46.70390971030046;fr -Botterens;1652;0;Botterens;2123;FR;7.112928284570675;46.621290818673685;fr -Villarbeney;1652;2;Botterens;2123;FR;7.1086728688369485;46.629097282389836;fr -Broc;1636;0;Broc;2124;FR;7.099473825100621;46.604958708258934;fr -Châtel-sur-Montsalvens;1653;3;Broc;2124;FR;7.117053081202959;46.610219481963625;fr -Bulle;1630;0;Bulle;2125;FR;7.0584562303266205;46.620272760729684;fr -La Tour-de-Trême;1635;0;Bulle;2125;FR;7.066224628588974;46.609074949681606;fr -Le Pâquier-Montbarry;1661;0;Bulle;2125;FR;7.037259085783026;46.59998255643497;fr -Châtel-sur-Montsalvens;1653;3;Châtel-sur-Montsalvens;2128;FR;7.1264179763035385;46.61360579916236;fr -Echarlens;1646;0;Corbières;2129;FR;7.0905678909599175;46.66189915918992;fr -Corbières;1647;0;Corbières;2129;FR;7.101113760280961;46.6613728701691;fr -Villarvolard;1651;0;Corbières;2129;FR;7.107328854123744;46.64525982215682;fr -Crésuz;1653;2;Crésuz;2130;FR;7.140933360351211;46.618529290642186;fr -Vuadens;1628;0;Echarlens;2131;FR;7.0298104401142;46.631673745619814;fr -Echarlens;1646;0;Echarlens;2131;FR;7.075605281688044;46.64786669206776;fr -Grandvillard;1666;0;Grandvillard;2134;FR;7.085667279854661;46.53879682471692;fr -La Tour-de-Trême;1635;0;Gruyères;2135;FR;7.0044750771069575;46.56773416077566;fr -Broc;1636;0;Gruyères;2135;FR;7.1492490879645425;46.5927219682504;fr -Le Pâquier-Montbarry;1661;0;Gruyères;2135;FR;7.068890057486157;46.591818512692626;fr -Gruyères;1663;0;Gruyères;2135;FR;7.08336044901879;46.58353513563508;fr -Pringy;1663;2;Gruyères;2135;FR;7.072099083281917;46.57854931709257;fr -Epagny;1663;3;Gruyères;2135;FR;7.085493715357163;46.588114182831056;fr -Moléson-sur-Gruyères;1663;4;Gruyères;2135;FR;7.037337332980504;46.561995802663915;fr -La Roche FR;1634;0;Hauteville;2137;FR;7.140585118677583;46.676662028349305;fr -Corbières;1647;0;Hauteville;2137;FR;7.122755060291433;46.66279884300077;fr -Hauteville;1648;0;Hauteville;2137;FR;7.1032887425477425;46.670947529406696;fr -Jaun;1656;0;Jaun;2138;FR;7.274585988898255;46.611387702759224;de -Im Fang;1656;1;Jaun;2138;FR;7.236272734069336;46.59807652490698;de -Schwarzsee;1716;3;Jaun;2138;FR;7.293144902806507;46.64974795187554;de -Marsens;1633;0;Marsens;2140;FR;7.0618584836489156;46.65576277384948;fr -Vuippens;1633;2;Marsens;2140;FR;7.072938537170896;46.658850150483836;fr -Morlon;1638;0;Morlon;2143;FR;7.087767588401722;46.62792855619669;fr -La Tour-de-Trême;1635;0;Le Pâquier (FR);2145;FR;7.038328889017779;46.605851026526835;fr -Le Pâquier-Montbarry;1661;0;Le Pâquier (FR);2145;FR;7.0548473330804296;46.59442227331724;fr -Pont-la-Ville;1649;0;Pont-la-Ville;2147;FR;7.111047300413366;46.700103862772465;fr -Vuadens;1628;0;Riaz;2148;FR;7.022390464301142;46.630323041642015;fr -Riaz;1632;0;Riaz;2148;FR;7.061165922025977;46.6415000291942;fr -La Roche FR;1634;0;La Roche;2149;FR;7.13795290490809;46.696363475199895;fr -Treyvaux;1733;0;La Roche;2149;FR;7.12804600279241;46.71481502637749;fr -Sâles (Gruyère);1625;0;Sâles;2152;FR;6.973141939474025;46.635613150157205;fr -Maules;1625;2;Sâles;2152;FR;6.991303506730818;46.638669751438464;fr -Romanens;1626;0;Sâles;2152;FR;6.970578824950418;46.65075712295928;fr -Treyfayes;1626;2;Sâles;2152;FR;6.953206398118805;46.65412283774284;fr -Rueyres-Treyfayes;1626;3;Sâles;2152;FR;6.958790821454907;46.64867041125002;fr -Vaulruz;1627;0;Sâles;2152;FR;6.957805857248546;46.60572865361226;fr -Sorens;1642;0;Sorens;2153;FR;7.060290232701499;46.668920128609955;fr -Vaulruz;1627;0;Vaulruz;2155;FR;6.993159255634336;46.62382013653585;fr -Vuadens;1628;0;Vaulruz;2155;FR;6.977499708499489;46.593114870891476;fr -Bulle;1630;0;Vaulruz;2155;FR;6.987965906354756;46.580257413265834;fr -Vuadens;1628;0;Vuadens;2160;FR;7.01914324558413;46.616463473802526;fr -Bulle;1630;0;Vuadens;2160;FR;7.032701374548532;46.61086812113986;fr -Moléson-sur-Gruyères;1663;4;Bas-Intyamon;2162;FR;7.044195582531326;46.557439449373994;fr -Estavannens;1665;0;Bas-Intyamon;2162;FR;7.101700861780023;46.56578599417715;fr -Villars-sous-Mont;1666;2;Bas-Intyamon;2162;FR;7.06946730819669;46.5399643385336;fr -Enney;1667;0;Bas-Intyamon;2162;FR;7.083586112523932;46.56626700149869;fr -Charmey (Gruyère);1637;0;Val-de-Charmey;2163;FR;7.162886074916027;46.61926601024689;fr -Cerniat FR;1654;0;Val-de-Charmey;2163;FR;7.156769163872674;46.632642178161966;fr -Schwarzsee;1716;3;Val-de-Charmey;2163;FR;7.259608071553234;46.64564649498715;de -Autigny;1742;0;Autigny;2173;FR;7.02057704673258;46.73649484407039;fr -Lentigny;1745;0;Autigny;2173;FR;7.006551214743382;46.75228617883888;fr -Corjolens;1754;2;Avry;2174;FR;7.045536186307422;46.785635147825964;fr -Avry-sur-Matran;1754;4;Avry;2174;FR;7.070666414469065;46.78784539363009;fr -Chésopelloz;1720;2;Belfaux;2175;FR;7.069383640403917;46.8084816822604;fr -Belfaux;1782;0;Belfaux;2175;FR;7.1069398256222795;46.822402504066446;fr -Autafond;1782;2;Belfaux;2175;FR;7.07786977079765;46.813618149906766;fr -Chénens;1744;0;Chénens;2177;FR;7.002460146316964;46.73967095998777;fr -Corminboeuf;1720;0;Corminboeuf;2183;FR;7.102325569336771;46.808288013244166;fr -Chésopelloz;1720;2;Corminboeuf;2183;FR;7.07822862597509;46.80713085979804;fr -Matran;1753;0;Corminboeuf;2183;FR;7.089131717173336;46.79289341921122;fr -Cottens FR;1741;0;Cottens (FR);2186;FR;7.033002181115899;46.75063061064679;fr -Ferpicloz;1724;3;Ferpicloz;2194;FR;7.164546347654661;46.74790096242371;fr -Fribourg;1700;0;Fribourg;2196;FR;7.162795392425011;46.806184687102416;fr -Bourguillon;1722;0;Fribourg;2196;FR;7.17695695215557;46.79999268225937;fr -Givisiez;1762;0;Givisiez;2197;FR;7.126584889248;46.81220554096257;fr -Granges-Paccot;1763;0;Granges-Paccot;2198;FR;7.141505396911373;46.82508934746587;fr -Grolley;1772;0;Grolley;2200;FR;7.071152074708786;46.833679464450675;fr -Marly;1723;0;Marly;2206;FR;7.158922528765395;46.77491016562074;fr -Posieux;1725;0;Marly;2206;FR;7.127007515686663;46.76938798243725;fr -Matran;1753;0;Matran;2208;FR;7.096297183502497;46.7864408661945;fr -Neyruz FR;1740;0;Neyruz (FR);2211;FR;7.0652066674156995;46.76789462053092;fr -Pierrafortscha;1723;4;Pierrafortscha;2216;FR;7.185644875486939;46.78696056625305;fr -Nierlet-les-Bois;1772;1;Ponthaux;2217;FR;7.057848522960477;46.81839099384594;fr -Ponthaux;1772;2;Ponthaux;2217;FR;7.04010100910895;46.81557722220601;fr -Le Mouret;1724;0;Le Mouret;2220;FR;7.177776725393025;46.75108202807035;fr -Essert FR;1724;2;Le Mouret;2220;FR;7.1644885065902955;46.73804038392258;fr -Montévraz;1724;4;Le Mouret;2220;FR;7.175906225134545;46.726298468486085;fr -Oberried FR;1724;5;Le Mouret;2220;FR;7.188958914270053;46.73554662857158;fr -Zénauva;1724;7;Le Mouret;2220;FR;7.181991452303234;46.73497826651779;fr -Bonnefontaine;1724;8;Le Mouret;2220;FR;7.200493924261109;46.74028442896074;fr -Tentlingen;1734;0;Le Mouret;2220;FR;7.193631574907446;46.75305184033757;de -Essert FR;1724;2;Treyvaux;2226;FR;7.160026388361182;46.72926180676998;fr -Senèdes;1724;6;Treyvaux;2226;FR;7.146555860365118;46.739393854507846;fr -Treyvaux;1733;0;Treyvaux;2226;FR;7.13756895758336;46.72851462664219;fr -Villars-sur-Glâne;1752;0;Villars-sur-Glâne;2228;FR;7.116042223287758;46.791035279838184;fr -Villarsel-sur-Marly;1723;3;Villarsel-sur-Marly;2230;FR;7.172995624894065;46.76043601230534;fr -Le Mouret;1724;0;Villarsel-sur-Marly;2230;FR;7.186899706601514;46.759620020203165;fr -Posieux;1725;0;Hauterive (FR);2233;FR;7.0949660696811945;46.762324713243686;fr -Ecuvillens;1730;0;Hauterive (FR);2233;FR;7.086861558013547;46.75808351453421;fr -Lentigny;1745;0;La Brillaz;2234;FR;7.003156949074643;46.760076728851786;fr -Corjolens;1754;2;La Brillaz;2234;FR;7.0353186149265206;46.783316351553;fr -Onnens FR;1756;0;La Brillaz;2234;FR;7.039431893373597;46.7758343715594;fr -Lovens;1756;2;La Brillaz;2234;FR;7.020086012492299;46.77287567496876;fr -Lossy;1782;3;La Sonnaz;2235;FR;7.1111382902264655;46.833095082320106;fr -La Corbaz;1782;4;La Sonnaz;2235;FR;7.114982636571673;46.839245528070414;fr -Cormagens;1782;5;La Sonnaz;2235;FR;7.135081658250184;46.83440802004643;fr -Formangueires;1782;6;La Sonnaz;2235;FR;7.1172903638972045;46.82743658532425;fr -Villarlod;1695;0;Gibloux;2236;FR;7.022772189447554;46.705189892570296;fr -Rueyres-St-Laurent;1695;2;Gibloux;2236;FR;7.032659896372008;46.71746551283599;fr -Estavayer-le-Gibloux;1695;3;Gibloux;2236;FR;7.025161520499773;46.7219756584993;fr -Villarsel-le-Gibloux;1695;4;Gibloux;2236;FR;7.0172633053423;46.71408411036252;fr -Vuisternens-en-Ogoz;1696;0;Gibloux;2236;FR;7.053095550374502;46.70780217180018;fr -Farvagny-le-Grand;1726;0;Gibloux;2236;FR;7.0661634392356305;46.72190527046099;fr -Farvagny-le-Petit;1726;2;Gibloux;2236;FR;7.0726903683041;46.72848093017673;fr -Grenilles;1726;3;Gibloux;2236;FR;7.047912327346287;46.727478259994;fr -Posat;1726;4;Gibloux;2236;FR;7.057796789533115;46.73797820678484;fr -Corpataux;1727;0;Gibloux;2236;FR;7.097888125739226;46.74421622957449;fr -Magnedens;1727;2;Gibloux;2236;FR;7.0812721317853455;46.742074604686884;fr -Rossens FR;1728;0;Gibloux;2236;FR;7.100736371083301;46.719982822984406;fr -Prez-vers-Noréaz;1746;0;Prez;2237;FR;7.015078437458142;46.78552448675213;fr -Corserey;1747;0;Prez;2237;FR;6.992911478114278;46.773538702157076;fr -Corjolens;1754;2;Prez;2237;FR;7.031853526385634;46.78390840761629;fr -Noréaz;1757;0;Prez;2237;FR;7.027715190381372;46.802733945917545;fr -Senèdes;1724;6;Bois-d'Amont;2238;FR;7.142645677732334;46.742396035490835;fr -Posieux;1725;0;Bois-d'Amont;2238;FR;7.122328584824736;46.76928734606929;fr -Ependes FR;1731;0;Bois-d'Amont;2238;FR;7.146299525728298;46.75451126135019;fr -Arconciel;1732;0;Bois-d'Amont;2238;FR;7.123039052951078;46.74687140903969;fr -Courgevaux;1796;0;Courgevaux;2250;FR;7.1120307806632646;46.907333955427234;de -Murten;3280;0;Courgevaux;2250;FR;7.107450996749262;46.91638099056773;de -Villarepos;1583;0;Courtepin;2254;FR;7.072391356277005;46.88357762823259;fr -Pensier;1783;0;Courtepin;2254;FR;7.1352132244697115;46.84425977046507;fr -Barberêche;1783;4;Courtepin;2254;FR;7.161290892612909;46.85666949136571;fr -Courtepin;1784;0;Courtepin;2254;FR;7.126077302473586;46.86369497092609;fr -Wallenried;1784;3;Courtepin;2254;FR;7.1154393532739775;46.87456020146565;fr -Courtaman;1791;0;Courtepin;2254;FR;7.130393072143025;46.870804004801705;fr -Courlevon;1795;0;Courtepin;2254;FR;7.105562272251033;46.882776817516735;de -Kleingurmels;3212;2;Courtepin;2254;FR;7.185825507129289;46.88313132138547;de -Cressier FR;1785;0;Cressier (FR);2257;FR;7.1402260788608745;46.89817992577833;fr -Fräschels;3284;0;Fräschels;2258;FR;7.211127039457949;46.995400204943195;de -Greng;3280;4;Greng;2261;FR;7.091329057613893;46.91375257122266;de -Cordast;1792;0;Gurmels;2262;FR;7.153182508001439;46.87180203244083;de -Guschelmuth;1792;2;Gurmels;2262;FR;7.1354501939459825;46.88058973110312;de -Kriechenwil;3179;0;Gurmels;2262;FR;7.206543656191635;46.9174013110861;de -Gümmenen;3205;0;Gurmels;2262;FR;7.232591701580618;46.93206916380103;de -Wallenbuch;3206;2;Gurmels;2262;FR;7.224740933016484;46.929641548621085;de -Gurmels;3212;0;Gurmels;2262;FR;7.17191004486233;46.89273159937798;de -Kleingurmels;3212;2;Gurmels;2262;FR;7.1861303548725015;46.8852948035059;de -Liebistorf;3213;0;Gurmels;2262;FR;7.194327147241701;46.908422330885415;de -Wileroltigen;3207;0;Kerzers;2265;FR;7.2282158118247555;46.97904476891825;de -Golaten;3207;2;Kerzers;2265;FR;7.227957569041679;46.985325518733156;de -Kerzers;3210;0;Kerzers;2265;FR;7.196383123377338;46.97614661563753;de -Kleinbösingen;3213;2;Kleinbösingen;2266;FR;7.205129383224126;46.894250146938205;de -Murten;3280;0;Meyriez;2271;FR;7.1113411345659285;46.923868282771245;de -Meyriez;3280;2;Meyriez;2271;FR;7.109092019800207;46.924965564835375;de -Misery;1721;1;Misery-Courtion;2272;FR;7.069174422939671;46.85135490216962;fr -Cormérod;1721;2;Misery-Courtion;2272;FR;7.088550210706083;46.86561142371358;fr -Courtion;1721;4;Misery-Courtion;2272;FR;7.0693372243930375;46.85779653950122;fr -Cournillens;1721;5;Misery-Courtion;2272;FR;7.101822218572852;46.857362972003884;fr -Muntelier;3286;0;Muntelier;2274;FR;7.124019439549017;46.93542576825936;de -Clavaleyres;1595;2;Murten;2275;FR;7.091256086383113;46.899457820914115;de -Jeuss;1793;0;Murten;2275;FR;7.164065286802711;46.903324787189966;de -Salvenach;1794;0;Murten;2275;FR;7.150409021665595;46.91254268126815;de -Courlevon;1795;0;Murten;2275;FR;7.111069098635409;46.89120495885628;de -Gempenach;3215;0;Murten;2275;FR;7.197575050986864;46.9407342919469;de -Büchslen;3215;2;Murten;2275;FR;7.1796580033328;46.945196882641106;de -Lurtigen;3215;3;Murten;2275;FR;7.171721479438307;46.92896896738658;de -Murten;3280;0;Murten;2275;FR;7.119109668067299;46.92842126857147;de -Greng;3280;4;Murten;2275;FR;7.097634686749678;46.91542879743899;de -Galmiz;3285;0;Murten;2275;FR;7.157852322806792;46.94996030283689;de -Kerzers;3210;0;Ried bei Kerzers;2276;FR;7.193890960110673;46.96311807404678;de -Ried b. Kerzers;3216;0;Ried bei Kerzers;2276;FR;7.186141057351152;46.9543510746628;de -Agriswil;3216;2;Ried bei Kerzers;2276;FR;7.197171161842822;46.95421085803927;de -Ulmiz;3214;0;Ulmiz;2278;FR;7.200690954068558;46.93258399357902;de -Sugiez;1786;0;Mont-Vully;2284;FR;7.11281165318637;46.961888758066166;fr -Môtier (Vully);1787;0;Mont-Vully;2284;FR;7.082981863566911;46.948458898126226;fr -Mur (Vully) FR;1787;1;Mont-Vully;2284;FR;7.0633774688859114;46.94454353259416;fr -Praz (Vully);1788;0;Mont-Vully;2284;FR;7.097282221513365;46.95299745837782;fr -Lugnorre;1789;0;Mont-Vully;2284;FR;7.07021453749761;46.950324912358646;fr -Gampelen;3236;0;Mont-Vully;2284;FR;7.069979300563168;46.97424688161597;de -Brünisried;1719;0;Brünisried;2292;FR;7.279207526561364;46.76027446115288;de -Fribourg;1700;0;Düdingen;2293;FR;7.182953955649426;46.814908180590535;fr -Düdingen;3186;0;Düdingen;2293;FR;7.1906667781941245;46.84603604857306;de -Giffers;1735;0;Giffers;2294;FR;7.21040211902578;46.761142309696424;de -Bösingen;3178;0;Bösingen;2295;FR;7.228379375436857;46.89420051645175;de -Wünnewil;3184;0;Bösingen;2295;FR;7.2680489641197985;46.889745457713765;de -Schmitten FR;3185;0;Bösingen;2295;FR;7.239531135438957;46.86769389005952;de -Heitenried;1714;0;Heitenried;2296;FR;7.298664564347069;46.829909445042546;de -Plaffeien;1716;0;Plaffeien;2299;FR;7.286055141223184;46.742276171816826;de -Oberschrot;1716;2;Plaffeien;2299;FR;7.273818280115437;46.739498173538884;de -Schwarzsee;1716;3;Plaffeien;2299;FR;7.291299732398086;46.67049076841196;de -Brünisried;1719;0;Plaffeien;2299;FR;7.284859767174973;46.748420143606104;de -Zumholz;1719;2;Plaffeien;2299;FR;7.291017955888431;46.75423562938174;de -Sangernboden;1738;0;Plaffeien;2299;FR;7.341541467862188;46.678958986529274;de -Schwarzsee;1716;3;Plasselb;2300;FR;7.254054399332708;46.67387105023943;de -Plasselb;1737;0;Plasselb;2300;FR;7.251942735993891;46.73550965403241;fr -Rechthalten;1718;0;Rechthalten;2301;FR;7.2408093545092145;46.768330074156175;de -Giffers;1735;0;Rechthalten;2301;FR;7.2514917601184745;46.7522748982339;de -Bonnefontaine;1724;8;St. Silvester;2303;FR;7.197179627350956;46.7510994022775;fr -Tentlingen;1734;0;St. Silvester;2303;FR;7.1999040706991755;46.755139766484945;de -St. Silvester;1736;0;St. Silvester;2303;FR;7.224643680411764;46.74107739799306;de -Alterswil FR;1715;0;St. Ursen;2304;FR;7.27036318681425;46.78014377327737;de -St. Ursen;1717;0;St. Ursen;2304;FR;7.221258568066896;46.79127110375441;de -Rechthalten;1718;0;St. Ursen;2304;FR;7.256828771563993;46.774179314994065;de -Tafers;1712;0;Schmitten (FR);2305;FR;7.24802951462463;46.827504028943125;de -St. Antoni;1713;0;Schmitten (FR);2305;FR;7.2609281231789;46.83440661126155;de -Ueberstorf;3182;0;Schmitten (FR);2305;FR;7.282438255401729;46.85448046774001;de -Schmitten FR;3185;0;Schmitten (FR);2305;FR;7.2494918294744615;46.8563358832448;de -Fribourg;1700;0;Tafers;2306;FR;7.188391770827686;46.8070777622443;fr -Tafers;1712;0;Tafers;2306;FR;7.217607776435563;46.815422127124116;de -St. Antoni;1713;0;Tafers;2306;FR;7.260732316492704;46.8222506439864;de -Heitenried;1714;0;Tafers;2306;FR;7.29563774669392;46.80693674819408;de -Alterswil FR;1715;0;Tafers;2306;FR;7.258818012232352;46.79556618446954;de -St. Ursen;1717;0;Tafers;2306;FR;7.2222736138577925;46.79566931354869;de -Ueberstorf;3182;0;Tafers;2306;FR;7.285750542964887;46.8544870287198;de -Schmitten FR;3185;0;Tafers;2306;FR;7.27418225153888;46.8481399591827;de -Tentlingen;1734;0;Tentlingen;2307;FR;7.197690529329193;46.77042665454588;de -Ueberstorf;3182;0;Ueberstorf;2308;FR;7.31434092873176;46.86546330251754;de -Flamatt;3175;0;Wünnewil-Flamatt;2309;FR;7.310035269201682;46.89036329934236;de -Neuenegg;3176;0;Wünnewil-Flamatt;2309;FR;7.296921854124763;46.892517380470004;de -Wünnewil;3184;0;Wünnewil-Flamatt;2309;FR;7.275229604836734;46.87459870053762;de -Schmitten FR;3185;0;Wünnewil-Flamatt;2309;FR;7.27108385891113;46.86272139110716;de -Attalens;1616;0;Attalens;2321;FR;6.8492212995060875;46.510846230728625;fr -Tatroz;1617;2;Attalens;2321;FR;6.869067045697452;46.526165416005185;fr -Les Monts-de-Corsier;1808;0;Attalens;2321;FR;6.874041229464617;46.50850966576548;fr -Bossonnens;1615;0;Bossonnens;2323;FR;6.850066413575109;46.521803990800045;fr -Châtel-St-Denis;1618;0;Châtel-Saint-Denis;2325;FR;6.901071812593163;46.528800162737646;fr -Les Paccots;1619;0;Châtel-Saint-Denis;2325;FR;6.944099399809023;46.522708953260015;fr -Granges (Veveyse);1614;0;Granges (Veveyse);2328;FR;6.8312485672213406;46.52466494943169;fr -Remaufens;1617;0;Remaufens;2333;FR;6.878652515328479;46.527646263061186;fr -Châtel-St-Denis;1618;0;Remaufens;2333;FR;6.889529041102941;46.52813841355194;fr -St-Martin FR;1609;0;Saint-Martin (FR);2335;FR;6.869391627967727;46.57589817051778;fr -Besencens;1609;2;Saint-Martin (FR);2335;FR;6.869690828265548;46.58731787580109;fr -Fiaugères;1609;3;Saint-Martin (FR);2335;FR;6.891219476911926;46.58622264646245;fr -Semsales;1623;0;Semsales;2336;FR;6.927713851910756;46.572886611485416;fr -Vaulruz;1627;0;Semsales;2336;FR;6.957602613153514;46.60036376653619;fr -Bulle;1630;0;Semsales;2336;FR;6.984566594068878;46.5693580330251;fr -Porsel;1699;0;Le Flon;2337;FR;6.865981305935991;46.599764482737825;fr -Pont (Veveyse);1699;2;Le Flon;2337;FR;6.853658209192716;46.589262760125315;fr -Bouloz;1699;3;Le Flon;2337;FR;6.8838005587930935;46.611604134287894;fr -Le Crêt-près-Semsales;1611;0;La Verrerie;2338;FR;6.910090852951701;46.60893899149365;fr -La Verrerie;1624;0;La Verrerie;2338;FR;6.921401030188855;46.58937116932934;fr -Grattavache;1624;2;La Verrerie;2338;FR;6.919290363311655;46.595024516037185;fr -Progens;1624;3;La Verrerie;2338;FR;6.9102598865226454;46.58346506040361;fr -Progens;1624;3;La Verrerie;2338;FR;6.940931484822873;46.59539483759418;fr -Egerkingen;4622;0;Egerkingen;2401;SO;7.796297075551116;47.32619560752585;de -Härkingen;4624;0;Härkingen;2402;SO;7.823842173105594;47.306442750997505;de -Kestenholz;4703;0;Kestenholz;2403;SO;7.754089650827698;47.27620178609597;de -Egerkingen;4622;0;Neuendorf;2404;SO;7.801376549415501;47.31271215247281;de -Neuendorf;4623;0;Neuendorf;2404;SO;7.79666401339499;47.301543288649974;de -Niederbuchsiten;4626;0;Niederbuchsiten;2405;SO;7.772376865914448;47.294808068988694;de -Neuendorf;4623;0;Oberbuchsiten;2406;SO;7.779655340514005;47.308537280089695;de -Oberbuchsiten;4625;0;Oberbuchsiten;2406;SO;7.765857210145295;47.311610191042725;de -Niederbuchsiten;4626;0;Oberbuchsiten;2406;SO;7.773491464402735;47.30239997146333;de -Holderbank SO;4718;0;Oberbuchsiten;2406;SO;7.754110121259789;47.32594804884629;de -Oensingen;4702;0;Oensingen;2407;SO;7.723819210622502;47.28729968526529;de -Balsthal;4710;0;Oensingen;2407;SO;7.702146439368664;47.297738948859184;de -Wolfwil;4628;0;Wolfwil;2408;SO;7.79957789959384;47.26917633101191;de -Seehof;2747;2;Aedermannsdorf;2421;SO;7.556865401302722;47.31635518966802;de -Aedermannsdorf;4714;0;Aedermannsdorf;2421;SO;7.606802466986859;47.30507115258385;de -Mümliswil;4717;0;Aedermannsdorf;2421;SO;7.584841939083303;47.32308585050954;de -Ramiswil;4719;0;Aedermannsdorf;2421;SO;7.575954037119932;47.325967432628914;de -Balsthal;4710;0;Balsthal;2422;SO;7.698198091865203;47.31193361260734;de -Mümliswil;4717;0;Balsthal;2422;SO;7.7218948752160275;47.334945621038216;de -Herbetswil;4715;0;Herbetswil;2424;SO;7.593009172840757;47.297146232166234;de -Welschenrohr;4716;0;Herbetswil;2424;SO;7.538072764935273;47.294746570974176;de -Langenbruck;4438;0;Holderbank (SO);2425;SO;7.758860466330383;47.342095143791845;de -Holderbank SO;4718;0;Holderbank (SO);2425;SO;7.753414944190082;47.333471625018475;de -Laupersdorf;4712;0;Laupersdorf;2426;SO;7.647457503107374;47.31523625830742;de -Mümliswil;4717;0;Laupersdorf;2426;SO;7.636272557101614;47.332120079368856;de -Matzendorf;4713;0;Matzendorf;2427;SO;7.629279003601983;47.3054675758572;de -Mümliswil;4717;0;Matzendorf;2427;SO;7.6177172228214625;47.32987042609442;de -Beinwil SO;4229;0;Mümliswil-Ramiswil;2428;SO;7.6480929857556665;47.36509064264985;de -Reigoldswil;4418;0;Mümliswil-Ramiswil;2428;SO;7.699036206474028;47.371147610926464;de -Mümliswil;4717;0;Mümliswil-Ramiswil;2428;SO;7.702478407014611;47.3436561634875;de -Ramiswil;4719;0;Mümliswil-Ramiswil;2428;SO;7.659586452906282;47.345689440054514;de -Welschenrohr;4716;0;Welschenrohr-Gänsbrunnen;2430;SO;7.518093126802251;47.279935051230446;de -Gänsbrunnen;4716;1;Welschenrohr-Gänsbrunnen;2430;SO;7.470961200514102;47.263912757445915;de -Biezwil;4585;0;Biezwil;2445;SO;7.417285808386087;47.11398250355777;de -Lüterkofen;4571;1;Lüterkofen-Ichertswil;2455;SO;7.507223163557783;47.161121488083026;de -Ichertswil;4571;2;Lüterkofen-Ichertswil;2455;SO;7.4958191061897725;47.16066664091715;de -Lüterswil;4584;2;Lüterswil-Gächliwil;2456;SO;7.438106570601323;47.12087669155483;de -Gächliwil;4584;3;Lüterswil-Gächliwil;2456;SO;7.447838887792969;47.129676539601775;de -Messen;3254;0;Messen;2457;SO;7.448716074807956;47.09148744628277;de -Balm b. Messen;3254;2;Messen;2457;SO;7.431546790667318;47.10370982241305;de -Brunnenthal;3307;0;Messen;2457;SO;7.469006057822978;47.08645905840389;de -Oberramsern;4588;2;Messen;2457;SO;7.465395567371642;47.11372730331302;de -Schnottwil;3253;0;Schnottwil;2461;SO;7.390801931712225;47.111009944851325;de -Unterramsern;4588;0;Unterramsern;2463;SO;7.482666734084113;47.11774042242749;de -Nennigkofen;4574;0;Lüsslingen-Nennigkofen;2464;SO;7.493967911739041;47.18482839433403;de -Lüsslingen;4574;1;Lüsslingen-Nennigkofen;2464;SO;7.500616689429671;47.18796960601955;de -Tscheppach;4576;0;Buchegg;2465;SO;7.48271230106385;47.14868026417201;de -Hessigkofen;4577;0;Buchegg;2465;SO;7.459808855044866;47.13819092803915;de -Bibern SO;4578;0;Buchegg;2465;SO;7.4535396142097685;47.14815986442197;de -Gossliwil;4579;0;Buchegg;2465;SO;7.434819992509376;47.13651442525345;de -Küttigkofen;4581;0;Buchegg;2465;SO;7.513379055029564;47.15144679460385;de -Brügglen;4582;0;Buchegg;2465;SO;7.4955408095126534;47.14374161811097;de -Mühledorf SO;4583;0;Buchegg;2465;SO;7.47834123681428;47.133908615237196;de -Aetigkofen;4583;2;Buchegg;2465;SO;7.466683389647051;47.12321926604243;de -Kyburg-Buchegg;4586;0;Buchegg;2465;SO;7.512875601500134;47.14137374174773;de -Aetingen;4587;0;Buchegg;2465;SO;7.507750613039571;47.13196180402078;de -Brittern;4588;1;Buchegg;2465;SO;7.494776155063006;47.1209436131755;de -Biel-Benken BL;4105;0;Bättwil;2471;SO;7.510763830869662;47.50249283273362;de -Bättwil;4112;1;Bättwil;2471;SO;7.509967346528962;47.49192470857189;de -Büren SO;4413;0;Büren (SO);2472;SO;7.670593468012855;47.44701710822687;de -Dornach;4143;0;Dornach;2473;SO;7.61668150891676;47.478680368501024;de -Gempen;4145;0;Gempen;2474;SO;7.655658523619366;47.475883884904306;de -Hochwald;4146;0;Hochwald;2475;SO;7.641027882713548;47.4561308447225;de -Flüh;4112;2;Hofstetten-Flüh;2476;SO;7.498619585216355;47.48351439549773;de -Hofstetten SO;4114;0;Hofstetten-Flüh;2476;SO;7.512363473791688;47.4772816197209;de -Mariastein;4115;0;Hofstetten-Flüh;2476;SO;7.488659533175784;47.48236343390677;de -Mariastein;4115;0;Metzerlen-Mariastein;2477;SO;7.4918786338192565;47.476301354192536;de -Metzerlen;4116;0;Metzerlen-Mariastein;2477;SO;7.465929915042383;47.46569680627432;de -Nuglar;4412;0;Nuglar-St. Pantaleon;2478;SO;7.6915709831791235;47.46999400558233;de -St. Pantaleon;4421;0;Nuglar-St. Pantaleon;2478;SO;7.690827728483004;47.45964090963616;de -Rodersdorf;4118;0;Rodersdorf;2479;SO;7.456108762993546;47.481157897009886;de -Himmelried;4204;0;Seewen;2480;SO;7.613509346015659;47.41942938436409;de -Seewen SO;4206;0;Seewen;2480;SO;7.660308122909247;47.434629376624606;de -Witterswil;4108;0;Witterswil;2481;SO;7.528366730776671;47.487461915551975;de -Bättwil;4112;1;Witterswil;2481;SO;7.521411785742797;47.49590972689506;de -Hauenstein;4633;0;Hauenstein-Ifenthal;2491;SO;7.871330135727291;47.37775486914992;de -Kienberg;4468;0;Kienberg;2492;SO;7.967763522650118;47.43886744144428;de -Wisen SO;4634;0;Lostorf;2493;SO;7.914944580176904;47.395387198159405;de -Lostorf;4654;0;Lostorf;2493;SO;7.95170538584694;47.383068784992545;de -Däniken SO;4658;0;Niedergösgen;2495;SO;7.979337752949327;47.36409422840391;de -Niedergösgen;5013;0;Niedergösgen;2495;SO;7.988126936479201;47.37741733217601;de -Gretzenbach;5014;0;Niedergösgen;2495;SO;7.981592563537075;47.36369322009159;de -Winznau;4652;0;Obergösgen;2497;SO;7.941457839881411;47.35958262925086;de -Obergösgen;4653;0;Obergösgen;2497;SO;7.955836829637237;47.36247263320103;de -Stüsslingen;4655;0;Stüsslingen;2499;SO;7.974276915480596;47.39427802340245;de -Rohr b. Olten;4655;2;Stüsslingen;2499;SO;7.956269976044763;47.41060533061872;de -Olten;4600;0;Trimbach;2500;SO;7.904434600350334;47.35716327830419;de -Trimbach;4632;0;Trimbach;2500;SO;7.895941195086928;47.3674386240857;de -Wisen SO;4634;0;Trimbach;2500;SO;7.89425140426892;47.381078020710284;de -Winznau;4652;0;Winznau;2501;SO;7.930110269914189;47.36355834666422;de -Lostorf;4654;0;Winznau;2501;SO;7.909468765392092;47.37693136014219;de -Wisen SO;4634;0;Wisen (SO);2502;SO;7.8873303678029325;47.39290215112462;de -Erlinsbach SO;5015;0;Erlinsbach (SO);2503;SO;8.000548307748778;47.40068604893173;de -Barmelweid;5017;0;Erlinsbach (SO);2503;SO;7.963764696662474;47.41944512202089;de -Grasswil;3365;0;Aeschi (SO);2511;SO;7.688314262092744;47.15292011430112;de -Aeschi SO;4556;0;Aeschi (SO);2511;SO;7.66089695847235;47.18151656521642;de -Burgäschi;4556;3;Aeschi (SO);2511;SO;7.671085154747628;47.172710265377155;de -Steinhof SO;4556;4;Aeschi (SO);2511;SO;7.6863317839206085;47.15915361959083;de -Solothurn;4500;0;Biberist;2513;SO;7.535264115313439;47.19662275537341;de -Zuchwil;4528;0;Biberist;2513;SO;7.562409866258427;47.19659911711439;de -Biberist;4562;0;Biberist;2513;SO;7.5585759164976025;47.18339550278803;de -Lüsslingen;4574;1;Biberist;2513;SO;7.512543216984928;47.19404050384327;de -Bolken;4556;2;Bolken;2514;SO;7.6663066596324825;47.19129744688232;de -Luterbach;4542;0;Deitingen;2516;SO;7.601314810850783;47.225830763237326;de -Deitingen;4543;0;Deitingen;2516;SO;7.619133808603117;47.21126869736643;de -Derendingen;4552;0;Derendingen;2517;SO;7.586544185693632;47.19476647225747;de -Etziken;4554;0;Etziken;2518;SO;7.647335113097721;47.18937989876029;de -Gerlafingen;4563;0;Gerlafingen;2519;SO;7.571666327700666;47.17051122417577;de -Halten;4566;2;Halten;2520;SO;7.608298567530413;47.169825565423004;de -Horriwil;4557;0;Horriwil;2523;SO;7.622862720686456;47.180438575310696;de -Hüniken;4554;2;Hüniken;2524;SO;7.635783154730595;47.18306529706879;de -Gerlafingen;4563;0;Kriegstetten;2525;SO;7.58731765394231;47.17373782928252;de -Kriegstetten;4566;0;Kriegstetten;2525;SO;7.594615546110406;47.17430596871883;de -Lohn-Ammannsegg;4573;0;Lohn-Ammannsegg;2526;SO;7.529497202148345;47.17146870872777;de -Luterbach;4542;0;Luterbach;2527;SO;7.5813692698376824;47.21356405645555;de -Derendingen;4552;0;Luterbach;2527;SO;7.584671002260281;47.20510083407524;de -Gerlafingen;4563;0;Obergerlafingen;2528;SO;7.585572449721314;47.172355549292035;de -Obergerlafingen;4564;0;Obergerlafingen;2528;SO;7.584126614693865;47.16098784629211;de -Oekingen;4566;3;Oekingen;2529;SO;7.606145787052679;47.18129372539712;de -Recherswil;4565;0;Recherswil;2530;SO;7.597316530485395;47.16149981215367;de -Subingen;4553;0;Subingen;2532;SO;7.618374396295375;47.19505858609941;de -Solothurn;4500;0;Zuchwil;2534;SO;7.546794612137474;47.20123819547099;de -Zuchwil;4528;0;Zuchwil;2534;SO;7.555759631344911;47.202684025196874;de -Hersiwil;4558;0;Drei Höfe;2535;SO;7.6347692495332655;47.1657558675692;de -Heinrichswil;4558;2;Drei Höfe;2535;SO;7.634275675117344;47.15661882501295;de -Winistorf;4558;3;Drei Höfe;2535;SO;7.650537949325098;47.15264668887617;de -Balmberg;4524;2;Balm bei Günsberg;2541;SO;7.551725743301835;47.26999016374785;de -Oberbalmberg;4524;3;Balm bei Günsberg;2541;SO;7.5393107476592744;47.26439216017489;de -Balm b. Günsberg;4525;0;Balm bei Günsberg;2541;SO;7.554071229228513;47.25347933929094;de -Solothurn;4500;0;Bellach;2542;SO;7.508814957678434;47.1999265160941;de -Bellach;4512;0;Bellach;2542;SO;7.50098414410151;47.2121407888905;de -Bettlach;2544;0;Bettlach;2543;SO;7.42970945751733;47.2033938522557;de -Feldbrunnen;4532;0;Feldbrunnen-St. Niklaus;2544;SO;7.55280382691536;47.22124128194957;de -Flumenthal;4534;0;Flumenthal;2545;SO;7.5980960302086675;47.235929138771674;de -Deitingen;4543;0;Flumenthal;2545;SO;7.614582185276273;47.22737821355789;de -Grenchen;2540;0;Grenchen;2546;SO;7.394721019989022;47.19281434377215;de -Günsberg;4524;0;Günsberg;2547;SO;7.576305325868462;47.25688495481167;de -Herbetswil;4715;0;Günsberg;2547;SO;7.570896834943269;47.27134053998022;de -Hubersdorf;4535;0;Hubersdorf;2548;SO;7.588778994348915;47.24478309342452;de -Kammersrohr;4535;2;Kammersrohr;2549;SO;7.593766235762706;47.254003604055626;de -Solothurn;4500;0;Langendorf;2550;SO;7.516234759403475;47.21392427118821;de -Langendorf;4513;0;Langendorf;2550;SO;7.514550726964569;47.221745181576175;de -Rüttenen;4522;0;Langendorf;2550;SO;7.525530398312264;47.22778708183073;de -Bellach;4512;0;Lommiswil;2551;SO;7.483838190683959;47.21797266118722;de -Lommiswil;4514;0;Lommiswil;2551;SO;7.4636405202453275;47.22244105190212;de -Oberdorf SO;4515;0;Oberdorf (SO);2553;SO;7.502121390833773;47.22774836254265;de -Weissenstein b. Solothurn;4515;1;Oberdorf (SO);2553;SO;7.505983345937719;47.25101845906098;de -Rüttenen;4522;0;Oberdorf (SO);2553;SO;7.516068011871779;47.23494590629182;de -Niederwil SO;4523;0;Riedholz;2554;SO;7.5699757619226835;47.24936790316078;de -Riedholz;4533;0;Riedholz;2554;SO;7.565393484724851;47.23112382086797;de -Solothurn;4500;0;Rüttenen;2555;SO;7.531723146912232;47.22103245272973;de -Rüttenen;4522;0;Rüttenen;2555;SO;7.530112453194684;47.230465621444246;de -Feldbrunnen;4532;0;Rüttenen;2555;SO;7.541483992116207;47.22291541827796;de -Selzach;2545;0;Selzach;2556;SO;7.453931115449455;47.20607439165216;de -Bellach;4512;0;Selzach;2556;SO;7.475392429349929;47.20722025928349;de -Nennigkofen;4574;0;Selzach;2556;SO;7.481968511533081;47.1934871140492;de -Boningen;4618;0;Boningen;2571;SO;7.856483646909357;47.30808487332486;de -Aarburg;4663;0;Boningen;2571;SO;7.880246374292883;47.312384984298234;de -Däniken SO;4658;0;Däniken;2572;SO;7.982450840918766;47.3552507682447;de -Dulliken;4657;0;Dulliken;2573;SO;7.9462469689500415;47.347869971903535;de -Walterswil SO;5746;0;Dulliken;2573;SO;7.949977517313107;47.33619893641211;de -Wöschnau;5012;3;Eppenberg-Wöschnau;2574;SO;8.02510955673538;47.383520260622966;de -Eppenberg;5012;4;Eppenberg-Wöschnau;2574;SO;8.023635285954608;47.37694944481511;de -Fulenbach;4629;0;Fulenbach;2575;SO;7.831352088540428;47.277265055830746;de -Däniken SO;4658;0;Gretzenbach;2576;SO;7.97380374248418;47.36372143392197;de -Gretzenbach;5014;0;Gretzenbach;2576;SO;7.995936018823447;47.361737639338756;de -Hägendorf;4614;0;Gunzgen;2578;SO;7.824011050618799;47.3248655797942;de -Kappel SO;4616;0;Gunzgen;2578;SO;7.848096825037312;47.31205457507358;de -Gunzgen;4617;0;Gunzgen;2578;SO;7.833230209208016;47.31570990779996;de -Langenbruck;4438;0;Hägendorf;2579;SO;7.799442068758694;47.35065745171731;de -Hägendorf;4614;0;Hägendorf;2579;SO;7.836697088020383;47.3379137105608;de -Allerheiligenberg;4615;0;Hägendorf;2579;SO;7.814875342375677;47.35253093689586;de -Kappel SO;4616;0;Kappel (SO);2580;SO;7.8544746756600095;47.322503816716704;de -Boningen;4618;0;Kappel (SO);2580;SO;7.8637918326411524;47.31129251464916;de -Olten;4600;0;Olten;2581;SO;7.898623254589295;47.35095126851565;de -Wangen b. Olten;4612;0;Olten;2581;SO;7.883055133870987;47.33696233900955;de -Aarburg;4663;0;Olten;2581;SO;7.889249985422071;47.31353626467574;de -Rickenbach SO;4613;0;Rickenbach (SO);2582;SO;7.8546975866886335;47.34239763057718;de -Schönenwerd;5012;0;Schönenwerd;2583;SO;8.010919881293042;47.36955257993829;de -Olten;4600;0;Starrkirch-Wil;2584;SO;7.919202113563413;47.33578241990595;de -Starrkirch-Wil;4656;0;Starrkirch-Wil;2584;SO;7.929461334451165;47.35260902920337;de -Dulliken;4657;0;Starrkirch-Wil;2584;SO;7.929429437368283;47.354314071186316;de -Walterswil SO;5746;0;Walterswil (SO);2585;SO;7.9716555189071805;47.328060617868054;de -Wangen b. Olten;4612;0;Wangen bei Olten;2586;SO;7.877376740945794;47.34266994510035;de -Trimbach;4632;0;Wangen bei Olten;2586;SO;7.872187023680791;47.358916946254766;de -Solothurn;4500;0;Solothurn;2601;SO;7.539730129000775;47.20842622149813;de -Bärschwil;4252;0;Bärschwil;2611;SO;7.473087271589357;47.38340104689255;de -Liesberg;4253;0;Bärschwil;2611;SO;7.4435997516340295;47.401089511133506;de -Schelten;2827;2;Beinwil (SO);2612;SO;7.567065317096541;47.34030674828749;de -Beinwil SO;4229;0;Beinwil (SO);2612;SO;7.58745367383927;47.36208704904361;de -Ramiswil;4719;0;Beinwil (SO);2612;SO;7.591260139490344;47.34033217127568;de -Breitenbach;4226;0;Breitenbach;2613;SO;7.545015084250963;47.407562238114025;de -Fehren;4232;0;Breitenbach;2613;SO;7.577566403238748;47.407765833115675;de -Büsserach;4227;0;Büsserach;2614;SO;7.539855217708962;47.38978625144593;de -Erschwil;4228;0;Erschwil;2615;SO;7.537197054683178;47.37302936661651;de -Meltingen;4233;0;Erschwil;2615;SO;7.566866903083515;47.38254841377117;de -Fehren;4232;0;Fehren;2616;SO;7.580275347432718;47.39631309249755;de -Grindel;4247;0;Grindel;2617;SO;7.501375271878777;47.38136563172928;de -Himmelried;4204;0;Himmelried;2618;SO;7.598507301840952;47.422155897081495;de -Seewen SO;4206;0;Himmelried;2618;SO;7.6124223544510645;47.431097761356845;de -Roggenburg;2814;0;Kleinlützel;2619;SO;7.379738520458528;47.42164422380235;de -Kleinlützel;4245;0;Kleinlützel;2619;SO;7.417971487439651;47.42426439353583;de -Beinwil SO;4229;0;Meltingen;2620;SO;7.5898199872764796;47.37131450887515;de -Meltingen;4233;0;Meltingen;2620;SO;7.588109820689691;47.38646905270415;de -Himmelried;4204;0;Nunningen;2621;SO;7.598988180101993;47.414247791315795;de -Nunningen;4208;0;Nunningen;2621;SO;7.619250934102281;47.39339796044525;de -Meltingen;4233;0;Zullwil;2622;SO;7.598428665092466;47.38666366727552;de -Zullwil;4234;0;Zullwil;2622;SO;7.599841400813107;47.39115247591701;de -Basel;4001;0;Basel;2701;BS;7.588870113343706;47.55637068489486;de -Basel;4031;0;Basel;2701;BS;7.576346251909282;47.562486243105496;de -Basel;4031;0;Basel;2701;BS;7.582833473894854;47.56196605555984;de -Basel;4051;0;Basel;2701;BS;7.586697633712084;47.554190537244246;de -Basel;4052;0;Basel;2701;BS;7.596174402480728;47.52247160085576;de -Basel;4052;0;Basel;2701;BS;7.609107209580731;47.54502701755553;de -Basel;4053;0;Basel;2701;BS;7.601012683002598;47.53833137100621;de -Basel;4054;0;Basel;2701;BS;7.568940143971525;47.55049380824938;de -Basel;4055;0;Basel;2701;BS;7.563961744031856;47.56372775378096;de -Basel;4056;0;Basel;2701;BS;7.5735336282100585;47.56951486372504;de -Basel;4057;0;Basel;2701;BS;7.599656338067886;47.57607136035068;de -Basel;4058;0;Basel;2701;BS;7.613484948991055;47.567713662937244;de -Basel;4059;0;Basel;2701;BS;7.593411728698013;47.53160364257617;de -Bettingen;4126;0;Bettingen;2702;BS;7.6649692026268665;47.57096074487957;de -Basel;4058;0;Riehen;2703;BS;7.627474010062436;47.56791672723849;de -Riehen;4125;0;Riehen;2703;BS;7.649218137671261;47.58471114896281;de -Aesch BL;4147;0;Aesch (BL);2761;BL;7.596577758556619;47.46685205427124;de -Reinach BL;4153;0;Aesch (BL);2761;BL;7.596598753295694;47.48372298620841;de -Allschwil;4123;0;Allschwil;2762;BL;7.535641462998725;47.550620945832755;de -Arlesheim;4144;0;Arlesheim;2763;BL;7.626761740150684;47.49508231367093;de -Biel-Benken BL;4105;0;Biel-Benken;2764;BL;7.519286263971317;47.50357107152688;de -Basel;4053;0;Binningen;2765;BL;7.585858142650092;47.54089857636369;de -Bruderholz;4101;0;Binningen;2765;BL;7.582091789821619;47.52857714968418;de -Binningen;4102;0;Binningen;2765;BL;7.577510759408908;47.5391581535978;de -Birsfelden;4127;0;Birsfelden;2766;BL;7.625557759220216;47.555447725174254;de -Bruderholz;4101;0;Bottmingen;2767;BL;7.578850637706163;47.52781947964438;de -Binningen;4102;0;Bottmingen;2767;BL;7.565983595544649;47.5289382418449;de -Bottmingen;4103;0;Bottmingen;2767;BL;7.574453419546123;47.5257576530981;de -Ettingen;4107;0;Ettingen;2768;BL;7.541140750534698;47.480392897471226;de -Basel;4052;0;Münchenstein;2769;BL;7.616674139551041;47.53591280692544;de -Münchenstein;4142;0;Münchenstein;2769;BL;7.6215552027864355;47.51368936361954;de -Reinach BL;4153;0;Münchenstein;2769;BL;7.607594623563755;47.50485024098923;de -Birsfelden;4127;0;Muttenz;2770;BL;7.65843277627821;47.54301108592248;de -Muttenz;4132;0;Muttenz;2770;BL;7.654465313913493;47.52099882926945;de -Pratteln;4133;0;Muttenz;2770;BL;7.66762512450171;47.53307010851148;de -Münchenstein;4142;0;Muttenz;2770;BL;7.625237816299904;47.524327623052706;de -Oberwil BL;4104;0;Oberwil (BL);2771;BL;7.554009430473809;47.51368881069738;de -Aesch BL;4147;0;Pfeffingen;2772;BL;7.5665879453520875;47.46345753251366;de -Pfeffingen;4148;0;Pfeffingen;2772;BL;7.58894109513398;47.459481900122555;de -Arlesheim;4144;0;Reinach (BL);2773;BL;7.607031976029323;47.50270677460021;de -Reinach BL;4153;0;Reinach (BL);2773;BL;7.590496496968148;47.49265265778774;de -Schönenbuch;4124;0;Schönenbuch;2774;BL;7.50588975842835;47.5348391789757;de -Therwil;4106;0;Therwil;2775;BL;7.553658001057792;47.497230179002415;de -Reinach BL;4153;0;Therwil;2775;BL;7.571668697002764;47.49199948975924;de -Blauen;4223;0;Blauen;2781;BL;7.5181034928341095;47.45076301256308;de -Brislach;4225;0;Brislach;2782;BL;7.543649192705194;47.418054896663655;de -Laufen;4242;0;Brislach;2782;BL;7.520828092450488;47.419507355333856;de -Burg im Leimental;4117;0;Burg im Leimental;2783;BL;7.4394950299998;47.45607024809806;de -Laufen;4242;0;Dittingen;2784;BL;7.510807617253704;47.42632915730344;de -Dittingen;4243;0;Dittingen;2784;BL;7.496297572492436;47.44214040083346;de -Duggingen;4202;0;Duggingen;2785;BL;7.606372771928876;47.452301733755306;de -Grellingen;4203;0;Grellingen;2786;BL;7.587594495610833;47.441671893072005;de -Laufen;4242;0;Laufen;2787;BL;7.498428335198225;47.42111498269406;de -Wahlen b. Laufen;4246;0;Laufen;2787;BL;7.514934562438711;47.41038324185917;de -Bärschwil;4252;0;Laufen;2787;BL;7.480299933850333;47.3944733697163;de -Liesberg;4253;0;Liesberg;2788;BL;7.42177825570078;47.396962523969876;de -Liesberg Dorf;4254;0;Liesberg;2788;BL;7.429214623760897;47.40437085598599;de -Nenzlingen;4224;0;Nenzlingen;2789;BL;7.563705183654132;47.44807862495942;de -Roggenburg;2814;0;Roggenburg;2790;BL;7.341370045891763;47.43304566745117;de -Kleinlützel;4245;0;Roggenburg;2790;BL;7.382095069087944;47.43076115647306;de -Röschenz;4244;0;Röschenz;2791;BL;7.47234125401743;47.427797784130604;de -Wahlen b. Laufen;4246;0;Wahlen;2792;BL;7.516121723455267;47.4024381250759;de -Zwingen;4222;0;Zwingen;2793;BL;7.529679782585629;47.437451350959556;de -Laufen;4242;0;Zwingen;2793;BL;7.512207370523935;47.42581844622972;de -Olsberg;4305;0;Arisdorf;2821;BL;7.783525963888401;47.51974325498382;de -Arisdorf;4422;0;Arisdorf;2821;BL;7.766884692152538;47.51077489401165;de -Pratteln;4133;0;Augst;2822;BL;7.696178765897482;47.53178696100949;de -Augst BL;4302;0;Augst;2822;BL;7.719991739928825;47.53247753587151;de -Kaiseraugst;4303;0;Augst;2822;BL;7.724199551670947;47.53615822153848;de -Liestal;4410;0;Bubendorf;2823;BL;7.7384592008640585;47.465740353359685;de -Bubendorf;4416;0;Bubendorf;2823;BL;7.734645500280203;47.44892043713861;de -Pratteln;4133;0;Frenkendorf;2824;BL;7.708719727883877;47.50860231411029;de -Frenkendorf;4402;0;Frenkendorf;2824;BL;7.706743964125709;47.501853913380245;de -Füllinsdorf;4414;0;Füllinsdorf;2825;BL;7.7287269684371465;47.50756063121848;de -Kaiseraugst;4303;0;Giebenach;2826;BL;7.734051918709813;47.53066237176458;de -Giebenach;4304;0;Giebenach;2826;BL;7.743283502935662;47.523494744663296;de -Hersberg;4423;0;Hersberg;2827;BL;7.78197905258427;47.491396959092675;de -Lausen;4415;0;Lausen;2828;BL;7.759559085286316;47.47033386094739;de -Liestal;4410;0;Liestal;2829;BL;7.734837044272838;47.4847952025951;de -Lausen;4415;0;Liestal;2829;BL;7.751625731184872;47.47568306704047;de -Arisdorf;4422;0;Liestal;2829;BL;7.749589453500744;47.50012716681272;de -Lupsingen;4419;0;Lupsingen;2830;BL;7.69402608165102;47.44580065085959;de -Pratteln;4133;0;Pratteln;2831;BL;7.6880761609829475;47.5156671479948;de -Augst BL;4302;0;Pratteln;2831;BL;7.713640614260742;47.534449906756656;de -Frenkendorf;4402;0;Pratteln;2831;BL;7.694120140756036;47.50372264956518;de -Ramlinsburg;4433;0;Ramlinsburg;2832;BL;7.764435492966223;47.449019063228036;de -Seltisberg;4411;0;Seltisberg;2833;BL;7.715215110766593;47.45913644167224;de -Nuglar;4412;0;Seltisberg;2833;BL;7.701522930853286;47.462574669694;de -Ziefen;4417;0;Ziefen;2834;BL;7.70530257608472;47.42924293162259;de -Anwil;4469;0;Anwil;2841;BL;7.939884737447228;47.451359380780524;de -Sissach;4450;0;Böckten;2842;BL;7.825864680719705;47.46481462223252;de -Böckten;4461;0;Böckten;2842;BL;7.832644904987675;47.46539831538596;de -Rümlingen;4444;0;Buckten;2843;BL;7.846801890791055;47.419785344904476;de -Häfelfingen;4445;0;Buckten;2843;BL;7.85017062680656;47.419349243294704;de -Buckten;4446;0;Buckten;2843;BL;7.844657205503039;47.41020353788593;de -Känerkinden;4447;0;Buckten;2843;BL;7.839468115468577;47.41703999478462;de -Rickenbach BL;4462;0;Buus;2844;BL;7.857795917760546;47.490906345500036;de -Buus;4463;0;Buus;2844;BL;7.866240568423815;47.50587017812506;de -Diepflingen;4442;0;Diepflingen;2845;BL;7.838745636715361;47.446711334518945;de -Rümlingen;4444;0;Gelterkinden;2846;BL;7.8522705419775045;47.43885049109136;de -Gelterkinden;4460;0;Gelterkinden;2846;BL;7.858803366158925;47.46423285796233;de -Häfelfingen;4445;0;Häfelfingen;2847;BL;7.866042094794459;47.41503418831654;de -Läufelfingen;4448;0;Häfelfingen;2847;BL;7.8697394264363325;47.40663030348733;de -Hellikon;4316;0;Hemmiken;2848;BL;7.895892886190808;47.50180770093332;de -Hemmiken;4465;0;Hemmiken;2848;BL;7.892945978308315;47.48840397894801;de -Ormalingen;4466;0;Hemmiken;2848;BL;7.873254410123583;47.4923051218303;de -Sissach;4450;0;Itingen;2849;BL;7.789328298799506;47.473604261385965;de -Itingen;4452;0;Itingen;2849;BL;7.788074559713408;47.46722247948047;de -Känerkinden;4447;0;Känerkinden;2850;BL;7.833744153376466;47.41471333764632;de -Wenslingen;4493;0;Kilchberg (BL);2851;BL;7.907160514854002;47.425713364823935;de -Kilchberg BL;4496;0;Kilchberg (BL);2851;BL;7.8989715567828;47.425850947012584;de -Buckten;4446;0;Läufelfingen;2852;BL;7.842354221599014;47.40476619379591;de -Läufelfingen;4448;0;Läufelfingen;2852;BL;7.859505150703256;47.39793333305456;de -Eptingen;4458;0;Läufelfingen;2852;BL;7.843142731344737;47.378477540706086;de -Wisen SO;4634;0;Läufelfingen;2852;BL;7.873075772604762;47.39777418545465;de -Wintersingen;4451;0;Maisprach;2853;BL;7.836133809387181;47.50739569458044;de -Maisprach;4464;0;Maisprach;2853;BL;7.843981198043401;47.524928333433266;de -Nusshof;4453;0;Nusshof;2854;BL;7.804052003317728;47.49154973513198;de -Oltingen;4494;0;Oltingen;2855;BL;7.933773352036215;47.43311734034831;de -Gelterkinden;4460;0;Ormalingen;2856;BL;7.866120641348011;47.46852828622111;de -Hemmiken;4465;0;Ormalingen;2856;BL;7.890189373621181;47.479655582738914;de -Ormalingen;4466;0;Ormalingen;2856;BL;7.874077394501319;47.46937895936574;de -Rickenbach BL;4462;0;Rickenbach (BL);2857;BL;7.850511539386286;47.48471996993386;de -Rothenfluh;4467;0;Rothenfluh;2858;BL;7.914393311542638;47.46195012346367;de -Rümlingen;4444;0;Rümlingen;2859;BL;7.8534913849105505;47.425766569508255;de -Häfelfingen;4445;0;Rünenberg;2860;BL;7.879275307789401;47.41837038798316;de -Rünenberg;4497;0;Rünenberg;2860;BL;7.8871878141135054;47.43300823868636;de -Sissach;4450;0;Sissach;2861;BL;7.809748427713257;47.46572514899035;de -Tecknau;4492;0;Tecknau;2862;BL;7.887409439112948;47.445892864007654;de -Wittinsburg;4443;0;Tenniken;2863;BL;7.828303125220401;47.426363897791575;de -Tenniken;4456;0;Tenniken;2863;BL;7.812880249136029;47.43643221296652;de -Thürnen;4441;0;Thürnen;2864;BL;7.829021959889581;47.45599625376933;de -Sissach;4450;0;Thürnen;2864;BL;7.816535339827658;47.45337267762152;de -Wenslingen;4493;0;Wenslingen;2865;BL;7.909527000568207;47.43996213375178;de -Zeglingen;4495;0;Wenslingen;2865;BL;7.911872138686197;47.42492168098503;de -Wintersingen;4451;0;Wintersingen;2866;BL;7.825954666428532;47.49253593373747;de -Diepflingen;4442;0;Wittinsburg;2867;BL;7.843178748059448;47.438954195600495;de -Wittinsburg;4443;0;Wittinsburg;2867;BL;7.840462011991114;47.42570461175647;de -Rümlingen;4444;0;Wittinsburg;2867;BL;7.849256901990226;47.43240251914254;de -Zeglingen;4495;0;Zeglingen;2868;BL;7.904712151242405;47.41684418666053;de -Zunzgen;4455;0;Zunzgen;2869;BL;7.807800993956983;47.45023160883974;de -Arboldswil;4424;0;Arboldswil;2881;BL;7.7186027105621955;47.41662559649289;de -Titterten;4425;0;Arboldswil;2881;BL;7.7026905355896105;47.41090828485879;de -Bennwil;4431;0;Bennwil;2882;BL;7.781152216383496;47.40073507869624;de -Hölstein;4434;0;Bennwil;2882;BL;7.7737939743455495;47.409874176029724;de -Diegten;4457;0;Bennwil;2882;BL;7.7959958327376535;47.40033997988009;de -Bretzwil;4207;0;Bretzwil;2883;BL;7.648835502346156;47.39952600150013;de -Känerkinden;4447;0;Diegten;2884;BL;7.826161308528679;47.40856950335678;de -Läufelfingen;4448;0;Diegten;2884;BL;7.829222696055396;47.398912193780916;de -Tenniken;4456;0;Diegten;2884;BL;7.7947506238393585;47.425517644120525;de -Diegten;4457;0;Diegten;2884;BL;7.811264651263934;47.415536893795895;de -Eptingen;4458;0;Eptingen;2885;BL;7.823733994937671;47.38610888310278;de -Hölstein;4434;0;Hölstein;2886;BL;7.771106382834792;47.427458170666036;de -Diegten;4457;0;Hölstein;2886;BL;7.789342084738527;47.414538266841646;de -Lampenberg;4432;0;Lampenberg;2887;BL;7.754166165345647;47.42612355519864;de -Langenbruck;4438;0;Langenbruck;2888;BL;7.767491480955991;47.34889426029655;de -Beinwil SO;4229;0;Lauwil;2889;BL;7.649285313066516;47.369647094706565;de -Reigoldswil;4418;0;Lauwil;2889;BL;7.686201036193833;47.37616329491499;de -Lauwil;4426;0;Lauwil;2889;BL;7.675400620785453;47.387736997452365;de -Ramiswil;4719;0;Lauwil;2889;BL;7.68443325192016;47.37160737957291;de -Liedertswil;4436;2;Liedertswil;2890;BL;7.720666248437504;47.390518453110055;de -Arboldswil;4424;0;Niederdorf;2891;BL;7.733136029479539;47.40850355494273;de -Bennwil;4431;0;Niederdorf;2891;BL;7.767752577926559;47.40216884696386;de -Niederdorf;4435;0;Niederdorf;2891;BL;7.749580766011817;47.40945327411642;de -Oberdorf BL;4436;0;Niederdorf;2891;BL;7.767073957262944;47.40642862682961;de -Niederdorf;4435;0;Oberdorf (BL);2892;BL;7.744266241780212;47.40298499392908;de -Oberdorf BL;4436;0;Oberdorf (BL);2892;BL;7.753843036559463;47.39128341277502;de -Liedertswil;4436;2;Oberdorf (BL);2892;BL;7.73380544686909;47.39118439381346;de -Reigoldswil;4418;0;Reigoldswil;2893;BL;7.68666671092082;47.40040380149326;de -Titterten;4425;0;Titterten;2894;BL;7.719533620598961;47.403903756790704;de -Reigoldswil;4418;0;Waldenburg;2895;BL;7.7013963077001515;47.37412721387721;de -Waldenburg;4437;0;Waldenburg;2895;BL;7.748811254449349;47.38289732580177;de -Langenbruck;4438;0;Waldenburg;2895;BL;7.726781250455321;47.369830714532554;de -Gächlingen;8214;0;Gächlingen;2901;SH;8.510387388155989;47.7351129126336;de -Gächlingen;8214;0;Gächlingen;2901;SH;8.499914739841;47.70223961102723;de -Siblingen;8225;0;Gächlingen;2901;SH;8.502621799308814;47.73166873679486;de -Schleitheim;8226;0;Gächlingen;2901;SH;8.504267884913013;47.73620985075212;de -Guntmadingen;8223;0;Löhningen;2903;SH;8.55609618472677;47.6926062190925;de -Löhningen;8224;0;Löhningen;2903;SH;8.553064840247584;47.69912853977566;de -Neunkirch;8213;0;Neunkirch;2904;SH;8.498689224812633;47.69058141558467;de -Wilchingen;8217;0;Neunkirch;2904;SH;8.466253342198252;47.682666910192395;de -Guntmadingen;8223;0;Neunkirch;2904;SH;8.539872419674069;47.68709106967656;de -Löhningen;8224;0;Neunkirch;2904;SH;8.525409627571191;47.698894185045305;de -Schaffhausen;8200;0;Büttenhardt;2914;SH;8.631180725286129;47.745021463165074;de -Büttenhardt;8236;0;Büttenhardt;2914;SH;8.652982183272087;47.75602666928816;de -Dörflingen;8239;0;Dörflingen;2915;SH;8.72284975667164;47.70616146124532;de -Lohn SH;8235;0;Lohn (SH);2917;SH;8.671226011560446;47.756404599381966;de -Stetten SH;8234;0;Stetten (SH);2919;SH;8.663118865631521;47.74019275137458;de -Opfertshofen SH;8236;2;Thayngen;2920;SH;8.662608403269388;47.777343479946815;de -Thayngen;8240;0;Thayngen;2920;SH;8.711194668363992;47.747441047833014;de -Barzheim;8241;0;Thayngen;2920;SH;8.721166707726539;47.760675898722;de -Bibern SH;8242;0;Thayngen;2920;SH;8.67729716563837;47.77263578454034;de -Hofen SH;8242;1;Thayngen;2920;SH;8.676873205131708;47.78274105824539;de -Altdorf SH;8243;0;Thayngen;2920;SH;8.658575871778845;47.78409678066163;de -Bargen SH;8233;0;Bargen (SH);2931;SH;8.610245613254218;47.79191161127814;de -Beringen;8222;0;Beringen;2932;SH;8.572611624934394;47.699178668182974;de -Guntmadingen;8223;0;Beringen;2932;SH;8.557250708561561;47.686015147377134;de -Buchberg;8454;0;Buchberg;2933;SH;8.562847812627616;47.57278001913014;de -Rüdlingen;8455;0;Buchberg;2933;SH;8.55301745198351;47.59191954649912;de -Merishausen;8232;0;Merishausen;2936;SH;8.607066926262922;47.760087838359176;de -Schaffhausen;8200;0;Neuhausen am Rheinfall;2937;SH;8.623743442700546;47.69009215642966;de -Neuhausen am Rheinfall;8212;0;Neuhausen am Rheinfall;2937;SH;8.617446571830547;47.68182622587651;de -Rüdlingen;8455;0;Rüdlingen;2938;SH;8.572229025722118;47.57917928752981;de -Schaffhausen;8200;0;Schaffhausen;2939;SH;8.625944327476045;47.71766272558258;de -Schaffhausen;8203;0;Schaffhausen;2939;SH;8.66205519343421;47.6997598969335;de -Schaffhausen;8207;0;Schaffhausen;2939;SH;8.672768788265897;47.72346967760935;de -Schaffhausen;8208;0;Schaffhausen;2939;SH;8.635900474439833;47.71189902286902;de -Neuhausen am Rheinfall;8212;0;Schaffhausen;2939;SH;8.620436430938586;47.695531582409195;de -Beringen;8222;0;Schaffhausen;2939;SH;8.604933562726295;47.69453437371277;de -Hemmental;8231;0;Schaffhausen;2939;SH;8.579115266112112;47.735326832417826;de -Schleitheim;8226;0;Beggingen;2951;SH;8.511243258663374;47.763312055921105;de -Beggingen;8228;0;Beggingen;2951;SH;8.533659241969888;47.76762415523137;de -Schleitheim;8226;0;Schleitheim;2952;SH;8.488614291114507;47.74962633306975;de -Siblingen;8225;0;Siblingen;2953;SH;8.519391058790344;47.71418720629928;de -Buch SH;8263;0;Buch (SH);2961;SH;8.783015003804268;47.71710039603235;de -Hemishofen;8261;0;Hemishofen;2962;SH;8.8320704874562;47.67687162399041;de -Ramsen;8262;0;Ramsen;2963;SH;8.813003041693037;47.706928806275414;de -Stein am Rhein;8260;0;Stein am Rhein;2964;SH;8.860172420275655;47.658935719557284;de -Hallau;8215;0;Hallau;2971;SH;8.462171251437317;47.698414815703565;de -Oberhallau;8216;0;Oberhallau;2972;SH;8.47852194976199;47.70488198264856;de -Wilchingen;8217;0;Trasadingen;2973;SH;8.447012741259423;47.65778129566817;de -Trasadingen;8219;0;Trasadingen;2973;SH;8.43067620221272;47.667936847353786;de -Wilchingen;8217;0;Wilchingen;2974;SH;8.46466743912962;47.66923791360452;de -Wilchingen;8217;0;Wilchingen;2974;SH;8.519372868197038;47.655502485572846;de -Osterfingen;8218;0;Wilchingen;2974;SH;8.491104201092346;47.66307504176219;de -Herisau;9100;0;Herisau;3001;AR;9.279451691019037;47.38592569730449;de -Schachen b. Herisau;9112;0;Herisau;3001;AR;9.243146227843573;47.385091257335986;de -Gossau SG;9200;0;Herisau;3001;AR;9.232338094876022;47.39694574838492;de -Stein AR;9063;0;Hundwil;3002;AR;9.346822749291075;47.355892988054265;de -Hundwil;9064;0;Hundwil;3002;AR;9.320539709061876;47.36564558625275;de -Urnäsch;9107;0;Hundwil;3002;AR;9.316250556313058;47.26630064485439;de -Gonten;9108;0;Hundwil;3002;AR;9.328226805603498;47.33131402520603;de -Schönengrund;9105;0;Schönengrund;3003;AR;9.226361464778448;47.32578436455803;de -Urnäsch;9107;0;Schönengrund;3003;AR;9.251761358474665;47.326813388597735;de -Herisau;9100;0;Schwellbrunn;3004;AR;9.2446810632567;47.36699143583707;de -Schwellbrunn;9103;0;Schwellbrunn;3004;AR;9.24926780474281;47.352259249283414;de -Waldstatt;9104;0;Schwellbrunn;3004;AR;9.268754772928707;47.34323254031179;de -Schönengrund;9105;0;Schwellbrunn;3004;AR;9.242411050371361;47.33190350750065;de -Degersheim;9113;0;Schwellbrunn;3004;AR;9.199921527866584;47.358081644978405;de -St. Gallen;9014;0;Stein (AR);3005;AR;9.327677465960274;47.4006193684608;de -Stein AR;9063;0;Stein (AR);3005;AR;9.34399890460838;47.37511129920863;de -Schwellbrunn;9103;0;Urnäsch;3006;AR;9.272216362651145;47.340440300539626;de -Waldstatt;9104;0;Urnäsch;3006;AR;9.277342221836811;47.34154111958317;de -Urnäsch;9107;0;Urnäsch;3006;AR;9.28293694355312;47.31704324769014;de -Herisau;9100;0;Waldstatt;3007;AR;9.267691593175542;47.35757592865461;de -Schwellbrunn;9103;0;Waldstatt;3007;AR;9.267067637588232;47.3548114637426;de -Waldstatt;9104;0;Waldstatt;3007;AR;9.283506051426595;47.35647794683162;de -Trogen;9043;0;Bühler;3021;AR;9.44848279578529;47.39016221157859;de -Bühler;9055;0;Bühler;3021;AR;9.425841920347851;47.37339398841754;de -Bühler;9055;0;Gais;3022;AR;9.442519940915382;47.377284926749354;de -Gais;9056;0;Gais;3022;AR;9.455029331585484;47.362275057514864;de -Altstätten SG;9450;0;Gais;3022;AR;9.502423783131304;47.387135693940564;de -Speicherschwendi;9037;0;Speicher;3023;AR;9.436636400039884;47.42517476798464;de -Speicher;9042;0;Speicher;3023;AR;9.442710395538475;47.41318472487846;de -St. Gallen;9012;0;Teufen (AR);3024;AR;9.369950700923868;47.40659385270984;de -Speicher;9042;0;Teufen (AR);3024;AR;9.434758998343407;47.39498438893677;de -Niederteufen;9052;0;Teufen (AR);3024;AR;9.367348250241708;47.392249842799146;de -Teufen AR;9053;0;Teufen (AR);3024;AR;9.38757553105238;47.38986175090979;de -Bühler;9055;0;Teufen (AR);3024;AR;9.40113026008164;47.37887430296929;de -Lustmühle;9062;0;Teufen (AR);3024;AR;9.359179769015343;47.40029024964599;de -Trogen;9043;0;Trogen;3025;AR;9.465423036427048;47.408306479331834;de -Grub AR;9035;0;Grub (AR);3031;AR;9.509522929898669;47.44844912193842;de -Rehetobel;9038;0;Grub (AR);3031;AR;9.513471100471978;47.43285099681087;de -Grub SG;9036;0;Heiden;3032;AR;9.52946942697208;47.45633624134485;de -Rehetobel;9038;0;Heiden;3032;AR;9.517300423412886;47.4303227784062;de -Heiden;9410;0;Heiden;3032;AR;9.53506624262168;47.44511656482135;de -Oberegg;9413;0;Heiden;3032;AR;9.544926463496585;47.43112041069645;de -Wolfhalden;9427;0;Heiden;3032;AR;9.546312101542412;47.46181425483652;de -Wienacht-Tobel;9405;0;Lutzenberg;3033;AR;9.539165545361891;47.46547751465468;de -Lutzenberg;9426;0;Lutzenberg;3033;AR;9.583624632065801;47.4595906708567;de -Wolfhalden;9427;0;Lutzenberg;3033;AR;9.563520983379423;47.456245707433254;de -Eggersriet;9034;0;Rehetobel;3034;AR;9.467196034282553;47.43650051202696;de -Speicherschwendi;9037;0;Rehetobel;3034;AR;9.452858264026544;47.43091998434436;de -Rehetobel;9038;0;Rehetobel;3034;AR;9.482502270572782;47.42623637816181;de -Reute AR;9411;0;Reute (AR);3035;AR;9.575386987213793;47.42008796029071;de -Schachen b. Reute;9411;1;Reute (AR);3035;AR;9.560247550219588;47.42702176516289;de -Marbach SG;9437;0;Reute (AR);3035;AR;9.55753723093045;47.397355875039295;de -Trogen;9043;0;Wald (AR);3036;AR;9.498063786819817;47.40609774004098;de -Wald AR;9044;0;Wald (AR);3036;AR;9.489073151072818;47.41550455560157;de -Wolfhalden;9427;0;Walzenhausen;3037;AR;9.566258509886016;47.43984373562073;de -Walzenhausen;9428;0;Walzenhausen;3037;AR;9.601169092597049;47.45152787625997;de -Heiden;9410;0;Wolfhalden;3038;AR;9.554041894979246;47.43887317401946;de -Thal;9425;0;Wolfhalden;3038;AR;9.56039362228013;47.46307228162856;de -Wolfhalden;9427;0;Wolfhalden;3038;AR;9.550719045799452;47.45404240700694;de -Walzenhausen;9428;0;Wolfhalden;3038;AR;9.572354420120242;47.44475961213278;de -Appenzell;9050;0;Appenzell;3101;AI;9.410087891843503;47.330898708395964;de -Appenzell Meistersrüte;9050;5;Appenzell;3101;AI;9.429907677846701;47.345005679162746;de -Appenzell Schlatt;9050;7;Appenzell;3101;AI;9.416447556650878;47.35585715151398;de -Gais;9056;0;Appenzell;3101;AI;9.455215064980933;47.35049623207634;de -Appenzell;9050;0;Gonten;3102;AI;9.386077557550824;47.34067491287016;de -Gonten;9108;0;Gonten;3102;AI;9.346644208325323;47.328271975034326;de -Gontenbad;9108;2;Gonten;3102;AI;9.372437912670305;47.33161066458039;de -Jakobsbad;9108;3;Gonten;3102;AI;9.328245597826138;47.32010886417834;de -Appenzell;9050;0;Schlatt-Haslen;3104;AI;9.391042336947333;47.34789183260624;de -Appenzell Enggenhütten;9050;3;Schlatt-Haslen;3104;AI;9.362306435490408;47.353054584949554;de -Appenzell Schlatt;9050;7;Schlatt-Haslen;3104;AI;9.395959106132194;47.35642857375616;de -Niederteufen;9052;0;Schlatt-Haslen;3104;AI;9.362496804855587;47.38645638341771;de -Teufen AR;9053;0;Schlatt-Haslen;3104;AI;9.394415153089247;47.375812302808065;de -Haslen AI;9054;0;Schlatt-Haslen;3104;AI;9.366958528861257;47.36963734012242;de -Bühler;9055;0;Schlatt-Haslen;3104;AI;9.400252772631024;47.371485503629344;de -Gais;9056;0;Schlatt-Haslen;3104;AI;9.430401122652773;47.36417093443229;de -Gonten;9108;0;Schlatt-Haslen;3104;AI;9.346300185067967;47.344428936466166;de -Oberegg;9413;0;Oberegg;3111;AI;9.553477730351718;47.421603525823265;de -Oberegg;9413;0;Oberegg;3111;AI;9.583253573055186;47.423443362484676;de -Wolfhalden;9427;0;Oberegg;3111;AI;9.566731983713249;47.437700433512106;de -Walzenhausen;9428;0;Oberegg;3111;AI;9.583721281690837;47.43389932087298;de -Berneck;9442;0;Oberegg;3111;AI;9.600789060208966;47.41422373489577;de -Büriswilen;9442;2;Oberegg;3111;AI;9.610119440888335;47.43428463054459;de -Lüchingen;9450;2;Oberegg;3111;AI;9.548852583626399;47.39750400738389;de -Appenzell;9050;0;Schwende-Rüte;3112;AI;9.408470755793685;47.31019320368847;de -Appenzell Eggerstanden;9050;2;Schwende-Rüte;3112;AI;9.467557191567257;47.33090429695778;de -Appenzell Meistersrüte;9050;5;Schwende-Rüte;3112;AI;9.454217868096913;47.342171145989624;de -Appenzell Steinegg;9050;6;Schwende-Rüte;3112;AI;9.43053968100929;47.32051675390167;de -Weissbad;9057;0;Schwende-Rüte;3112;AI;9.435841876106483;47.31055642617949;de -Schwende;9057;2;Schwende-Rüte;3112;AI;9.43420831531056;47.3007349336977;de -Wasserauen;9057;3;Schwende-Rüte;3112;AI;9.42833759942511;47.28526746618124;de -Brülisau;9058;0;Schwende-Rüte;3112;AI;9.45639863103018;47.29737443701988;de -Urnäsch;9107;0;Schwende-Rüte;3112;AI;9.32911574180627;47.280348459210536;de -Gonten;9108;0;Schwende-Rüte;3112;AI;9.356312496204728;47.29687248586329;de -Frümsen;9467;0;Schwende-Rüte;3112;AI;9.453242511656565;47.260783114889094;de -Lömmenschwil;9308;0;Häggenschwil;3201;SG;9.354106581463437;47.49658779263809;de -Häggenschwil;9312;0;Häggenschwil;3201;SG;9.343854252514822;47.49423437336003;de -Winden;9315;2;Häggenschwil;3201;SG;9.356266866275632;47.51037776114207;de -Hagenwil b. Amriswil;8580;5;Muolen;3202;SG;9.317256801464032;47.52952086574818;de -Bischofszell;9220;0;Muolen;3202;SG;9.278285093040843;47.50943471347918;de -Lömmenschwil;9308;0;Muolen;3202;SG;9.329423229834667;47.50478564868487;de -Muolen;9313;0;Muolen;3202;SG;9.323787431395068;47.52141395771278;de -St. Gallen;9000;0;St. Gallen;3203;SG;9.362229413507695;47.42363487883572;de -St. Gallen;9008;0;St. Gallen;3203;SG;9.391851107484579;47.44181557229332;de -St. Gallen;9010;0;St. Gallen;3203;SG;9.37171024782361;47.44223918002585;de -St. Gallen;9011;0;St. Gallen;3203;SG;9.399316304187936;47.41476307732838;de -St. Gallen;9012;0;St. Gallen;3203;SG;9.360818719400768;47.41028434194868;de -St. Gallen;9014;0;St. Gallen;3203;SG;9.335477413627848;47.40925795467224;de -St. Gallen;9015;0;St. Gallen;3203;SG;9.314053463406756;47.408047447778316;de -St. Gallen;9016;0;St. Gallen;3203;SG;9.414880144173859;47.4402441686639;de -Abtwil SG;9030;0;St. Gallen;3203;SG;9.331252582688034;47.419696725759444;de -Speicherschwendi;9037;0;St. Gallen;3203;SG;9.428905815360713;47.42475099108702;de -Speicher;9042;0;St. Gallen;3203;SG;9.42715281436781;47.41616861457437;de -Wittenbach;9300;0;St. Gallen;3203;SG;9.398068379064998;47.45132839459525;de -St. Gallen;9008;0;Wittenbach;3204;SG;9.392537564793853;47.446016355932485;de -Wittenbach;9300;0;Wittenbach;3204;SG;9.379114458152808;47.4633503264606;de -Lömmenschwil;9308;0;Wittenbach;3204;SG;9.361866109886176;47.491618111182056;de -Wittenbach;9300;0;Berg (SG);3211;SG;9.389970561619755;47.47527907202104;de -Berg SG;9305;0;Berg (SG);3211;SG;9.40781390385026;47.48656706184253;de -Freidorf TG;9306;0;Berg (SG);3211;SG;9.380454384686022;47.48135732766044;de -Eggersriet;9034;0;Eggersriet;3212;SG;9.471835195920711;47.442356230007604;de -Grub AR;9035;0;Eggersriet;3212;SG;9.498587446758435;47.44450894185178;de -Grub SG;9036;0;Eggersriet;3212;SG;9.512724846746504;47.45202638263008;de -Speicherschwendi;9037;0;Eggersriet;3212;SG;9.451075390925912;47.43197310778524;de -Wienacht-Tobel;9405;0;Eggersriet;3212;SG;9.528174906713916;47.46447300742593;de -Rorschach;9400;0;Goldach;3213;SG;9.482628542457665;47.47427551866874;de -Goldach;9403;0;Goldach;3213;SG;9.464790704694314;47.473364091201105;de -Tübach;9327;0;Mörschwil;3214;SG;9.444391535919943;47.48253119830547;de -Mörschwil;9402;0;Mörschwil;3214;SG;9.424458195497028;47.46817850069179;de -Rorschach;9400;0;Rorschach;3215;SG;9.49135211937201;47.47445967418841;de -Rorschacherberg;9404;0;Rorschacherberg;3216;SG;9.502127444817242;47.46628088967783;de -Wienacht-Tobel;9405;0;Rorschacherberg;3216;SG;9.529000969713552;47.465782693438435;de -Staad SG;9422;0;Rorschacherberg;3216;SG;9.529081435457075;47.479827881979205;de -Berg SG;9305;0;Steinach;3217;SG;9.421365405812198;47.49155822400746;de -Steinach;9323;0;Steinach;3217;SG;9.44022892377825;47.502637098863275;de -Horn;9326;0;Tübach;3218;SG;9.450997560266215;47.49039970672328;de -Tübach;9327;0;Tübach;3218;SG;9.453790787869417;47.48474291858882;de -Untereggen;9033;0;Untereggen;3219;SG;9.452835798238063;47.4549240794919;de -Rorschacherberg;9404;0;Untereggen;3219;SG;9.479696825678854;47.456076652024606;de -Au SG;9434;0;Au (SG);3231;SG;9.63378250215058;47.43341360743322;de -Heerbrugg;9435;0;Au (SG);3231;SG;9.626882818450293;47.412862940170584;de -Heerbrugg;9435;0;Balgach;3232;SG;9.619900440381695;47.40968759742855;de -Balgach;9436;0;Balgach;3232;SG;9.606310605527618;47.40737324495131;de -Rebstein;9445;0;Balgach;3232;SG;9.586837954774868;47.4083455892631;de -Reute AR;9411;0;Berneck;3233;SG;9.594265094451481;47.4202639721608;de -Au SG;9434;0;Berneck;3233;SG;9.62887421600461;47.43293423941177;de -Heerbrugg;9435;0;Berneck;3233;SG;9.623464092709051;47.415434615402006;de -Berneck;9442;0;Berneck;3233;SG;9.609395504895048;47.42456435384888;de -Büriswilen;9442;2;Berneck;3233;SG;9.614449081198162;47.434630560061066;de -Balgach;9436;0;Diepoldsau;3234;SG;9.623981562039232;47.382533120149546;de -Widnau;9443;0;Diepoldsau;3234;SG;9.626063076925016;47.39225382678675;de -Diepoldsau;9444;0;Diepoldsau;3234;SG;9.657629110018572;47.38540320222254;de -Rheineck;9424;0;Rheineck;3235;SG;9.590040969029083;47.465799582264985;de -Thal;9425;0;Rheineck;3235;SG;9.575400740675999;47.467651966192335;de -Lutzenberg;9426;0;Rheineck;3235;SG;9.57707951680751;47.462828939358005;de -Rheineck;9424;0;St. Margrethen;3236;SG;9.595303288272891;47.460825840158854;de -Walzenhausen;9428;0;St. Margrethen;3236;SG;9.631237103000563;47.441996272110444;de -St. Margrethen SG;9430;0;St. Margrethen;3236;SG;9.62590374829524;47.453942580449485;de -Rorschacherberg;9404;0;Thal;3237;SG;9.531066887282863;47.47284343252602;de -Staad SG;9422;0;Thal;3237;SG;9.542224631484782;47.480582238027694;de -Altenrhein;9423;0;Thal;3237;SG;9.551472310960577;47.49089255048704;de -Thal;9425;0;Thal;3237;SG;9.569448639134338;47.46503525892179;de -Heerbrugg;9435;0;Widnau;3238;SG;9.624784062658895;47.40542413776086;de -Widnau;9443;0;Widnau;3238;SG;9.639645589034705;47.40413508919252;de -Brülisau;9058;0;Altstätten;3251;SG;9.485136610139387;47.2834444766094;de -Altstätten SG;9450;0;Altstätten;3251;SG;9.541477723712235;47.378025422685496;de -Lüchingen;9450;2;Altstätten;3251;SG;9.552987171685185;47.38749642344185;de -Hinterforst;9452;0;Altstätten;3251;SG;9.530969104682077;47.35926910410465;de -Eichberg;9453;0;Altstätten;3251;SG;9.539851015603382;47.345782912534006;de -Oberriet SG;9463;0;Altstätten;3251;SG;9.537709774868267;47.33400507409545;de -Rüthi (Rheintal);9464;0;Altstätten;3251;SG;9.52158017885959;47.289393058822846;de -Lienz;9464;2;Altstätten;3251;SG;9.516135881725416;47.27845983370227;de -Hinterforst;9452;0;Eichberg;3252;SG;9.523829011336971;47.35541448422249;de -Eichberg;9453;0;Eichberg;3252;SG;9.525326401970228;47.34655596295751;de -Marbach SG;9437;0;Marbach (SG);3253;SG;9.567526869638053;47.391728058801654;de -Balgach;9436;0;Oberriet (SG);3254;SG;9.621027301935927;47.37613576992609;de -Kriessern;9451;0;Oberriet (SG);3254;SG;9.606844040400167;47.36544143619309;de -Montlingen;9462;0;Oberriet (SG);3254;SG;9.590510857960554;47.33487132297337;de -Oberriet SG;9463;0;Oberriet (SG);3254;SG;9.570876253532482;47.32609154224632;de -Marbach SG;9437;0;Rebstein;3255;SG;9.570366080494471;47.399702064639705;de -Rebstein;9445;0;Rebstein;3255;SG;9.584152908151735;47.399498212611576;de -Oberriet SG;9463;0;Rüthi (SG);3256;SG;9.54672153043051;47.3053379269203;de -Rüthi (Rheintal);9464;0;Rüthi (SG);3256;SG;9.538641949676672;47.29463708218253;de -Lienz;9464;2;Rüthi (SG);3256;SG;9.522719498145266;47.28667765695659;de -Haag (Rheintal);9469;0;Buchs (SG);3271;SG;9.483319446788936;47.197260425853436;de -Buchs SG;9470;0;Buchs (SG);3271;SG;9.467979432334522;47.165071975901796;de -Gams;9473;0;Gams;3272;SG;9.440358587068795;47.203754469600256;de -Wildhaus;9658;0;Gams;3272;SG;9.391821934999923;47.20120912667653;de -Haag (Rheintal);9469;0;Grabs;3273;SG;9.475638035031192;47.195767412932824;de -Buchs SG;9470;0;Grabs;3273;SG;9.466650731369107;47.17567145811663;de -Werdenberg;9470;5;Grabs;3273;SG;9.461361641561624;47.16858524608932;de -Grabs;9472;0;Grabs;3273;SG;9.447085273278537;47.18113361320224;de -Grabserberg;9472;2;Grabs;3273;SG;9.425253709501435;47.18156285495435;de -Wildhaus;9658;0;Grabs;3273;SG;9.340016791288006;47.176139030692184;de -Salez;9465;0;Sennwald;3274;SG;9.502596343811154;47.23749079194739;de -Sennwald;9466;0;Sennwald;3274;SG;9.507912509963626;47.265617268029075;de -Frümsen;9467;0;Sennwald;3274;SG;9.472545289563447;47.244605312995276;de -Sax;9468;0;Sennwald;3274;SG;9.459256559056177;47.232078578680586;de -Haag (Rheintal);9469;0;Sennwald;3274;SG;9.492053649116235;47.21216404493497;de -Gams;9473;0;Sennwald;3274;SG;9.471930689507934;47.21911169146133;de -Buchs SG;9470;0;Sevelen;3275;SG;9.445792574729335;47.14627861265273;de -Sevelen;9475;0;Sevelen;3275;SG;9.486082549109204;47.12149413175542;de -Weite;9476;0;Sevelen;3275;SG;9.492325433431123;47.10990536887826;de -Sargans;7320;0;Wartau;3276;SG;9.471537703640271;47.067515232683185;de -Weite;9476;0;Wartau;3276;SG;9.496972549563989;47.09249493889945;de -Fontnas;9476;2;Wartau;3276;SG;9.489381622622128;47.09023191576126;de -Trübbach;9477;0;Wartau;3276;SG;9.47861333001629;47.07081665015197;de -Azmoos;9478;0;Wartau;3276;SG;9.475824592196318;47.0801387596105;de -Oberschan;9479;0;Wartau;3276;SG;9.474243746481811;47.098843235423956;de -Malans SG;9479;1;Wartau;3276;SG;9.477215074833424;47.09118442376871;de -Gretschins;9479;2;Wartau;3276;SG;9.486257531414983;47.09721604508798;de -Bad Ragaz;7310;0;Bad Ragaz;3291;SG;9.500957651735884;47.004015252062466;de -Valens;7317;0;Bad Ragaz;3291;SG;9.482234290710402;46.994774465561335;de -Heiligkreuz (Mels);8888;0;Flums;3292;SG;9.391451471120407;47.07307839192993;de -Flums;8890;0;Flums;3292;SG;9.344703494190611;47.090813593476284;de -Flums Hochwiese;8893;0;Flums;3292;SG;9.370741055370296;47.083813595555085;de -Flumserberg Saxli;8894;0;Flums;3292;SG;9.350034645651657;47.07869729611998;de -Flumserberg Portels;8895;0;Flums;3292;SG;9.335450902983094;47.08330667227624;de -Flumserberg Bergheim;8896;0;Flums;3292;SG;9.30578681747942;47.09765652772271;de -Flumserberg Tannenheim;8897;0;Flums;3292;SG;9.30400440530224;47.08924032072956;de -Flumserberg Tannenbodenalp;8898;0;Flums;3292;SG;9.2842641036332;47.09365441975392;de -Schwendi im Weisstannental;7325;0;Mels;3293;SG;9.363505106184903;47.00877663484439;de -Weisstannen;7326;0;Mels;3293;SG;9.345596312023021;46.991819241776916;de -Mädris-Vermol;8886;0;Mels;3293;SG;9.392793364267241;47.050999373082455;de -Mels;8887;0;Mels;3293;SG;9.422496253211582;47.0465267814761;de -Heiligkreuz (Mels);8888;0;Mels;3293;SG;9.410408318980675;47.058814024970424;de -Plons;8889;0;Mels;3293;SG;9.399960108719752;47.056996251376866;de -Pfäfers;7312;0;Pfäfers;3294;SG;9.498407692710174;46.988375765269886;de -St. Margrethenberg;7313;0;Pfäfers;3294;SG;9.510755069147812;46.97913872682365;de -Vadura;7314;0;Pfäfers;3294;SG;9.484234818686815;46.95807855921542;de -Vättis;7315;0;Pfäfers;3294;SG;9.441316321705175;46.91052034480162;de -Valens;7317;0;Pfäfers;3294;SG;9.48068348778003;46.96860142406297;de -Vasön;7317;3;Pfäfers;3294;SG;9.4776940503798;46.95260505830854;de -Murg;8877;0;Quarten;3295;SG;9.215973923945333;47.11287595653485;de -Quinten;8878;0;Quarten;3295;SG;9.215933831739196;47.129202209545554;de -Unterterzen;8882;0;Quarten;3295;SG;9.255427324652697;47.11408519531988;de -Quarten;8883;0;Quarten;3295;SG;9.241598058891494;47.109156804554125;de -Oberterzen;8884;0;Quarten;3295;SG;9.255640579509448;47.102808486353965;de -Mols;8885;0;Quarten;3295;SG;9.28125630708726;47.11225234932806;de -Flumserberg Bergheim;8896;0;Quarten;3295;SG;9.282458981804423;47.10043899861815;de -Flumserberg Tannenbodenalp;8898;0;Quarten;3295;SG;9.26912011752545;47.08233959191665;de -Sargans;7320;0;Sargans;3296;SG;9.435127315272306;47.05033684903835;de -Heiligkreuz (Mels);8888;0;Sargans;3296;SG;9.420699628161726;47.055877654845375;de -Wangs;7323;0;Vilters-Wangs;3297;SG;9.432149289329391;47.0307215039746;de -Wangs;7323;0;Vilters-Wangs;3297;SG;9.474858587205917;47.031202502621596;de -Vilters;7324;0;Vilters-Wangs;3297;SG;9.44827409916633;47.023119231965985;de -Quinten;8878;0;Walenstadt;3298;SG;9.25267994798293;47.13052785253001;de -Walenstadt;8880;0;Walenstadt;3298;SG;9.314830882227334;47.12412841314137;de -Walenstadtberg;8881;1;Walenstadt;3298;SG;9.286964545480417;47.13614123341476;de -Tscherlach;8881;6;Walenstadt;3298;SG;9.333497724372686;47.118467462637696;de -Flums;8890;0;Walenstadt;3298;SG;9.346645286516148;47.100383230066015;de -Berschis;8892;0;Walenstadt;3298;SG;9.34693722063211;47.105182486665676;de -Flums Hochwiese;8893;0;Walenstadt;3298;SG;9.376266361243156;47.08806186062131;de -Flumserberg Bergheim;8896;0;Walenstadt;3298;SG;9.306633218258948;47.10461761840982;de -Weesen;8872;0;Amden;3311;SG;9.108715819574055;47.141617606211874;de -Amden;8873;0;Amden;3311;SG;9.145783626817531;47.14960034385512;de -Benken SG;8717;0;Benken (SG);3312;SG;9.005676303863984;47.19913406582387;de -Buttikon SZ;8863;0;Benken (SG);3312;SG;8.964257890854768;47.17955289513368;de -Benken SG;8717;0;Kaltbrunn;3313;SG;9.006346692901289;47.20689055463224;de -Kaltbrunn;8722;0;Kaltbrunn;3313;SG;9.024535761433789;47.21394543896846;de -Schänis;8718;0;Schänis;3315;SG;9.045409062824561;47.15991738989821;de -Kaltbrunn;8722;0;Schänis;3315;SG;9.052459631196394;47.20220562986199;de -Rufi;8723;0;Schänis;3315;SG;9.049483768096882;47.17999416069781;de -Maseltrangen;8723;2;Schänis;3315;SG;9.04950989856159;47.19183731094396;de -Ziegelbrücke;8866;0;Schänis;3315;SG;9.060264567125285;47.13627762696593;de -Weesen;8872;0;Weesen;3316;SG;9.096226017876305;47.13531434093685;de -Schmerikon;8716;0;Schmerikon;3338;SG;8.940920249005021;47.22674006676042;de -Uznach;8730;0;Schmerikon;3338;SG;8.956150516158145;47.23329983839552;de -Schmerikon;8716;0;Uznach;3339;SG;8.960855212130472;47.22847458420833;de -Uznach;8730;0;Uznach;3339;SG;8.986325139626183;47.22548265178091;de -Rüti ZH;8630;0;Rapperswil-Jona;3340;SG;8.850692621607303;47.2501471609448;de -Wolfhausen;8633;0;Rapperswil-Jona;3340;SG;8.813786714605898;47.24796180606636;de -Rapperswil SG;8640;0;Rapperswil-Jona;3340;SG;8.816600144106133;47.22759614585802;de -Jona;8645;0;Rapperswil-Jona;3340;SG;8.836495621742094;47.22909099662506;de -Wagen;8646;0;Rapperswil-Jona;3340;SG;8.886038559102513;47.230944937861054;de -Feldbach;8714;0;Rapperswil-Jona;3340;SG;8.804373955536612;47.24657939866832;de -Bollingen;8715;0;Rapperswil-Jona;3340;SG;8.894310653849052;47.219389711969335;de -Ermenswil;8734;0;Rapperswil-Jona;3340;SG;8.88421594178336;47.240376147029416;de -Ernetschwil;8725;0;Gommiswald;3341;SG;9.002498032267107;47.23723552449093;de -Gebertingen;8725;2;Gommiswald;3341;SG;9.0066174614038;47.25207995415145;de -Ricken SG;8726;0;Gommiswald;3341;SG;9.036571096779765;47.2553360769072;de -Uznach;8730;0;Gommiswald;3341;SG;9.005619292273286;47.22966838515359;de -Gommiswald;8737;0;Gommiswald;3341;SG;9.022665599924144;47.23118113793701;de -Uetliburg SG;8738;0;Gommiswald;3341;SG;9.033352853986585;47.23711872617732;de -Rieden SG;8739;0;Gommiswald;3341;SG;9.050555417077609;47.2198502301249;de -Wald ZH;8636;0;Eschenbach (SG);3342;SG;8.949619813402618;47.28694424102498;de -Laupen ZH;8637;0;Eschenbach (SG);3342;SG;8.93972593718995;47.26164473738604;de -Goldingen;8638;0;Eschenbach (SG);3342;SG;8.96693434622185;47.26278961317893;de -Gebertingen;8725;2;Eschenbach (SG);3342;SG;8.996353826666612;47.250376634599654;de -Walde SG;8727;0;Eschenbach (SG);3342;SG;9.010632686977985;47.27028085739901;de -Neuhaus SG;8732;0;Eschenbach (SG);3342;SG;8.94718398532512;47.24234994921861;de -Eschenbach SG;8733;0;Eschenbach (SG);3342;SG;8.919891195443542;47.23958841536021;de -Ermenswil;8734;0;Eschenbach (SG);3342;SG;8.884103472240565;47.244940975148104;de -St. Gallenkappel;8735;0;Eschenbach (SG);3342;SG;8.968900002471091;47.24540097005503;de -Rüeterswil;8735;2;Eschenbach (SG);3342;SG;8.989405794842654;47.259066001011476;de -Hemberg;9633;0;Ebnat-Kappel;3352;SG;9.16360335577063;47.276601224789204;de -Ebnat-Kappel;9642;0;Ebnat-Kappel;3352;SG;9.120548660735105;47.26406307347905;de -Krummenau;9643;0;Ebnat-Kappel;3352;SG;9.154033350424982;47.241869516748764;de -Urnäsch;9107;0;Wildhaus-Alt St. Johann;3359;SG;9.328036774589487;47.248395139682344;de -Alt St. Johann;9656;0;Wildhaus-Alt St. Johann;3359;SG;9.286033086802506;47.19425396818094;de -Unterwasser;9657;0;Wildhaus-Alt St. Johann;3359;SG;9.308641958031066;47.19708772084905;de -Wildhaus;9658;0;Wildhaus-Alt St. Johann;3359;SG;9.350739549648765;47.20374611753531;de -Urnäsch;9107;0;Nesslau;3360;SG;9.30588275978576;47.25481538727334;de -Hemberg;9633;0;Nesslau;3360;SG;9.214843407036284;47.27017150098079;de -Krummenau;9643;0;Nesslau;3360;SG;9.173297361495317;47.2468482026995;de -Nesslau;9650;0;Nesslau;3360;SG;9.200146539184109;47.22391577178812;de -Ennetbühl;9651;0;Nesslau;3360;SG;9.211850106582164;47.2408464273095;de -Neu St. Johann;9652;0;Nesslau;3360;SG;9.193843308383173;47.22910446420894;de -Stein SG;9655;0;Nesslau;3360;SG;9.228142488909663;47.199421981011405;de -Lichtensteig;9620;0;Lichtensteig;3374;SG;9.088876964204237;47.3225089041132;de -Ricken SG;8726;0;Wattwil;3379;SG;9.046359396716669;47.26521158252928;de -Dietfurt;9615;0;Wattwil;3379;SG;9.053281766462055;47.33447567267027;de -Lichtensteig;9620;0;Wattwil;3379;SG;9.082359095328071;47.31534227100445;de -Krinau;9622;0;Wattwil;3379;SG;9.052415581311664;47.31727055296855;de -Wattwil;9630;0;Wattwil;3379;SG;9.088564584785214;47.30430398042045;de -Ulisbach;9631;0;Wattwil;3379;SG;9.100927225673445;47.28624463170603;de -Hemberg;9633;0;Wattwil;3379;SG;9.1418460850378;47.2915672991349;de -Ebnat-Kappel;9642;0;Wattwil;3379;SG;9.091878263959403;47.26248789355713;de -Fischingen;8376;0;Kirchberg (SG);3392;SG;8.98266257994102;47.40662544925388;de -Wil SG;9500;0;Kirchberg (SG);3392;SG;9.053634210277187;47.4410441992157;de -Rickenbach b. Wil;9532;0;Kirchberg (SG);3392;SG;9.053052615864072;47.44317996118486;de -Kirchberg SG;9533;0;Kirchberg (SG);3392;SG;9.0406316712174;47.41180526516729;de -Dietschwil;9533;1;Kirchberg (SG);3392;SG;9.017332688042098;47.42074537038621;de -Gähwil;9534;0;Kirchberg (SG);3392;SG;9.001969312982373;47.39829172513736;de -Lütisburg Station;9601;0;Kirchberg (SG);3392;SG;9.060181019161597;47.38993206162088;de -Bazenheid;9602;0;Kirchberg (SG);3392;SG;9.0686237760746;47.40977888357997;de -Müselbach;9602;2;Kirchberg (SG);3392;SG;9.041452390554657;47.39057144152439;de -Mühlrüti;9613;0;Kirchberg (SG);3392;SG;8.983351004189043;47.377810820852446;de -Nassen;9123;0;Lütisburg;3393;SG;9.144715822324374;47.39222505429086;de -Jonschwil;9243;0;Lütisburg;3393;SG;9.08434396854658;47.41378167459782;de -Lütisburg Station;9601;0;Lütisburg;3393;SG;9.071133161451208;47.384887232950256;de -Bazenheid;9602;0;Lütisburg;3393;SG;9.078794027209906;47.41067569116557;de -Lütisburg;9604;0;Lütisburg;3393;SG;9.07947822105808;47.395040941820604;de -Oberrindal;9604;1;Lütisburg;3393;SG;9.124621828085985;47.40277609507417;de -Unterrindal;9604;2;Lütisburg;3393;SG;9.090115045065783;47.40907963446797;de -Ganterschwil;9608;0;Lütisburg;3393;SG;9.11884904198795;47.38106884418694;de -Au TG;8376;2;Mosnang;3394;SG;8.961732883234184;47.38219677625624;de -Steg im Tösstal;8496;0;Mosnang;3394;SG;8.961398986651188;47.354631915378654;de -Lütisburg Station;9601;0;Mosnang;3394;SG;9.057805086404832;47.38560187934861;de -Mosnang;9607;0;Mosnang;3394;SG;9.039778413439818;47.36246727143122;de -Dreien;9612;0;Mosnang;3394;SG;9.016855967626192;47.371843072316786;de -Mühlrüti;9613;0;Mosnang;3394;SG;8.985872632175566;47.370639460557385;de -Libingen;9614;0;Mosnang;3394;SG;9.022302910473233;47.32889191791521;de -Dietfurt;9615;0;Mosnang;3394;SG;9.043132047594671;47.33181154696118;de -Wattwil;9630;0;Mosnang;3394;SG;9.016812654702427;47.298610127622624;de -Lütisburg Station;9601;0;Bütschwil-Ganterschwil;3395;SG;9.068800596351204;47.37678609694332;de -Bütschwil;9606;0;Bütschwil-Ganterschwil;3395;SG;9.068487107933281;47.358978860144894;de -Ganterschwil;9608;0;Bütschwil-Ganterschwil;3395;SG;9.090218266949195;47.38111084732734;de -Libingen;9614;0;Bütschwil-Ganterschwil;3395;SG;9.051992982074262;47.34183964542567;de -Dietfurt;9615;0;Bütschwil-Ganterschwil;3395;SG;9.078896195734174;47.346902439440754;de -Lichtensteig;9620;0;Bütschwil-Ganterschwil;3395;SG;9.080650922015293;47.33468767114989;de -Oberhelfenschwil;9621;0;Bütschwil-Ganterschwil;3395;SG;9.092917275939094;47.337177509035136;de -Schwellbrunn;9103;0;Neckertal;3396;SG;9.195785224389407;47.34649010172506;de -Schönengrund;9105;0;Neckertal;3396;SG;9.219014886598858;47.332082281400474;de -Urnäsch;9107;0;Neckertal;3396;SG;9.219810554693279;47.29097198468941;de -Degersheim;9113;0;Neckertal;3396;SG;9.177734776109293;47.371201965576795;de -Hoffeld;9114;0;Neckertal;3396;SG;9.173392673591145;47.36215348940711;de -Dicken;9115;0;Neckertal;3396;SG;9.190465242766294;47.33708158862483;de -Wolfertswil;9116;0;Neckertal;3396;SG;9.163534764786064;47.383885233524;de -Mogelsberg;9122;0;Neckertal;3396;SG;9.135862354339304;47.362173367535476;de -Ebersol;9122;2;Neckertal;3396;SG;9.151289544715397;47.35020121963181;de -Nassen;9123;0;Neckertal;3396;SG;9.136051570088442;47.372964577548736;de -Brunnadern;9125;0;Neckertal;3396;SG;9.131532806232146;47.33455314780833;de -Necker;9126;0;Neckertal;3396;SG;9.130206532594245;47.34807495352761;de -St. Peterzell;9127;0;Neckertal;3396;SG;9.173886707822373;47.31803339493388;de -Lichtensteig;9620;0;Neckertal;3396;SG;9.116439618962763;47.32561782034289;de -Oberhelfenschwil;9621;0;Neckertal;3396;SG;9.112060867402054;47.356185735872764;de -Wattwil;9630;0;Neckertal;3396;SG;9.150181614947243;47.3052115214513;de -Hemberg;9633;0;Neckertal;3396;SG;9.175915932909833;47.30065343757946;de -Bächli (Hemberg);9633;2;Neckertal;3396;SG;9.194967053240138;47.305452435759825;de -Degersheim;9113;0;Degersheim;3401;SG;9.196920394554397;47.37338763783697;de -Wolfertswil;9116;0;Degersheim;3401;SG;9.18359480823237;47.39453893222774;de -Flawil;9230;0;Degersheim;3401;SG;9.155525692764515;47.40700503000616;de -Degersheim;9113;0;Flawil;3402;SG;9.22018252993469;47.38644048121148;de -Gossau SG;9200;0;Flawil;3402;SG;9.214401132864298;47.41127474805491;de -Flawil;9230;0;Flawil;3402;SG;9.183742059354644;47.41696411118511;de -Egg (Flawil);9231;0;Flawil;3402;SG;9.226390970206584;47.391665906469015;de -Oberuzwil;9242;0;Jonschwil;3405;SG;9.103621551141888;47.43431345991159;de -Jonschwil;9243;0;Jonschwil;3405;SG;9.088287180551246;47.42409919843579;de -Rickenbach b. Wil;9532;0;Jonschwil;3405;SG;9.063074571766128;47.43456219539324;de -Schwarzenbach SG;9536;0;Jonschwil;3405;SG;9.076346982974085;47.44110147987402;de -Oberrindal;9604;1;Jonschwil;3405;SG;9.11898062059084;47.40785392526217;de -Flawil;9230;0;Oberuzwil;3407;SG;9.161522149626052;47.41511293771863;de -Niederglatt SG;9240;2;Oberuzwil;3407;SG;9.17159177100938;47.43101656436875;de -Oberuzwil;9242;0;Oberuzwil;3407;SG;9.120602500421226;47.4311744737072;de -Niederuzwil;9244;0;Oberuzwil;3407;SG;9.149020257076852;47.43595752064574;de -Bichwil;9248;0;Oberuzwil;3407;SG;9.136890343496367;47.41892660748802;de -Oberrindal;9604;1;Oberuzwil;3407;SG;9.132300607076944;47.405891463212285;de -Uzwil;9240;0;Uzwil;3408;SG;9.131231117241331;47.43667159120411;de -Oberuzwil;9242;0;Uzwil;3408;SG;9.139691935190704;47.42978158360085;de -Niederuzwil;9244;0;Uzwil;3408;SG;9.142263421341841;47.444638065022176;de -Henau;9247;0;Uzwil;3408;SG;9.119477840803661;47.45210338721118;de -Algetshausen;9249;0;Uzwil;3408;SG;9.107078477167647;47.447768865352735;de -Niederstetten;9249;1;Uzwil;3408;SG;9.083305639112403;47.45129351125515;de -Oberstetten;9249;2;Uzwil;3408;SG;9.089333536442775;47.44854154381028;de -Schwarzenbach SG;9536;0;Uzwil;3408;SG;9.071928391975405;47.4471445058262;de -Gossau SG;9200;0;Niederbüren;3422;SG;9.235019226618263;47.44391495576734;de -Niederwil SG;9203;0;Niederbüren;3422;SG;9.21563512844488;47.446859162092835;de -Niederbüren;9246;0;Niederbüren;3422;SG;9.207785559371032;47.46509056114881;de -Schweizersholz;9223;0;Niederhelfenschwil;3423;SG;9.178782151054158;47.495497529927185;de -Oberbüren;9245;0;Niederhelfenschwil;3423;SG;9.151251693290579;47.459293624064664;de -Sonnental;9245;2;Niederhelfenschwil;3423;SG;9.12445306253992;47.4626915240223;de -Zuzwil SG;9524;0;Niederhelfenschwil;3423;SG;9.1212647914596;47.465498504225415;de -Lenggenwil;9525;0;Niederhelfenschwil;3423;SG;9.149527180686372;47.47523027589469;de -Zuckenriet;9526;0;Niederhelfenschwil;3423;SG;9.162652940107456;47.48433282102506;de -Niederhelfenschwil;9527;0;Niederhelfenschwil;3423;SG;9.187100802176463;47.476162572946706;de -Niederwil SG;9203;0;Oberbüren;3424;SG;9.200862784710695;47.439321867454126;de -Flawil;9230;0;Oberbüren;3424;SG;9.205536098463213;47.413593740292335;de -Niederglatt SG;9240;2;Oberbüren;3424;SG;9.17679683790237;47.43151290367362;de -Oberbüren;9245;0;Oberbüren;3424;SG;9.161507991407152;47.451160020019216;de -Sonnental;9245;2;Oberbüren;3424;SG;9.13654183237476;47.46017674400054;de -Wil SG;9500;0;Zuzwil (SG);3426;SG;9.073298914346978;47.46709910237254;de -Hosenruck;9515;0;Zuzwil (SG);3426;SG;9.116228879963645;47.47964510378236;de -Züberwangen;9523;0;Zuzwil (SG);3426;SG;9.083843065947391;47.465981338649684;de -Zuzwil SG;9524;0;Zuzwil (SG);3426;SG;9.110172169402526;47.47568440505718;de -Wil SG;9500;0;Wil (SG);3427;SG;9.04942974528324;47.46645523769582;de -Rossrüti;9512;0;Wil (SG);3427;SG;9.060639422584643;47.47413466123779;de -Wuppenau;9514;0;Wil (SG);3427;SG;9.088111892746722;47.48424218974558;de -Zuzwil SG;9524;0;Wil (SG);3427;SG;9.095863590888484;47.48028154702019;de -Schwarzenbach SG;9536;0;Wil (SG);3427;SG;9.062878383163632;47.44693651764341;de -St. Margarethen TG;9543;0;Wil (SG);3427;SG;9.008305958345195;47.48278668501907;de -Bronschhofen;9552;0;Wil (SG);3427;SG;9.034271896954323;47.475844015746205;de -Andwil SG;9204;0;Andwil (SG);3441;SG;9.269875970581152;47.43939373176166;de -Arnegg;9212;0;Andwil (SG);3441;SG;9.262548638968683;47.44513917885848;de -Abtwil SG;9030;0;Gaiserwald;3442;SG;9.324262540562959;47.42171301952085;de -St. Josefen;9030;3;Gaiserwald;3442;SG;9.336119995651869;47.42468752347112;de -Engelburg;9032;0;Gaiserwald;3442;SG;9.341228663314789;47.44373074955352;de -Wittenbach;9300;0;Gaiserwald;3442;SG;9.361864084799391;47.45138559203003;de -St. Gallen;9015;0;Gossau (SG);3443;SG;9.289088159570914;47.40523335559739;de -Abtwil SG;9030;0;Gossau (SG);3443;SG;9.295676440024021;47.42724574967403;de -Herisau;9100;0;Gossau (SG);3443;SG;9.290830768840186;47.39998429079925;de -Gossau SG;9200;0;Gossau (SG);3443;SG;9.249618545835101;47.415378292541504;de -Andwil SG;9204;0;Gossau (SG);3443;SG;9.270570696002562;47.42858204052746;de -Arnegg;9212;0;Gossau (SG);3443;SG;9.252039547908739;47.441998110402935;de -Engelburg;9032;0;Waldkirch;3444;SG;9.32498285051394;47.45307392190777;de -Andwil SG;9204;0;Waldkirch;3444;SG;9.27061002594358;47.45061695324487;de -Waldkirch;9205;0;Waldkirch;3444;SG;9.284957237907584;47.46953654137728;de -Hauptwil;9213;0;Waldkirch;3444;SG;9.241576938208405;47.476877395340594;de -Niederbüren;9246;0;Waldkirch;3444;SG;9.237659180692896;47.47404131534952;de -Wittenbach;9300;0;Waldkirch;3444;SG;9.35765057093981;47.454909849929344;de -Bernhardzell;9304;0;Waldkirch;3444;SG;9.33655672266365;47.47377973656936;de -Valbella;7077;0;Vaz/Obervaz;3506;GR;9.553707018755059;46.747506951738444;rm -Lenzerheide/Lai;7078;0;Vaz/Obervaz;3506;GR;9.555737447769935;46.72970320801972;rm -Vaz/Obervaz;7082;0;Vaz/Obervaz;3506;GR;9.531557687074768;46.69593103123983;rm -Tiefencastel;7450;0;Vaz/Obervaz;3506;GR;9.514527712664473;46.68196724167768;rm -Lantsch/Lenz;7083;0;Lantsch/Lenz;3513;GR;9.562409142635774;46.683096167304825;rm -Schmitten (Albula);7493;0;Schmitten (GR);3514;GR;9.674041789623592;46.687167224540104;de -Brienz/Brinzauls GR;7084;0;Albula/Alvra;3542;GR;9.594880941543737;46.66859802255963;rm -Tiefencastel;7450;0;Albula/Alvra;3542;GR;9.575008762806405;46.66160678087307;rm -Alvaschein;7451;0;Albula/Alvra;3542;GR;9.552333520488977;46.674481958891604;rm -Mon;7458;0;Albula/Alvra;3542;GR;9.565010584980127;46.650405893329996;rm -Stierva;7459;0;Albula/Alvra;3542;GR;9.541322641030865;46.66413806809061;rm -Surava;7472;0;Albula/Alvra;3542;GR;9.611667108983672;46.66534518092677;rm -Alvaneu Bad;7473;0;Albula/Alvra;3542;GR;9.646987555462392;46.66885766440414;rm -Alvaneu Dorf;7492;0;Albula/Alvra;3542;GR;9.64552582769122;46.67954608684407;rm -Cunter;7452;0;Surses;3543;GR;9.59573046065128;46.609008446594906;rm -Tinizong;7453;0;Surses;3543;GR;9.619449745255158;46.58360292378715;rm -Rona;7454;0;Surses;3543;GR;9.62241081691167;46.561270869977044;rm -Mulegns;7455;0;Surses;3543;GR;9.621413878355698;46.525088511894175;rm -Sur;7456;0;Surses;3543;GR;9.631551355253624;46.52346224245458;rm -Marmorera;7456;2;Surses;3543;GR;9.643223981625136;46.497199054619394;rm -Bivio;7457;0;Surses;3543;GR;9.650554268190215;46.46808536541147;rm -Savognin;7460;0;Surses;3543;GR;9.602658433221059;46.59563418923419;rm -Salouf;7462;0;Surses;3543;GR;9.5757199767463;46.62457261827363;rm -Riom;7463;0;Surses;3543;GR;9.582812742012408;46.60766580112366;rm -Riom;7463;0;Surses;3543;GR;9.593051371912368;46.63328872856852;rm -Parsonz;7464;0;Surses;3543;GR;9.569627604543783;46.6087390248603;rm -Filisur;7477;0;Bergün Filisur;3544;GR;9.688723579312995;46.671411031416284;rm -Bergün/Bravuogn;7482;0;Bergün Filisur;3544;GR;9.744909534804085;46.6291892820205;rm -Preda;7482;1;Bergün Filisur;3544;GR;9.77729433168765;46.58826229170581;rm -Stugl/Stuls;7482;2;Bergün Filisur;3544;GR;9.731554487842315;46.650343200483725;rm -Latsch;7484;0;Bergün Filisur;3544;GR;9.752108079985039;46.633741207847905;rm -Davos Wiesen;7494;0;Bergün Filisur;3544;GR;9.723536030323968;46.69417009841939;de -Brusio;7743;0;Brusio;3551;GR;10.124330833989942;46.258537393842374;it -Miralago;7743;2;Brusio;3551;GR;10.10191398290565;46.27309833831893;it -Campocologno;7744;0;Brusio;3551;GR;10.141885651361605;46.23331574212598;it -Viano;7747;0;Brusio;3551;GR;10.139831692623684;46.25372230256232;it -Campascio;7748;0;Brusio;3551;GR;10.129823222173918;46.2452286402286;it -Ospizio Bernina;7710;0;Poschiavo;3561;GR;10.02197938123735;46.41065826474109;it -Alp Grüm;7710;2;Poschiavo;3561;GR;10.032858303908373;46.3747659418509;it -S. Carlo (Poschiavo);7741;0;Poschiavo;3561;GR;10.064275220414983;46.34377072311453;it -Poschiavo;7742;0;Poschiavo;3561;GR;10.06200467083416;46.32553464880987;it -Sfazù;7742;2;Poschiavo;3561;GR;10.081061848880568;46.389023450377834;it -La Rösa;7742;3;Poschiavo;3561;GR;10.068832474351428;46.401299764265055;it -Miralago;7743;2;Poschiavo;3561;GR;10.100715279687996;46.27307397999865;it -Li Curt;7745;0;Poschiavo;3561;GR;10.06268008424028;46.31069948897207;it -Le Prese;7746;0;Poschiavo;3561;GR;10.080528910948223;46.293171407848696;it -Laax GR 2;7032;0;Falera;3572;GR;9.192556072689511;46.84636088524769;rm -Falera;7153;0;Falera;3572;GR;9.231613345206192;46.8002675214873;rm -Laax GR;7031;0;Laax;3575;GR;9.25357588265258;46.80411734809405;rm -Laax GR 2;7032;0;Laax;3575;GR;9.264102759673245;46.82198668770516;rm -Sagogn;7152;0;Sagogn;3581;GR;9.254014947917275;46.789019747806236;rm -Schluein;7151;0;Schluein;3582;GR;9.228317309161797;46.78881933551103;rm -St. Martin (Lugnez);7116;2;Vals;3603;GR;9.183597414636708;46.67368677268177;de -Vals;7132;0;Vals;3603;GR;9.178048274603608;46.61854808664683;de -Peiden;7110;0;Lumnezia;3618;GR;9.196033745715319;46.72002315959633;rm -Camuns;7113;0;Lumnezia;3618;GR;9.197353840271301;46.703589759682096;rm -Uors (Lumnezia);7114;0;Lumnezia;3618;GR;9.183134736358461;46.70126409163514;rm -Surcasti;7115;0;Lumnezia;3618;GR;9.176842941827417;46.69678620743835;rm -Tersnaus;7116;0;Lumnezia;3618;GR;9.184756218688682;46.6931789472179;rm -Cumbel;7142;0;Lumnezia;3618;GR;9.19194185384111;46.72603806435813;rm -Morissen;7143;0;Lumnezia;3618;GR;9.180781021030617;46.729854592769854;rm -Vella;7144;0;Lumnezia;3618;GR;9.173590945620962;46.717905489029874;rm -Degen;7145;0;Lumnezia;3618;GR;9.168002394928191;46.70589057580174;rm -Vattiz;7146;0;Lumnezia;3618;GR;9.160191375979089;46.70667897614131;rm -Vignogn;7147;0;Lumnezia;3618;GR;9.156459760886934;46.699283720038586;rm -Lumbrein;7148;0;Lumnezia;3618;GR;9.13594968702177;46.68348803840778;rm -Vrin;7149;0;Lumnezia;3618;GR;9.099298944915247;46.65515254718433;rm -Pitasch;7111;0;Ilanz/Glion;3619;GR;9.216911689936154;46.7308442897976;rm -Duvin;7112;0;Ilanz/Glion;3619;GR;9.21126493903897;46.71519152768517;rm -Castrisch;7126;0;Ilanz/Glion;3619;GR;9.23148779578021;46.77707076675698;rm -Sevgein;7127;0;Ilanz/Glion;3619;GR;9.22131724333545;46.765341152979694;rm -Riein;7128;0;Ilanz/Glion;3619;GR;9.233119983102055;46.744313288206804;rm -Ilanz;7130;0;Ilanz/Glion;3619;GR;9.203161143030206;46.773235409881565;rm -Schnaus;7130;2;Ilanz/Glion;3619;GR;9.181220608770943;46.822519422729314;rm -Schnaus;7130;2;Ilanz/Glion;3619;GR;9.180610022934761;46.777104932508486;rm -Luven;7141;0;Ilanz/Glion;3619;GR;9.198860784667833;46.762396174505504;rm -Ruschein;7154;0;Ilanz/Glion;3619;GR;9.191836554805679;46.78511192670052;rm -Ladir;7155;0;Ilanz/Glion;3619;GR;9.204601933663657;46.78958789716067;rm -Ladir;7155;0;Ilanz/Glion;3619;GR;9.174898003352048;46.839043500939134;rm -Rueun;7156;0;Ilanz/Glion;3619;GR;9.152023806572439;46.77849261281895;rm -Pigniu;7156;1;Ilanz/Glion;3619;GR;9.116800325705924;46.80885838254552;rm -Siat;7157;0;Ilanz/Glion;3619;GR;9.163487540687873;46.790890993506714;rm -Fürstenaubruck;7413;0;Fürstenau;3633;GR;9.45032422606826;46.71382691508536;rm -Fürstenau;7414;0;Fürstenau;3633;GR;9.448719078499161;46.7204374766683;rm -Rothenbrunnen;7405;0;Rothenbrunnen;3637;GR;9.426804062885388;46.76956455683319;rm -Scharans;7412;0;Scharans;3638;GR;9.459437768979091;46.71800416140005;rm -Sils im Domleschg;7411;0;Sils im Domleschg;3640;GR;9.454479947657468;46.699844090915704;de -Rothenbrunnen;7405;0;Cazis;3661;GR;9.416696862775984;46.76727528073803;rm -Cazis;7408;0;Cazis;3661;GR;9.42971168640213;46.721168813182636;rm -Rodels;7415;0;Cazis;3661;GR;9.434627751030057;46.735045981285616;rm -Summaprada;7421;0;Cazis;3661;GR;9.433612500069495;46.71411563482164;de -Tartar;7422;0;Cazis;3661;GR;9.418206226498064;46.71873197948496;rm -Sarn;7423;0;Cazis;3661;GR;9.409879054444795;46.719668643293716;rm -Portein;7423;2;Cazis;3661;GR;9.407058126243813;46.71202931027444;rm -Präz;7424;0;Cazis;3661;GR;9.405986108398954;46.74177074656354;rm -Dalin;7424;1;Cazis;3661;GR;9.404341625129716;46.73510959888954;rm -Flerden;7426;0;Flerden;3662;GR;9.39513221545324;46.67475041339227;rm -Flerden;7426;0;Flerden;3662;GR;9.405185307246395;46.703709273055;rm -Summaprada;7421;0;Masein;3663;GR;9.42431818406141;46.71022959819711;de -Masein;7425;0;Masein;3663;GR;9.426832680212518;46.7049878221745;de -Thusis;7430;0;Thusis;3668;GR;9.438788481441522;46.694382768791726;de -Mutten;7431;1;Thusis;3668;GR;9.499904431670451;46.67932487391321;de -Obermutten;7431;2;Thusis;3668;GR;9.483515959627212;46.67195098408374;de -Tschappina;7428;0;Tschappina;3669;GR;9.372219455723682;46.686707935273716;de -Urmein;7427;0;Urmein;3670;GR;9.40073792234169;46.6917808398405;de -Versam;7104;0;Safiental;3672;GR;9.33635578959582;46.794249015767804;de -Tenna;7106;0;Safiental;3672;GR;9.336181356553046;46.74747549161327;de -Safien Platz;7107;0;Safiental;3672;GR;9.315839847165892;46.682268451026374;de -Thalkirch;7109;0;Safiental;3672;GR;9.280281746928864;46.63784975524308;de -Valendas;7122;0;Safiental;3672;GR;9.281998756133644;46.788480387294086;de -Bonaduz;7402;0;Safiental;3672;GR;9.366116735636705;46.76618199746706;de -Feldis/Veulden;7404;0;Domleschg;3673;GR;9.432638128886282;46.79260530203758;rm -Trans;7407;0;Domleschg;3673;GR;9.463615792717368;46.76393397738292;rm -Rodels;7415;0;Domleschg;3673;GR;9.44509603568948;46.73543954096583;rm -Pratval;7415;2;Domleschg;3673;GR;9.44579716883088;46.73181414786733;rm -Almens;7416;0;Domleschg;3673;GR;9.459165363428243;46.73806634129287;rm -Paspels;7417;0;Domleschg;3673;GR;9.444559705472962;46.7504182247581;rm -Tumegl/Tomils;7418;0;Domleschg;3673;GR;9.439943635187403;46.76129937138572;rm -Scheid;7419;0;Domleschg;3673;GR;9.451045362269065;46.778047357325235;rm -Avers;7447;0;Avers;3681;GR;9.513941989977209;46.47315706739906;de -Juf;7448;0;Avers;3681;GR;9.579869470350445;46.445309708900346;de -Sufers;7434;0;Sufers;3695;GR;9.36700623745846;46.572199027543554;de -Andeer;7440;0;Andeer;3701;GR;9.424795023354223;46.60167104695359;rm -Clugin;7442;0;Andeer;3701;GR;9.425309117520102;46.616299021937266;rm -Pignia;7443;0;Andeer;3701;GR;9.441222632124278;46.61356583207667;rm -Rongellen;7430;2;Rongellen;3711;GR;9.443320936379815;46.67352815011563;rm -Zillis;7432;0;Zillis-Reischen;3712;GR;9.443457747063068;46.63401157118449;rm -Ausserferrera;7444;0;Ferrera;3713;GR;9.440930764150796;46.55688145965146;rm -Innerferrera;7445;0;Ferrera;3713;GR;9.455533011841203;46.48240920395572;rm -Innerferrera;7445;0;Ferrera;3713;GR;9.442722703120024;46.520780630857764;rm -Splügen;7435;0;Rheinwald;3714;GR;9.323938706226192;46.55408112313424;de -Medels im Rheinwald;7436;0;Rheinwald;3714;GR;9.293683911412076;46.54630613994429;de -Nufenen;7437;0;Rheinwald;3714;GR;9.245440686616812;46.540755297048314;de -Hinterrhein;7438;0;Rheinwald;3714;GR;9.19703977841701;46.532048348614325;de -Donat;7433;0;Muntogna da Schons;3715;GR;9.430350502746078;46.62882051112475;rm -Lohn GR;7433;3;Muntogna da Schons;3715;GR;9.426859685858597;46.650836148259295;rm -Mathon;7433;4;Muntogna da Schons;3715;GR;9.415630548260921;46.636196306716116;rm -Wergenstein;7433;5;Muntogna da Schons;3715;GR;9.404705436227031;46.62565542010616;rm -Bonaduz;7402;0;Bonaduz;3721;GR;9.402439991747565;46.811837035494186;de -Domat/Ems;7013;0;Domat/Ems;3722;GR;9.451354465751747;46.83613594942912;rm -Rhäzüns;7403;0;Rhäzüns;3723;GR;9.397000297840027;46.79870007054345;rm -Felsberg;7012;0;Felsberg;3731;GR;9.47058268816321;46.84542794832556;de -Flims Dorf;7017;0;Flims;3732;GR;9.284319621688;46.8376508664783;rm -Flims Waldhaus;7018;0;Flims;3732;GR;9.29146177070685;46.8291994483295;rm -Fidaz;7019;0;Flims;3732;GR;9.309341660300904;46.840786533957626;rm -Tamins;7015;0;Tamins;3733;GR;9.407984258140296;46.82921898930762;de -Vättis;7315;0;Tamins;3733;GR;9.404345432266473;46.87485694686917;de -Trin;7014;0;Trin;3734;GR;9.363619957288709;46.83043434320046;rm -Tamins;7015;0;Trin;3734;GR;9.382544168813812;46.82902917031256;de -Trin Mulin;7016;0;Trin;3734;GR;9.33635454166175;46.83123258677348;rm -Davos Dorf;7260;0;Zernez;3746;GR;9.948246232174306;46.75104692203599;de -Brail;7527;0;Zernez;3746;GR;10.036522903505652;46.65638155974896;rm -Zernez;7530;0;Zernez;3746;GR;10.095238060122242;46.69927390993397;rm -Susch;7542;0;Zernez;3746;GR;10.077047461867009;46.749113822883416;rm -Lavin;7543;0;Zernez;3746;GR;10.113239893470533;46.77015633552379;rm -Samnaun-Compatsch;7562;0;Samnaun;3752;GR;10.400228335646238;46.961253682414664;de -Samnaun Dorf;7563;0;Samnaun;3752;GR;10.36144939317227;46.941168314004;de -Guarda;7545;0;Scuol;3762;GR;10.152113848288003;46.77512176740142;rm -Ardez;7546;0;Scuol;3762;GR;10.202042231745917;46.77545273488475;rm -Scuol;7550;0;Scuol;3762;GR;10.304523341963685;46.79390116104304;rm -Ftan;7551;0;Scuol;3762;GR;10.246137404124859;46.79611065446124;rm -Vulpera;7552;0;Scuol;3762;GR;10.286204795898135;46.787243287595075;rm -Tarasp;7553;0;Scuol;3762;GR;10.264709828718013;46.77574360543999;rm -Sent;7554;0;Scuol;3762;GR;10.336803012386275;46.81584857319978;rm -Ramosch;7556;0;Valsot;3764;GR;10.244561187005027;46.9012151206686;rm -Ramosch;7556;0;Valsot;3764;GR;10.382249723100388;46.834303007572636;rm -Vnà;7557;0;Valsot;3764;GR;10.363524841125363;46.84305811213374;rm -Strada;7558;0;Valsot;3764;GR;10.434964080873758;46.86260626861026;rm -Tschlin;7559;0;Valsot;3764;GR;10.426176262436138;46.87116187514541;rm -Martina;7560;0;Valsot;3764;GR;10.463543700515107;46.884345562552916;rm -Bever;7502;0;Bever;3781;GR;9.729523165466842;46.5285655946488;rm -Bever;7502;0;Bever;3781;GR;9.88927159945962;46.55235049509746;rm -St. Moritz;7500;0;Celerina/Schlarigna;3782;GR;9.865364471671251;46.496139051860126;rm -Pontresina;7504;0;Celerina/Schlarigna;3782;GR;9.895010663806186;46.49222768365898;rm -Celerina/Schlarigna;7505;0;Celerina/Schlarigna;3782;GR;9.86263028498326;46.51227782936343;rm -Madulain;7523;0;Madulain;3783;GR;9.998295664214314;46.49724614323881;rm -Madulain;7523;0;Madulain;3783;GR;9.936914304122734;46.58549176795034;rm -Pontresina;7504;0;Pontresina;3784;GR;9.90247473487033;46.49350224505089;rm -La Punt Chamues-ch;7522;0;La Punt Chamues-ch;3785;GR;9.928683611466699;46.577541480429105;rm -Samedan;7503;0;Samedan;3786;GR;9.870554894169318;46.533898129554935;rm -Pontresina;7504;0;Samedan;3786;GR;9.86256611740373;46.417047238051936;rm -St. Moritz;7500;0;St. Moritz;3787;GR;9.839985337298728;46.49841188520117;rm -Champfèr;7512;0;St. Moritz;3787;GR;9.81423407302186;46.479374019328304;rm -S-chanf;7525;0;S-chanf;3788;GR;9.985068420622047;46.613887249594015;rm -Cinuos-chel;7526;0;S-chanf;3788;GR;10.023145844221185;46.64157955474017;rm -Chapella;7526;1;S-chanf;3788;GR;10.01048866604564;46.633249484757314;rm -Sils/Segl Maria;7514;0;Sils im Engadin/Segl;3789;GR;9.763662324057414;46.429019954608165;rm -Fex;7514;2;Sils im Engadin/Segl;3789;GR;9.760862529083132;46.418974265426854;rm -Sils/Segl Baselgia;7515;0;Sils im Engadin/Segl;3789;GR;9.75508505538917;46.434692470907926;rm -Plaun da Lej;7517;0;Sils im Engadin/Segl;3789;GR;9.724474514732494;46.42182478352467;rm -Champfèr;7512;0;Silvaplana;3790;GR;9.81048783096587;46.47813089276229;rm -Silvaplana;7513;0;Silvaplana;3790;GR;9.795161924530857;46.45944062753783;rm -Silvaplana-Surlej;7513;2;Silvaplana;3790;GR;9.8139763951171;46.45944108248705;rm -Zuoz;7524;0;Zuoz;3791;GR;9.956313339361152;46.60138646519043;rm -Zuoz;7524;0;Zuoz;3791;GR;9.886658206320025;46.61164182982894;rm -Avers;7447;0;Bregaglia;3792;GR;9.504365939601772;46.401529156953316;de -Maloja;7516;0;Bregaglia;3792;GR;9.696147630194279;46.40235955465698;it -Casaccia;7602;0;Bregaglia;3792;GR;9.665848595358025;46.39091769995954;it -Vicosoprano;7603;0;Bregaglia;3792;GR;9.622188404686527;46.350867935865544;it -Borgonovo;7604;0;Bregaglia;3792;GR;9.60386496204543;46.34783262722452;it -Stampa;7605;0;Bregaglia;3792;GR;9.59064788178799;46.34340904580393;it -Promontogno;7606;0;Bregaglia;3792;GR;9.55829558855705;46.33751714597992;it -Bondo;7606;1;Bregaglia;3792;GR;9.554365528414891;46.33437325409853;de -Castasegna;7608;0;Bregaglia;3792;GR;9.51618018601029;46.33391441398864;it -Soglio;7610;0;Bregaglia;3792;GR;9.539256555961222;46.34109021365299;it -Buseno;6542;0;Buseno;3804;GR;9.107344858312565;46.27275912249046;it -Grono;6537;0;Castaneda;3805;GR;9.14431733639543;46.251568974265076;it -Castaneda;6540;0;Castaneda;3805;GR;9.140497235878994;46.25700735647225;it -Sta. Maria in Calanca;6541;0;Castaneda;3805;GR;9.123017818871977;46.266580095511294;it -Rossa;6548;0;Rossa;3808;GR;9.127096906526479;46.37282886406153;it -Augio;6548;1;Rossa;3808;GR;9.12671009048805;46.36470191071707;it -Sta. Domenica;6548;2;Rossa;3808;GR;9.122845750653754;46.351822801640125;it -Sta. Maria in Calanca;6541;0;Santa Maria in Calanca;3810;GR;9.144958794511027;46.26301322082196;it -Lostallo;6558;0;Lostallo;3821;GR;9.194435336028919;46.31260034159053;it -Mesocco;6563;0;Mesocco;3822;GR;9.230758252491245;46.39278033915167;it -S. Bernardino;6565;0;Mesocco;3822;GR;9.192387471770187;46.46283264219293;it -Soazza;6562;0;Soazza;3823;GR;9.222924597474144;46.36691327698995;it -Cama;6557;0;Cama;3831;GR;9.173172862006505;46.27211821516478;it -Grono;6537;0;Grono;3832;GR;9.144999240787877;46.24754590749502;it -Verdabbio;6538;0;Grono;3832;GR;9.23422883318792;46.26442284624786;it -Verdabbio;6538;0;Grono;3832;GR;9.157854762320383;46.268216587645654;it -Leggia;6556;0;Grono;3832;GR;9.164463557866263;46.260947102788634;it -Cama;6557;0;Grono;3832;GR;9.173842322630733;46.28611335428587;it -Roveredo GR;6535;0;Roveredo (GR);3834;GR;9.120003006531215;46.23310249523047;it -Laura;6549;0;Roveredo (GR);3834;GR;9.105185370377322;46.213347750386745;it -Lumino;6533;0;San Vittore;3835;GR;9.075473238130442;46.23494916889278;it -S. Vittore;6534;0;San Vittore;3835;GR;9.162610925347636;46.18621933642523;it -S. Vittore;6534;0;San Vittore;3835;GR;9.110124647357114;46.23842782168884;it -Arvigo;6543;0;Calanca;3837;GR;9.113391169575102;46.30225069190649;it -Braggio;6544;0;Calanca;3837;GR;9.123535050785593;46.30326680130374;it -Selma;6545;0;Calanca;3837;GR;9.121669808026144;46.31924627241436;it -Cauco;6546;0;Calanca;3837;GR;9.12134115847307;46.33506406866638;it -Tschierv;7532;0;Val Müstair;3847;GR;10.340760387800264;46.62445550651699;rm -Fuldera;7533;0;Val Müstair;3847;GR;10.371404029092169;46.60864013445815;rm -Lü;7534;0;Val Müstair;3847;GR;10.369174166130472;46.622443369042195;rm -Valchava;7535;0;Val Müstair;3847;GR;10.408568958033278;46.60019423557342;rm -Sta. Maria Val Müstair;7536;0;Val Müstair;3847;GR;10.422838532516616;46.6013301486474;rm -Müstair;7537;0;Val Müstair;3847;GR;10.445205632132339;46.62171782204736;rm -Davos Dorf;7260;0;Davos;3851;GR;9.839822948699043;46.80907392650913;de -Davos Wolfgang;7265;0;Davos;3851;GR;9.854593024128345;46.83201534807431;de -Davos Platz;7270;0;Davos;3851;GR;9.8221368256754;46.7932792416927;de -Davos Clavadel;7272;0;Davos;3851;GR;9.81625393533818;46.76712512841199;de -Davos Frauenkirch;7276;0;Davos;3851;GR;9.798670834631054;46.768770603131706;de -Davos Glaris;7277;0;Davos;3851;GR;9.776589770640685;46.741012700949994;de -Davos Monstein;7278;0;Davos;3851;GR;9.770946455917564;46.71199017920756;de -Davos Wiesen;7494;0;Davos;3851;GR;9.714508017359899;46.70372429448485;de -Fideris;7235;0;Fideris;3861;GR;9.740345300742565;46.91400222754782;de -Furna;7232;0;Furna;3862;GR;9.678968216807393;46.93695873382035;de -Pragg-Jenaz;7231;0;Jenaz;3863;GR;9.703532215006776;46.938495349216375;de -Jenaz;7233;0;Jenaz;3863;GR;9.71747714970379;46.93033508219449;de -Saas im Prättigau;7247;0;Klosters;3871;GR;9.8053100478841;46.91086517336067;de -Serneus;7249;0;Klosters;3871;GR;9.840231869611868;46.89068565667186;de -Klosters;7250;0;Klosters;3871;GR;9.88210213459575;46.8703635568374;de -Klosters Dorf;7252;0;Klosters;3871;GR;9.875142302548065;46.88362087560375;de -Davos Wolfgang;7265;0;Klosters;3871;GR;9.874203497220476;46.85157078939065;de -Conters im Prättigau;7241;0;Conters im Prättigau;3881;GR;9.7990435599311;46.90321856047657;de -Küblis;7240;0;Küblis;3882;GR;9.777042388419474;46.914226159619396;de -Lunden;7222;0;Luzein;3891;GR;9.732561981113154;46.94853946090798;de -Buchen im Prättigau;7223;0;Luzein;3891;GR;9.718656013636446;46.94035198320311;de -Putz;7224;0;Luzein;3891;GR;9.742374410355128;46.92611190906532;de -Stels;7226;0;Luzein;3891;GR;9.749764339973064;46.960727857679046;de -Küblis;7240;0;Luzein;3891;GR;9.764169663777556;46.91362689537583;de -Luzein;7242;0;Luzein;3891;GR;9.767545326827472;46.91935469540944;de -Pany;7243;0;Luzein;3891;GR;9.77142957539745;46.9278817775106;de -Gadenstätt;7244;0;Luzein;3891;GR;9.793072169720748;46.94446110236218;de -Ascharina;7245;0;Luzein;3891;GR;9.807084140397377;46.95763169946251;de -St. Antönien;7246;0;Luzein;3891;GR;9.814018926491418;46.9694746230127;de -Chur;7000;0;Chur;3901;GR;9.53279983527006;46.84817709160957;de -Haldenstein;7023;0;Chur;3901;GR;9.521942767055394;46.879200086584255;de -Maladers;7026;0;Chur;3901;GR;9.560642993168035;46.83669701315662;de -Malix;7074;0;Chur;3901;GR;9.525427443697314;46.83440222476056;de -Chur;7000;0;Churwalden;3911;GR;9.547086770169743;46.83261866847519;de -Passugg;7062;0;Churwalden;3911;GR;9.546975364594061;46.830249561349085;de -Malix;7074;0;Churwalden;3911;GR;9.531007731699583;46.81384998008302;de -Churwalden;7075;0;Churwalden;3911;GR;9.54447292799674;46.78070500007767;de -Parpan;7076;0;Churwalden;3911;GR;9.557628615805138;46.76106088243136;de -Castiel;7027;0;Arosa;3921;GR;9.601831183654589;46.83845337621556;de -Lüen;7027;1;Arosa;3921;GR;9.613074351954092;46.83289434092728;de -Calfreisen;7027;3;Arosa;3921;GR;9.595055059743;46.84135176458199;de -St. Peter;7028;0;Arosa;3921;GR;9.643875554178928;46.83433106276666;de -Pagig;7028;1;Arosa;3921;GR;9.63669256331225;46.837102907112225;de -Peist;7029;0;Arosa;3921;GR;9.673871698304103;46.83299695807456;de -Arosa;7050;0;Arosa;3921;GR;9.675599161530497;46.77729827776493;de -Molinis;7056;0;Arosa;3921;GR;9.655177650149842;46.827287127993934;de -Langwies;7057;0;Arosa;3921;GR;9.713195396084664;46.82041515571302;de -Litzirüti;7058;0;Arosa;3921;GR;9.702650648674535;46.797992383113595;de -Praden;7063;0;Tschiertschen-Praden;3932;GR;9.581644934804933;46.8250763390718;de -Tschiertschen;7064;0;Tschiertschen-Praden;3932;GR;9.606973036600458;46.817853136278174;de -Says;7202;0;Trimmis;3945;GR;9.575168336871615;46.903578440125145;de -Trimmis;7203;0;Trimmis;3945;GR;9.563937832877956;46.89602558444964;de -Valzeina;7213;0;Trimmis;3945;GR;9.632635298961809;46.89740541806023;de -Untervaz;7204;0;Untervaz;3946;GR;9.535084368258172;46.92721863554332;de -Zizers;7205;0;Zizers;3947;GR;9.566025482788588;46.93664704565707;de -Landquart;7302;0;Zizers;3947;GR;9.551330303054579;46.963542994319454;de -Maienfeld;7304;0;Fläsch;3951;GR;9.576470596658504;47.04176920303697;de -Fläsch;7306;0;Fläsch;3951;GR;9.513896761389045;47.025727824674036;de -Jenins;7307;0;Jenins;3952;GR;9.556026489583088;47.00107053521757;de -Landquart;7302;0;Maienfeld;3953;GR;9.555784099896503;46.96988373798458;de -Maienfeld;7304;0;Maienfeld;3953;GR;9.531480740081374;47.00798954655765;de -Malans GR;7208;0;Malans;3954;GR;9.574330550951926;46.98182662089853;de -Untervaz;7204;0;Landquart;3955;GR;9.541186585558803;46.948120599755015;de -Igis;7206;0;Landquart;3955;GR;9.571730767522743;46.94527643519146;de -Landquart;7302;0;Landquart;3955;GR;9.558616106269687;46.963569415242894;de -Mastrils;7303;0;Landquart;3955;GR;9.543969508287738;46.96794861985525;de -St. Margrethenberg;7313;0;Landquart;3955;GR;9.521958333906943;46.96035449735511;de -Valzeina;7213;0;Grüsch;3961;GR;9.603172328086886;46.95098819379005;de -Grüsch;7214;0;Grüsch;3961;GR;9.647034953807298;46.982451805219824;de -Fanas;7215;0;Grüsch;3961;GR;9.66663334568443;46.984456461879006;de -Grüsch;7214;0;Schiers;3962;GR;9.663186270539759;46.97622257740515;de -Schiers;7220;0;Schiers;3962;GR;9.688374572960496;46.970220107247776;de -Schiers;7220;0;Schiers;3962;GR;9.770067705090314;46.995319810894124;de -Lunden;7222;0;Schiers;3962;GR;9.711868848467107;46.94829827373983;de -Stels;7226;0;Schiers;3962;GR;9.798348579164086;47.0103253520973;de -Stels;7226;0;Schiers;3962;GR;9.71578028809101;46.96549628204442;de -Fajauna;7226;2;Schiers;3962;GR;9.700645469236553;46.969661880506116;de -Schuders;7228;0;Schiers;3962;GR;9.738421546300454;46.991097322973424;de -Pusserein;7228;1;Schiers;3962;GR;9.710943086394552;46.9835394890135;de -Seewis Dorf;7212;0;Seewis im Prättigau;3972;GR;9.639780556157344;46.989709755299984;de -Seewis-Pardisla;7212;1;Seewis im Prättigau;3972;GR;9.631783787080932;46.97755749377443;de -Seewis-Schmitten;7212;2;Seewis im Prättigau;3972;GR;9.640681501001445;46.980360908360396;de -Fanas;7215;0;Seewis im Prättigau;3972;GR;9.656417043472022;47.01585745492563;de -Obersaxen;7134;0;Breil/Brigels;3981;GR;9.03296107772882;46.74273564465719;de -Waltensburg/Vuorz;7158;0;Breil/Brigels;3981;GR;9.117599611722438;46.777114292554536;rm -Andiast;7159;0;Breil/Brigels;3981;GR;9.11793641335161;46.78701272595247;rm -Tavanasa;7162;0;Breil/Brigels;3981;GR;9.0627163768955;46.75481296481839;rm -Danis;7163;0;Breil/Brigels;3981;GR;9.057203173506265;46.75471879526169;rm -Dardin;7164;0;Breil/Brigels;3981;GR;9.043755453828346;46.75690926478085;rm -Breil/Brigels;7165;0;Breil/Brigels;3981;GR;9.06146159545732;46.76817180134502;rm -Disentis/Mustér;7180;0;Disentis/Mustér;3982;GR;8.851466126965445;46.703389350690635;rm -Cavardiras;7182;0;Disentis/Mustér;3982;GR;8.884864242101493;46.71052075255355;rm -Mumpé Medel;7183;0;Disentis/Mustér;3982;GR;8.848076190991229;46.68952215148371;rm -Segnas;7186;0;Disentis/Mustér;3982;GR;8.828022813420423;46.694941616144575;rm -Curaglia;7184;0;Medel (Lucmagn);3983;GR;8.85871221747488;46.67357203373149;rm -Platta;7185;0;Medel (Lucmagn);3983;GR;8.854060819600374;46.658248861605976;rm -Rabius;7172;0;Sumvitg;3985;GR;8.958484752015814;46.7345049985576;rm -Surrein;7173;0;Sumvitg;3985;GR;8.949457197771443;46.72269141826945;rm -S. Benedetg;7174;0;Sumvitg;3985;GR;8.939175401238332;46.73471326656388;rm -Sumvitg;7175;0;Sumvitg;3985;GR;8.939095028603756;46.72818531373043;rm -Cumpadials;7176;0;Sumvitg;3985;GR;8.92085470342764;46.722756774438736;rm -Disentis/Mustér;7180;0;Sumvitg;3985;GR;8.900127231560031;46.71849150220935;rm -Camischolas;7187;0;Tujetsch;3986;GR;8.761172887791515;46.68237253052586;rm -Sedrun;7188;0;Tujetsch;3986;GR;8.775169150995112;46.679615995951416;rm -Rueras;7189;0;Tujetsch;3986;GR;8.750882254434563;46.67456046399816;rm -Trun;7166;0;Trun;3987;GR;8.984790128702453;46.74196928820311;rm -Zignau;7167;0;Trun;3987;GR;9.00621075406221;46.74094618334855;rm -Schlans;7168;0;Trun;3987;GR;9.015012842491934;46.75319831275079;rm -Rabius;7172;0;Trun;3987;GR;8.96364300936484;46.7380144062609;rm -Obersaxen;7134;0;Obersaxen Mundaun;3988;GR;9.100229701547233;46.74852927682207;de -Flond;7137;0;Obersaxen Mundaun;3988;GR;9.161022013568228;46.76758860332831;rm -Surcuolm;7138;0;Obersaxen Mundaun;3988;GR;9.144088634093457;46.7578091367759;rm -Aarau;5000;0;Aarau;4001;AG;8.048667760616965;47.38901423157816;de -Aarau;5004;0;Aarau;4001;AG;8.060592030984289;47.400921041532925;de -Aarau Rohr;5032;0;Aarau;4001;AG;8.085285394113608;47.40200809245217;de -Biberstein;5023;0;Biberstein;4002;AG;8.081244803607762;47.415955143611754;de -Buchs AG;5033;0;Buchs (AG);4003;AG;8.07133990310647;47.38921826615594;de -Asp;5025;0;Densbüren;4004;AG;8.04875805221814;47.44287014866537;de -Densbüren;5026;0;Densbüren;4004;AG;8.05486323843423;47.45285898883019;de -Barmelweid;5017;0;Erlinsbach (AG);4005;AG;7.969941942960792;47.42185778936376;de -Erlinsbach;5018;0;Erlinsbach (AG);4005;AG;8.009675597968336;47.40746809985258;de -Gränichen;5722;0;Gränichen;4006;AG;8.102126287370167;47.356504891918824;de -Teufenthal AG;5723;0;Gränichen;4006;AG;8.112410980633818;47.33532490628646;de -Hirschthal;5042;0;Hirschthal;4007;AG;8.056392816249216;47.31870720252326;de -Rombach;5022;0;Küttigen;4008;AG;8.046797981749277;47.40544473520921;de -Küttigen;5024;0;Küttigen;4008;AG;8.047804175811564;47.413030588899254;de -Muhen;5037;0;Muhen;4009;AG;8.051355935919275;47.335029350351014;de -Oberentfelden;5036;0;Oberentfelden;4010;AG;8.03377378772822;47.35800388951357;de -Aarau;5000;0;Suhr;4012;AG;8.060524136188471;47.38149040853023;de -Suhr;5034;0;Suhr;4012;AG;8.076050236933959;47.37319913559865;de -Unterentfelden;5035;0;Unterentfelden;4013;AG;8.038348881429336;47.36968525075385;de -Baden;5400;0;Baden;4021;AG;8.308981470450894;47.47262639905851;de -Baden;5404;0;Baden;4021;AG;8.278285489120819;47.454506656538534;de -Dättwil AG;5405;2;Baden;4021;AG;8.285912550438717;47.454448095239094;de -Rütihof;5406;2;Baden;4021;AG;8.268352153289332;47.440087476529726;de -Bellikon;5454;0;Bellikon;4022;AG;8.345428543616844;47.391204500467445;de -Widen;8967;0;Bellikon;4022;AG;8.35536269791331;47.37700214242542;de -Bergdietikon;8962;0;Bergdietikon;4023;AG;8.380370150733269;47.39075686461178;de -Widen;8967;0;Bergdietikon;4023;AG;8.364637671747767;47.38475933170824;de -Rütihof;5406;2;Birmenstorf (AG);4024;AG;8.260872441901464;47.43792601891746;de -Birmenstorf AG;5413;0;Birmenstorf (AG);4024;AG;8.248709815689026;47.461868052120586;de -Ennetbaden;5408;0;Ennetbaden;4026;AG;8.323996845889873;47.48055557364367;de -Dättwil AG;5405;2;Fislisbach;4027;AG;8.295483953256706;47.445447063283375;de -Fislisbach;5442;0;Fislisbach;4027;AG;8.29688020756547;47.43904218816608;de -Freienwil;5423;0;Freienwil;4028;AG;8.326438854177049;47.502635227346836;de -Gebenstorf;5412;0;Gebenstorf;4029;AG;8.240166177386115;47.48065575806111;de -Vogelsang AG;5412;1;Gebenstorf;4029;AG;8.240103209383813;47.4951134221311;de -Killwangen;8956;0;Killwangen;4030;AG;8.34871896150538;47.43271019192202;de -Künten;5444;0;Künten;4031;AG;8.326894506542793;47.39027901812604;de -Mägenwil;5506;0;Mägenwil;4032;AG;8.233670142532956;47.40973188781006;de -Mellingen;5507;0;Mellingen;4033;AG;8.28140089741134;47.41819940889915;de -Neuenhof;5432;0;Neuenhof;4034;AG;8.323675642906949;47.44570935554622;de -Niederrohrdorf;5443;0;Niederrohrdorf;4035;AG;8.297717522904602;47.42382200488397;de -Oberrohrdorf;5452;0;Oberrohrdorf;4037;AG;8.32198640688661;47.422733915045605;de -Nussbaumen AG;5415;0;Obersiggenthal;4038;AG;8.289518476562604;47.4891270402582;de -Hertenstein AG;5415;1;Obersiggenthal;4038;AG;8.312729817548732;47.48750170880415;de -Rieden AG;5415;2;Obersiggenthal;4038;AG;8.304051327524338;47.483964644448484;de -Kirchdorf AG;5416;0;Obersiggenthal;4038;AG;8.2740996856474;47.496890051573494;de -Remetschwil;5453;0;Remetschwil;4039;AG;8.326704061465595;47.408317718780744;de -Dietikon;8953;0;Spreitenbach;4040;AG;8.381905747034804;47.40487113894648;de -Spreitenbach;8957;0;Spreitenbach;4040;AG;8.365600590056742;47.416854059094376;de -Stetten AG;5608;0;Stetten (AG);4041;AG;8.305947838785896;47.3995745998586;de -Turgi;5300;0;Turgi;4042;AG;8.253695283885394;47.49072826137482;de -Turgi;5300;0;Untersiggenthal;4044;AG;8.249147256718208;47.49721124882738;de -Siggenthal Station;5301;0;Untersiggenthal;4044;AG;8.23796625374396;47.51522516954077;de -Kirchdorf AG;5416;0;Untersiggenthal;4044;AG;8.27075113745277;47.501332311392005;de -Untersiggenthal;5417;0;Untersiggenthal;4044;AG;8.259889012057913;47.50528989151746;de -Wettingen;5430;0;Wettingen;4045;AG;8.33046577587193;47.46781163124184;de -Mägenwil;5506;0;Wohlenschwil;4046;AG;8.2405812314824;47.41948907314031;de -Wohlenschwil;5512;0;Wohlenschwil;4046;AG;8.256708640719525;47.41238658687534;de -Würenlingen;5303;0;Würenlingen;4047;AG;8.258632311972468;47.53023543539085;de -Wettingen;5430;0;Würenlos;4048;AG;8.340620147078248;47.44700832478067;de -Würenlos;5436;0;Würenlos;4048;AG;8.364873281481309;47.442787316282;de -Kloster Fahr;8109;0;Würenlos;4048;AG;8.439065847735677;47.40827565601708;de -Ehrendingen;5420;0;Ehrendingen;4049;AG;8.342137171802355;47.49731557857811;de -Arni AG;8905;3;Arni (AG);4061;AG;8.42030923996525;47.31854677183242;de -Rudolfstetten;8964;0;Berikon;4062;AG;8.387554384093447;47.358601006174744;de -Berikon;8965;0;Berikon;4062;AG;8.372989973577686;47.34980445196718;de -Bremgarten AG;5620;0;Bremgarten (AG);4063;AG;8.340249183615057;47.35185760693883;de -Hermetschwil-Staffeln;5626;0;Bremgarten (AG);4063;AG;8.341538048594813;47.330305090716266;de -Büttikon AG;5619;0;Büttikon;4064;AG;8.26947109851006;47.328559189550404;de -Hendschiken;5604;0;Dottikon;4065;AG;8.227796516858865;47.393633280279495;de -Dottikon;5605;0;Dottikon;4065;AG;8.241003011814197;47.38366378516513;de -Eggenwil;5445;0;Eggenwil;4066;AG;8.33915843187933;47.36716737008623;de -Fischbach-Göslikon;5525;0;Fischbach-Göslikon;4067;AG;8.311100253895166;47.36911993865972;de -Tägerig;5522;0;Hägglingen;4068;AG;8.275981713583267;47.38842589239531;de -Hägglingen;5607;0;Hägglingen;4068;AG;8.254076353858885;47.387520428712556;de -Jonen;8916;0;Jonen;4071;AG;8.395477921854784;47.29580040862139;de -Niederwil AG;5524;0;Niederwil (AG);4072;AG;8.294351915473245;47.37874265737798;de -Nesselnbach;5524;2;Niederwil (AG);4072;AG;8.29570550272332;47.390365223722355;de -Oberlunkhofen;8917;0;Oberlunkhofen;4073;AG;8.38996633989805;47.31240278720281;de -Oberwil-Lieli;8966;0;Oberwil-Lieli;4074;AG;8.385604554230742;47.335718555575966;de -Rudolfstetten;8964;0;Rudolfstetten-Friedlisberg;4075;AG;8.37918618216318;47.36829136414204;de -Sarmenstorf;5614;0;Sarmenstorf;4076;AG;8.251926898118318;47.313347212080224;de -Bettwil;5618;0;Sarmenstorf;4076;AG;8.262523855408082;47.301757743887876;de -Tägerig;5522;0;Tägerig;4077;AG;8.281379343901449;47.402430099343;de -Uezwil;5619;2;Uezwil;4078;AG;8.275508501790057;47.31552187748691;de -Unterlunkhofen;8918;0;Unterlunkhofen;4079;AG;8.380813880569631;47.32126972233873;de -Dottikon;5605;0;Villmergen;4080;AG;8.238274501507092;47.368528723714505;de -Wohlen AG;5610;0;Villmergen;4080;AG;8.258925764716954;47.34987743103475;de -Anglikon;5611;0;Villmergen;4080;AG;8.254385224556906;47.36146165231883;de -Villmergen;5612;0;Villmergen;4080;AG;8.243859161870212;47.34573341765583;de -Hilfikon;5613;0;Villmergen;4080;AG;8.250901159749027;47.33323348064915;de -Widen;8967;0;Widen;4081;AG;8.35766836426026;47.36767820915273;de -Wohlen AG;5610;0;Wohlen (AG);4082;AG;8.278192139493799;47.351195340409326;de -Anglikon;5611;0;Wohlen (AG);4082;AG;8.262798883398121;47.36536141118902;de -Villmergen;5612;0;Wohlen (AG);4082;AG;8.259356197981788;47.3526148339818;de -Zufikon;5621;0;Zufikon;4083;AG;8.360908045146695;47.34452305593265;de -Islisberg;8905;2;Islisberg;4084;AG;8.439267199532804;47.322526841399394;de -Auenstein;5105;0;Auenstein;4091;AG;8.140704947163327;47.41599375711504;de -Birr;5242;1;Birr;4092;AG;8.201220856306582;47.43688881835543;de -Birrhard;5244;0;Birrhard;4093;AG;8.245620455068186;47.43417579417934;de -Schinznach Bad;5116;0;Brugg;4095;AG;8.168717132078998;47.45384434216058;de -Brugg AG;5200;0;Brugg;4095;AG;8.206855727883811;47.48510390470239;de -Windisch;5210;0;Brugg;4095;AG;8.207703366733783;47.47800407282127;de -Umiken;5222;0;Brugg;4095;AG;8.189749220630521;47.48204575895972;de -Habsburg;5245;0;Habsburg;4099;AG;8.185986808457306;47.461426338701926;de -Windisch;5210;0;Hausen (AG);4100;AG;8.208497622782826;47.47197352690496;de -Hausen AG;5212;0;Hausen (AG);4100;AG;8.211551221921365;47.462100864960895;de -Hausen AG;5212;0;Lupfig;4104;AG;8.214322628174326;47.453094331884884;de -Lupfig;5242;2;Lupfig;4104;AG;8.206557423945954;47.4394559009842;de -Scherz;5246;0;Lupfig;4104;AG;8.18419684841963;47.446886833828664;de -Mandach;5318;0;Mandach;4105;AG;8.186152105927746;47.54679990563589;de -Effingen;5078;0;Mönthal;4106;AG;8.120472297981602;47.514225055848925;de -Mönthal;5237;0;Mönthal;4106;AG;8.143331707257639;47.51788471000419;de -Mülligen;5243;0;Mülligen;4107;AG;8.239424231763895;47.45783389290502;de -Remigen;5236;0;Remigen;4110;AG;8.186918051662989;47.516052847506145;de -Riniken;5223;0;Riniken;4111;AG;8.189964693785877;47.49293628650045;de -Brugg AG;5200;0;Rüfenach;4112;AG;8.23123998431108;47.50534123485021;de -Rüfenach AG;5235;0;Rüfenach;4112;AG;8.205058536699495;47.50899804695212;de -Thalheim AG;5112;0;Thalheim (AG);4117;AG;8.102820750677916;47.435993578062984;de -Veltheim AG;5106;0;Veltheim (AG);4120;AG;8.14731407663177;47.43829492234106;de -Stilli;5233;0;Villigen;4121;AG;8.23149428632739;47.51649183927331;de -Villigen;5234;0;Villigen;4121;AG;8.212994781045236;47.52713130043819;de -Schinznach Dorf;5107;0;Villnachern;4122;AG;8.158296741187309;47.46445771171696;de -Villnachern;5213;0;Villnachern;4122;AG;8.156566646063329;47.46935481449758;de -Umiken;5222;0;Villnachern;4122;AG;8.188995602347266;47.47921699881251;de -Bözberg;5225;1;Villnachern;4122;AG;8.16755927520608;47.47877275758438;de -Windisch;5210;0;Windisch;4123;AG;8.213338533864652;47.47571374425734;de -Bözberg;5225;1;Bözberg;4124;AG;8.161412825244234;47.49127256560385;de -Remigen;5236;0;Bözberg;4124;AG;8.178106023430153;47.50205501303519;de -Mönthal;5237;0;Bözberg;4124;AG;8.15274107719832;47.50814882063713;de -Schinznach Dorf;5107;0;Schinznach;4125;AG;8.142555727593473;47.4463749434959;de -Oberflachs;5108;0;Schinznach;4125;AG;8.130559364275136;47.44088373281186;de -Beinwil am See;5712;0;Beinwil am See;4131;AG;8.208411287578402;47.2649907221911;de -Birrwil;5708;0;Birrwil;4132;AG;8.197733077564294;47.29015198678358;de -Dürrenäsch;5724;0;Dürrenäsch;4134;AG;8.15747432490808;47.32131722233586;de -Unterkulm;5726;0;Dürrenäsch;4134;AG;8.130899632902912;47.31844963681315;de -Schmiedrued;5046;1;Gontenschwil;4135;AG;8.121761169048803;47.265792231725555;de -Walde AG;5046;2;Gontenschwil;4135;AG;8.131255674211223;47.24782939493506;de -Gontenschwil;5728;0;Gontenschwil;4135;AG;8.145178789960822;47.271772483336626;de -Holziken;5043;0;Holziken;4136;AG;8.034309025721127;47.31951315237186;de -Leimbach AG;5733;0;Leimbach (AG);4137;AG;8.170063459648773;47.274869563829064;de -Boniswil;5706;0;Leutwil;4138;AG;8.178930550362415;47.31441443474138;de -Leutwil;5725;0;Leutwil;4138;AG;8.17401463661694;47.309475460179556;de -Burg AG;5736;0;Menziken;4139;AG;8.177988247532358;47.233893562023695;de -Menziken;5737;0;Menziken;4139;AG;8.186373578616314;47.2395127213925;de -Oberkulm;5727;0;Oberkulm;4140;AG;8.124073350493546;47.2989763693735;de -Reinach AG;5734;0;Reinach (AG);4141;AG;8.188439048013898;47.2562198985712;de -Schlossrued;5044;0;Schlossrued;4142;AG;8.089061567831983;47.292732160340044;de -Schmiedrued;5046;1;Schmiedrued;4143;AG;8.108591882919722;47.270980304295016;de -Walde AG;5046;2;Schmiedrued;4143;AG;8.112156888521463;47.25879914070584;de -Schöftland;5040;0;Schöftland;4144;AG;8.050659835850148;47.30480595963113;de -Teufenthal AG;5723;0;Teufenthal (AG);4145;AG;8.118380060458358;47.327812435323274;de -Dürrenäsch;5724;0;Teufenthal (AG);4145;AG;8.144806324342383;47.332495657761434;de -Gränichen;5722;0;Unterkulm;4146;AG;8.102389436733118;47.33589396659358;de -Teufenthal AG;5723;0;Unterkulm;4146;AG;8.106153654866272;47.33491909687924;de -Unterkulm;5726;0;Unterkulm;4146;AG;8.115530428755383;47.31050072675883;de -Zetzwil;5732;0;Zetzwil;4147;AG;8.150961865239582;47.288243993945756;de -Eiken;5074;0;Eiken;4161;AG;7.9890138313911105;47.53196448008205;de -Frick;5070;0;Frick;4163;AG;8.022433734143558;47.504423026435006;de -Gansingen;5272;0;Gansingen;4164;AG;8.140018463125449;47.54288926812418;de -Wölflinswil;5063;0;Gipf-Oberfrick;4165;AG;8.00074946242089;47.480523651392204;de -Gipf-Oberfrick;5073;0;Gipf-Oberfrick;4165;AG;8.00339435570854;47.497275995848966;de -Laufenburg;5080;0;Kaisten;4169;AG;8.04834653993279;47.551139609528704;de -Kaisten;5082;0;Kaisten;4169;AG;8.04589601973965;47.540124042937606;de -Ittenthal;5083;0;Kaisten;4169;AG;8.058444103805522;47.51755611420996;de -Laufenburg;5080;0;Laufenburg;4170;AG;8.061498194693455;47.56198980779183;de -Rheinsulz;5084;0;Laufenburg;4170;AG;8.090022939271366;47.55571265204428;de -Sulz AG;5085;0;Laufenburg;4170;AG;8.097566594944173;47.53431356629067;de -Münchwilen AG;4333;0;Münchwilen (AG);4172;AG;7.963330725293145;47.53688298207888;de -Oberhof;5062;0;Oberhof;4173;AG;8.002737525542276;47.448742101218606;de -Oeschgen;5072;0;Oeschgen;4175;AG;8.019002829724894;47.52307328644683;de -Schwaderloch;5326;0;Schwaderloch;4176;AG;8.144454527982868;47.58564890476332;de -Sisseln AG;4334;0;Sisseln;4177;AG;7.985353307893484;47.55216329105581;de -Wittnau;5064;0;Wittnau;4181;AG;7.974821040744316;47.48084096988206;de -Densbüren;5026;0;Wölflinswil;4182;AG;8.026542675524118;47.46239197313071;de -Wölflinswil;5063;0;Wölflinswil;4182;AG;7.995651560844302;47.46184557681718;de -Zeihen;5079;0;Zeihen;4183;AG;8.0876168549146;47.47533871516407;de -Oberhofen AG;5273;0;Mettauertal;4184;AG;8.133360305490969;47.55452713004124;de -Mettau;5274;0;Mettauertal;4184;AG;8.126201296501572;47.56431631643989;de -Etzgen;5275;0;Mettauertal;4184;AG;8.10548880816992;47.57339403447417;de -Wil AG;5276;0;Mettauertal;4184;AG;8.153038469591616;47.56055009191399;de -Hottwil;5277;0;Mettauertal;4184;AG;8.161248646092117;47.547844396889566;de -Hornussen;5075;0;Böztal;4185;AG;8.062964294923612;47.49875904991701;de -Bözen;5076;0;Böztal;4185;AG;8.085269355593223;47.49547840137686;de -Elfingen;5077;0;Böztal;4185;AG;8.098860314839524;47.5068070651358;de -Effingen;5078;0;Böztal;4185;AG;8.103884318410621;47.488825229441034;de -Herznach;5027;0;Herznach-Ueken;4186;AG;8.047513847969308;47.471485715197716;de -Ueken;5028;0;Herznach-Ueken;4186;AG;8.043505558542781;47.48630030546968;de -Ammerswil AG;5600;3;Ammerswil;4191;AG;8.209198868087327;47.37132463068526;de -Boniswil;5706;0;Boniswil;4192;AG;8.184433869860433;47.31519515856891;de -Birrwil;5708;0;Boniswil;4192;AG;8.195268659031353;47.2994887001466;de -Brunegg;5505;0;Brunegg;4193;AG;8.216922443033104;47.4189481887521;de -Dintikon;5606;0;Dintikon;4194;AG;8.226827887344351;47.361860552743444;de -Seon;5703;0;Egliswil;4195;AG;8.171738216813647;47.354553477630716;de -Egliswil;5704;0;Egliswil;4195;AG;8.185632875789462;47.34974018002163;de -Fahrwangen;5615;0;Fahrwangen;4196;AG;8.242276584170943;47.29484522241931;de -Hallwil;5705;0;Hallwil;4197;AG;8.175924624051376;47.32868766887901;de -Hendschiken;5604;0;Hendschiken;4198;AG;8.216985886017518;47.38592941022882;de -Holderbank AG;5113;0;Holderbank (AG);4199;AG;8.170666918996881;47.430938388799184;de -Hunzenschwil;5502;0;Hunzenschwil;4200;AG;8.12304367167965;47.38400189508897;de -Lenzburg;5600;0;Lenzburg;4201;AG;8.179301759488173;47.38807292315821;de -Fahrwangen;5615;0;Meisterschwanden;4202;AG;8.234820782199447;47.2964110464304;de -Meisterschwanden;5616;0;Meisterschwanden;4202;AG;8.234450743421144;47.29513586293342;de -Tennwil;5617;0;Meisterschwanden;4202;AG;8.220873574988518;47.306751041759384;de -Wildegg;5103;0;Möriken-Wildegg;4203;AG;8.16514493148852;47.415879534704146;de -Möriken AG;5103;2;Möriken-Wildegg;4203;AG;8.190972224533558;47.416473818495454;de -Wildegg;5103;0;Niederlenz;4204;AG;8.165802359028094;47.41175750646594;de -Niederlenz;5702;0;Niederlenz;4204;AG;8.17035576908491;47.40269979685488;de -Othmarsingen;5504;0;Othmarsingen;4205;AG;8.210146733387171;47.402113814219234;de -Hendschiken;5604;0;Othmarsingen;4205;AG;8.225547470163802;47.39366995069537;de -Rupperswil;5102;0;Rupperswil;4206;AG;8.134577042985786;47.40276627424918;de -Wildegg;5103;0;Rupperswil;4206;AG;8.152687953034409;47.41183545336239;de -Schafisheim;5503;0;Schafisheim;4207;AG;8.142271340771174;47.37818731878339;de -Seengen;5707;0;Seengen;4208;AG;8.203056471955414;47.32639539328031;de -Seon;5703;0;Seon;4209;AG;8.156748986053818;47.346188920433;de -Staufen;5603;0;Staufen;4210;AG;8.162874049098832;47.38074694398728;de -Abtwil AG;5646;0;Abtwil;4221;AG;8.355054716646293;47.1750021332656;de -Aristau;5628;0;Aristau;4222;AG;8.36096289013706;47.28693886444564;de -Muri AG;5630;0;Aristau;4222;AG;8.339903839125881;47.29525595644338;de -Beinwil (Freiamt);5637;0;Auw;4223;AG;8.347645869408847;47.21411598216813;de -Mühlau;5642;0;Auw;4223;AG;8.377021238969407;47.224725226114856;de -Meienberg;5643;3;Auw;4223;AG;8.369816523845778;47.20404074775698;de -Auw;5644;0;Auw;4223;AG;8.367053701828638;47.2100917703786;de -Kleinwangen;6277;0;Auw;4223;AG;8.329915328267512;47.20463787777685;de -Beinwil (Freiamt);5637;0;Beinwil (Freiamt);4224;AG;8.346439852870356;47.230237259911895;de -Besenbüren;5627;0;Besenbüren;4226;AG;8.344054708110148;47.31197794925375;de -Bettwil;5618;0;Bettwil;4227;AG;8.266529016256435;47.29065579424548;de -Buttwil;5632;0;Bettwil;4227;AG;8.2919624402653;47.277477912487555;de -Boswil;5623;0;Boswil;4228;AG;8.308824072980928;47.303812771555734;de -Muri AG;5630;0;Boswil;4228;AG;8.318536323788251;47.28307609264252;de -Buttwil;5632;0;Boswil;4228;AG;8.302163857884482;47.282210803663574;de -Bünzen;5624;0;Bünzen;4229;AG;8.326619408034299;47.309508621724056;de -Waldhäusern AG;5624;2;Bünzen;4229;AG;8.315166492403186;47.32687415233385;de -Buttwil;5632;0;Buttwil;4230;AG;8.313805832870214;47.2695334421581;de -Inwil;6034;0;Dietwil;4231;AG;8.379939256441373;47.14278992440572;de -Dietwil;6042;0;Dietwil;4231;AG;8.392971262904757;47.147645067654324;de -Geltwil;5637;2;Geltwil;4232;AG;8.325986636342638;47.24900562550425;de -Kallern;5625;0;Kallern;4233;AG;8.293308783092897;47.313169500407255;de -Merenschwand;5634;0;Merenschwand;4234;AG;8.375762671581079;47.26024147342946;de -Benzenschwil;5636;0;Merenschwand;4234;AG;8.363740992988106;47.2464972269048;de -Mühlau;5642;0;Mühlau;4235;AG;8.390367690041312;47.229960873210345;de -Muri AG;5630;0;Muri (AG);4236;AG;8.338683389330196;47.27233010799649;de -Oberrüti;5647;0;Oberrüti;4237;AG;8.396097857661227;47.165664982928774;de -Rottenschwil;8919;0;Rottenschwil;4238;AG;8.36594686933129;47.31442727285185;de -Sins;5643;0;Sins;4239;AG;8.346412352860403;47.18723987269192;de -Sins;5643;0;Sins;4239;AG;8.395449551623106;47.19463267767934;de -Alikon;5643;2;Sins;4239;AG;8.35976076195761;47.19962531313028;de -Meienberg;5643;3;Sins;4239;AG;8.376244242462805;47.19781785475612;de -Aettenschwil;5645;0;Sins;4239;AG;8.370037264263683;47.18625121056938;de -Fenkrieden;5645;2;Sins;4239;AG;8.369741671349987;47.16120179656907;de -Inwil;6034;0;Sins;4239;AG;8.373703827087015;47.14472160810459;de -Ballwil;6275;0;Sins;4239;AG;8.36415800835813;47.148513969906624;de -Waltenschwil;5622;0;Waltenschwil;4240;AG;8.302093061911151;47.33388708666461;de -Hellikon;4316;0;Hellikon;4251;AG;7.923151056274891;47.50768269409659;de -Hemmiken;4465;0;Hellikon;4251;AG;7.904988350160905;47.49403720550833;de -Kaiseraugst;4303;0;Kaiseraugst;4252;AG;7.724933013424502;47.539606680864026;de -Olsberg;4305;0;Magden;4253;AG;7.7953093501966695;47.52432380455109;de -Magden;4312;0;Magden;4253;AG;7.810885828195471;47.53092419778373;de -Möhlin;4313;0;Möhlin;4254;AG;7.843404634262754;47.56172136465373;de -Mumpf;4322;0;Mumpf;4255;AG;7.922779523714227;47.54575358994543;de -Obermumpf;4324;0;Obermumpf;4256;AG;7.93355744296002;47.53031020975719;de -Olsberg;4305;0;Olsberg;4257;AG;7.7833664336002295;47.52085234623146;de -Kaiseraugst;4303;0;Rheinfelden;4258;AG;7.762419868121293;47.54206092515401;de -Rheinfelden;4310;0;Rheinfelden;4258;AG;7.792735752154904;47.55415159597879;de -Möhlin;4313;0;Rheinfelden;4258;AG;7.8250052787618705;47.574762549639374;de -Schupfart;4325;0;Schupfart;4259;AG;7.9666264979358035;47.51332341622507;de -Stein AG;4332;0;Stein (AG);4260;AG;7.951358144676237;47.54341483152194;de -Wallbach;4323;0;Wallbach;4261;AG;7.900412435413291;47.56260260466957;de -Wegenstetten;4317;0;Wegenstetten;4262;AG;7.935330389431703;47.49870444437942;de -Zeiningen;4314;0;Zeiningen;4263;AG;7.869955580152021;47.542120213444846;de -Zuzgen;4315;0;Zeiningen;4263;AG;7.888158287881716;47.53124342787235;de -Wallbach;4323;0;Zeiningen;4263;AG;7.895093025422049;47.5546808388466;de -Zuzgen;4315;0;Zuzgen;4264;AG;7.897047376676883;47.52464180507376;de -Olten;4600;0;Aarburg;4271;AG;7.908583167554503;47.34133399492676;de -Aarburg;4663;0;Aarburg;4271;AG;7.899275287858974;47.32076462647689;de -Oftringen;4665;0;Aarburg;4271;AG;7.912585113701719;47.312743201772555;de -Uerkheim;4813;0;Bottenwil;4273;AG;8.003299448091287;47.296155464089075;de -Bottenwil;4814;0;Bottenwil;4273;AG;8.0050111442056;47.28474758511171;de -Vordemwald;4803;0;Brittnau;4274;AG;7.8988572537136506;47.26017301263154;de -Brittnau;4805;0;Brittnau;4274;AG;7.9483293778903;47.258914943289355;de -Pfaffnau;6264;0;Brittnau;4274;AG;7.910506335309716;47.24459332799948;de -Kirchleerau;5054;1;Kirchleerau;4275;AG;8.068249287705221;47.276391364463095;de -Uerkheim;4813;0;Kölliken;4276;AG;8.0189007204434;47.31329139966569;de -Kölliken;5742;0;Kölliken;4276;AG;8.029380717644955;47.33800511290128;de -Moosleerau;5054;2;Moosleerau;4277;AG;8.064579351029579;47.26910483217632;de -Murgenthal;4853;0;Murgenthal;4279;AG;7.832270138592409;47.26542146699334;de -Riken AG;4853;2;Murgenthal;4279;AG;7.849574423955969;47.2762257822507;de -Glashütten;4856;0;Murgenthal;4279;AG;7.845495272047804;47.25866392962019;de -Roggwil BE;4914;0;Murgenthal;4279;AG;7.834817524467138;47.2389483989472;de -St. Urban;4915;0;Murgenthal;4279;AG;7.856816490450854;47.23465314044642;de -Starrkirch-Wil;4656;0;Oftringen;4280;AG;7.923003128354871;47.332746802603864;de -Oftringen;4665;0;Oftringen;4280;AG;7.930490134813141;47.31033022220715;de -Zofingen;4800;0;Oftringen;4280;AG;7.957495784304296;47.29883328038394;de -Attelwil;5056;0;Reitnau;4281;AG;8.044699712908239;47.26223256047417;de -Reitnau;5057;0;Reitnau;4281;AG;8.048901553116288;47.25102315372965;de -Strengelbach;4802;0;Rothrist;4282;AG;7.920114362054072;47.29982926152176;de -Rothrist;4852;0;Rothrist;4282;AG;7.878109901688755;47.30619795055111;de -Safenwil;5745;0;Safenwil;4283;AG;7.982150013897108;47.31757204827981;de -Staffelbach;5053;0;Staffelbach;4284;AG;8.042337479755766;47.28372517716673;de -Wittwil;5053;2;Staffelbach;4284;AG;8.039599848155461;47.290549572471264;de -Strengelbach;4802;0;Strengelbach;4285;AG;7.927548288648148;47.27989482388408;de -Mühlethal;4812;0;Uerkheim;4286;AG;7.985267306067221;47.30374546050604;de -Uerkheim;4813;0;Uerkheim;4286;AG;8.024873095283542;47.306173381452645;de -Vordemwald;4803;0;Vordemwald;4287;AG;7.896133548188046;47.27257872935918;de -Rothrist;4852;0;Vordemwald;4287;AG;7.906140787119341;47.29451331647937;de -Wiliberg;5058;0;Wiliberg;4288;AG;8.022370446237018;47.26762580624041;de -Zofingen;4800;0;Zofingen;4289;AG;7.945071277286622;47.28881624817353;de -Mühlethal;4812;0;Zofingen;4289;AG;7.978116444373652;47.30138566154691;de -Bottenwil;4814;0;Zofingen;4289;AG;7.988565787327784;47.280061998696425;de -Kleindöttingen;5314;0;Böttstein;4303;AG;8.246471029620977;47.56916020361176;de -Böttstein;5315;0;Böttstein;4303;AG;8.223289886305004;47.55553890912464;de -Döttingen;5312;0;Döttingen;4304;AG;8.258693336229824;47.57006010393924;de -Endingen;5304;0;Endingen;4305;AG;8.289859120146092;47.53670417496447;de -Unterendingen;5305;0;Endingen;4305;AG;8.291365862077527;47.54755151081906;de -Fisibach;5467;0;Fisibach;4306;AG;8.407905069915193;47.562130264026166;de -Full-Reuenthal;5324;0;Full-Reuenthal;4307;AG;8.202766962296568;47.6087575277048;de -Klingnau;5313;0;Klingnau;4309;AG;8.249813803904914;47.58087387526016;de -Koblenz;5322;0;Klingnau;4309;AG;8.22867891305026;47.59666557940126;de -Koblenz;5322;0;Koblenz;4310;AG;8.238288219473944;47.60785396152522;de -Leibstadt;5325;0;Leibstadt;4311;AG;8.180284430874705;47.59169441343722;de -Lengnau AG;5426;0;Lengnau (AG);4312;AG;8.329038879935476;47.519996772227444;de -Leuggern;5316;0;Leuggern;4313;AG;8.21684592501964;47.58001520603688;de -Hettenschwil;5317;0;Leuggern;4313;AG;8.196543116959019;47.57575074492637;de -Mellikon;5465;0;Mellikon;4314;AG;8.347607175172572;47.56709235909235;de -Schneisingen;5425;0;Schneisingen;4318;AG;8.366631225203687;47.52032812497907;de -Siglistorf;5462;0;Siglistorf;4319;AG;8.380668091941509;47.54580745980969;de -Tegerfelden;5306;0;Tegerfelden;4320;AG;8.289672148168927;47.557023666773304;de -Rietheim;5323;0;Zurzach;4324;AG;8.280672126337247;47.60204260328571;de -Bad Zurzach;5330;0;Zurzach;4324;AG;8.295302673657428;47.58208209298062;de -Rekingen AG;5332;0;Zurzach;4324;AG;8.327509202853026;47.569936236903274;de -Baldingen;5333;0;Zurzach;4324;AG;8.320807813618918;47.55572929205394;de -Böbikon;5334;0;Zurzach;4324;AG;8.333066905433553;47.55343304330981;de -Wislikofen;5463;0;Zurzach;4324;AG;8.362765897045215;47.55746576983615;de -Rümikon AG;5464;0;Zurzach;4324;AG;8.377447441969993;47.56372578823547;de -Kaiserstuhl AG;5466;0;Zurzach;4324;AG;8.420168539546756;47.56726350561507;de -Arbon;9320;0;Arbon;4401;TG;9.436893293919633;47.515233968607646;de -Frasnacht;9320;2;Arbon;4401;TG;9.405803138562792;47.527325998914996;de -Stachen;9320;3;Arbon;4401;TG;9.409917261320103;47.50666607639438;de -Dozwil;8582;0;Dozwil;4406;TG;9.320000156083006;47.576045297667314;de -Steinebrunn;9314;0;Egnach;4411;TG;9.34336295568951;47.53431354735908;de -Neukirch (Egnach);9315;0;Egnach;4411;TG;9.369496339868693;47.52870010063038;de -Winden;9315;2;Egnach;4411;TG;9.35670800497006;47.50603370110302;de -Egnach;9322;0;Egnach;4411;TG;9.382844375901975;47.544287254450026;de -Hefenhofen;8580;7;Hefenhofen;4416;TG;9.298945481504932;47.56478579635065;de -Horn;9326;0;Horn;4421;TG;9.463107378409346;47.493839719646935;de -Kesswil;8593;0;Kesswil;4426;TG;9.31681614268233;47.59339455919304;de -Freidorf TG;9306;0;Roggwil (TG);4431;TG;9.397297275540373;47.48629744242055;de -Lömmenschwil;9308;0;Roggwil (TG);4431;TG;9.370310969797861;47.48857845428296;de -Neukirch (Egnach);9315;0;Roggwil (TG);4431;TG;9.389589184392273;47.524506035944086;de -Frasnacht;9320;2;Roggwil (TG);4431;TG;9.408618550947736;47.518965982701815;de -Stachen;9320;3;Roggwil (TG);4431;TG;9.408168029974076;47.51470906445996;de -Roggwil TG;9325;0;Roggwil (TG);4431;TG;9.396321214344471;47.500174451599996;de -Romanshorn;8590;0;Romanshorn;4436;TG;9.369414030317662;47.56486901227895;de -Amriswil;8580;0;Salmsach;4441;TG;9.327578592991944;47.54527801962927;de -Salmsach;8599;0;Salmsach;4441;TG;9.374814390724376;47.55568063309691;de -Egnach;9322;0;Salmsach;4441;TG;9.333636400387743;47.54569072613055;de -Sommeri;8580;3;Sommeri;4446;TG;9.290137403966376;47.5671918662772;de -Romanshorn;8590;0;Uttwil;4451;TG;9.353231818653425;47.57608841651724;de -Uttwil;8592;0;Uttwil;4451;TG;9.34101513735606;47.58358393388047;de -Amriswil;8580;0;Amriswil;4461;TG;9.29748922168339;47.54497589535935;de -Hagenwil b. Amriswil;8580;5;Amriswil;4461;TG;9.307144771358113;47.52903812972204;de -Biessenhofen;8580;8;Amriswil;4461;TG;9.260400007448624;47.54651768946617;de -Schocherswil;8581;0;Amriswil;4461;TG;9.266319985119562;47.53695161573004;de -Oberaach;8587;0;Amriswil;4461;TG;9.266938263430266;47.558954948927806;de -Bischofszell;9220;0;Bischofszell;4471;TG;9.238937813693683;47.49401261811148;de -Schweizersholz;9223;0;Bischofszell;4471;TG;9.200882869441202;47.5016668140228;de -Halden;9223;1;Bischofszell;4471;TG;9.209378987599997;47.50426206553012;de -Erlen;8586;0;Erlen;4476;TG;9.23446314589178;47.54804404675361;de -Kümmertshausen;8586;3;Erlen;4476;TG;9.240336230985921;47.56467709760227;de -Riedt b. Erlen;8586;5;Erlen;4476;TG;9.216154802402015;47.545596204613744;de -Buchackern;8586;7;Erlen;4476;TG;9.232541365507938;47.53859754524568;de -Engishofen;8586;8;Erlen;4476;TG;9.249505141955499;47.556441736250854;de -Ennetaach;8586;9;Erlen;4476;TG;9.215948213571384;47.549165745082924;de -Heldswil;9216;0;Erlen;4476;TG;9.22949416631397;47.53462235125085;de -Hauptwil;9213;0;Hauptwil-Gottshaus;4486;TG;9.253116988091923;47.48062580658546;de -Bischofszell;9220;0;Hauptwil-Gottshaus;4486;TG;9.270695987776396;47.49931776369949;de -Wilen (Gottshaus);9225;0;Hauptwil-Gottshaus;4486;TG;9.283023781357517;47.493827113128745;de -St. Pelagiberg;9225;1;Hauptwil-Gottshaus;4486;TG;9.30250180577112;47.48915626749582;de -Heldswil;9216;0;Hohentannen;4495;TG;9.221105477138586;47.53005121079519;de -Hohentannen;9216;2;Hohentannen;4495;TG;9.223662086012327;47.509912125111846;de -Kradolf;9214;2;Kradolf-Schönenberg;4501;TG;9.201326744160742;47.525143691283574;de -Schönenberg an der Thur;9215;0;Kradolf-Schönenberg;4501;TG;9.198786036658124;47.52132707306943;de -Buhwil;9215;2;Kradolf-Schönenberg;4501;TG;9.166237835930835;47.52712876130681;de -Neukirch an der Thur;9217;0;Kradolf-Schönenberg;4501;TG;9.170899828921053;47.510407002026426;de -Sulgen;8583;0;Sulgen;4506;TG;9.183827841275576;47.543051977150206;de -Götighofen;8583;1;Sulgen;4506;TG;9.215947272527874;47.53511087464307;de -Donzhausen;8583;2;Sulgen;4506;TG;9.196173170058259;47.55418872922863;de -Kradolf;9214;2;Sulgen;4506;TG;9.20468148406541;47.53022974280886;de -Zihlschlacht;8588;0;Zihlschlacht-Sitterdorf;4511;TG;9.257726529888883;47.52126474160961;de -Sitterdorf;8589;0;Zihlschlacht-Sitterdorf;4511;TG;9.248422280940808;47.504803189292446;de -Bischofszell;9220;0;Zihlschlacht-Sitterdorf;4511;TG;9.295681551886355;47.5041530556863;de -Muolen;9313;0;Zihlschlacht-Sitterdorf;4511;TG;9.305526088261763;47.51132730817556;de -Basadingen;8254;0;Basadingen-Schlattingen;4536;TG;8.748836362240143;47.67196305872021;de -Schlattingen;8255;0;Basadingen-Schlattingen;4536;TG;8.770237543088706;47.66686235948442;de -Unterstammheim;8476;0;Basadingen-Schlattingen;4536;TG;8.77573049555875;47.64984665341334;de -Schlatt TG;8252;0;Diessenhofen;4545;TG;8.707834301162036;47.6784475189163;de -Diessenhofen;8253;0;Diessenhofen;4545;TG;8.748711047138821;47.690016560754934;de -Willisdorf;8253;2;Diessenhofen;4545;TG;8.734929804680483;47.68108228677599;de -Schlatt TG;8252;0;Schlatt (TG);4546;TG;8.702829602932093;47.66157027484184;de -Aadorf;8355;0;Aadorf;4551;TG;8.89769823294554;47.49135943297217;de -Ettenhausen TG;8356;0;Aadorf;4551;TG;8.898302903342772;47.47838544285783;de -Guntershausen b. Aadorf;8357;0;Aadorf;4551;TG;8.916864917262643;47.474261206922385;de -Häuslenen;8522;0;Aadorf;4551;TG;8.90335210074304;47.52689732944613;de -Aawangen;8522;2;Aadorf;4551;TG;8.89993613013691;47.51218929270313;de -Wittenwil;9547;0;Aadorf;4551;TG;8.925309967164852;47.50435382634346;de -Frauenfeld;8500;0;Felben-Wellhausen;4561;TG;8.944877384287562;47.56513097569922;de -Felben-Wellhausen;8552;0;Felben-Wellhausen;4561;TG;8.94265061464982;47.57690914614743;de -Frauenfeld;8500;0;Frauenfeld;4566;TG;8.898261869970607;47.55599473880441;de -Gerlikon;8500;4;Frauenfeld;4566;TG;8.87843192020212;47.53702680755049;de -Matzingen;9548;0;Frauenfeld;4566;TG;8.915770264486754;47.53391105441174;de -Frauenfeld;8500;0;Gachnang;4571;TG;8.865351077756008;47.552770551951355;de -Islikon;8546;0;Gachnang;4571;TG;8.845665446442544;47.54775813415775;de -Kefikon TG;8546;2;Gachnang;4571;TG;8.833718680605156;47.55030714159183;de -Gachnang;8547;0;Gachnang;4571;TG;8.851107442117177;47.537850417079326;de -Harenwilen;8553;2;Hüttlingen;4590;TG;9.000447092749368;47.5711073183183;de -Mettendorf TG;8553;3;Hüttlingen;4590;TG;8.969834045397848;47.577398784777436;de -Hüttlingen;8553;4;Hüttlingen;4590;TG;8.981241751129845;47.57668321803132;de -Eschikofen;8553;5;Hüttlingen;4590;TG;9.004782624085932;47.57979108367084;de -Frauenfeld;8500;0;Matzingen;4591;TG;8.935134931245173;47.54656519703924;de -Matzingen;9548;0;Matzingen;4591;TG;8.932561020057708;47.52010955658052;de -Niederneunforn;8525;0;Neunforn;4601;TG;8.780010198893095;47.59598582284853;de -Wilen b. Neunforn;8525;2;Neunforn;4601;TG;8.79224095188382;47.602234295624285;de -Oberneunforn;8526;0;Neunforn;4601;TG;8.766802150731355;47.605946516554866;de -Stettfurt;9507;0;Stettfurt;4606;TG;8.95395838860172;47.524571913613435;de -Matzingen;9548;0;Stettfurt;4606;TG;8.943725073805695;47.53784631399208;de -Frauenfeld;8500;0;Thundorf;4611;TG;8.948815388390571;47.559726294044594;de -Thundorf;8512;0;Thundorf;4611;TG;8.963467904204261;47.54570476954909;de -Lustdorf;8512;2;Thundorf;4611;TG;8.986293366947848;47.55042326884312;de -Wetzikon TG;8512;3;Thundorf;4611;TG;9.001143768447049;47.537904747307664;de -Uesslingen;8524;0;Uesslingen-Buch;4616;TG;8.836638467844411;47.5804690497972;de -Buch b. Frauenfeld;8524;2;Uesslingen-Buch;4616;TG;8.837887909984168;47.599431495143484;de -Warth;8532;0;Warth-Weiningen;4621;TG;8.87378130172603;47.5842163249162;de -Weiningen TG;8532;2;Warth-Weiningen;4621;TG;8.891254819507433;47.588648729324944;de -Hüttwilen;8536;0;Warth-Weiningen;4621;TG;8.872563438657409;47.59658368832484;de -Altnau;8595;0;Altnau;4641;TG;9.257678768719039;47.60802656156299;de -Kreuzlingen;8280;0;Bottighofen;4643;TG;9.204557479488168;47.639879130144166;de -Bottighofen;8598;0;Bottighofen;4643;TG;9.21330005117827;47.640799298993684;de -Ermatingen;8272;0;Ermatingen;4646;TG;9.080437384090779;47.669867780714476;de -Triboltingen;8273;0;Ermatingen;4646;TG;9.10780252703643;47.66198945820662;de -Gottlieben;8274;2;Gottlieben;4651;TG;9.133590564065065;47.66380352082843;de -Güttingen;8594;0;Güttingen;4656;TG;9.286361341844545;47.602627471207725;de -Hugelshofen;8565;0;Kemmental;4666;TG;9.115091564761084;47.59875600144734;de -Neuwilen;8566;0;Kemmental;4666;TG;9.134282505143926;47.619984964549694;de -Dotnacht;8566;2;Kemmental;4666;TG;9.141181295726408;47.60020578137128;de -Ellighausen;8566;4;Kemmental;4666;TG;9.135622443677551;47.613642605150986;de -Lippoldswilen;8566;5;Kemmental;4666;TG;9.111409685404897;47.61088043604375;de -Siegershausen;8573;0;Kemmental;4666;TG;9.168460315328904;47.611288899125675;de -Alterswilen;8573;2;Kemmental;4666;TG;9.154979114269226;47.60964702755147;de -Altishausen;8573;3;Kemmental;4666;TG;9.170725459651388;47.60126013276639;de -Kreuzlingen;8280;0;Kreuzlingen;4671;TG;9.173202396172773;47.64467769015092;de -Bottighofen;8598;0;Kreuzlingen;4671;TG;9.202301302257109;47.63571457092155;de -Langrickenbach;8585;4;Langrickenbach;4681;TG;9.24734290138479;47.58327922441947;de -Zuben;8585;5;Langrickenbach;4681;TG;9.236604134610156;47.60670257312282;de -Schönenbaumgarten;8585;7;Langrickenbach;4681;TG;9.230800837733169;47.614400433275634;de -Herrenhof;8585;8;Langrickenbach;4681;TG;9.243456613344625;47.59787615099063;de -Kümmertshausen;8586;3;Langrickenbach;4681;TG;9.25676503636859;47.57164943080604;de -Illighausen;8574;1;Lengwil;4683;TG;9.206866435727296;47.60372249651893;de -Oberhofen TG;8574;2;Lengwil;4683;TG;9.194918960922715;47.61867344672595;de -Lengwil;8574;3;Lengwil;4683;TG;9.190032486643426;47.62586496304939;de -Lengwil;8574;3;Lengwil;4683;TG;9.20696646468395;47.615484364724864;de -Dettighofen (Lengwil);8574;4;Lengwil;4683;TG;9.20057406272806;47.620675120055175;de -Scherzingen;8596;0;Münsterlingen;4691;TG;9.22317887283868;47.63198793785019;de -Münsterlingen;8596;1;Münsterlingen;4691;TG;9.235000139790131;47.63143725575124;de -Landschlacht;8597;0;Münsterlingen;4691;TG;9.24461971949314;47.62560650549746;de -Tägerwilen;8274;0;Tägerwilen;4696;TG;9.136657021169784;47.65487140105523;de -Kreuzlingen;8280;0;Tägerwilen;4696;TG;9.158972242582706;47.65355892619532;de -Raperswilen;8558;0;Wäldi;4701;TG;9.05892541339933;47.63245660243674;de -Hefenhausen;8564;0;Wäldi;4701;TG;9.064241032081986;47.61595903950303;de -Engwilen;8564;2;Wäldi;4701;TG;9.095614197706723;47.61713531191881;de -Sonterswil;8564;3;Wäldi;4701;TG;9.078124368125223;47.62087798799726;de -Wäldi;8564;4;Wäldi;4701;TG;9.094201176271469;47.634096659211025;de -Lipperswil;8564;5;Wäldi;4701;TG;9.0531100385979;47.61706117279914;de -Hattenhausen;8564;7;Wäldi;4701;TG;9.066688441774016;47.62369141376523;de -Gunterswilen;8564;8;Wäldi;4701;TG;9.076516003497627;47.63559677705925;de -Amlikon-Bissegg;8514;0;Affeltrangen;4711;TG;9.033186705133742;47.54174302511044;de -Tobel;9555;0;Affeltrangen;4711;TG;9.021328531447994;47.51925813722089;de -Affeltrangen;9556;0;Affeltrangen;4711;TG;9.030027789151738;47.52598926112114;de -Zezikon;9556;2;Affeltrangen;4711;TG;9.021006021339527;47.534839081038484;de -Märwil;9562;0;Affeltrangen;4711;TG;9.074497013711252;47.53244507217561;de -Buch b. Märwil;9562;2;Affeltrangen;4711;TG;9.057793651259054;47.53765711107678;de -Bettwiesen;9553;0;Bettwiesen;4716;TG;9.026730718478497;47.49399844559707;de -Balterswil;8362;0;Bichelsee-Balterswil;4721;TG;8.937620453422324;47.45315791185668;de -Bichelsee;8363;0;Bichelsee-Balterswil;4721;TG;8.92132135078989;47.4510312470221;de -Braunau;9502;0;Braunau;4723;TG;9.07122120761076;47.50368803699617;de -Eschlikon TG;8360;0;Eschlikon;4724;TG;8.964229959685836;47.465568625553985;de -Wallenwil;8360;2;Eschlikon;4724;TG;8.955456388878678;47.45467070837589;de -Sirnach;8370;0;Eschlikon;4724;TG;8.982618364476004;47.460573122987206;de -Wiezikon b. Sirnach;8372;0;Fischingen;4726;TG;8.980648570904133;47.44238224366574;de -Dussnang;8374;0;Fischingen;4726;TG;8.962380912296117;47.43026299389102;de -Oberwangen TG;8374;2;Fischingen;4726;TG;8.973265560464762;47.42984338668543;de -Fischingen;8376;0;Fischingen;4726;TG;8.968245907620446;47.41241159864051;de -Au TG;8376;2;Fischingen;4726;TG;8.953601130812823;47.39774029633615;de -Schmidrüti;8495;0;Fischingen;4726;TG;8.92099794697699;47.42671485269129;de -Sternenberg;8499;0;Fischingen;4726;TG;8.927478340089298;47.398184533684244;de -Lommis;9506;0;Lommis;4741;TG;8.997950947699378;47.51697631092459;de -Weingarten-Kalthäusern;9508;0;Lommis;4741;TG;8.978968452333453;47.52316143413059;de -Eschlikon TG;8360;0;Münchwilen (TG);4746;TG;8.970225629363485;47.47647073227999;de -Wil SG;9500;0;Münchwilen (TG);4746;TG;9.024878666004;47.46608681581875;de -Münchwilen TG;9542;0;Münchwilen (TG);4746;TG;8.999036690074583;47.47972204399947;de -St. Margarethen TG;9543;0;Münchwilen (TG);4746;TG;9.001149255954726;47.486511102363735;de -Rickenbach b. Wil;9532;0;Rickenbach (TG);4751;TG;9.052142727567908;47.448726577346115;de -Wilen b. Wil;9535;0;Rickenbach (TG);4751;TG;9.039671148104086;47.448004605699445;de -Schwarzenbach SG;9536;0;Rickenbach (TG);4751;TG;9.055872135966084;47.44570409353968;de -Schönholzerswilen;8577;0;Schönholzerswilen;4756;TG;9.14091978780629;47.51699252217091;de -Sirnach;8370;0;Sirnach;4761;TG;8.997506656925943;47.46203075166267;de -Busswil TG;8371;0;Sirnach;4761;TG;9.015758515544167;47.45338351874146;de -Wiezikon b. Sirnach;8372;0;Sirnach;4761;TG;8.98654514111016;47.45037356272141;de -Littenheid;9573;0;Sirnach;4761;TG;9.00873882645117;47.44073032219142;de -Tägerschen;9554;0;Tobel-Tägerschen;4776;TG;9.02950180025349;47.50694582393814;de -Tobel;9555;0;Tobel-Tägerschen;4776;TG;9.036509701165302;47.51480509039014;de -Wängi;9545;0;Wängi;4781;TG;8.954423930411119;47.50081235214886;de -Tuttwil;9546;0;Wängi;4781;TG;8.938396336652705;47.483268252236584;de -Wilen b. Wil;9535;0;Wilen (TG);4786;TG;9.034366051307973;47.45157671779675;de -Wuppenau;9514;0;Wuppenau;4791;TG;9.109047618231873;47.49776495819845;de -Hosenruck;9515;0;Wuppenau;4791;TG;9.122518195081;47.49035376974706;de -Berlingen;8267;0;Berlingen;4801;TG;9.016329954737065;47.674463745180134;de -Eschenz;8264;0;Eschenz;4806;TG;8.875013679030276;47.646547034324264;de -Lanzenneunforn;8506;0;Herdern;4811;TG;8.937919598385436;47.62329906642247;de -Weiningen TG;8532;2;Herdern;4811;TG;8.908183648438689;47.5964302656278;de -Herdern;8535;0;Herdern;4811;TG;8.909545310134;47.6048102690946;de -Hüttwilen;8536;0;Herdern;4811;TG;8.891252927907816;47.602709726424905;de -Hörhausen;8507;0;Homburg;4816;TG;8.969876094902135;47.63214074184606;de -Homburg;8508;0;Homburg;4816;TG;9.008433223797539;47.63514100022467;de -Herdern;8535;0;Hüttwilen;4821;TG;8.90390579638387;47.62566112987692;de -Hüttwilen;8536;0;Hüttwilen;4821;TG;8.873221286901549;47.608908471403986;de -Nussbaumen TG;8537;0;Hüttwilen;4821;TG;8.829533059235704;47.627084219296535;de -Uerschhausen;8537;2;Hüttwilen;4821;TG;8.817739116474101;47.609684039089935;de -Eschenz;8264;0;Mammern;4826;TG;8.905592212347036;47.63325465500727;de -Mammern;8265;0;Mammern;4826;TG;8.916934746606067;47.64582254933177;de -Hörhausen;8507;0;Mammern;4826;TG;8.933811875733296;47.642637782042165;de -Müllheim Dorf;8555;0;Müllheim;4831;TG;9.009266909016546;47.604643617781186;de -Pfyn;8505;0;Pfyn;4841;TG;8.961350447118946;47.5943756675395;de -Dettighofen;8505;2;Pfyn;4841;TG;8.949232922249726;47.61674349048514;de -Homburg;8508;0;Pfyn;4841;TG;8.960776680760413;47.61198833786197;de -Raperswilen;8558;0;Raperswilen;4846;TG;9.042383130365128;47.63224859206152;de -Mannenbach-Salenstein;8268;0;Salenstein;4851;TG;9.052818736821678;47.673653271680315;de -Salenstein;8268;2;Salenstein;4851;TG;9.058663333874675;47.66892505155855;de -Fruthwilen;8269;0;Salenstein;4851;TG;9.066362836556873;47.660821763475205;de -Steckborn;8266;0;Steckborn;4864;TG;8.983403285234761;47.66674691512679;de -Kaltenbach;8259;0;Wagenhausen;4871;TG;8.842772881050118;47.65311939258672;de -Etzwilen;8259;2;Wagenhausen;4871;TG;8.81821917985859;47.66124123126186;de -Rheinklingen;8259;3;Wagenhausen;4871;TG;8.807340517527816;47.675032658623515;de -Wagenhausen;8259;4;Wagenhausen;4871;TG;8.848168779157906;47.66164728615381;de -Amlikon-Bissegg;8514;0;Amlikon-Bissegg;4881;TG;9.035305968700099;47.565402526393726;de -Bonau;8554;3;Amlikon-Bissegg;4881;TG;9.026669733490367;47.57811321618377;de -Weinfelden;8570;0;Berg (TG);4891;TG;9.141250892217498;47.569960347680556;de -Berg TG;8572;0;Berg (TG);4891;TG;9.165227303185421;47.57816196368055;de -Berg TG;8572;0;Berg (TG);4891;TG;9.19438157571709;47.59708737286285;de -Andhausen;8572;2;Berg (TG);4891;TG;9.179675804844672;47.57801321761557;de -Graltshausen;8572;3;Berg (TG);4891;TG;9.182378332231453;47.59587583316972;de -Guntershausen b. Berg;8572;4;Berg (TG);4891;TG;9.188584622904994;47.57220182064546;de -Mauren TG;8576;0;Berg (TG);4891;TG;9.151774698029678;47.566534128748835;de -Opfershofen TG;8584;1;Berg (TG);4891;TG;9.168348376185195;47.56755385297957;de -Mattwil;8585;1;Birwinken;4901;TG;9.206371405775391;47.57767063945402;de -Happerswil;8585;2;Birwinken;4901;TG;9.222779303879152;47.57780257256844;de -Birwinken;8585;9;Birwinken;4901;TG;9.197325671310471;47.58244587681413;de -Klarsreuti;8585;10;Birwinken;4901;TG;9.213107850698043;47.58772491303195;de -Andwil TG;8586;2;Birwinken;4901;TG;9.215760923428395;47.56573043991069;de -Buch b. Kümmertshausen;8586;10;Birwinken;4901;TG;9.235046224131791;47.571071712556865;de -Bürglen TG;8575;0;Bürglen (TG);4911;TG;9.154211128216037;47.547215582822005;de -Istighofen;8575;1;Bürglen (TG);4911;TG;9.148595409537435;47.540959601586586;de -Leimbach TG;8584;0;Bürglen (TG);4911;TG;9.187964021086458;47.56109336989759;de -Opfershofen TG;8584;1;Bürglen (TG);4911;TG;9.171823639321456;47.560424210712654;de -Bürglen TG;8575;0;Bussnang;4921;TG;9.133722578262539;47.536504689626724;de -Stehrenberg;9503;0;Bussnang;4921;TG;9.088407456822807;47.523224019682225;de -Lanterswil;9503;2;Bussnang;4921;TG;9.096543848112773;47.520773561262644;de -Friltschen;9504;0;Bussnang;4921;TG;9.0852014977165;47.53862602347549;de -Mettlen;9517;0;Bussnang;4921;TG;9.120333051264968;47.53293950191317;de -Märwil;9562;0;Bussnang;4921;TG;9.073923224219506;47.54630478864123;de -Bussnang;9565;0;Bussnang;4921;TG;9.08194516781135;47.557829251403625;de -Oberbussnang;9565;2;Bussnang;4921;TG;9.087191201372516;47.548263436002074;de -Oppikon;9565;3;Bussnang;4921;TG;9.061001394911381;47.55071108477447;de -Schmidshof;9565;4;Bussnang;4921;TG;9.054501162348519;47.545808976480366;de -Rothenhausen;9565;5;Bussnang;4921;TG;9.102830459168729;47.549309264146956;de -Märstetten;8560;0;Märstetten;4941;TG;9.069275600920465;47.59392402550366;de -Ottoberg;8561;0;Märstetten;4941;TG;9.085508031967453;47.58733345266248;de -Weinfelden;8570;0;Weinfelden;4946;TG;9.111270745411433;47.56806940159633;de -Bürglen TG;8575;0;Weinfelden;4946;TG;9.138576397046407;47.561437632926676;de -Müllheim-Wigoltingen;8554;0;Wigoltingen;4951;TG;9.015549472292543;47.58813503053181;de -Bonau;8554;3;Wigoltingen;4951;TG;9.04435606801704;47.582611433022265;de -Wigoltingen;8556;0;Wigoltingen;4951;TG;9.030963683746409;47.595734329387206;de -Engwang;8556;2;Wigoltingen;4951;TG;9.052742830994115;47.599989956130486;de -Illhart;8556;3;Wigoltingen;4951;TG;9.038178056442755;47.61800318386395;de -Lamperswil TG;8556;4;Wigoltingen;4951;TG;9.038792003868505;47.61185251088478;de -Märstetten;8560;0;Wigoltingen;4951;TG;9.078176695134246;47.60426076896635;de -Engwilen;8564;2;Wigoltingen;4951;TG;9.087191590194818;47.609397813249;de -Wagerswil;8564;6;Wigoltingen;4951;TG;9.0642406166881;47.607811975881305;de -Arbedo;6517;0;Arbedo-Castione;5001;TI;9.046483322941453;46.21378463014271;it -Castione;6532;0;Arbedo-Castione;5001;TI;9.04740607788615;46.22719721188734;it -Bellinzona;6500;0;Bellinzona;5002;TI;9.035526644871934;46.19698977791154;it -Bellinzona;6503;0;Bellinzona;5002;TI;9.007086991873864;46.208597075207415;it -Giubiasco;6512;0;Bellinzona;5002;TI;9.003398058251495;46.1739379792302;it -Monte Carasso;6513;0;Bellinzona;5002;TI;8.997078156166623;46.18708949720143;it -Sementina;6514;0;Bellinzona;5002;TI;8.986780908965658;46.18305292519581;it -Gudo;6515;0;Bellinzona;5002;TI;8.951059307209748;46.17534700071845;it -Gorduno;6518;0;Bellinzona;5002;TI;9.032401849156258;46.21685903574508;it -Preonzo;6523;0;Bellinzona;5002;TI;9.002014996004304;46.26349561769784;it -Moleno;6524;0;Bellinzona;5002;TI;8.9934635841617;46.26859709399601;it -Gnosca;6525;0;Bellinzona;5002;TI;9.020463028392728;46.2339000213862;it -Camorino;6528;0;Bellinzona;5002;TI;9.006395484115924;46.163661623377216;it -Castione;6532;0;Bellinzona;5002;TI;9.03692337988834;46.236253126993844;it -Pianezzo;6582;0;Bellinzona;5002;TI;9.029751382736986;46.16964625185345;it -S. Antonio (Val Morobbia);6583;0;Bellinzona;5002;TI;9.061327940714415;46.16924359628216;it -Carena;6584;0;Bellinzona;5002;TI;9.085264932171674;46.16879073072494;it -S. Antonino;6592;0;Bellinzona;5002;TI;8.968962531131927;46.16894080574833;it -Claro;6702;0;Bellinzona;5002;TI;9.024175393329816;46.253426227777126;it -S. Antonino;6592;0;Cadenazzo;5003;TI;8.959533038606345;46.153517903825254;it -Cadenazzo;6593;0;Cadenazzo;5003;TI;8.952044307703376;46.14902057875978;it -Robasacco;6599;0;Cadenazzo;5003;TI;8.940581589715425;46.14270357969352;it -Isone;6810;0;Isone;5009;TI;8.985251202399663;46.12891353179505;it -Castione;6532;0;Lumino;5010;TI;9.051550604214603;46.225759369362784;it -Lumino;6533;0;Lumino;5010;TI;9.06598903984082;46.23038035903418;it -Gudo;6515;0;Sant'Antonino;5017;TI;8.950568620228479;46.16393546884371;it -Camorino;6528;0;Sant'Antonino;5017;TI;8.991319366606653;46.15666939461659;it -S. Antonino;6592;0;Sant'Antonino;5017;TI;8.978690475702646;46.15342160095455;it -Cadenazzo;6593;0;Sant'Antonino;5017;TI;8.962196307661888;46.15233173744824;it -Dongio;6715;0;Acquarossa;5048;TI;8.955370923357705;46.43702086631229;it -Acquarossa;6716;0;Acquarossa;5048;TI;8.937067934788956;46.4559345026929;it -Leontica;6716;2;Acquarossa;5048;TI;8.922445684405547;46.45921354231142;it -Lottigna;6716;3;Acquarossa;5048;TI;8.943256682927348;46.469672578814524;it -Motto (Blenio);6721;2;Acquarossa;5048;TI;8.97128614913067;46.42870645422291;it -Corzoneso;6722;0;Acquarossa;5048;TI;8.93423789471718;46.44609411483294;it -Prugiasco;6723;0;Acquarossa;5048;TI;8.931809529320553;46.4615356854235;it -Castro;6723;2;Acquarossa;5048;TI;8.927150468865497;46.471550575756524;it -Marolta;6723;3;Acquarossa;5048;TI;8.920834308643768;46.47894331455787;it -Ponto Valentino;6724;0;Acquarossa;5048;TI;8.935487158781076;46.483023932188786;it -Largario;6724;2;Acquarossa;5048;TI;8.941287689914473;46.494466373041746;it -Dangio;6717;0;Blenio;5049;TI;8.952990972434163;46.494181381200335;it -Torre;6717;1;Blenio;5049;TI;8.953889738628847;46.4872657753461;it -Olivone;6718;0;Blenio;5049;TI;8.941477769213451;46.52973267582938;it -Camperio;6718;1;Blenio;5049;TI;8.906753682111269;46.52456073262494;it -Aquila;6719;0;Blenio;5049;TI;9.01000436398699;46.58184181969585;it -Aquila;6719;0;Blenio;5049;TI;8.948216175612293;46.503897812682176;it -Campo (Blenio);6720;0;Blenio;5049;TI;8.936555540717332;46.55570845280367;it -Ghirone;6720;2;Blenio;5049;TI;8.944750441417556;46.56076943504084;it -Malvaglia;6713;0;Serravalle;5050;TI;8.98356740064677;46.403637316392576;it -Semione;6714;0;Serravalle;5050;TI;8.971717461291538;46.40771039227527;it -Ludiano;6721;0;Serravalle;5050;TI;8.969310097663834;46.41999643532533;it -Airolo;6780;0;Airolo;5061;TI;8.609216703177065;46.52910380139051;it -Villa Bedretto;6781;1;Bedretto;5063;TI;8.525214301922292;46.509976591167174;it -Bedretto;6781;4;Bedretto;5063;TI;8.511692296753424;46.50610371711352;it -Bodio TI;6743;0;Bodio;5064;TI;8.91179709309504;46.37907495488275;it -Dalpe;6774;0;Dalpe;5071;TI;8.775088647091815;46.473016469209426;it -Lavorgo;6746;0;Faido;5072;TI;8.840889584261701;46.441740586356126;it -Calonico;6746;1;Faido;5072;TI;8.841127066949593;46.450732184539106;it -Nivo;6746;2;Faido;5072;TI;8.842309469982338;46.436164801529756;it -Chironico;6747;0;Faido;5072;TI;8.84381507440122;46.42309899791355;it -Anzonico;6748;0;Faido;5072;TI;8.8627778335313;46.43160853693149;it -Sobrio;6749;0;Faido;5072;TI;8.901668353760808;46.399971792153806;it -Cavagnago;6749;1;Faido;5072;TI;8.88129103092049;46.4135069485264;it -Faido;6760;0;Faido;5072;TI;8.797847643091195;46.478805356702146;it -Molare;6760;1;Faido;5072;TI;8.830342346689585;46.48614240354303;it -Calpiogna;6760;2;Faido;5072;TI;8.80540736423923;46.486948142773514;it -Campello;6760;3;Faido;5072;TI;8.818638991817568;46.486908928211925;it -Carì;6760;4;Faido;5072;TI;8.821490480263932;46.494174380302134;it -Rossura;6760;5;Faido;5072;TI;8.82505515811374;46.47535346791667;it -Osco;6763;0;Faido;5072;TI;8.781184915542417;46.493452598631045;it -Mairengo;6763;1;Faido;5072;TI;8.787776732641229;46.487597764086;it -Chiggiogna;6764;0;Faido;5072;TI;8.822346372076876;46.467579574293225;it -Giornico;6745;0;Giornico;5073;TI;8.875042946162022;46.39980724554578;it -Personico;6744;0;Personico;5076;TI;8.919402408853266;46.37044926776556;it -Pollegio;6742;0;Pollegio;5077;TI;8.941482065882647;46.365421026349196;it -Rodi-Fiesso;6772;0;Prato (Leventina);5078;TI;8.736090881724873;46.491888166698885;it -Prato (Leventina);6773;0;Prato (Leventina);5078;TI;8.756553498007134;46.48282632454772;it -Ambrì;6775;0;Quinto;5079;TI;8.695041801939292;46.50912677834657;it -Piotta;6776;0;Quinto;5079;TI;8.671231696873184;46.514021611492524;it -Quinto;6777;0;Quinto;5079;TI;8.711391586522481;46.51099217081296;it -Varenzo;6777;1;Quinto;5079;TI;8.724347007368404;46.50307641924373;it -Ascona;6612;0;Ascona;5091;TI;8.767949628964413;46.15493370771035;it -Arcegno;6618;0;Ascona;5091;TI;8.74220788789297;46.15651680524272;it -Brione sopra Minusio;6645;0;Brione sopra Minusio;5096;TI;8.814466587308377;46.183023778577635;it -Contra;6646;0;Brione sopra Minusio;5096;TI;8.835970093261285;46.187166954705994;it -Brissago;6614;0;Brissago;5097;TI;8.710822713493195;46.11862131347223;it -Isole di Brissago;6614;2;Brissago;5097;TI;8.73520182578435;46.13226357451826;it -Gordola;6596;0;Gordola;5108;TI;8.865256030066272;46.17921912258844;it -Riazzino;6595;0;Lavertezzo;5112;TI;8.888018904602975;46.17834971305667;it -Cugnasco;6516;0;Locarno;5113;TI;8.911296708849537;46.169983705547146;it -Quartino;6572;0;Locarno;5113;TI;8.90184042715489;46.15827936340734;it -Contone;6594;0;Locarno;5113;TI;8.914888083699266;46.15889473626246;it -Riazzino;6595;0;Locarno;5113;TI;8.898392056220636;46.16634844397591;it -Gordola;6596;0;Locarno;5113;TI;8.875940634167439;46.164521965788616;it -Locarno;6600;0;Locarno;5113;TI;8.7932332220091;46.162765236305184;it -Locarno;6600;0;Locarno;5113;TI;8.781813585354604;46.19082887229135;it -Solduno;6600;4;Locarno;5113;TI;8.778689486191054;46.171048538719276;it -Locarno;6605;0;Locarno;5113;TI;8.777799825711222;46.185066563015425;it -Ascona;6612;0;Locarno;5113;TI;8.788361950919867;46.157506908224065;it -Orselina;6644;0;Locarno;5113;TI;8.789026906707258;46.177035842302956;it -Tegna;6652;0;Locarno;5113;TI;8.755252925356796;46.185250725171116;it -Losone;6616;0;Losone;5115;TI;8.759675127293068;46.16934155640677;it -Arcegno;6618;0;Losone;5115;TI;8.742847549194884;46.16239962828717;it -Mergoscia;6647;0;Mergoscia;5117;TI;8.848231783159855;46.210659024352665;it -Tenero;6598;0;Minusio;5118;TI;8.84357360789334;46.17925960433039;it -Muralto;6600;2;Minusio;5118;TI;8.808592083071145;46.17535815558552;it -Brione sopra Minusio;6645;0;Minusio;5118;TI;8.802891768734252;46.19181250861203;it -Contra;6646;0;Minusio;5118;TI;8.839902091789016;46.18514179648427;it -Minusio;6648;0;Minusio;5118;TI;8.813030987379875;46.17672012805742;it -Locarno;6600;0;Muralto;5120;TI;8.79531291613903;46.17392053687574;it -Muralto;6600;2;Muralto;5120;TI;8.805271857981886;46.172692486712585;it -Orselina;6644;0;Orselina;5121;TI;8.800197358197693;46.18010235262061;it -Porto Ronco;6613;0;Ronco sopra Ascona;5125;TI;8.726263402469632;46.1402908681521;it -Ronco sopra Ascona;6622;0;Ronco sopra Ascona;5125;TI;8.726471760303943;46.14409082790642;it -Tenero;6598;0;Tenero-Contra;5131;TI;8.848489862119164;46.18125743988235;it -Contra;6646;0;Tenero-Contra;5131;TI;8.84024025040967;46.18848872111908;it -Mosogno;6611;13;Onsernone;5136;TI;8.639082179478324;46.19883289374469;it -Gresso;6611;16;Onsernone;5136;TI;8.616025136795804;46.2249399235427;it -Crana;6611;17;Onsernone;5136;TI;8.611831326915983;46.20353971021533;it -Loco;6661;0;Onsernone;5136;TI;8.671835627241549;46.20245238665996;it -Auressio;6661;2;Onsernone;5136;TI;8.684483538168516;46.20159121197452;it -Berzona;6661;3;Onsernone;5136;TI;8.662244181947344;46.204794008572144;it -Russo;6662;0;Onsernone;5136;TI;8.62224569891745;46.202127704426765;it -Comologno;6663;0;Onsernone;5136;TI;8.57685120288962;46.203645227577695;it -Spruga;6663;2;Onsernone;5136;TI;8.568631066847919;46.20117379374649;it -Vergeletto;6664;0;Onsernone;5136;TI;8.602230016254202;46.22692914928863;it -Cugnasco;6516;0;Cugnasco-Gerra;5138;TI;8.91749871818584;46.17418892706802;it -Contone;6594;0;Cugnasco-Gerra;5138;TI;8.914138060628074;46.16223659944273;it -Riazzino;6595;0;Cugnasco-Gerra;5138;TI;8.887646867842214;46.182081109126166;it -Agarone;6597;0;Cugnasco-Gerra;5138;TI;8.90585751513676;46.17843861213426;it -Agno;6982;0;Agno;5141;TI;8.897706145886302;45.99766144876942;it -Cassina d'Agno;6990;0;Agno;5141;TI;8.893055569519559;45.99117241197874;it -Cimo;6992;1;Agno;5141;TI;8.895625429398356;46.003044794012496;it -Aranno;6994;0;Aranno;5143;TI;8.873080156850834;46.01790880076462;it -Arogno;6822;0;Arogno;5144;TI;8.988567500353467;45.959587595302935;it -Pugerna;6823;0;Arogno;5144;TI;8.978763578873776;45.97879808837881;it -Astano;6999;0;Astano;5146;TI;8.816226897192205;46.01269991726358;it -Bedano;6930;0;Bedano;5148;TI;8.919360090682176;46.05135605962671;it -Bedigliora;6981;11;Bedigliora;5149;TI;8.842428267445053;46.00255893341802;it -Bedigliora;6981;11;Bedigliora;5149;TI;8.82867019763616;46.02174296441272;it -Banco;6981;16;Bedigliora;5149;TI;8.843291554188417;46.01055668046681;it -Beride di Bedigliora;6981;17;Bedigliora;5149;TI;8.833038249288315;46.002088308135654;it -Curio;6986;3;Bedigliora;5149;TI;8.850108379831815;46.00673028613383;it -Bioggio;6934;0;Bioggio;5151;TI;8.908674137871728;46.01446590939831;it -Bosco Luganese;6935;0;Bioggio;5151;TI;8.908884604277194;46.0263809660364;it -Agno;6982;0;Bioggio;5151;TI;8.910714796233338;46.00573286820108;it -Cimo;6992;1;Bioggio;5151;TI;8.889841160107423;46.00211736341793;it -Iseo;6993;0;Bioggio;5151;TI;8.882283237308535;46.00462763929545;it -Bissone;6816;0;Bissone;5154;TI;8.964355679704687;45.951286804307216;it -Brusino Arsizio;6827;0;Brusino Arsizio;5160;TI;8.937731239599916;45.92884232087363;it -Serpiano;6867;0;Brusino Arsizio;5160;TI;8.928919512965344;45.911831994645205;it -Cademario;6936;0;Cademario;5161;TI;8.892348739138312;46.02270541430658;it -Cimo;6992;1;Cademario;5161;TI;8.896967255556778;46.01335557984813;it -Lamone;6814;2;Cadempino;5162;TI;8.932365058527976;46.03714349990615;it -Cadempino;6814;3;Cadempino;5162;TI;8.934516353981111;46.03373214759384;it -Canobbio;6952;0;Canobbio;5167;TI;8.968644557286353;46.03365828787607;it -Caslano;6987;0;Caslano;5171;TI;8.883458075294463;45.97195418412666;it -Cureglia;6944;0;Comano;5176;TI;8.948808314953077;46.03708648721674;it -Comano;6949;0;Comano;5176;TI;8.955061070611796;46.03598982219133;it -Cureglia;6944;0;Cureglia;5180;TI;8.944538439470577;46.03704672900873;it -Bombinasco;6981;15;Curio;5181;TI;8.833426976606102;46.01404858092222;it -Curio;6986;3;Curio;5181;TI;8.862969838314484;46.001528820890734;it -Grancia;6916;0;Grancia;5186;TI;8.928871313385098;45.96698653003652;it -Gravesano;6929;0;Gravesano;5187;TI;8.916687752500549;46.04274160805792;it -Taverne;6807;0;Lamone;5189;TI;8.929895792137474;46.05412289449378;it -Lamone;6814;2;Lamone;5189;TI;8.931263107703833;46.04435261594592;it -Cadempino;6814;3;Lamone;5189;TI;8.932670854987794;46.03770485010217;it -Cureglia;6944;0;Lamone;5189;TI;8.93851325338732;46.04093772804175;it -Pugerna;6823;0;Lugano;5192;TI;8.996859057619869;45.986372666566;it -Lugano;6900;0;Lugano;5192;TI;8.946559808668052;46.00540441379396;it -Paradiso;6900;9;Lugano;5192;TI;8.941003567855464;45.988008143632;it -Pazzallo;6912;0;Lugano;5192;TI;8.943063155183419;45.984706830839954;it -Carabbia;6913;0;Lugano;5192;TI;8.936210436777861;45.97252478296359;it -Carona;6914;0;Lugano;5192;TI;8.935411013113592;45.95775852727349;it -Pambio-Noranco;6915;0;Lugano;5192;TI;8.931027416622786;45.986474083921955;it -Barbengo;6917;0;Lugano;5192;TI;8.913615549992981;45.95825215433344;it -Figino;6918;0;Lugano;5192;TI;8.905945436426379;45.95069063691606;it -Breganzona;6932;0;Lugano;5192;TI;8.926164395168518;46.00853704512712;it -Vezia;6943;0;Lugano;5192;TI;8.93172768066987;46.01715900949222;it -Insone;6951;8;Lugano;5192;TI;9.029661157382723;46.08606622081454;it -Scareglia;6951;17;Lugano;5192;TI;9.035748377047987;46.090201630550176;it -Colla;6951;18;Lugano;5192;TI;9.0542438887893;46.09211677914276;it -Bogno;6951;19;Lugano;5192;TI;9.062639645371751;46.08943928607173;it -Cozzo;6951;20;Lugano;5192;TI;9.061983593576056;46.0971728876051;it -Signôra;6951;23;Lugano;5192;TI;9.046571874076767;46.09238024358035;it -Maglio di Colla;6959;0;Lugano;5192;TI;9.048732515857862;46.08863107784108;it -Certara;6959;2;Lugano;5192;TI;9.058850126267016;46.08514985956926;it -Curtina;6959;3;Lugano;5192;TI;9.023659388603155;46.08174331054357;it -Cimadera;6959;4;Lugano;5192;TI;9.045861490005558;46.07885488270386;it -Piandera Paese;6959;5;Lugano;5192;TI;9.039844902995798;46.082818855867146;it -Piandera Paese;6959;5;Lugano;5192;TI;9.03162714779163;46.07932261027779;it -Viganello;6962;0;Lugano;5192;TI;8.967120034847161;46.01103651806222;it -Pregassona;6963;0;Lugano;5192;TI;8.971504306641197;46.021660659924564;it -Cureggia;6963;2;Lugano;5192;TI;8.984532180214686;46.02077700842372;it -Davesco-Soragno;6964;0;Lugano;5192;TI;8.980413554446816;46.03524827806401;it -Cadro;6965;0;Lugano;5192;TI;8.989849983920722;46.04469280559492;it -Villa Luganese;6966;0;Lugano;5192;TI;8.996492338849855;46.054062056035434;it -Dino;6967;0;Lugano;5192;TI;8.984243463877881;46.053129786754035;it -Sonvico;6968;0;Lugano;5192;TI;8.990737110134864;46.05786915678791;it -Aldesago;6974;0;Lugano;5192;TI;8.978884133607808;46.008733849300214;it -Castagnola;6976;0;Lugano;5192;TI;8.977978649406642;46.00231482877844;it -Ruvigliana;6977;0;Lugano;5192;TI;8.976079358104682;46.004062807765806;it -Gandria;6978;0;Lugano;5192;TI;9.002406655149825;46.005426179436185;it -Brè sopra Lugano;6979;0;Lugano;5192;TI;8.998379885630852;46.01289935242552;it -Magliaso;6983;0;Magliaso;5193;TI;8.884558404068786;45.981739064453954;it -Manno;6928;0;Manno;5194;TI;8.918672498044364;46.03445273549831;it -Bioggio;6934;0;Manno;5194;TI;8.913718096392117;46.02466814731976;it -Lugano;6900;0;Massagno;5196;TI;8.950826978433872;46.01364895042635;it -Massagno;6900;5;Massagno;5196;TI;8.943177946637347;46.012712906221196;it -Melide;6815;0;Melide;5198;TI;8.949071177374101;45.95474818313674;it -Mezzovico;6805;0;Mezzovico-Vira;5199;TI;8.914969167710344;46.08976459009939;it -Mezzovico;6805;0;Mezzovico-Vira;5199;TI;8.873224436225986;46.08631068378253;it -Miglieglia;6986;2;Miglieglia;5200;TI;8.857293563670925;46.02540935720357;it -Morcote;6922;0;Morcote;5203;TI;8.914261962164197;45.92315375746325;it -Muzzano;6933;0;Muzzano;5205;TI;8.92231994664285;45.99836021415244;it -Magliaso;6983;0;Neggio;5206;TI;8.877409850112626;45.98433524926001;it -Neggio;6991;0;Neggio;5206;TI;8.879414968810451;45.98722095736472;it -Banco;6981;16;Novaggio;5207;TI;8.849374330993301;46.00784329440551;it -Novaggio;6986;0;Novaggio;5207;TI;8.855959886572265;46.01020144806685;it -Origlio;6945;0;Origlio;5208;TI;8.94444338767428;46.054301338141926;it -Paradiso;6900;9;Paradiso;5210;TI;8.946391473619752;45.989213980614736;it -Origlio;6945;0;Ponte Capriasca;5212;TI;8.952329657363743;46.056255110503464;it -Ponte Capriasca;6946;0;Ponte Capriasca;5212;TI;8.949387363265066;46.06208913281764;it -Ponte Capriasca;6946;0;Ponte Capriasca;5212;TI;9.065809220770307;46.12408266694155;it -Savosa;6942;0;Porza;5214;TI;8.945653019790216;46.02202150704098;it -Porza;6948;0;Porza;5214;TI;8.954543375718188;46.02728481956968;it -Pura;6984;0;Pura;5216;TI;8.868835536333002;45.9860495114981;it -Savosa;6942;0;Savosa;5221;TI;8.951453324713032;46.023771067756165;it -Sorengo;6924;0;Sorengo;5225;TI;8.93479036498829;46.00034221755415;it -Taverne;6807;0;Capriasca;5226;TI;8.935263271483757;46.07254430134813;it -Vaglio;6947;0;Capriasca;5226;TI;8.95659803796053;46.061789001014226;it -Tesserete;6950;0;Capriasca;5226;TI;8.965360376952095;46.06763441488413;it -Lugaggia;6953;0;Capriasca;5226;TI;8.971942039184924;46.06239391397656;it -Sala Capriasca;6954;0;Capriasca;5226;TI;8.95681661026447;46.06530197539652;it -Bigorio;6954;1;Capriasca;5226;TI;8.957865035962183;46.070510978381606;it -Cagiallo;6955;0;Capriasca;5226;TI;8.97318013133337;46.06634634597871;it -Oggio;6955;1;Capriasca;5226;TI;8.985988327635248;46.071286161442906;it -Lopagno;6956;0;Capriasca;5226;TI;8.976876763642167;46.068811099128425;it -Roveredo TI;6957;0;Capriasca;5226;TI;8.983301860649972;46.07372203171655;it -Bidogno;6958;0;Capriasca;5226;TI;8.999737377825877;46.078387851336934;it -Corticiasca;6958;2;Capriasca;5226;TI;9.016394582759487;46.087014248200624;it -Corticiasca;6958;2;Capriasca;5226;TI;9.013612530650503;46.07957854008105;it -Odogno;6960;0;Capriasca;5226;TI;8.969716271049888;46.082311181725046;it -Taverne;6807;0;Torricella-Taverne;5227;TI;8.934397823545439;46.06673454707854;it -Torricella;6808;0;Torricella-Taverne;5227;TI;8.922200857608889;46.066749015617454;it -Vernate;6992;0;Vernate;5230;TI;8.886735788749144;45.99477563297588;it -Vezia;6943;0;Vezia;5231;TI;8.937022289500952;46.02347220799274;it -Vico Morcote;6921;0;Vico Morcote;5233;TI;8.922439146903155;45.930366029926105;it -Grancia;6916;0;Collina d'Oro;5236;TI;8.927208985158774;45.97457475500743;it -Carabietta;6919;0;Collina d'Oro;5236;TI;8.900397919296877;45.96845199862321;it -Gentilino;6925;0;Collina d'Oro;5236;TI;8.93279480072811;45.99103318485847;it -Montagnola;6926;0;Collina d'Oro;5236;TI;8.917193149510355;45.98214619000436;it -Agra;6927;0;Collina d'Oro;5236;TI;8.911212628474232;45.96803488118435;it -Breno;6937;0;Alto Malcantone;5237;TI;8.870350968165093;46.03311593553301;it -Vezio;6938;0;Alto Malcantone;5237;TI;8.88240046719605;46.045963918752655;it -Fescoggia;6938;1;Alto Malcantone;5237;TI;8.877086035138781;46.04049342702068;it -Mugena;6939;1;Alto Malcantone;5237;TI;8.890289332608944;46.04873231907844;it -Arosio;6939;2;Alto Malcantone;5237;TI;8.900186172310756;46.04777544105997;it -Rivera;6802;0;Monteceneri;5238;TI;8.925619307806905;46.12352966540406;it -Camignolo;6803;0;Monteceneri;5238;TI;8.938335439804582;46.10608850334823;it -Bironico;6804;0;Monteceneri;5238;TI;8.93293210351042;46.113637840644806;it -Sigirino;6806;0;Monteceneri;5238;TI;8.914214959244337;46.08054385138737;it -Medeglia;6809;0;Monteceneri;5238;TI;8.969383997932395;46.11550642221074;it -Castelrotto;6980;0;Tresa;5239;TI;8.837650865449422;45.99285219381793;it -Ponte Tresa;6988;0;Tresa;5239;TI;8.858345467802076;45.96962134582536;it -Purasca;6989;0;Tresa;5239;TI;8.849730354328189;45.980712925230804;it -Madonna del Piano;6995;2;Tresa;5239;TI;8.833795937616364;45.98800647148176;it -Sessa;6997;0;Tresa;5239;TI;8.818794625361958;45.998942601905426;it -Monteggio;6998;1;Tresa;5239;TI;8.813768962770421;45.996057121226045;it -Maroggia;6817;0;Val Mara;5240;TI;8.968702009551311;45.93562123302927;it -Melano;6818;0;Val Mara;5240;TI;8.98640684830274;45.91907543535467;it -Rovio;6821;0;Val Mara;5240;TI;8.987192139320094;45.93293668163606;it -Capolago;6825;0;Val Mara;5240;TI;9.018466328794243;45.9279816580095;it -Balerna;6828;0;Balerna;5242;TI;9.008062709958324;45.84957640853838;it -Chiasso;6830;0;Balerna;5242;TI;9.014662663862506;45.83445799120555;it -Capolago;6825;0;Castel San Pietro;5249;TI;9.01879186223938;45.92808470421318;it -Mendrisio;6850;0;Castel San Pietro;5249;TI;8.987019067905184;45.859512694727854;it -Somazzo;6872;1;Castel San Pietro;5249;TI;9.017933737102203;45.89688266278583;it -Corteglia;6873;0;Castel San Pietro;5249;TI;8.99375259351797;45.861458354994575;it -Castel San Pietro;6874;0;Castel San Pietro;5249;TI;9.009861454769839;45.85968612933301;it -Monte;6875;0;Castel San Pietro;5249;TI;9.028045410933307;45.88166686536131;it -Casima;6875;2;Castel San Pietro;5249;TI;9.037114734076452;45.890606469900895;it -Campora;6875;3;Castel San Pietro;5249;TI;9.023212110879149;45.87485675088533;it -Coldrerio;6877;0;Castel San Pietro;5249;TI;8.986533950571333;45.85874603573759;it -Chiasso;6830;0;Chiasso;5250;TI;9.026855751846654;45.83487904953815;it -Pedrinate;6832;0;Chiasso;5250;TI;9.011043554782656;45.82653911823656;it -Seseglio;6832;1;Chiasso;5250;TI;8.999289646550675;45.82683996937213;it -Balerna;6828;0;Coldrerio;5251;TI;8.998888665029092;45.852718667349784;it -Coldrerio;6877;0;Coldrerio;5251;TI;8.985875029845712;45.85349883777824;it -Capolago;6825;0;Mendrisio;5254;TI;8.980797742883283;45.9045195325199;it -Mendrisio;6850;0;Mendrisio;5254;TI;8.989202798699102;45.87076408594072;it -Genestrerio;6852;0;Mendrisio;5254;TI;8.960491082540749;45.855884187978056;it -Ligornetto;6853;0;Mendrisio;5254;TI;8.953365538523041;45.86277462745;it -Stabio;6855;0;Mendrisio;5254;TI;8.945353684301038;45.84380016211868;it -Rancate;6862;0;Mendrisio;5254;TI;8.969076949843577;45.8713589188229;it -Besazio;6863;0;Mendrisio;5254;TI;8.951853484723316;45.87322461874318;it -Arzo;6864;0;Mendrisio;5254;TI;8.941240920786347;45.87611670438742;it -Tremona;6865;0;Mendrisio;5254;TI;8.958587553311673;45.88088681775883;it -Meride;6866;0;Mendrisio;5254;TI;8.952637020818882;45.89034366618726;it -Salorino;6872;0;Mendrisio;5254;TI;8.992586850224809;45.87359660877381;it -Somazzo;6872;1;Mendrisio;5254;TI;8.992977123991693;45.8781760235299;it -Castel San Pietro;6874;0;Mendrisio;5254;TI;8.991057433927834;45.86827091714597;it -Morbio Inferiore;6834;0;Morbio Inferiore;5257;TI;9.016861049268458;45.8536192203095;it -Novazzano;6883;0;Novazzano;5260;TI;8.981331232099713;45.84157474041473;it -Riva San Vitale;6826;0;Riva San Vitale;5263;TI;8.969665751600763;45.90682325838312;it -Ligornetto;6853;0;Stabio;5266;TI;8.93891960362692;45.86349337625078;it -S. Pietro;6854;0;Stabio;5266;TI;8.935725435809617;45.859239570201424;it -Stabio;6855;0;Stabio;5266;TI;8.93854635315008;45.8507278890987;it -Vacallo;6833;0;Vacallo;5268;TI;9.034951649856625;45.84764847242736;it -Morbio Superiore;6835;0;Breggia;5269;TI;9.020729220593157;45.861456897948514;it -Caneggio;6837;0;Breggia;5269;TI;9.031797711693192;45.87260100221947;it -Bruzella;6837;2;Breggia;5269;TI;9.038039955925242;45.882427900696264;it -Muggio;6838;0;Breggia;5269;TI;9.0431097926103;45.90224784376214;it -Cabbio;6838;2;Breggia;5269;TI;9.046733098442123;45.89792001324599;it -Sagno;6839;0;Breggia;5269;TI;9.041122504184523;45.85711387344527;it -Biasca;6710;0;Biasca;5281;TI;8.972224403384713;46.36011201439682;it -Pollegio;6742;0;Biasca;5281;TI;8.957991248543044;46.359252611901276;it -Prosito;6526;0;Riviera;5287;TI;8.98350748182635;46.279618170099724;it -Lodrino;6527;0;Riviera;5287;TI;8.977840946412714;46.301559052480954;it -Osogna;6703;0;Riviera;5287;TI;8.987127306914163;46.313270739835595;it -Cresciano;6705;0;Riviera;5287;TI;9.004494725323442;46.280780673072115;it -Iragna;6707;0;Riviera;5287;TI;8.966892470383309;46.32993350922691;it -Bosco/Gurin;6685;0;Bosco/Gurin;5304;TI;8.491560630076776;46.316754906347555;de -Niva (Vallemaggia);6683;2;Campo (Vallemaggia);5307;TI;8.531039997750474;46.29114413427212;it -Campo (Vallemaggia);6684;0;Campo (Vallemaggia);5307;TI;8.496479612607379;46.28901304325196;it -Cimalmotto;6684;1;Campo (Vallemaggia);5307;TI;8.489028038764737;46.2833631130748;it -Cerentino;6683;0;Cerentino;5309;TI;8.54763595941701;46.30564673948652;it -Cevio;6675;0;Cevio;5310;TI;8.601752337127127;46.31646225643645;it -Bignasco;6676;0;Cevio;5310;TI;8.609129655571284;46.338550708394706;it -Cavergno;6690;0;Cevio;5310;TI;8.607167367955046;46.34466776137544;it -S. Carlo (Val Bavona);6690;1;Cevio;5310;TI;8.527747241396838;46.40879311469227;it -Linescio;6682;0;Linescio;5315;TI;8.583101159073042;46.30816610786917;it -Maggia;6673;0;Maggia;5317;TI;8.70830210245811;46.2467731568653;it -Someo;6674;0;Maggia;5317;TI;8.666057478094674;46.28624645152321;it -Riveo;6674;2;Maggia;5317;TI;8.635667321306272;46.29648128268535;it -Aurigeno;6677;1;Maggia;5317;TI;8.712651518171368;46.23076115526933;it -Moghegno;6677;2;Maggia;5317;TI;8.705483317197068;46.24007635985353;it -Giumaglio;6678;0;Maggia;5317;TI;8.682287253868314;46.274203336192265;it -Lodano;6678;2;Maggia;5317;TI;8.684717794773233;46.257592299440844;it -Coglio;6678;3;Maggia;5317;TI;8.684140802968319;46.26905436106236;it -Menzonio;6692;0;Lavizzara;5323;TI;8.640933814667811;46.361199815147174;it -Brontallo;6692;1;Lavizzara;5323;TI;8.628490331662835;46.35553355058448;it -Broglio;6693;0;Lavizzara;5323;TI;8.661083863112886;46.37698513178276;it -Prato-Sornico;6694;0;Lavizzara;5323;TI;8.654219342021646;46.39649907670493;it -Peccia;6695;0;Lavizzara;5323;TI;8.648046392969167;46.40724164165157;it -Piano di Peccia;6695;1;Lavizzara;5323;TI;8.60828024266148;46.41381151061356;it -Fusio;6696;0;Lavizzara;5323;TI;8.660081318380312;46.445177592729294;it -Avegno;6670;0;Avegno Gordevio;5324;TI;8.745910589580326;46.20638284107934;it -Gordevio;6672;0;Avegno Gordevio;5324;TI;8.738186691407622;46.225505113151705;it -Medeglia;6809;0;Comunanza Cadenazzo/Monteceneri;5391;TI;9.058531824766064;46.14067644228474;it -Tegna;6652;0;Terre di Pedemonte;5396;TI;8.744327667269816;46.18615788061427;it -Verscio;6653;0;Terre di Pedemonte;5396;TI;8.732067510609753;46.184635873425414;it -Cavigliano;6654;0;Terre di Pedemonte;5396;TI;8.719051516587045;46.18493873595037;it -Intragna;6655;0;Centovalli;5397;TI;8.700105648178033;46.17735814379126;it -Verdasio;6655;2;Centovalli;5397;TI;8.636125436796164;46.1647666248681;it -Rasa;6655;3;Centovalli;5397;TI;8.654575438104667;46.15606265917694;it -Golino;6656;0;Centovalli;5397;TI;8.714099971323723;46.17919049577238;it -Palagnedra;6657;0;Centovalli;5397;TI;8.632209484122688;46.15416663462637;it -Borgnone;6658;0;Centovalli;5397;TI;8.616068121596422;46.15994546165779;it -Camedo;6659;0;Centovalli;5397;TI;8.608517999216048;46.155726480488546;it -Moneto;6659;9;Centovalli;5397;TI;8.620779515057933;46.150493795860235;it -Indemini;6571;0;Gambarogno;5398;TI;8.826149367713937;46.09445511823649;it -Quartino;6572;0;Gambarogno;5398;TI;8.895107891818922;46.15278652910646;it -Magadino;6573;0;Gambarogno;5398;TI;8.856774777948651;46.14761434959627;it -Vira (Gambarogno);6574;0;Gambarogno;5398;TI;8.841021188905033;46.144487965588496;it -S. Nazzaro;6575;0;Gambarogno;5398;TI;8.803586432697726;46.132219192084726;it -Vairano;6575;1;Gambarogno;5398;TI;8.810429591714847;46.1320890831578;it -Gerra (Gambarogno);6576;0;Gambarogno;5398;TI;8.785274406232038;46.12306307938588;it -Ranzo;6577;0;Gambarogno;5398;TI;8.776457570237314;46.11704764676601;it -Caviano;6578;0;Gambarogno;5398;TI;8.76636015547498;46.10716783481724;it -Piazzogna;6579;0;Gambarogno;5398;TI;8.824928452175234;46.13512149706229;it -Cadenazzo;6593;0;Gambarogno;5398;TI;8.935519628942037;46.14549379877619;it -Contone;6594;0;Gambarogno;5398;TI;8.92868109200676;46.14806740587515;it -Corippo;6631;0;Verzasca;5399;TI;8.840927326244561;46.2357659618382;it -Vogorno;6632;0;Verzasca;5399;TI;8.858640406584966;46.222625591384194;it -Lavertezzo;6633;0;Verzasca;5399;TI;8.835991748712926;46.25720836831403;it -Brione (Verzasca);6634;0;Verzasca;5399;TI;8.790302638982265;46.29676823767583;it -Gerra (Verzasca);6635;0;Verzasca;5399;TI;8.798422685694703;46.318907355620915;it -Frasco;6636;0;Verzasca;5399;TI;8.802104599462066;46.340228921442076;it -Sonogno;6637;0;Verzasca;5399;TI;8.786155280291592;46.34982582138733;it -Aigle;1860;0;Aigle;5401;VD;6.967618108123619;46.31728153456867;fr -Le Sépey;1863;0;Aigle;5401;VD;7.030106415605864;46.338251869028504;fr -Bex;1880;0;Bex;5402;VD;7.012436832384353;46.25121695089581;fr -Frenières-sur-Bex;1880;2;Bex;5402;VD;7.071431883269558;46.26150004175834;fr -Fenalet-sur-Bex;1880;3;Bex;5402;VD;7.027759421752145;46.27197851576935;fr -Les Plans-sur-Bex;1880;4;Bex;5402;VD;7.093281166881865;46.25684820619534;fr -Les Posses-sur-Bex;1880;5;Bex;5402;VD;7.048021649458864;46.270586014318106;fr -Gryon;1882;0;Bex;5402;VD;7.15213173742502;46.28323713005311;fr -Chessel;1846;0;Chessel;5403;VD;6.894260960726323;46.34958710999354;fr -Corbeyrier;1856;0;Corbeyrier;5404;VD;6.962466529983147;46.35024522031608;fr -Frenières-sur-Bex;1880;2;Gryon;5405;VD;7.061851467256407;46.267625091031036;fr -Les Posses-sur-Bex;1880;5;Gryon;5405;VD;7.058268741903535;46.26764523481763;fr -Gryon;1882;0;Gryon;5405;VD;7.062829627900473;46.2734890814626;fr -Lavey-Village;1892;0;Lavey-Morcles;5406;VD;7.019225954646639;46.219448799076375;fr -Lavey-les-Bains;1892;1;Lavey-Morcles;5406;VD;7.018044792649443;46.20454568313313;fr -Morcles;1892;2;Lavey-Morcles;5406;VD;7.036551084117983;46.20899341006069;fr -Leysin;1854;0;Leysin;5407;VD;7.012534760879129;46.3416366939267;fr -Noville;1845;0;Noville;5408;VD;6.89859274263301;46.3809185656027;fr -Aigle;1860;0;Ollon;5409;VD;6.9741825667720665;46.30213119253191;fr -La Forclaz VD;1866;0;Ollon;5409;VD;7.038474019659714;46.337279308135756;fr -Ollon VD;1867;0;Ollon;5409;VD;6.994512687105419;46.29713319812285;fr -St-Triphon;1867;2;Ollon;5409;VD;6.9784711300022355;46.292688499278036;fr -Panex;1867;3;Ollon;5409;VD;7.014265153167878;46.31122509388634;fr -Villars-sur-Ollon;1884;0;Ollon;5409;VD;7.056396955915402;46.29760515631227;fr -Arveyes;1884;2;Ollon;5409;VD;7.062520941444413;46.28882328846628;fr -Huémoz;1884;3;Ollon;5409;VD;7.02706746795014;46.2913440547328;fr -Chesières;1885;0;Ollon;5409;VD;7.043512130657404;46.301254419777244;fr -La Lécherette;1660;4;Ormont-Dessous;5410;VD;7.054141708477156;46.40851402350933;fr -Corbeyrier;1856;0;Ormont-Dessous;5410;VD;7.023287094096979;46.39908811744379;fr -Les Mosses;1862;0;Ormont-Dessous;5410;VD;7.101846167413826;46.39806320417739;fr -La Comballaz;1862;2;Ormont-Dessous;5410;VD;7.0773323448180685;46.37717874909243;fr -Le Sépey;1863;0;Ormont-Dessous;5410;VD;7.051700375292807;46.36176373126449;fr -La Forclaz VD;1866;0;Ormont-Dessous;5410;VD;7.068289801833898;46.35154353761165;fr -Vers-l'Eglise;1864;0;Ormont-Dessus;5411;VD;7.1316649755665775;46.35365970648242;fr -Les Diablerets;1865;0;Ormont-Dessus;5411;VD;7.157162045051663;46.34975183622354;fr -La Forclaz VD;1866;0;Ormont-Dessus;5411;VD;7.093083663785006;46.35397851538326;fr -Rennaz;1847;0;Rennaz;5412;VD;6.918628431062926;46.37590331493515;fr -Roche VD;1852;0;Roche (VD);5413;VD;6.930430200063799;46.361668526548144;fr -Villeneuve VD;1844;0;Villeneuve (VD);5414;VD;6.925179316236833;46.39625627921399;fr -Yvorne;1853;0;Yvorne;5415;VD;6.9608609909618435;46.330897019559906;fr -Aubonne;1170;0;Aubonne;5422;VD;6.392147415267419;46.49671941989498;fr -Bougy-Villars;1172;0;Aubonne;5422;VD;6.35147570970559;46.48546895540404;fr -Montherod;1174;0;Aubonne;5422;VD;6.365783620335947;46.498779376157046;fr -Pizy;1174;2;Aubonne;5422;VD;6.3477515732709175;46.49392988128952;fr -Ballens;1144;0;Ballens;5423;VD;6.3740798439638375;46.554690587938026;fr -Berolle;1149;0;Berolle;5424;VD;6.336612068630657;46.55822468429219;fr -Bière;1145;0;Bière;5425;VD;6.333425626588881;46.5381635918027;fr -Berolle;1149;0;Bière;5425;VD;6.3315678944146;46.55275504773971;fr -Bougy-Villars;1172;0;Bougy-Villars;5426;VD;6.354063424153514;46.47894221569074;fr -Perroy;1166;0;Féchy;5427;VD;6.376898658473011;46.46780686573079;fr -Féchy;1173;0;Féchy;5427;VD;6.369900213676352;46.48117050517379;fr -Gimel;1188;0;Gimel;5428;VD;6.309750862682947;46.50814106486584;fr -Longirod;1261;35;Longirod;5429;VD;6.258434168990332;46.49480257535658;fr -Marchissy;1261;32;Marchissy;5430;VD;6.247316457812166;46.48722158440335;fr -Mollens VD;1146;0;Mollens (VD);5431;VD;6.363170872666193;46.57790905321699;fr -St-George;1188;2;Saint-George;5434;VD;6.26253505864636;46.51471320420317;fr -Bière;1145;0;Saint-Livres;5435;VD;6.36300025723901;46.526236456412214;fr -St-Livres;1176;0;Saint-Livres;5435;VD;6.386683355853268;46.50736109114683;fr -St-Oyens;1187;0;Saint-Oyens;5436;VD;6.309108317939858;46.498821627154896;fr -Saubraz;1189;0;Saubraz;5437;VD;6.330347568955334;46.514265498167745;fr -Domdidier;1564;0;Avenches;5451;VD;7.011476782459476;46.87574427212462;fr -Avenches;1580;0;Avenches;5451;VD;7.040606869945081;46.880248350926664;fr -Oleyres;1580;2;Avenches;5451;VD;7.038094191549378;46.8532297429827;fr -Donatyre;1580;3;Avenches;5451;VD;7.057986107959758;46.87665426776402;fr -Misery;1721;1;Avenches;5451;VD;7.053539693011698;46.85713292254472;fr -Cudrefin;1588;0;Cudrefin;5456;VD;7.019627598204514;46.95528216753253;fr -Faoug;1595;0;Faoug;5458;VD;7.077399675110069;46.908754627035314;fr -Villars-le-Grand;1584;0;Vully-les-Lacs;5464;VD;6.989996803861851;46.90550040146312;fr -Salavaux;1585;0;Vully-les-Lacs;5464;VD;7.022933153865684;46.916899964513114;fr -Bellerive VD;1585;2;Vully-les-Lacs;5464;VD;7.023284162730551;46.92461066585939;fr -Cotterd;1585;3;Vully-les-Lacs;5464;VD;7.0257615881854925;46.92160131024661;fr -Vallamand;1586;0;Vully-les-Lacs;5464;VD;7.038677408012126;46.93176203837587;fr -Montmagny;1587;0;Vully-les-Lacs;5464;VD;7.00938587925615;46.9267709128461;fr -Constantine;1587;1;Vully-les-Lacs;5464;VD;7.012096787172144;46.918807621700125;fr -Chabrey;1589;0;Vully-les-Lacs;5464;VD;6.981421924050195;46.92702541294073;fr -Mur (Vully) VD;1787;2;Vully-les-Lacs;5464;VD;7.059970250862907;46.94496413086314;fr -Bettens;1042;4;Bettens;5471;VD;6.577339282375479;46.62574198838093;fr -Daillens;1306;0;Bettens;5471;VD;6.561890529217536;46.61871383006863;fr -Bournens;1035;0;Bournens;5472;VD;6.56376763768004;46.60381147127098;fr -Boussens;1034;0;Boussens;5473;VD;6.5827749163239115;46.60374591713379;fr -Chavannes-le-Veyron;1148;7;La Chaux (Cossonay);5474;VD;6.458555288991961;46.60892377846311;fr -La Chaux (Cossonay);1308;0;La Chaux (Cossonay);5474;VD;6.472897602708939;46.61800590115866;fr -Chevilly;1316;0;La Chaux (Cossonay);5474;VD;6.4687302436967204;46.63432835241617;fr -Chavannes-le-Veyron;1148;7;Chavannes-le-Veyron;5475;VD;6.451340311866689;46.60591163824979;fr -Chevilly;1316;0;Chevilly;5476;VD;6.476963208899111;46.64234754541369;fr -Cossonay-Ville;1304;0;Cossonay;5477;VD;6.509436340591353;46.614216153098816;fr -Allens;1304;3;Cossonay;5477;VD;6.509810413782632;46.60011632937013;fr -Cuarnens;1148;4;Cuarnens;5479;VD;6.4383627277859805;46.6252813597524;fr -Daillens;1306;0;Daillens;5480;VD;6.548779762748585;46.62049808726464;fr -Dizy;1304;2;Dizy;5481;VD;6.49628133228335;46.63559204965237;fr -Eclépens;1312;0;Eclépens;5482;VD;6.525699488760172;46.652473297882324;fr -Ferreyres;1313;0;Ferreyres;5483;VD;6.485469186457913;46.658378561196294;fr -Gollion;1124;0;Gollion;5484;VD;6.508397736935717;46.58524040908587;fr -Grancy;1117;0;Grancy;5485;VD;6.4641613425320585;46.59172198443532;fr -L'Isle;1148;0;L'Isle;5486;VD;6.413186379603166;46.61789483414457;fr -Villars-Bozon;1148;3;L'Isle;5486;VD;6.407258030445664;46.60655598641696;fr -La Coudre;1148;9;L'Isle;5486;VD;6.402816454700967;46.63906133148906;fr -Lussery-Villars;1307;0;Lussery-Villars;5487;VD;6.525997132153527;46.63290061627385;fr -Mauraz;1148;2;Mauraz;5488;VD;6.422517690697587;46.60524408309125;fr -Mex VD;1031;0;Mex (VD);5489;VD;6.5522859648285205;46.57749798469106;fr -Moiry VD;1148;8;Moiry;5490;VD;6.453647546013383;46.64853545354674;fr -Mont-la-Ville;1148;5;Mont-la-Ville;5491;VD;6.408887015696761;46.64590119935128;fr -Vaulion;1325;0;Mont-la-Ville;5491;VD;6.367345776010365;46.662331580594014;fr -Montricher;1147;0;Montricher;5492;VD;6.376921388278247;46.60115132552307;fr -Orny;1317;0;Orny;5493;VD;6.525591765330085;46.66831302081415;fr -Bavois;1372;0;Orny;5493;VD;6.5498277553429185;46.664227146727875;fr -Penthalaz;1305;0;Penthalaz;5495;VD;6.529311132123204;46.61426354224973;fr -Penthaz;1303;0;Penthaz;5496;VD;6.538843026606873;46.60032175204984;fr -Pompaples;1318;0;Pompaples;5497;VD;6.511229077314487;46.666280149347486;fr -La Sarraz;1315;0;La Sarraz;5498;VD;6.514473254000137;46.65953843783619;fr -Senarclens;1304;4;Senarclens;5499;VD;6.488992623649115;46.60080505540386;fr -Sullens;1036;0;Sullens;5501;VD;6.56705097929716;46.594298526517605;fr -Mex VD;1031;0;Vufflens-la-Ville;5503;VD;6.549931686381064;46.56522213218717;fr -Vufflens-la-Ville;1302;0;Vufflens-la-Ville;5503;VD;6.5388769762941;46.5769640602468;fr -Assens;1042;0;Assens;5511;VD;6.622637836349773;46.612560205560925;fr -Bioley-Orjulaz;1042;3;Assens;5511;VD;6.597390123455131;46.62184833599527;fr -Bercher;1038;0;Bercher;5512;VD;6.708521981714881;46.692155004445176;fr -Bottens;1041;33;Bottens;5514;VD;6.659493143346604;46.62057994873499;fr -Bretigny-sur-Morrens;1053;2;Bretigny-sur-Morrens;5515;VD;6.642521978312031;46.59778996892911;fr -Cugy VD;1053;0;Cugy (VD);5516;VD;6.641161117867429;46.584244691469785;fr -Echallens;1040;0;Echallens;5518;VD;6.634071133841577;46.64077072186312;fr -Essertines-sur-Yverdon;1417;0;Essertines-sur-Yverdon;5520;VD;6.637980053751581;46.71835465216508;fr -Epautheyres;1417;2;Essertines-sur-Yverdon;5520;VD;6.643197659706145;46.739510742587186;fr -Etagnières;1037;0;Etagnières;5521;VD;6.611946988769706;46.60009590704349;fr -Fey;1044;0;Fey;5522;VD;6.681244837165686;46.676087973888535;fr -Froideville;1055;0;Froideville;5523;VD;6.68074188934409;46.601776089163316;fr -Morrens VD;1054;0;Morrens (VD);5527;VD;6.62663748821548;46.59118780583415;fr -Oulens-sous-Echallens;1377;0;Oulens-sous-Echallens;5529;VD;6.578322478166343;46.64357561187086;fr -Pailly;1416;0;Pailly;5530;VD;6.672463639324812;46.69931417554038;fr -Penthéréaz;1375;0;Penthéréaz;5531;VD;6.603534363648163;46.681994262492296;fr -Poliez-Pittet;1041;32;Poliez-Pittet;5533;VD;6.68250601026579;46.62755999657034;fr -Rueyres;1046;0;Rueyres;5534;VD;6.6918961390710745;46.693449055022135;fr -St-Barthélemy VD;1040;3;Saint-Barthélemy (VD);5535;VD;6.594747797252885;46.63405473879089;fr -Villars-le-Terroir;1040;2;Villars-le-Terroir;5537;VD;6.639055955667947;46.65776087821219;fr -Vuarrens;1418;0;Vuarrens;5539;VD;6.64824417588345;46.68724176105717;fr -Dommartin;1041;21;Montilliez;5540;VD;6.702723654814196;46.65026765874446;fr -Naz;1041;26;Montilliez;5540;VD;6.695394748070305;46.65825805500925;fr -Poliez-le-Grand;1041;31;Montilliez;5540;VD;6.663750400892924;46.63873977575857;fr -Sugnens;1043;0;Montilliez;5540;VD;6.670908632694332;46.65545374852849;fr -Goumoens-la-Ville;1376;0;Goumoëns;5541;VD;6.603084826733057;46.658102761281704;fr -Eclagnens;1376;2;Goumoëns;5541;VD;6.5914115696492726;46.65148590762143;fr -Goumoens-le-Jux;1376;3;Goumoëns;5541;VD;6.587481219461129;46.665939099814146;fr -Fontanezier;1423;2;Bonvillars;5551;VD;6.665413095203796;46.86450030219432;fr -Bonvillars;1427;0;Bonvillars;5551;VD;6.672409387024431;46.83998552568698;fr -Les Rasses;1452;0;Bullet;5552;VD;6.540170626347946;46.829234868218;fr -Bullet;1453;0;Bullet;5552;VD;6.554823907253395;46.83048351618804;fr -Champagne;1424;0;Champagne;5553;VD;6.658150008726031;46.83049642112123;fr -Concise;1426;0;Concise;5554;VD;6.7201748415646545;46.84990815286729;fr -Vaumarcus;2028;0;Concise;5554;VD;6.7477894073960725;46.8696540702193;fr -Corcelles-près-Concise;1426;1;Corcelles-près-Concise;5555;VD;6.707498691636927;46.84710317253369;fr -Fiez;1420;0;Fiez;5556;VD;6.623613426791585;46.82632374405788;fr -Bullet;1453;0;Fiez;5556;VD;6.548992085398455;46.86398913281727;fr -Fontaines-sur-Grandson;1421;0;Fontaines-sur-Grandson;5557;VD;6.619319785759893;46.83533414608756;fr -Mauborget;1453;2;Fontaines-sur-Grandson;5557;VD;6.585498535931222;46.87222366267992;fr -Giez;1429;0;Giez;5559;VD;6.616413043841555;46.80957595856203;fr -Grandevent;1421;2;Grandevent;5560;VD;6.6063658664419505;46.83845831563669;fr -Bullet;1453;0;Grandevent;5560;VD;6.590929253085091;46.84567390056325;fr -Mauborget;1453;2;Grandevent;5560;VD;6.589802909158396;46.852667191282606;fr -Grandson;1422;0;Grandson;5561;VD;6.64358750047391;46.80832761320712;fr -Mauborget;1453;2;Mauborget;5562;VD;6.616810730713964;46.85576434366759;fr -Mutrux;1428;2;Mutrux;5563;VD;6.727485322996016;46.8831138520894;fr -Novalles;1431;2;Novalles;5564;VD;6.595859596145269;46.82841059821435;fr -Onnens VD;1425;0;Onnens (VD);5565;VD;6.686133880560038;46.838530630456894;fr -Provence;1428;1;Provence;5566;VD;6.726265372241401;46.88999998444018;fr -Couvet;2108;0;Provence;5566;VD;6.661498362674425;46.908471501951404;fr -Vuiteboeuf;1445;0;Sainte-Croix;5568;VD;6.550121070228631;46.812216622781094;fr -Ste-Croix;1450;0;Sainte-Croix;5568;VD;6.502974268913817;46.823248245946736;fr -La Sagne (Ste-Croix);1450;2;Sainte-Croix;5568;VD;6.49747640956343;46.814861556435005;fr -Le Château-de-Ste-Croix;1450;3;Sainte-Croix;5568;VD;6.534105277425332;46.818234157204365;fr -Les Rasses;1452;0;Sainte-Croix;5568;VD;6.526848382796322;46.83045206568067;fr -L'Auberson;1454;0;Sainte-Croix;5568;VD;6.463014298145715;46.81801643155601;fr -La Vraconnaz;1454;2;Sainte-Croix;5568;VD;6.482598007662461;46.84172158953782;fr -Villars-Burquin;1423;0;Tévenon;5571;VD;6.625272351429598;46.846633280624836;fr -Fontanezier;1423;2;Tévenon;5571;VD;6.653370269564585;46.853853522279;fr -Romairon;1423;3;Tévenon;5571;VD;6.641940598314928;46.85074835709256;fr -Vaugondry;1423;4;Tévenon;5571;VD;6.636856319445832;46.846431615244164;fr -Mauborget;1453;2;Tévenon;5571;VD;6.625246827702049;46.87931276549041;fr -Belmont-sur-Lausanne;1092;0;Belmont-sur-Lausanne;5581;VD;6.680420543692541;46.52011650513355;fr -Cheseaux-sur-Lausanne;1033;0;Cheseaux-sur-Lausanne;5582;VD;6.605033984584373;46.584875084536165;fr -Crissier;1023;0;Crissier;5583;VD;6.578758801563157;46.5561694321503;fr -Cheseaux-sur-Lausanne;1033;0;Crissier;5583;VD;6.57835342644822;46.57355109194824;fr -Epalinges;1066;0;Epalinges;5584;VD;6.673652602319469;46.54595132676624;fr -Jouxtens-Mézery;1008;2;Jouxtens-Mézery;5585;VD;6.597695685256937;46.55280623616876;fr -Lausanne 25;1000;25;Lausanne;5586;VD;6.683443539253286;46.56223671140397;fr -Lausanne 26;1000;26;Lausanne;5586;VD;6.696215827457423;46.55648337576275;fr -Lausanne 27;1000;27;Lausanne;5586;VD;6.681464584827575;46.541742675143546;fr -Lausanne;1003;0;Lausanne;5586;VD;6.630104680319968;46.520004325199174;fr -Lausanne;1004;0;Lausanne;5586;VD;6.618677635496144;46.52848029958016;fr -Lausanne;1005;0;Lausanne;5586;VD;6.642500088546282;46.519858888648734;fr -Lausanne;1006;0;Lausanne;5586;VD;6.637138205926966;46.5112131937215;fr -Lausanne;1007;0;Lausanne;5586;VD;6.6093155627319735;46.517634858097196;fr -Lausanne;1010;0;Lausanne;5586;VD;6.6589203004653745;46.53614302589882;fr -Lausanne;1011;0;Lausanne;5586;VD;6.642775885775834;46.52638207142071;fr -Lausanne;1012;0;Lausanne;5586;VD;6.656932149576898;46.52627321083718;fr -Lausanne;1018;0;Lausanne;5586;VD;6.628631331184677;46.53876301752992;fr -Crissier;1023;0;Lausanne;5586;VD;6.588008393477473;46.55720682097842;fr -Romanel-sur-Lausanne;1032;0;Lausanne;5586;VD;6.611271626209522;46.57085094821429;fr -Cheseaux-sur-Lausanne;1033;0;Lausanne;5586;VD;6.602123737024928;46.57621472653077;fr -Le Mont-sur-Lausanne;1052;0;Lausanne;5586;VD;6.669515835076207;46.570718926596626;fr -Cugy VD;1053;0;Lausanne;5586;VD;6.664510664565337;46.58994230483326;fr -Le Mont-sur-Lausanne;1052;0;Le Mont-sur-Lausanne;5587;VD;6.636118333231582;46.55679959062843;fr -Paudex;1094;0;Paudex;5588;VD;6.672349201540892;46.505958539189805;fr -Lutry;1095;0;Paudex;5588;VD;6.675515222362116;46.508532763991774;fr -Prilly;1008;0;Prilly;5589;VD;6.607760315753399;46.53437454595488;fr -Pully;1009;0;Pully;5590;VD;6.661971123280417;46.509185250734056;fr -Les Monts-de-Pully;1068;0;Pully;5590;VD;6.683372827594051;46.53417175545359;fr -Prilly;1008;0;Renens (VD);5591;VD;6.5997003722568275;46.528366367778965;fr -Renens VD;1020;0;Renens (VD);5591;VD;6.590677649359407;46.536826675010445;fr -Romanel-sur-Lausanne;1032;0;Romanel-sur-Lausanne;5592;VD;6.606144558694388;46.56319399143231;fr -Chexbres;1071;0;Chexbres;5601;VD;6.777522333209496;46.482253175577625;fr -Forel (Lavaux);1072;0;Forel (Lavaux);5604;VD;6.7698421201311465;46.541162668577876;fr -Les Cullayes;1080;0;Forel (Lavaux);5604;VD;6.7597793354611895;46.56523936417741;fr -Grandvaux;1091;0;Forel (Lavaux);5604;VD;6.741233108420344;46.512771510077414;fr -La Croix (Lutry);1090;0;Lutry;5606;VD;6.702699255525531;46.51666374061145;fr -Belmont-sur-Lausanne;1092;0;Lutry;5606;VD;6.692292090606373;46.52412060417555;fr -La Conversion;1093;0;Lutry;5606;VD;6.686219098730866;46.514914874361565;fr -Lutry;1095;0;Lutry;5606;VD;6.686387690728701;46.502679140520144;fr -Puidoux;1070;0;Puidoux;5607;VD;6.766130385273231;46.49386437593245;fr -Rivaz;1071;1;Puidoux;5607;VD;6.777333611482;46.47485781990065;fr -Cully;1096;0;Puidoux;5607;VD;6.754965610524699;46.48477189801474;fr -Epesses;1098;0;Puidoux;5607;VD;6.7577002174962155;46.485666684644634;fr -Les Thioleyres;1607;4;Puidoux;5607;VD;6.808088591925329;46.540192692874584;fr -Chexbres;1071;0;Rivaz;5609;VD;6.777517593774321;46.47902711072996;fr -Rivaz;1071;1;Rivaz;5609;VD;6.778516695841846;46.47635639864878;fr -Chexbres;1071;0;Saint-Saphorin (Lavaux);5610;VD;6.79243029667739;46.48133059248305;fr -St-Saphorin (Lavaux);1071;2;Saint-Saphorin (Lavaux);5610;VD;6.796101109485536;46.473414475389646;fr -Savigny;1073;0;Savigny;5611;VD;6.733058093367193;46.537590818141354;fr -Mollie-Margot;1073;2;Savigny;5611;VD;6.75038454204825;46.55681489238539;fr -La Croix (Lutry);1090;0;Savigny;5611;VD;6.716166653941993;46.51835834674199;fr -Aran;1091;1;Savigny;5611;VD;6.720019272556564;46.51828815813315;fr -Puidoux;1070;0;Bourg-en-Lavaux;5613;VD;6.754377147246244;46.50507272216355;fr -Grandvaux;1091;0;Bourg-en-Lavaux;5613;VD;6.716250538070151;46.49370574028894;fr -Aran;1091;1;Bourg-en-Lavaux;5613;VD;6.710337665412657;46.49800783972963;fr -Chenaux;1091;3;Bourg-en-Lavaux;5613;VD;6.728768283108007;46.49476621937237;fr -Lutry;1095;0;Bourg-en-Lavaux;5613;VD;6.707024312686679;46.501616969543946;fr -Cully;1096;0;Bourg-en-Lavaux;5613;VD;6.7294024446672775;46.4887306575382;fr -Villette (Lavaux);1096;2;Bourg-en-Lavaux;5613;VD;6.710541748655343;46.49371207768561;fr -Riex;1097;0;Bourg-en-Lavaux;5613;VD;6.735688848690609;46.493314544195414;fr -Epesses;1098;0;Bourg-en-Lavaux;5613;VD;6.74819412655127;46.491124217668826;fr -Aclens;1123;0;Aclens;5621;VD;6.509843090640182;46.567655451282;fr -Bremblens;1121;0;Bremblens;5622;VD;6.5177066586130925;46.546688986033665;fr -Buchillon;1164;0;Buchillon;5623;VD;6.4212490096837636;46.470165093503255;fr -Bussigny;1030;0;Bussigny;5624;VD;6.5510605060479445;46.55316478683512;fr -Lausanne;1015;0;Chavannes-près-Renens;5627;VD;6.584244922424133;46.52339029226623;fr -Chavannes-près-Renens;1022;0;Chavannes-près-Renens;5627;VD;6.576338446081509;46.535840143258845;fr -Chigny;1134;2;Chigny;5628;VD;6.477036046156941;46.52008758551559;fr -Clarmont;1127;0;Clarmont;5629;VD;6.450289096058974;46.54726268277513;fr -Denens;1135;0;Denens;5631;VD;6.4568039618476165;46.519001907581035;fr -Denges;1026;2;Denges;5632;VD;6.538963804466332;46.52337064599027;fr -Echandens;1026;3;Echandens;5633;VD;6.542410554788482;46.532815941026364;fr -Echichens;1112;0;Echichens;5634;VD;6.498642496746171;46.52601637692037;fr -St-Saphorin-sur-Morges;1113;0;Echichens;5634;VD;6.48755847092189;46.54558377933343;fr -Colombier VD;1114;0;Echichens;5634;VD;6.475534328148893;46.556560635287504;fr -Monnaz;1125;0;Echichens;5634;VD;6.478958009758358;46.528489312237;fr -Lausanne;1015;0;Ecublens (VD);5635;VD;6.569314646654185;46.5200824990343;fr -Ecublens VD;1024;0;Ecublens (VD);5635;VD;6.562013835368447;46.526128326052365;fr -Etoy;1163;0;Etoy;5636;VD;6.420576311330282;46.48612950148505;fr -Aubonne;1170;0;Lavigny;5637;VD;6.407503566735622;46.48769386792098;fr -Lavigny;1175;0;Lavigny;5637;VD;6.4046563983015545;46.50053153827873;fr -Lonay;1027;0;Lonay;5638;VD;6.520880751213883;46.52647745635818;fr -Lully VD;1132;0;Lully (VD);5639;VD;6.465259088514285;46.50589593757599;fr -St-Prex;1162;0;Lully (VD);5639;VD;6.470880888307884;46.49536815731783;fr -Lussy-sur-Morges;1167;0;Lussy-sur-Morges;5640;VD;6.4506318981954935;46.5036771578231;fr -Morges;1110;0;Morges;5642;VD;6.499991686202838;46.51073176642811;fr -Préverenges;1028;0;Préverenges;5643;VD;6.526944990710734;46.51839753048603;fr -Romanel-sur-Morges;1122;0;Romanel-sur-Morges;5645;VD;6.511647591810882;46.55556444464723;fr -St-Prex;1162;0;Saint-Prex;5646;VD;6.458243347230496;46.48133522261153;fr -Lausanne;1015;0;Saint-Sulpice (VD);5648;VD;6.581923075510181;46.51900275385406;fr -St-Sulpice VD;1025;0;Saint-Sulpice (VD);5648;VD;6.559956255555076;46.50903543638193;fr -Tolochenaz;1131;0;Tolochenaz;5649;VD;6.473872172832824;46.50591603778724;fr -Vaux-sur-Morges;1126;0;Vaux-sur-Morges;5650;VD;6.466329139688101;46.536540704964494;fr -Villars-Ste-Croix;1029;0;Villars-Sainte-Croix;5651;VD;6.560629680859009;46.5664858467977;fr -Villars-sous-Yens;1168;0;Villars-sous-Yens;5652;VD;6.428609260846742;46.51039918063873;fr -Vufflens-le-Château;1134;0;Vufflens-le-Château;5653;VD;6.470901960720033;46.526815969210205;fr -Vullierens;1115;0;Vullierens;5654;VD;6.481220226967014;46.57418692232939;fr -Yens;1169;0;Yens;5655;VD;6.4171570555568405;46.51859778898384;fr -Cottens VD;1116;0;Hautemorges;5656;VD;6.454462946431608;46.57259186764514;fr -Reverolle;1128;0;Hautemorges;5656;VD;6.4397069810234076;46.542433837900326;fr -Bussy-Chardonney;1136;0;Hautemorges;5656;VD;6.442639941187684;46.52914372352663;fr -Sévery;1141;0;Hautemorges;5656;VD;6.438016115007768;46.57589734364371;fr -Pampigny;1142;0;Hautemorges;5656;VD;6.428914830846109;46.58164153105485;fr -Apples;1143;0;Hautemorges;5656;VD;6.428621690150074;46.552256463726586;fr -Bercher;1038;0;Boulens;5661;VD;6.717477093966617;46.6952464312712;fr -Boulens;1063;3;Boulens;5661;VD;6.7190039087762905;46.68187799815287;fr -Bussy-sur-Moudon;1514;0;Bussy-sur-Moudon;5663;VD;6.811128645841802;46.68674309407702;fr -Moudon;1510;0;Chavannes-sur-Moudon;5665;VD;6.823473200195329;46.6700083407837;fr -Chavannes-sur-Moudon;1512;0;Chavannes-sur-Moudon;5665;VD;6.808358768076883;46.6571115853914;fr -Curtilles;1521;0;Curtilles;5669;VD;6.847597397897828;46.70267823063303;fr -Dompierre VD;1682;3;Dompierre (VD);5671;VD;6.882537005005172;46.70841718630923;fr -Peney-le-Jorat;1059;0;Hermenches;5673;VD;6.742033817619784;46.638718670462666;fr -Hermenches;1513;0;Hermenches;5673;VD;6.76019977404349;46.64190235865745;fr -Lovatens;1682;2;Lovatens;5674;VD;6.865103116797509;46.69336415793658;fr -Lucens;1522;0;Lucens;5675;VD;6.837990938299612;46.71032244876205;fr -Oulens-sur-Lucens;1522;9;Lucens;5675;VD;6.808121435846655;46.70440415701117;fr -Forel-sur-Lucens;1526;0;Lucens;5675;VD;6.82298804363051;46.72895093358568;fr -Cremin;1526;2;Lucens;5675;VD;6.842500860674049;46.72414528326439;fr -Brenles;1683;0;Lucens;5675;VD;6.8541981891482395;46.6711537854113;fr -Chesalles-sur-Moudon;1683;2;Lucens;5675;VD;6.832938141053643;46.67517671941409;fr -Sarzens;1683;3;Lucens;5675;VD;6.850106578546883;46.68227851333819;fr -Moudon;1510;0;Moudon;5678;VD;6.799126693067762;46.668156412803924;fr -Ogens;1045;0;Ogens;5680;VD;6.722009773148149;46.7110566332039;fr -Prévonloup;1682;0;Prévonloup;5683;VD;6.8815335639190875;46.6997804937438;fr -Rossenges;1513;2;Rossenges;5684;VD;6.772959598113757;46.653721447051154;fr -Syens;1510;2;Syens;5688;VD;6.7787617432452985;46.64603123263455;fr -Villars-le-Comte;1515;0;Villars-le-Comte;5690;VD;6.79962023072744;46.71064033885288;fr -Vucherens;1509;0;Vucherens;5692;VD;6.773930578638616;46.62253013860732;fr -Bercher;1038;0;Montanaire;5693;VD;6.718045610587108;46.695947470016414;fr -Chapelle-sur-Moudon;1063;0;Montanaire;5693;VD;6.734850473703314;46.6699037362084;fr -Martherenges;1063;2;Montanaire;5693;VD;6.7532286897627944;46.66109079699987;fr -Peyres-Possens;1063;4;Montanaire;5693;VD;6.706896268979456;46.66333500627964;fr -Chanéaz;1409;0;Montanaire;5693;VD;6.742744436526476;46.72964857942199;fr -Thierrens;1410;0;Montanaire;5693;VD;6.756227494770582;46.70303266883462;fr -Correvon;1410;2;Montanaire;5693;VD;6.737221081867349;46.71588769586671;fr -Denezy;1410;3;Montanaire;5693;VD;6.784724361781398;46.719752962040864;fr -St-Cierges;1410;5;Montanaire;5693;VD;6.732434620435866;46.68938316988406;fr -Neyruz-sur-Moudon;1515;1;Montanaire;5693;VD;6.787191388780404;46.6978282774454;fr -Arnex-sur-Nyon;1277;1;Arnex-sur-Nyon;5701;VD;6.191473864439313;46.37533284232947;fr -St-Cergue;1264;0;Arzier-Le Muids;5702;VD;6.130041438493881;46.468838182133474;fr -Arzier-Le Muids;1273;0;Arzier-Le Muids;5702;VD;6.20735926871245;46.46051916793938;fr -Bassins;1269;0;Bassins;5703;VD;6.2315013901996625;46.46213566313261;fr -Begnins;1268;0;Begnins;5704;VD;6.25152475394418;46.440792593444584;fr -Bogis-Bossey;1279;2;Bogis-Bossey;5705;VD;6.166266059270292;46.353829198745494;fr -Borex;1277;0;Borex;5706;VD;6.177607821074762;46.37869015470283;fr -Chavannes-de-Bogis;1279;0;Chavannes-de-Bogis;5707;VD;6.162315850879493;46.3443723019895;fr -Chavannes-des-Bois;1290;2;Chavannes-des-Bois;5708;VD;6.133766413893034;46.315973505516375;fr -Chéserex;1275;0;Chéserex;5709;VD;6.175051931678808;46.40072646804166;fr -Gingins;1276;0;Chéserex;5709;VD;6.099645298759773;46.425197591808164;fr -Coinsins;1267;2;Coinsins;5710;VD;6.239389800305042;46.42361254533412;fr -Commugny;1291;0;Commugny;5711;VD;6.180396317500046;46.32017116876137;fr -Coppet;1296;0;Coppet;5712;VD;6.193095613657732;46.315876571838515;fr -Founex;1297;0;Coppet;5712;VD;6.187859139285755;46.328464504323264;fr -Crans VD;1299;0;Crans (VD);5713;VD;6.206368099556037;46.355900152777195;fr -Crassier;1263;0;Crassier;5714;VD;6.163789355027043;46.37427462304961;fr -Duillier;1266;0;Duillier;5715;VD;6.2330398059002095;46.40897013262043;fr -Eysins;1262;0;Eysins;5716;VD;6.204703495960405;46.37930796662885;fr -Founex;1297;0;Founex;5717;VD;6.192731938409835;46.33292639322101;fr -Genolier;1272;0;Genolier;5718;VD;6.217926859319581;46.434659061025975;fr -Gingins;1276;0;Gingins;5719;VD;6.179701080264371;46.409485315475024;fr -Givrins;1271;0;Givrins;5720;VD;6.202121406548571;46.429262926823625;fr -Genolier;1272;0;Givrins;5720;VD;6.199161910226771;46.43803120706339;fr -Gland;1196;0;Gland;5721;VD;6.265217410846858;46.42369574166649;fr -Grens;1274;3;Grens;5722;VD;6.192073912430265;46.39495064760147;fr -Versoix;1290;0;Mies;5723;VD;6.1572541320523415;46.29877622031465;fr -Mies;1295;1;Mies;5723;VD;6.170929378778225;46.30540209455971;fr -Nyon;1260;0;Nyon;5724;VD;6.238007696509395;46.38081668522332;fr -Prangins;1197;0;Prangins;5725;VD;6.249859646178536;46.3945290131721;fr -Nyon;1260;0;Prangins;5725;VD;6.239614778864559;46.39382495930762;fr -Chéserex;1275;0;La Rippe;5726;VD;6.147547124850314;46.398656834529305;fr -La Rippe;1278;0;La Rippe;5726;VD;6.150265160042033;46.38168934255325;fr -St-Cergue;1264;0;Saint-Cergue;5727;VD;6.158796852282726;46.44794740604952;fr -La Cure;1265;0;Saint-Cergue;5727;VD;6.075449919797972;46.463683338246824;fr -Gingins;1276;0;Saint-Cergue;5727;VD;6.175374669706856;46.42630216017629;fr -Signy;1274;1;Signy-Avenex;5728;VD;6.202099312638785;46.39103259303026;fr -Tannay;1295;2;Tannay;5729;VD;6.176231826986923;46.30881885544907;fr -Trélex;1270;0;Trélex;5730;VD;6.203947598107373;46.41321734999385;fr -Le Vaud;1261;33;Le Vaud;5731;VD;6.2345897141133495;46.47729882352229;fr -Vich;1267;1;Vich;5732;VD;6.249666484355362;46.429332348921;fr -L'Abergement;1355;0;L'Abergement;5741;VD;6.489411675895427;46.75438676978326;fr -Lignerolle;1357;0;L'Abergement;5741;VD;6.446966402824347;46.76517782547939;fr -Agiez;1352;0;Agiez;5742;VD;6.50679751987618;46.7182530762287;fr -Arnex-sur-Orbe;1321;0;Arnex-sur-Orbe;5743;VD;6.51919553730667;46.69324481932202;fr -Ballaigues;1338;0;Ballaigues;5744;VD;6.414753435044086;46.72924650780658;fr -Baulmes;1446;0;Baulmes;5745;VD;6.518266849194946;46.79093106467536;fr -L'Auberson;1454;0;Baulmes;5745;VD;6.450016342683598;46.79905680637395;fr -Bavois;1372;0;Bavois;5746;VD;6.565619801323251;46.68535327657071;fr -Bofflens;1353;0;Bofflens;5747;VD;6.498897652672038;46.70309865283983;fr -Bretonnières;1329;0;Bretonnières;5748;VD;6.475198382923545;46.71212945154636;fr -Chavornay;1373;0;Chavornay;5749;VD;6.57053574220182;46.70143640041541;fr -Corcelles-sur-Chavornay;1374;0;Chavornay;5749;VD;6.60004691820436;46.70375158322965;fr -Essert-Pittet;1435;0;Chavornay;5749;VD;6.583861630769351;46.727784228845074;fr -Les Clées;1356;0;Les Clées;5750;VD;6.462759159417622;46.731541072777105;fr -La Russille;1356;2;Les Clées;5750;VD;6.47855070633468;46.73602343427968;fr -Croy;1322;0;Croy;5752;VD;6.476727026524506;46.69432687896354;fr -Juriens;1326;0;Juriens;5754;VD;6.448918823717644;46.69129750385241;fr -Lignerolle;1357;0;Lignerolle;5755;VD;6.456390320676636;46.740098101274434;fr -Montcherand;1354;0;Montcherand;5756;VD;6.510630548625879;46.732659813172084;fr -Orbe;1350;0;Orbe;5757;VD;6.5329880387085755;46.72460188786452;fr -La Praz;1148;6;La Praz;5758;VD;6.427087807051279;46.66772274570454;fr -Premier;1324;0;Premier;5759;VD;6.445239782639779;46.70446890199045;fr -Rances;1439;0;Rances;5760;VD;6.530928939844625;46.76119696054262;fr -Romainmôtier;1323;0;Romainmôtier-Envy;5761;VD;6.4614475275413;46.69349020371541;fr -Sergey;1355;2;Sergey;5762;VD;6.4997172884034775;46.75073913392183;fr -Valeyres-sous-Rances;1358;0;Valeyres-sous-Rances;5763;VD;6.5193389472895635;46.75192075318694;fr -Vallorbe;1337;0;Vallorbe;5764;VD;6.380037928705141;46.712902690035165;fr -Vaulion;1325;0;Vaulion;5765;VD;6.390390888542182;46.689224572698556;fr -Champvent;1443;0;Vuiteboeuf;5766;VD;6.570844277502491;46.796344615783156;fr -Vuiteboeuf;1445;0;Vuiteboeuf;5766;VD;6.5498618425674735;46.8070790424925;fr -Corcelles-le-Jorat;1082;0;Corcelles-le-Jorat;5785;VD;6.741519196722334;46.6064819196153;fr -Hermenches;1513;0;Corcelles-le-Jorat;5785;VD;6.744824272940894;46.6227239640516;fr -Maracon;1613;0;Maracon;5790;VD;6.871015173491037;46.54966957589982;fr -Montpreveyres;1081;0;Montpreveyres;5792;VD;6.748185532493411;46.584239438411615;fr -Ropraz;1088;0;Ropraz;5798;VD;6.751667476664913;46.61495678463019;fr -Servion;1077;0;Servion;5799;VD;6.785343875652941;46.578082912326565;fr -Les Cullayes;1080;0;Servion;5799;VD;6.751457519993697;46.5732219351106;fr -Carrouge VD;1084;0;Vulliens;5803;VD;6.788527337758032;46.60122157814123;fr -Vulliens;1085;0;Vulliens;5803;VD;6.796690770434454;46.62167001178017;fr -Montaubion-Chardonney;1041;22;Jorat-Menthue;5804;VD;6.714327674025997;46.64707596275731;fr -Villars-Tiercelin;1058;0;Jorat-Menthue;5804;VD;6.704435509870496;46.62699109496191;fr -Peney-le-Jorat;1059;0;Jorat-Menthue;5804;VD;6.727597250985782;46.63395689953683;fr -Villars-Mendraz;1061;0;Jorat-Menthue;5804;VD;6.729372117801289;46.64734150802138;fr -Sottens;1062;0;Jorat-Menthue;5804;VD;6.742109765463203;46.65548539560639;fr -Peyres-Possens;1063;4;Jorat-Menthue;5804;VD;6.71811924031036;46.65935981800187;fr -Essertes;1078;0;Oron;5805;VD;6.789137077362502;46.5624393331088;fr -Palézieux;1607;0;Oron;5805;VD;6.837782561514889;46.542564961977185;fr -Palézieux-Village;1607;1;Oron;5805;VD;6.830459260575538;46.55669505994926;fr -Les Tavernes;1607;3;Oron;5805;VD;6.810619535332795;46.554836337184184;fr -Les Thioleyres;1607;4;Oron;5805;VD;6.81195397363982;46.53968080827498;fr -Oron-le-Châtel;1608;0;Oron;5805;VD;6.8376342740376925;46.57472724787077;fr -Bussigny-sur-Oron;1608;2;Oron;5805;VD;6.8629169890600705;46.56967571853706;fr -Chesalles-sur-Oron;1608;3;Oron;5805;VD;6.8535857796195865;46.576667251463185;fr -Oron-la-Ville;1610;0;Oron;5805;VD;6.827282002764362;46.57048413741958;fr -Châtillens;1610;1;Oron;5805;VD;6.8169490240041934;46.56787171420856;fr -Vuibroye;1610;2;Oron;5805;VD;6.805388329660015;46.57200114884409;fr -Ecoteaux;1612;0;Oron;5805;VD;6.862315583600141;46.54573851008749;fr -Ferlens VD;1076;0;Jorat-Mézières;5806;VD;6.7856883043342195;46.588971051104856;fr -Mézières VD;1083;0;Jorat-Mézières;5806;VD;6.771217164595201;46.59523305326477;fr -Carrouge VD;1084;0;Jorat-Mézières;5806;VD;6.775235965880082;46.60478365009318;fr -Champtauroz;1537;0;Champtauroz;5812;VD;6.787779927123177;46.76020202452777;fr -Chevroux;1545;0;Chevroux;5813;VD;6.9072408448645435;46.8875613917459;fr -Corcelles-près-Payerne;1562;0;Corcelles-près-Payerne;5816;VD;6.96121215618023;46.83163995644573;fr -Cousset;1774;0;Corcelles-près-Payerne;5816;VD;6.970752288915997;46.82744527161718;fr -Grandcour;1543;0;Grandcour;5817;VD;6.930484386854582;46.87190466301284;fr -Henniez;1525;0;Henniez;5819;VD;6.884056163999359;46.74138880660664;fr -Missy;1565;0;Missy;5821;VD;6.9703996725051285;46.88037917856707;fr -Payerne;1530;0;Payerne;5822;VD;6.9377683629732285;46.82073548737413;fr -Vers-chez-Perrin;1551;0;Payerne;5822;VD;6.942666500235573;46.79641840292431;fr -Corcelles-près-Payerne;1562;0;Payerne;5822;VD;6.947088655129768;46.844895893929255;fr -Trey;1552;0;Trey;5827;VD;6.925910152773023;46.770266121625625;fr -Treytorrens (Payerne);1538;0;Treytorrens (Payerne);5828;VD;6.800867797363455;46.771136728256096;fr -Sédeilles;1554;0;Villarzel;5830;VD;6.932869123514254;46.74939464924298;fr -Rossens VD;1554;2;Villarzel;5830;VD;6.922380004014524;46.735084709511604;fr -Villarzel;1555;0;Villarzel;5830;VD;6.912689473689295;46.74888867193896;fr -Nuvilly;1485;0;Valbroye;5831;VD;6.840409886403305;46.77724617994703;fr -Granges-près-Marnand;1523;0;Valbroye;5831;VD;6.889627368520508;46.75994898643699;fr -Marnand;1524;0;Valbroye;5831;VD;6.901122039806487;46.75611240470168;fr -Seigneux;1525;2;Valbroye;5831;VD;6.878532686097362;46.72810378340457;fr -Sassel;1534;0;Valbroye;5831;VD;6.8576526412949965;46.77723914496372;fr -Combremont-le-Grand;1535;0;Valbroye;5831;VD;6.818211291179247;46.76192725803924;fr -Combremont-le-Petit;1536;0;Valbroye;5831;VD;6.809187334473385;46.74944586908187;fr -Villars-Bramard;1682;4;Valbroye;5831;VD;6.898546582322073;46.71839438028355;fr -Cerniaz VD;1682;5;Valbroye;5831;VD;6.895993085893725;46.72720562349762;fr -Rougemont;1659;0;Château-d'Oex;5841;VD;7.179726748461626;46.475679954571675;fr -Flendruz;1659;2;Château-d'Oex;5841;VD;7.160606718144924;46.51421071197573;fr -Château-d'Oex;1660;0;Château-d'Oex;5841;VD;7.129430265900451;46.47274682185626;fr -Les Moulins;1660;2;Château-d'Oex;5841;VD;7.106659236618919;46.46018526361332;fr -L'Etivaz;1660;3;Château-d'Oex;5841;VD;7.147835770606828;46.42457986591174;fr -La Lécherette;1660;4;Château-d'Oex;5841;VD;7.106278731983703;46.421303402710045;fr -Rossinière;1658;0;Rossinière;5842;VD;7.0811729716953;46.46635916998345;fr -La Tine;1658;2;Rossinière;5842;VD;7.049509808834476;46.4688405730577;fr -Rougemont;1659;0;Rougemont;5843;VD;7.206249159051167;46.48755383797859;fr -Flendruz;1659;2;Rougemont;5843;VD;7.182473924471437;46.48348357486591;fr -Allaman;1165;0;Allaman;5851;VD;6.395306004906811;46.47084026378792;fr -Bursinel;1195;3;Bursinel;5852;VD;6.304185247365561;46.43835033919052;fr -Bursins;1183;0;Bursins;5853;VD;6.289859079170312;46.45310161723624;fr -Burtigny;1268;2;Bursins;5853;VD;6.278686817770839;46.46273975113421;fr -Burtigny;1268;2;Burtigny;5854;VD;6.259267692183358;46.464912065790614;fr -Dully;1195;2;Dully;5855;VD;6.294776992454275;46.429364350287834;fr -Rolle;1180;0;Essertines-sur-Rolle;5856;VD;6.3209713899184825;46.46927883537276;fr -Tartegnin;1180;2;Essertines-sur-Rolle;5856;VD;6.318584980896995;46.46642067500477;fr -Mont-sur-Rolle;1185;0;Essertines-sur-Rolle;5856;VD;6.324421820045901;46.4641416479574;fr -Essertines-sur-Rolle;1186;0;Essertines-sur-Rolle;5856;VD;6.317898286550734;46.49314508832213;fr -Rolle;1180;0;Gilly;5857;VD;6.317548818194941;46.44928385471585;fr -Gilly;1182;0;Gilly;5857;VD;6.300270816269476;46.459222591049134;fr -Bursins;1183;0;Gilly;5857;VD;6.298801988824418;46.447006633903236;fr -Essertines-sur-Rolle;1186;0;Gilly;5857;VD;6.299315090777565;46.47837018015602;fr -Bursinel;1195;3;Gilly;5857;VD;6.309472423918349;46.44825327406641;fr -Luins;1184;0;Luins;5858;VD;6.272738165664107;46.44643127151621;fr -Mont-sur-Rolle;1185;0;Mont-sur-Rolle;5859;VD;6.336958049696008;46.470937463258934;fr -Perroy;1166;0;Perroy;5860;VD;6.3654060479946875;46.467592529042825;fr -Rolle;1180;0;Rolle;5861;VD;6.336176693739728;46.45856526915113;fr -Tartegnin;1180;2;Tartegnin;5862;VD;6.31506720188343;46.46637885151973;fr -Vinzel;1184;1;Vinzel;5863;VD;6.278879408137836;46.44816118884842;fr -Burtigny;1268;2;Vinzel;5863;VD;6.272015512523203;46.456209991473926;fr -Le Pont;1342;0;L'Abbaye;5871;VD;6.331536478285278;46.664592817844145;fr -L'Abbaye;1344;0;L'Abbaye;5871;VD;6.319602800011451;46.65009657595969;fr -Les Bioux;1346;0;L'Abbaye;5871;VD;6.274294875974365;46.622179949943586;fr -L'Orient;1341;0;Le Chenit;5872;VD;6.238369136569592;46.600942292473135;fr -Le Sentier;1347;0;Le Chenit;5872;VD;6.231984038865399;46.608316050905316;fr -Le Solliat;1347;1;Le Chenit;5872;VD;6.234500777218393;46.61975700524395;fr -Le Brassus;1348;0;Le Chenit;5872;VD;6.210152396823774;46.58188392416693;fr -Les Charbonnières;1343;0;Le Lieu;5873;VD;6.313467027395845;46.666756107770254;fr -Le Lieu;1345;0;Le Lieu;5873;VD;6.282085776731286;46.64744795378437;fr -Le Séchey;1345;1;Le Lieu;5873;VD;6.299992633700318;46.66013158888129;fr -Puidoux;1070;0;Chardonne;5882;VD;6.817668759966066;46.50920213922992;fr -Chexbres;1071;0;Chardonne;5882;VD;6.800430665959155;46.48280988802861;fr -St-Saphorin (Lavaux);1071;2;Chardonne;5882;VD;6.802784331119001;46.473727678368434;fr -Granges (Veveyse);1614;0;Chardonne;5882;VD;6.825362056576078;46.508606508573365;fr -Le Mont-Pèlerin;1801;0;Chardonne;5882;VD;6.830194598580664;46.48158488599242;fr -Chardonne;1803;0;Chardonne;5882;VD;6.826986516688092;46.476839826932896;fr -Jongny;1805;0;Chardonne;5882;VD;6.841316970321493;46.48483484234796;fr -Corseaux;1802;0;Corseaux;5883;VD;6.832808624866366;46.47230892476768;fr -Corsier-sur-Vevey;1804;0;Corsier-sur-Vevey;5884;VD;6.8416946530890375;46.47019892647394;fr -Jongny;1805;0;Corsier-sur-Vevey;5884;VD;6.844108370909238;46.47676313718997;fr -Les Monts-de-Corsier;1808;0;Corsier-sur-Vevey;5884;VD;6.876764288971368;46.49949121319002;fr -Fenil-sur-Corsier;1809;0;Corsier-sur-Vevey;5884;VD;6.866179642795736;46.48361043852959;fr -Chardonne;1803;0;Jongny;5885;VD;6.839868972616543;46.4800222149228;fr -Corsier-sur-Vevey;1804;0;Jongny;5885;VD;6.84573997545796;46.47785895814458;fr -Jongny;1805;0;Jongny;5885;VD;6.842134864623355;46.47790665281406;fr -Blonay;1807;0;Montreux;5886;VD;6.895379054808115;46.45608898242968;fr -Clarens;1815;0;Montreux;5886;VD;6.8924828756749354;46.44202711057052;fr -Chailly-Montreux;1816;0;Montreux;5886;VD;6.891991489730312;46.45441725403866;fr -Brent;1817;0;Montreux;5886;VD;6.901438787898431;46.45758831835141;fr -Montreux;1820;0;Montreux;5886;VD;6.912799317644741;46.430832395781565;fr -Territet;1820;5;Montreux;5886;VD;6.923158085039046;46.42679687331625;fr -Chernex;1822;0;Montreux;5886;VD;6.913610559839311;46.44258986281365;fr -Glion;1823;0;Montreux;5886;VD;6.925623491472286;46.4321250802476;fr -Caux;1824;0;Montreux;5886;VD;6.9385943627615925;46.43271390153757;fr -Chamby;1832;0;Montreux;5886;VD;6.913516730670301;46.44930162462911;fr -Villard-sur-Chamby;1832;2;Montreux;5886;VD;6.93138277695342;46.46366437235091;fr -Les Avants;1833;0;Montreux;5886;VD;6.942820853894603;46.45310329883473;fr -La Tour-de-Peilz;1814;0;La Tour-de-Peilz;5889;VD;6.857017230479475;46.45360905669416;fr -Vevey;1800;0;Vevey;5890;VD;6.848151480145751;46.45906041325897;fr -Veytaux;1820;6;Veytaux;5891;VD;6.928819622762824;46.420817291482805;fr -St-Légier-La Chiésaz;1806;0;Blonay - Saint-Légier;5892;VD;6.88398900136044;46.47136709754637;fr -Blonay;1807;0;Blonay - Saint-Légier;5892;VD;6.894408189697142;46.46585583516562;fr -Belmont-sur-Yverdon;1432;0;Belmont-sur-Yverdon;5902;VD;6.623927703419498;46.745527400009394;fr -Ogens;1045;0;Bioley-Magnoux;5903;VD;6.7306186843173395;46.71983998941703;fr -Bioley-Magnoux;1407;4;Bioley-Magnoux;5903;VD;6.711821747344666;46.726884882977636;fr -Chamblon;1436;2;Chamblon;5904;VD;6.606571141035739;46.77854653404299;fr -Champvent;1443;0;Champvent;5905;VD;6.575169350710954;46.78348003373061;fr -Essert-sous-Champvent;1443;2;Champvent;5905;VD;6.584630626055403;46.7931848472172;fr -Villars-sous-Champvent;1443;3;Champvent;5905;VD;6.583230324650328;46.78635842527365;fr -Chavannes-le-Chêne;1464;0;Chavannes-le-Chêne;5907;VD;6.777114062809941;46.776857506239814;fr -Chêne-Pâquier;1464;2;Chêne-Pâquier;5908;VD;6.768789761305213;46.771335505166476;fr -Cheseaux-Noréaz;1400;5;Cheseaux-Noréaz;5909;VD;6.676861323537754;46.78309278926006;fr -Cronay;1406;0;Cronay;5910;VD;6.696382784505356;46.75714146398835;fr -Cheseaux-Noréaz;1400;5;Cuarny;5911;VD;6.673926058430563;46.775620542672;fr -Cuarny;1404;0;Cuarny;5911;VD;6.6888152619094745;46.77007989532826;fr -Démoret;1415;2;Démoret;5912;VD;6.756370327313911;46.74743820222795;fr -Donneloye;1407;0;Donneloye;5913;VD;6.716143435872335;46.7450683923067;fr -Gossens;1407;2;Donneloye;5913;VD;6.70025270974374;46.73931132610343;fr -Mézery-près-Donneloye;1407;3;Donneloye;5913;VD;6.727429146299367;46.74906917495018;fr -Prahins;1408;0;Donneloye;5913;VD;6.7401764062152925;46.735275800746685;fr -Ependes VD;1434;0;Ependes (VD);5914;VD;6.608487082752755;46.7450763784909;fr -Mathod;1438;0;Mathod;5919;VD;6.567301879671287;46.76678467916181;fr -Molondin;1415;0;Molondin;5921;VD;6.748554991902692;46.75973757474461;fr -Montagny-près-Yverdon;1442;0;Montagny-près-Yverdon;5922;VD;6.6122898833516315;46.79300416353951;fr -Oppens;1047;0;Oppens;5923;VD;6.692450926587544;46.714106008144554;fr -Orges;1430;0;Orges;5924;VD;6.58855474690293;46.80801749286424;fr -Orzens;1413;0;Orzens;5925;VD;6.683697281586001;46.72138979097285;fr -Pomy;1405;0;Pomy;5926;VD;6.669473239520766;46.759318859191964;fr -Rovray;1463;0;Rovray;5928;VD;6.765184463256414;46.78449739754238;fr -Suchy;1433;0;Suchy;5929;VD;6.598992652621594;46.72246569294739;fr -Suscévaz;1437;0;Suscévaz;5930;VD;6.577961201495245;46.764234893155184;fr -Treycovagnes;1436;0;Treycovagnes;5931;VD;6.609411450539035;46.77412538342896;fr -Ursins;1412;2;Ursins;5932;VD;6.668219249017883;46.73533814422629;fr -Valeyres-sous-Montagny;1441;0;Valeyres-sous-Montagny;5933;VD;6.608906678617229;46.798940432120745;fr -Valeyres-sous-Ursins;1412;0;Valeyres-sous-Ursins;5934;VD;6.655622992822554;46.74629333199555;fr -Villars-Epeney;1404;2;Villars-Epeney;5935;VD;6.696901578539942;46.78171109434005;fr -Vugelles-La Mothe;1431;0;Vugelles-La Mothe;5937;VD;6.578591555615837;46.8240864340715;fr -Yverdon-les-Bains;1400;0;Yverdon-les-Bains;5938;VD;6.640379842793872;46.778864650433505;fr -Gressy;1432;2;Yverdon-les-Bains;5938;VD;6.635505508855323;46.74799218716234;fr -Yvonand;1462;0;Yvonand;5939;VD;6.745091237603063;46.79822649551775;fr -Brig;3900;0;Brig-Glis;6002;VS;7.9895851169103596;46.316597200499295;de -Gamsen;3900;2;Brig-Glis;6002;VS;7.954881745006182;46.305208488639536;de -Brigerbad;3900;3;Brig-Glis;6002;VS;7.9186579327912945;46.30008283722591;de -Glis;3902;0;Brig-Glis;6002;VS;7.978054044586396;46.31075147936208;de -Eggerberg;3939;0;Eggerberg;6004;VS;7.876986227115338;46.306600637856235;de -Brig;3900;0;Naters;6007;VS;8.000914508799509;46.32339229998595;de -Mund;3903;0;Naters;6007;VS;7.9390678409659685;46.31635503956285;de -Birgisch;3903;1;Naters;6007;VS;7.9569610828571316;46.31661806540868;de -Naters;3904;0;Naters;6007;VS;7.9881493127117995;46.32560930918244;de -Blatten b. Naters;3914;0;Naters;6007;VS;7.983359694473766;46.35786388669255;de -Belalp;3914;1;Naters;6007;VS;7.97462158391509;46.37174890300252;de -Brig;3900;0;Ried-Brig;6008;VS;8.003263824416225;46.31963247041141;de -Rothwald;3901;23;Ried-Brig;6008;VS;8.040834194346104;46.28120989394698;de -Ried-Brig;3911;0;Ried-Brig;6008;VS;8.017136416656498;46.31406780581342;de -Simplon Dorf;3907;0;Simplon;6009;VS;8.056213895087811;46.19588076857639;de -Simplon Hospiz;3907;2;Simplon;6009;VS;8.029105488541589;46.24665429694013;de -Gabi (Simplon);3907;3;Simplon;6009;VS;8.072879534727937;46.18492057677115;de -Brig;3900;0;Termen;6010;VS;8.006060967678293;46.32297112084615;de -Termen;3912;0;Termen;6010;VS;8.020915717940266;46.32806330002086;de -Rosswald;3913;0;Termen;6010;VS;8.040529702741148;46.304147672768494;de -Bitsch;3982;0;Termen;6010;VS;8.016016852840586;46.332229087737204;de -Simplon Dorf;3907;0;Zwischbergen;6011;VS;8.109877528927985;46.22574872916736;de -Gabi (Simplon);3907;3;Zwischbergen;6011;VS;8.074504376428687;46.180731186357406;de -Gondo;3907;4;Zwischbergen;6011;VS;8.140961121872069;46.1957560376008;de -Ardon;1957;0;Ardon;6021;VS;7.252568086301518;46.2104411488254;fr -Riddes;1908;0;Chamoson;6022;VS;7.230299867280405;46.17839227248627;fr -Chamoson;1955;0;Chamoson;6022;VS;7.225019028379226;46.20210342962514;fr -Mayens-de-Chamoson;1955;1;Chamoson;6022;VS;7.181582867165192;46.20590067164422;fr -Les Vérines (Chamoson);1955;2;Chamoson;6022;VS;7.2033872547376605;46.21050854043734;fr -Némiaz (Chamoson);1955;3;Chamoson;6022;VS;7.223501287693774;46.21231891466564;fr -Grugnay (Chamoson);1955;4;Chamoson;6022;VS;7.215926644910232;46.206729155346586;fr -St-Pierre-de-Clages;1955;5;Chamoson;6022;VS;7.237469707087747;46.19224821195775;fr -Vétroz;1963;0;Conthey;6023;VS;7.260732912650494;46.222406568969916;fr -Conthey;1964;0;Conthey;6023;VS;7.304875135654945;46.227350115259476;fr -Savièse;1965;0;Conthey;6023;VS;7.312828403381068;46.30374062028202;fr -St-Séverin;1975;0;Conthey;6023;VS;7.3028554366548155;46.23872386436844;fr -Erde;1976;0;Conthey;6023;VS;7.293331028095262;46.239052115911235;fr -Aven;1976;1;Conthey;6023;VS;7.27234112181462;46.23648589947899;fr -Daillon;1976;2;Conthey;6023;VS;7.306127229813592;46.25611166239829;fr -Veysonnaz;1993;0;Nendaz;6024;VS;7.338291126451534;46.1901788822584;fr -Clèbes (Nendaz);1993;2;Nendaz;6024;VS;7.336477945561453;46.18517923076206;fr -Aproz (Nendaz);1994;2;Nendaz;6024;VS;7.315958020818162;46.20672881578374;fr -Basse-Nendaz;1996;0;Nendaz;6024;VS;7.312678751095369;46.189480135671126;fr -Fey (Nendaz);1996;1;Nendaz;6024;VS;7.268473167783405;46.187364375310295;fr -Bieudron (Nendaz);1996;2;Nendaz;6024;VS;7.27784224501765;46.194745296578695;fr -Condémines (Nendaz);1996;3;Nendaz;6024;VS;7.255823378737566;46.176969361605046;fr -Saclentse;1996;4;Nendaz;6024;VS;7.319744923587644;46.17591816845199;fr -Baar (Nendaz);1996;5;Nendaz;6024;VS;7.329472002363617;46.20470394062068;fr -Beuson (Nendaz);1996;6;Nendaz;6024;VS;7.323724292212815;46.18143443059348;fr -Brignon (Nendaz);1996;7;Nendaz;6024;VS;7.327336309838794;46.189075585285956;fr -Haute-Nendaz;1997;0;Nendaz;6024;VS;7.294445612320387;46.18332517759239;fr -Siviez (Nendaz);1997;1;Nendaz;6024;VS;7.316377094734438;46.135765289129985;fr -Sornard (Nendaz);1997;2;Nendaz;6024;VS;7.3047423313973905;46.18548094915986;fr -Vétroz;1963;0;Vétroz;6025;VS;7.281692659108469;46.22722708679913;fr -Aven;1976;1;Vétroz;6025;VS;7.239149679592358;46.265484154587305;fr -Bourg-St-Pierre;1946;0;Bourg-Saint-Pierre;6032;VS;7.212554391210754;45.949619836750344;fr -Liddes;1945;0;Liddes;6033;VS;7.184741133853141;45.99106451267925;fr -Fontaine Dessus (Liddes);1945;2;Liddes;6033;VS;7.174033997719403;46.00573133140505;fr -Fontaine Dessous (Liddes);1945;3;Liddes;6033;VS;7.167993421763276;46.00996941558346;fr -Dranse (Liddes);1945;4;Liddes;6033;VS;7.1804935738641005;45.989755088005616;fr -Chandonne (Liddes);1945;5;Liddes;6033;VS;7.179724078813686;46.00521340767971;fr -Rive Haute (Liddes);1945;6;Liddes;6033;VS;7.17113191267578;46.006695138719614;fr -Fornex (Liddes);1945;7;Liddes;6033;VS;7.1630968850116625;46.00890202907271;fr -Les Moulins VS (Liddes);1945;8;Liddes;6033;VS;7.168071910855633;46.004338963694835;fr -Vichères (Liddes);1945;9;Liddes;6033;VS;7.1665875066155;45.996487885180585;fr -Palasuit (Liddes);1945;10;Liddes;6033;VS;7.192498556584034;45.98271281780468;fr -Chez Petit (Liddes);1945;11;Liddes;6033;VS;7.178138307351293;45.98752833125666;fr -Petit Vichères (Liddes);1945;12;Liddes;6033;VS;7.162270034939605;45.99080348425938;fr -Orsières;1937;0;Orsières;6034;VS;7.146210437707941;46.031092461391744;fr -Champex-Lac;1938;0;Orsières;6034;VS;7.119148173828239;46.02667508335323;fr -Praz-de-Fort;1943;0;Orsières;6034;VS;7.125481227560095;45.99001394326167;fr -La Fouly VS;1944;0;Orsières;6034;VS;7.097446198204443;45.93199611849921;fr -Sembrancher;1933;0;Sembrancher;6035;VS;7.1505448128022655;46.07821788709354;fr -Chamoille (Sembrancher);1933;3;Sembrancher;6035;VS;7.152547918703028;46.060961589826384;fr -La Garde (Sembrancher);1933;4;Sembrancher;6035;VS;7.146475227402576;46.06515751512425;fr -Chemin;1927;0;Val de Bagnes;6037;VS;7.097238740555881;46.089730278897655;fr -Vens (Sembrancher);1933;2;Val de Bagnes;6037;VS;7.126278990513543;46.08841828662321;fr -Le Châble VS;1934;0;Val de Bagnes;6037;VS;7.214645525457372;46.07940545891346;fr -Bruson;1934;1;Val de Bagnes;6037;VS;7.218426579049948;46.065908510262936;fr -Verbier;1936;0;Val de Bagnes;6037;VS;7.21955565904598;46.094075571106075;fr -Vollèges;1941;0;Val de Bagnes;6037;VS;7.168797207352025;46.08737275112697;fr -Cries (Vollèges);1941;2;Val de Bagnes;6037;VS;7.177052106545876;46.091385356935966;fr -Levron;1942;0;Val de Bagnes;6037;VS;7.162036061135981;46.09797853466951;fr -Versegères;1947;0;Val de Bagnes;6037;VS;7.23392761552034;46.06582658876111;fr -Champsec;1947;5;Val de Bagnes;6037;VS;7.24375522628739;46.056146151062464;fr -Lourtier;1948;0;Val de Bagnes;6037;VS;7.2635626052758475;46.05238483628717;fr -Fionnay;1948;1;Val de Bagnes;6037;VS;7.309540559358413;46.03230309528966;fr -Sarreyer;1948;2;Val de Bagnes;6037;VS;7.249881462634921;46.06189611083965;fr -Bellwald;3997;0;Bellwald;6052;VS;8.160111829445835;46.423638881133016;de -Binn;3996;0;Binn;6054;VS;8.183673103544466;46.365190750593875;de -Ernen;3995;0;Ernen;6056;VS;8.14397104683918;46.39886293768462;de -Ausserbinn;3995;2;Ernen;6056;VS;8.149206534719529;46.38225718710618;de -Mühlebach (Goms);3995;3;Ernen;6056;VS;8.15664183283064;46.40829684054226;de -Steinhaus;3995;4;Ernen;6056;VS;8.17789670497378;46.42183922600843;de -Fiesch;3984;0;Fiesch;6057;VS;8.13408029640711;46.403684608010465;de -Jungfraujoch;3801;33;Fieschertal;6058;VS;7.983347716477719;46.547422450482465;de -Fiesch;3984;0;Fieschertal;6058;VS;8.101571462786268;46.429851965073695;de -Fieschertal;3984;2;Fieschertal;6058;VS;8.143128535931984;46.42442810137102;de -Bellwald;3997;0;Fieschertal;6058;VS;8.144702289066508;46.43261578659893;de -Grengiols;3993;0;Lax;6061;VS;8.105602683017034;46.38068173955498;de -Lax;3994;0;Lax;6061;VS;8.11738200750304;46.38958000983947;de -Ulrichen;3988;0;Obergoms;6076;VS;8.303466193785733;46.50667163853181;de -Obergesteln;3988;2;Obergoms;6076;VS;8.324603903967008;46.514823763050195;de -Oberwald;3999;0;Obergoms;6076;VS;8.348446195353008;46.534582669967165;de -Münster VS;3985;0;Goms;6077;VS;8.265581332277748;46.48707042207149;de -Geschinen;3985;2;Goms;6077;VS;8.280570884622568;46.49544644168475;de -Biel VS;3989;0;Goms;6077;VS;8.217076611801785;46.455783941284956;de -Ritzingen;3989;2;Goms;6077;VS;8.22338801619698;46.4571210442254;de -Selkingen;3989;3;Goms;6077;VS;8.213629272297085;46.454259564980575;de -Niederwald;3989;4;Goms;6077;VS;8.189193266412971;46.43573120602267;de -Blitzingen;3989;5;Goms;6077;VS;8.202234305755528;46.44138903378869;de -Reckingen VS;3998;0;Goms;6077;VS;8.2427202443981;46.46956276227891;de -Gluringen;3998;1;Goms;6077;VS;8.232041425819009;46.464282841609005;de -St-Léonard;1958;0;Ayent;6082;VS;7.415027585267915;46.26259608480319;fr -Fortunau (Ayent);1966;2;Ayent;6082;VS;7.415952535411249;46.285321704195425;fr -Luc (Ayent);1966;3;Ayent;6082;VS;7.418082700879362;46.28280153967691;fr -St-Romain (Ayent);1966;4;Ayent;6082;VS;7.41281318585804;46.28262261706747;fr -Saxonne (Ayent);1966;5;Ayent;6082;VS;7.406914030883616;46.28023175977324;fr -Villa (Ayent);1966;6;Ayent;6082;VS;7.41563064807125;46.27589147979824;fr -La Place (Ayent);1966;7;Ayent;6082;VS;7.412351364115114;46.273978864150045;fr -Botyre (Ayent);1966;8;Ayent;6082;VS;7.4045329002152735;46.27630414639494;fr -Blignou (Ayent);1966;9;Ayent;6082;VS;7.398727580133826;46.27210958552028;fr -Argnou (Ayent);1966;10;Ayent;6082;VS;7.399568811492724;46.26291723472667;fr -Signèse (Ayent);1966;11;Ayent;6082;VS;7.4011097458904285;46.257458496134895;fr -Anzère;1972;0;Ayent;6082;VS;7.396607870528842;46.29618343485562;fr -Arbaz;1974;0;Ayent;6082;VS;7.395620667573151;46.2875091420914;fr -Evolène;1983;0;Evolène;6083;VS;7.4959923991696;46.11305679987192;fr -Lanna;1983;2;Evolène;6083;VS;7.478568879595649;46.12088556928785;fr -Les Haudères;1984;0;Evolène;6083;VS;7.508661823447762;46.08442395770971;fr -La Tour VS;1984;1;Evolène;6083;VS;7.505717551954862;46.097946315665084;fr -La Sage;1985;0;Evolène;6083;VS;7.514429606082198;46.09883475042129;fr -La Forclaz VS;1985;1;Evolène;6083;VS;7.5175454350910735;46.08597173904282;fr -Villa (Evolène);1985;2;Evolène;6083;VS;7.512424319095392;46.10635938590262;fr -Arolla;1986;0;Evolène;6083;VS;7.483231414915171;46.02482793861217;fr -Euseigne;1982;0;Hérémence;6084;VS;7.422313392371634;46.171640893798205;fr -Hérémence;1987;0;Hérémence;6084;VS;7.4045235263483615;46.180538133568696;fr -St-Martin VS;1969;0;Saint-Martin (VS);6087;VS;7.44377699015705;46.172456189261226;fr -Liez (St-Martin);1969;2;Saint-Martin (VS);6087;VS;7.4508964402342475;46.16250929082272;fr -Trogne (St-Martin);1969;3;Saint-Martin (VS);6087;VS;7.45158972392202;46.167854159937725;fr -Suen (St-Martin);1969;4;Saint-Martin (VS);6087;VS;7.436921290418413;46.18145579464538;fr -Eison (St-Martin);1969;5;Saint-Martin (VS);6087;VS;7.466755685444406;46.15351936908285;fr -Euseigne;1982;0;Saint-Martin (VS);6087;VS;7.442194894208193;46.14332174939502;fr -Bramois;1967;0;Vex;6089;VS;7.405850215598042;46.225797084688274;fr -Vex;1981;0;Vex;6089;VS;7.397356856847493;46.21184118566394;fr -Thyon;1988;1;Vex;6089;VS;7.373169211828387;46.18148816049839;fr -Les Collons;1988;2;Vex;6089;VS;7.386178045011673;46.18513974905437;fr -Les Agettes;1992;0;Vex;6089;VS;7.380962553873645;46.20958965616299;fr -Les Mayens-de-Sion;1992;1;Vex;6089;VS;7.381197017031677;46.20203126861733;fr -Vernamiège;1961;0;Mont-Noble;6090;VS;7.437964329016589;46.21015968405985;fr -Mase;1968;0;Mont-Noble;6090;VS;7.431235828020041;46.19489153958595;fr -Nax;1973;0;Mont-Noble;6090;VS;7.427818790780008;46.2285016297058;fr -Vercorin;3967;0;Mont-Noble;6090;VS;7.521950048539993;46.19831664971736;fr -Unterems;3948;0;Agarn;6101;VS;7.6742866361605335;46.28792144191126;de -Agarn;3951;0;Agarn;6101;VS;7.663313713524741;46.296663326994505;de -Albinen;3955;0;Albinen;6102;VS;7.63334870249599;46.340379100624205;de -Ergisch;3947;0;Ergisch;6104;VS;7.713069860405987;46.290975459792826;de -Inden;3953;1;Inden;6109;VS;7.618611538591244;46.34384515833891;de -Niedergampel;3945;1;Leuk;6110;VS;7.685951744433156;46.31144780123113;de -Agarn;3951;0;Leuk;6110;VS;7.6703872341260855;46.29901044463634;de -Susten;3952;0;Leuk;6110;VS;7.6430672866970735;46.30833170011727;de -Leuk Stadt;3953;0;Leuk;6110;VS;7.6350814634788415;46.317369139133405;de -Inden;3953;1;Leuk;6110;VS;7.622862834963262;46.329388300929416;de -Guttet-Feschel;3956;0;Leuk;6110;VS;7.660668885501676;46.31899305037305;de -Erschmatt;3957;0;Leuk;6110;VS;7.692662184119796;46.32153670722972;de -Salgesch;3970;0;Leuk;6110;VS;7.586179783219438;46.305926641831526;de -Leukerbad;3954;0;Leukerbad;6111;VS;7.629260790700122;46.37938722459076;de -Oberems;3948;1;Oberems;6112;VS;7.6949620925526485;46.28147619930132;de -Salgesch;3970;0;Salgesch;6113;VS;7.570781431707039;46.31173143034224;de -Leuk Stadt;3953;0;Varen;6116;VS;7.62146728356318;46.31731333653569;de -Varen;3953;2;Varen;6116;VS;7.607308998404165;46.316526892497095;de -Salgesch;3970;0;Varen;6116;VS;7.591656535883842;46.31170651468381;de -Guttet-Feschel;3956;0;Guttet-Feschel;6117;VS;7.665350846699238;46.324917529761244;de -Gampel;3945;0;Gampel-Bratsch;6118;VS;7.741713117484328;46.315730002221734;de -Niedergampel;3945;1;Gampel-Bratsch;6118;VS;7.714112309381215;46.312213512663426;de -Bratsch;3957;2;Gampel-Bratsch;6118;VS;7.708997276401564;46.32004530021047;de -Steg VS;3940;0;Turtmann-Unterems;6119;VS;7.742769480239165;46.30551542891777;de -Eischoll;3943;0;Turtmann-Unterems;6119;VS;7.739882302459548;46.295999724890386;de -Turtmann;3946;0;Turtmann-Unterems;6119;VS;7.702859822230383;46.301216099193645;de -Gruben;3946;2;Turtmann-Unterems;6119;VS;7.705911138811711;46.21074558651029;de -Unterems;3948;0;Turtmann-Unterems;6119;VS;7.696690811757482;46.292017116851824;de -Agarn;3951;0;Turtmann-Unterems;6119;VS;7.681980121917834;46.29441756526892;de -Chemin;1927;0;Bovernier;6131;VS;7.078385211550413;46.08521298444002;fr -Bovernier;1932;0;Bovernier;6131;VS;7.087412805299337;46.07996265073143;fr -Les Valettes (Bovernier);1932;2;Bovernier;6131;VS;7.074574053018097;46.07565125514208;fr -Fully;1926;0;Fully;6133;VS;7.113703645184003;46.138221596804385;fr -Isérables;1914;0;Isérables;6134;VS;7.245092402872128;46.161497843679136;fr -Haute-Nendaz;1997;0;Isérables;6134;VS;7.253900208411707;46.16623602845828;fr -Ovronnaz;1911;0;Leytron;6135;VS;7.172186525495811;46.19939911805511;fr -Leytron;1912;0;Leytron;6135;VS;7.2146604012521225;46.1878628417876;fr -Produit (Leytron);1912;2;Leytron;6135;VS;7.19474983825247;46.18654133564318;fr -Montagnon (Leytron);1912;3;Leytron;6135;VS;7.192906154818378;46.190330029573396;fr -Dugny (Leytron);1912;4;Leytron;6135;VS;7.182926253956099;46.18932705005605;fr -Vernayaz;1904;0;Martigny;6136;VS;7.048096356310855;46.12921859448401;fr -Charrat;1906;0;Martigny;6136;VS;7.129801616572824;46.123485899072314;fr -Martigny;1920;0;Martigny;6136;VS;7.073760736530098;46.100618640421395;fr -Chemin;1927;0;Martigny;6136;VS;7.072733249138815;46.08607394532486;fr -Martigny;1920;0;Martigny-Combe;6137;VS;7.004851420038421;46.093267215727984;fr -Martigny-Croix;1921;0;Martigny-Combe;6137;VS;7.053963840468771;46.086561621141115;fr -Ravoire;1928;0;Martigny-Combe;6137;VS;7.046008021997069;46.097160992197395;fr -Riddes;1908;0;Riddes;6139;VS;7.220397364676841;46.16866445379732;fr -Auddes-sur-Riddes;1914;2;Riddes;6139;VS;7.244082421248077;46.154421345115445;fr -La Tzoumaz;1918;0;Riddes;6139;VS;7.235581015338636;46.1442506512889;fr -Saillon;1913;0;Saillon;6140;VS;7.184742033903402;46.171378959509966;fr -Saxon;1907;0;Saxon;6141;VS;7.180756670424969;46.1453358685022;fr -Trient;1929;0;Trient;6142;VS;6.994749281258012;46.056005434267945;fr -Champéry;1874;0;Champéry;6151;VS;6.870265228961153;46.17828605626536;fr -Collombey;1868;0;Collombey-Muraz;6152;VS;6.934285230104127;46.253149809266304;fr -Collombey;1868;0;Collombey-Muraz;6152;VS;6.946357204847805;46.26798982210981;fr -Troistorrents;1872;0;Collombey-Muraz;6152;VS;6.9226272269471165;46.25605257753919;fr -Muraz (Collombey);1893;0;Collombey-Muraz;6152;VS;6.925764110753536;46.28020212105689;fr -Monthey;1870;0;Monthey;6153;VS;6.946996349593051;46.25269662181621;fr -Monthey;1870;0;Monthey;6153;VS;6.815222333850122;46.207043469702036;fr -Choëx;1871;0;Monthey;6153;VS;6.960992504581979;46.24358690901245;fr -Les Giettes;1871;2;Monthey;6153;VS;6.962374520441982;46.22497216321493;fr -Bouveret;1897;0;Port-Valais;6154;VS;6.8511892723358105;46.384737924208956;fr -Les Evouettes;1897;3;Port-Valais;6154;VS;6.876993876210577;46.362477845560754;fr -St-Gingolph;1898;0;Port-Valais;6154;VS;6.841897258117005;46.380276430557814;fr -St-Gingolph;1898;0;Saint-Gingolph;6155;VS;6.8040149644688475;46.392595930301226;fr -Les Giettes;1871;2;Troistorrents;6156;VS;6.934307143449393;46.22436167290547;fr -Troistorrents;1872;0;Troistorrents;6156;VS;6.919014793731514;46.22976021631569;fr -Morgins;1875;0;Troistorrents;6156;VS;6.857478412142252;46.237225862052156;fr -Val-d'Illiez;1873;0;Val-d'Illiez;6157;VS;6.893094753540793;46.204449871426306;fr -Champoussin;1873;2;Val-d'Illiez;6157;VS;6.864185158766531;46.209307580846826;fr -Les Crosets;1873;3;Val-d'Illiez;6157;VS;6.839315437798484;46.185542007738476;fr -Vionnaz;1895;0;Vionnaz;6158;VS;6.899649505473624;46.30898120098612;fr -Torgon;1899;0;Vionnaz;6158;VS;6.8764319154909215;46.31976216027535;fr -Vouvry;1896;0;Vouvry;6159;VS;6.886023203442387;46.33542907107;fr -Miex;1896;2;Vouvry;6159;VS;6.863656833888342;46.33845551166295;fr -Les Evouettes;1897;3;Vouvry;6159;VS;6.880543236993984;46.355174269511046;fr -Bister;3983;2;Bister;6172;VS;8.066105962098892;46.36187853246685;de -Blatten b. Naters;3914;0;Bitsch;6173;VS;8.001643917094047;46.36540132839397;de -Bitsch;3982;0;Bitsch;6173;VS;8.017237045291322;46.3360033347179;de -Grengiols;3993;0;Grengiols;6177;VS;8.093490650118937;46.3717829703639;de -Binn;3996;0;Grengiols;6177;VS;8.174408769781706;46.340570055735924;de -Goppisberg;3983;4;Riederalp;6181;VS;8.050528968198622;46.371523410975996;de -Greich;3983;5;Riederalp;6181;VS;8.03941857934939;46.36645648891943;de -Ried-Mörel;3986;0;Riederalp;6181;VS;8.033368351238794;46.356593446224565;de -Riederalp;3987;0;Riederalp;6181;VS;8.027722836023205;46.377572351399316;de -Ausserberg;3938;0;Ausserberg;6191;VS;7.851100174477476;46.31433512133436;de -St. German;3942;3;Ausserberg;6191;VS;7.825984183898441;46.31778537691957;de -Blatten (Lötschen);3919;0;Blatten;6192;VS;7.81938094132358;46.42044016431107;de -Bürchen;3935;0;Bürchen;6193;VS;7.8164280339851215;46.28229821571667;de -Eischoll;3943;0;Eischoll;6194;VS;7.779264456060321;46.29478191024971;de -Ferden;3916;0;Ferden;6195;VS;7.759402114970393;46.39393770097724;de -Goppenstein;3917;2;Ferden;6195;VS;7.754931770588264;46.368000497733846;de -Kippel;3917;0;Kippel;6197;VS;7.773366612573313;46.39898810400208;de -Steg VS;3940;0;Niedergesteln;6198;VS;7.755258988697181;46.30735953172506;de -Raron;3942;0;Niedergesteln;6198;VS;7.789697688089494;46.30278209597945;de -Niedergesteln;3942;2;Niedergesteln;6198;VS;7.781780669737697;46.31288224097408;de -Eischoll;3943;0;Niedergesteln;6198;VS;7.7496836619594385;46.302058542169505;de -Hohtenn;3949;0;Niedergesteln;6198;VS;7.797978131016313;46.35541916635614;de -Raron;3942;0;Raron;6199;VS;7.800127578711266;46.31136131434034;de -Niedergesteln;3942;2;Raron;6199;VS;7.82621920970944;46.35768055414514;de -St. German;3942;3;Raron;6199;VS;7.8209303682506395;46.31228628653356;de -Raron;3942;0;Unterbäch;6201;VS;7.7965922912323995;46.30047051810902;de -Unterbäch VS;3944;0;Unterbäch;6201;VS;7.800292920774198;46.284876989019445;de -Wiler (Lötschen);3918;0;Wiler (Lötschen);6202;VS;7.783561471129173;46.40420582224776;de -Mörel;3983;0;Mörel-Filet;6203;VS;8.0446302528179;46.35597415570504;de -Filet;3983;3;Mörel-Filet;6203;VS;8.052511578539768;46.36107886224234;de -Steg VS;3940;0;Steg-Hohtenn;6204;VS;7.7469713998413;46.314970293338625;de -Hohtenn;3949;0;Steg-Hohtenn;6204;VS;7.756349049694174;46.318650824112844;de -Goppisberg;3983;4;Bettmeralp;6205;VS;8.056559429112108;46.37183416755863;de -Betten;3991;0;Bettmeralp;6205;VS;8.069449382400128;46.37680504136696;de -Bettmeralp;3992;0;Bettmeralp;6205;VS;8.062584053315772;46.39010166377326;de -Martisberg;3994;2;Bettmeralp;6205;VS;8.099969900898893;46.38571065192288;de -Collonges;1903;0;Collonges;6211;VS;7.033932316278164;46.17162530827555;fr -Dorénaz;1905;0;Dorénaz;6212;VS;7.041856659106228;46.148926289348175;fr -Evionnaz;1902;0;Evionnaz;6213;VS;7.02358267236199;46.178468007938214;fr -Finhaut;1925;0;Finhaut;6214;VS;6.974126422326267;46.082413834367046;fr -Le Châtelard VS;1925;1;Finhaut;6214;VS;6.956749684428879;46.05799243738604;fr -Massongex;1869;0;Massongex;6215;VS;6.989587773639975;46.24263881488182;fr -Monthey;1870;0;Massongex;6215;VS;6.972027186418719;46.24454506644819;fr -Les Giettes;1871;2;Massongex;6215;VS;6.963373850224195;46.218956050105646;fr -Vérossaz;1891;11;Massongex;6215;VS;6.9887802638186045;46.22423454200383;fr -St-Maurice;1890;0;Saint-Maurice;6217;VS;7.003067199679312;46.217365325282806;fr -Mex VS;1890;1;Saint-Maurice;6217;VS;6.999566125073558;46.184981232340135;fr -Evionnaz;1902;0;Saint-Maurice;6217;VS;7.029569376056872;46.18479432859637;fr -Salvan;1922;0;Salvan;6218;VS;7.020941556268409;46.120629750611776;fr -Les Granges (Salvan);1922;1;Salvan;6218;VS;7.021887669587512;46.12800488760555;fr -Les Marécottes;1923;0;Salvan;6218;VS;7.009081458025569;46.11252358637176;fr -Le Trétien;1923;2;Salvan;6218;VS;6.99844880859351;46.1010012370918;fr -Vernayaz;1904;0;Vernayaz;6219;VS;7.038748683179195;46.13431014110594;fr -Martigny;1920;0;Vernayaz;6219;VS;7.033558314963782;46.11599980436852;fr -Vérossaz;1891;11;Vérossaz;6220;VS;6.988392425251994;46.210533572208085;fr -Chalais;3966;0;Chalais;6232;VS;7.504636446474167;46.26522927144051;fr -Réchy;3966;1;Chalais;6232;VS;7.497179300959652;46.26173653448263;fr -Vercorin;3967;0;Chalais;6232;VS;7.533137481743038;46.25748806683922;fr -Grône;3979;0;Chalais;6232;VS;7.48175559722699;46.258392588931756;fr -Chippis;3965;0;Chippis;6235;VS;7.5402407502140685;46.28056876851519;fr -Vercorin;3967;0;Grône;6238;VS;7.506868948293127;46.241551437114914;fr -Grône;3979;0;Grône;6238;VS;7.454334163635748;46.251695014314585;fr -Icogne;1977;0;Icogne;6239;VS;7.438547224598805;46.29072702340443;fr -Lens;1978;0;Icogne;6239;VS;7.447166217161571;46.2888990823093;fr -Crans-Montana;3963;0;Icogne;6239;VS;7.486577112433673;46.37065244782137;fr -Crans VS;3963;5;Icogne;6239;VS;7.45294315087956;46.30776663148385;fr -Lens;1978;0;Lens;6240;VS;7.445402632812291;46.27894474482045;fr -Crans-Montana;3963;0;Lens;6240;VS;7.466965210339694;46.30876286622408;fr -Crans VS;3963;5;Lens;6240;VS;7.456742640018829;46.30616157633751;fr -Chermignon-d'en-Bas;3971;1;Lens;6240;VS;7.472571697300793;46.279467834753525;fr -Ollon VS;3971;2;Lens;6240;VS;7.4722721691370175;46.274868755286796;fr -Flanthey;3978;0;Lens;6240;VS;7.4539260768318645;46.2698399562725;fr -St-Léonard;1958;0;Saint-Léonard;6246;VS;7.419764623344002;46.2558951997907;fr -Icogne;1977;0;Saint-Léonard;6246;VS;7.425815487897756;46.26836989653308;fr -Flanthey;3978;0;Saint-Léonard;6246;VS;7.4308777473547805;46.260101238494194;fr -St-Léonard;1958;0;Sierre;6248;VS;7.4451900209360335;46.26088137190327;fr -Sierre;3960;0;Sierre;6248;VS;7.536354241222192;46.29361153305985;fr -Muraz (Sierre);3960;5;Sierre;6248;VS;7.529721560284513;46.297521304004455;fr -Chippis;3965;0;Sierre;6248;VS;7.527667688976725;46.279127337566806;fr -Chalais;3966;0;Sierre;6248;VS;7.512373466100317;46.27235153563446;fr -Réchy;3966;1;Sierre;6248;VS;7.496842750201279;46.26835386826088;fr -Ollon VS;3971;2;Sierre;6248;VS;7.487675854343136;46.27485782261582;fr -Noës;3976;0;Sierre;6248;VS;7.506543144239929;46.280144894290835;fr -Champzabé;3976;2;Sierre;6248;VS;7.498103800928822;46.27845965598873;fr -Granges VS;3977;0;Sierre;6248;VS;7.464568926911881;46.259452186222305;fr -Niouc;3960;4;Anniviers;6252;VS;7.552123697265674;46.2709109109686;fr -Vissoie;3961;21;Anniviers;6252;VS;7.58510852545964;46.21527434812249;fr -St-Luc;3961;22;Anniviers;6252;VS;7.597769855935957;46.220169789162625;fr -Chandolin;3961;23;Anniviers;6252;VS;7.589870314294379;46.25247510357885;fr -Ayer;3961;24;Anniviers;6252;VS;7.6028847301072355;46.17883128755313;fr -Zinal;3961;25;Anniviers;6252;VS;7.626590678506308;46.135840074916906;fr -Grimentz;3961;26;Anniviers;6252;VS;7.576039971007117;46.17898796815283;fr -Mission;3961;27;Anniviers;6252;VS;7.594660450103585;46.192547319334764;fr -St-Jean VS;3961;41;Anniviers;6252;VS;7.584903275621777;46.19642747423346;fr -Sierre;3960;0;Crans-Montana;6253;VS;7.513321264245121;46.28762936200313;fr -Corin-de-la-Crête;3960;2;Crans-Montana;6253;VS;7.50283076251081;46.28452269849179;fr -Loc;3960;3;Crans-Montana;6253;VS;7.511143698207816;46.29347900834189;fr -Crans-Montana;3963;0;Crans-Montana;6253;VS;7.4816840654176895;46.312724588858025;fr -Montana;3963;3;Crans-Montana;6253;VS;7.489975029410551;46.29740476819647;fr -Aminona;3963;4;Crans-Montana;6253;VS;7.525688621949673;46.33259278197487;fr -Salgesch;3970;0;Crans-Montana;6253;VS;7.550619878057684;46.326481751631334;de -Chermignon;3971;0;Crans-Montana;6253;VS;7.47474968125803;46.28683573855481;fr -Chermignon-d'en-Bas;3971;1;Crans-Montana;6253;VS;7.482486927324828;46.281325248999295;fr -Ollon VS;3971;2;Crans-Montana;6253;VS;7.477438577383105;46.27371218369514;fr -Miège;3972;0;Crans-Montana;6253;VS;7.551451793817972;46.33923084625356;fr -Venthône;3973;0;Crans-Montana;6253;VS;7.510147822779167;46.30102949966504;fr -Mollens VS;3974;0;Crans-Montana;6253;VS;7.520808918106462;46.31641613403653;fr -Randogne;3975;0;Crans-Montana;6253;VS;7.510795370064384;46.31299966723151;fr -Noës;3976;0;Crans-Montana;6253;VS;7.506957004165805;46.28371182133079;fr -Champzabé;3976;2;Crans-Montana;6253;VS;7.498270701595305;46.27921410919743;fr -Sierre;3960;0;Noble-Contrée;6254;VS;7.550626499701002;46.302665746225514;fr -Veyras;3968;0;Noble-Contrée;6254;VS;7.537032508249072;46.30244701153277;fr -Miège;3972;0;Noble-Contrée;6254;VS;7.547221323582261;46.31213413527323;fr -Venthône;3973;0;Noble-Contrée;6254;VS;7.531992201550575;46.30774565357256;fr -Arbaz;1974;0;Arbaz;6261;VS;7.383492449368395;46.272265128567504;fr -Sion;1950;0;Grimisuat;6263;VS;7.366197815813801;46.249696057006844;fr -Signèse (Ayent);1966;11;Grimisuat;6263;VS;7.3967394139601845;46.25226474148133;fr -Grimisuat;1971;0;Grimisuat;6263;VS;7.385608034587634;46.25991250191265;fr -Champlan (Grimisuat);1971;2;Grimisuat;6263;VS;7.374040337635154;46.24691959673391;fr -Sion;1950;0;Savièse;6265;VS;7.36318386671017;46.247069998540525;fr -Pont-de-la-Morge (Sion);1962;0;Savièse;6265;VS;7.316203757287209;46.2398264539996;fr -Savièse;1965;0;Savièse;6265;VS;7.349772612262194;46.250772145202895;fr -Sion;1950;0;Sion;6266;VS;7.361994270734104;46.233426125102106;fr -Uvrier;1958;2;Sion;6266;VS;7.412451825705523;46.250753088118174;fr -Pont-de-la-Morge (Sion);1962;0;Sion;6266;VS;7.317123099967439;46.22411991657043;fr -Bramois;1967;0;Sion;6266;VS;7.403950886634168;46.2307537103581;fr -Champlan (Grimisuat);1971;2;Sion;6266;VS;7.370214992246643;46.243800262322544;fr -Salins;1991;0;Sion;6266;VS;7.357153924314344;46.210600232096674;fr -Arvillard (Salins);1991;2;Sion;6266;VS;7.345930020287275;46.210997048896594;fr -Pravidondaz (Salins);1991;3;Sion;6266;VS;7.354252873472855;46.211948946012086;fr -Turin (Salins);1991;4;Sion;6266;VS;7.354082630706126;46.215506926435395;fr -Misériez (Salins);1991;5;Sion;6266;VS;7.345483451105422;46.20714533946851;fr -Les Agettes;1992;0;Sion;6266;VS;7.3791065044316895;46.20818489697178;fr -Les Mayens-de-Sion;1992;1;Sion;6266;VS;7.3641846390800065;46.19262059200774;fr -La Vernaz (Les Agettes);1992;2;Sion;6266;VS;7.371644021098981;46.21041140836868;fr -Crête-à-l'Oeil (Les Agettes);1992;3;Sion;6266;VS;7.370318380621426;46.211326399527664;fr -Veysonnaz;1993;0;Sion;6266;VS;7.348833517623;46.200079540491515;fr -Aproz (Nendaz);1994;2;Sion;6266;VS;7.317888718763461;46.20733820514152;fr -Salins;1991;0;Veysonnaz;6267;VS;7.339066958026998;46.20242268242104;fr -Veysonnaz;1993;0;Veysonnaz;6267;VS;7.33602387813207;46.196065302684126;fr -Visp;3930;0;Baltschieder;6281;VS;7.84843832963399;46.30430403194851;de -Baltschieder;3937;0;Baltschieder;6281;VS;7.864849657454506;46.309447005326405;de -Baltschieder;3937;0;Baltschieder;6281;VS;7.881133662269449;46.37593645951681;de -Saas-Balen;3908;0;Eisten;6282;VS;7.917565101208645;46.17063116979563;de -Eisten;3922;2;Eisten;6282;VS;7.893316238028276;46.20043729760482;de -Kalpetran;3922;1;Embd;6283;VS;7.837919673092075;46.21417810663681;de -Embd;3926;0;Embd;6283;VS;7.828290710921618;46.21498772049198;de -Grächen;3925;0;Grächen;6285;VS;7.8384302989024075;46.19526981458621;de -Lalden;3931;1;Lalden;6286;VS;7.904554773660758;46.299024219002895;de -Randa;3928;0;Randa;6287;VS;7.784353759299935;46.10115186542124;de -Saas-Almagell;3905;0;Saas-Almagell;6288;VS;7.959007694947645;46.09372090614614;de -Saas-Fee;3906;0;Saas-Balen;6289;VS;7.923102823926058;46.122737649930166;de -Saas-Balen;3908;0;Saas-Balen;6289;VS;7.927514425972606;46.15417396119757;de -Saas-Grund;3910;0;Saas-Balen;6289;VS;7.934471376715849;46.12476518889728;de -Saas-Fee;3906;0;Saas-Fee;6290;VS;7.924743754376784;46.107189237629285;de -Saas-Grund;3910;0;Saas-Fee;6290;VS;7.937283869109085;46.11648159376503;de -Saas-Grund;3910;0;Saas-Grund;6291;VS;7.936774249177611;46.124045160518286;de -St. Niklaus VS;3924;0;St. Niklaus;6292;VS;7.803094808254255;46.17774484783004;de -Herbriggen;3927;0;St. Niklaus;6292;VS;7.792348738489756;46.13541984639024;de -Stalden VS;3922;0;Stalden (VS);6293;VS;7.8712100952703565;46.234452159122114;de -Törbel;3923;0;Stalden (VS);6293;VS;7.867163340871623;46.24824259272623;de -Eisten;3922;2;Staldenried;6294;VS;7.898680619349254;46.206867352465956;de -Staldenried;3933;0;Staldenried;6294;VS;7.887666364082242;46.22936072195691;de -Randa;3928;0;Täsch;6295;VS;7.781013927368451;46.08268783714371;de -Täsch;3929;0;Täsch;6295;VS;7.778250136009598;46.06707994042137;de -Törbel;3923;0;Törbel;6296;VS;7.852639380745757;46.236881741273265;de -Visp;3930;0;Visp;6297;VS;7.88118186519991;46.29039599350188;de -Eyholz;3930;2;Visp;6297;VS;7.909022462351266;46.29421641024678;de -Stalden VS;3922;0;Visperterminen;6298;VS;7.881316280811794;46.25377741166891;de -Visp;3930;0;Visperterminen;6298;VS;7.8825112775434665;46.27123236956987;de -Visperterminen;3932;0;Visperterminen;6298;VS;7.900793818262789;46.25810236257733;de -Zeneggen;3934;0;Zeneggen;6299;VS;7.866809984444686;46.27300779450084;de -Zermatt;3920;0;Zermatt;6300;VS;7.746746618727868;46.01951639686414;de -Colombier NE;2013;0;Boudry;6404;NE;6.864526277632623;46.95817587952862;fr -Bôle;2014;0;Boudry;6404;NE;6.829637665941052;46.96557557823747;fr -Areuse;2015;0;Boudry;6404;NE;6.856789352338133;46.95370431074801;fr -Cortaillod;2016;0;Boudry;6404;NE;6.837396773668247;46.94795327217091;fr -Boudry;2017;0;Boudry;6404;NE;6.837102849577027;46.9514220994199;fr -Chambrelien;2019;2;Boudry;6404;NE;6.819329966297001;46.96778137492146;fr -Bevaix;2022;0;Boudry;6404;NE;6.804848836017457;46.94041297941488;fr -Champ-du-Moulin;2149;0;Boudry;6404;NE;6.768312460208091;46.95030954136625;fr -Cortaillod;2016;0;Cortaillod;6408;NE;6.846326435333638;46.94293092751713;fr -Bevaix;2022;0;Cortaillod;6408;NE;6.839593888893841;46.93379870080414;fr -Rochefort;2019;0;Rochefort;6413;NE;6.809946374084252;46.97767568092768;fr -Chambrelien;2019;2;Rochefort;6413;NE;6.812346528161686;46.96734960699619;fr -Corcelles NE;2035;0;Rochefort;6413;NE;6.8380107278469655;46.97951647793367;fr -Montezillon;2037;2;Rochefort;6413;NE;6.837155924200875;46.9866257552725;fr -Noiraigue;2103;0;Rochefort;6413;NE;6.745809496444705;46.95308715094248;fr -Champ-du-Moulin;2149;0;Rochefort;6413;NE;6.774616365004458;46.95989575998343;fr -Fretereules;2149;2;Rochefort;6413;NE;6.766165199211868;46.96184400075461;fr -Brot-Dessous;2149;3;Rochefort;6413;NE;6.747224753566692;46.955701995127;fr -Brot-Plamboz;2318;0;Rochefort;6413;NE;6.768188806939467;46.99098598463226;fr -Neuchâtel;2000;0;Milvignes;6416;NE;6.893390420246287;46.98149045775286;fr -Auvernier;2012;0;Milvignes;6416;NE;6.8772365568116545;46.97778107757657;fr -Colombier NE;2013;0;Milvignes;6416;NE;6.862026751351321;46.966345485570734;fr -Bôle;2014;0;Milvignes;6416;NE;6.840085874897392;46.96617362807175;fr -Areuse;2015;0;Milvignes;6416;NE;6.854318530914221;46.95957512766628;fr -Corcelles NE;2035;0;Milvignes;6416;NE;6.852698624706605;46.98102409776124;fr -Cormondrèche;2036;0;Milvignes;6416;NE;6.874469057094349;46.98023666423316;fr -Bevaix;2022;0;La Grande Béroche;6417;NE;6.8156305434250575;46.93081206225285;fr -Gorgier;2023;0;La Grande Béroche;6417;NE;6.78052829908529;46.90316477152239;fr -St-Aubin-Sauges;2024;0;La Grande Béroche;6417;NE;6.773619731859829;46.895575899749524;fr -Chez-le-Bart;2025;0;La Grande Béroche;6417;NE;6.7858190918434085;46.90123359634231;fr -Montalchez;2027;2;La Grande Béroche;6417;NE;6.745160955987346;46.89744715406812;fr -Fresens;2027;3;La Grande Béroche;6417;NE;6.745919449400579;46.88863362125067;fr -Vaumarcus;2028;0;La Grande Béroche;6417;NE;6.755118170879989;46.87866125886799;fr -Noiraigue;2103;0;La Grande Béroche;6417;NE;6.731576085106192;46.93752176948843;fr -La Chaux-de-Fonds;2300;0;La Chaux-de-Fonds;6421;NE;6.833091498877364;47.10412513412177;fr -La Cibourg;2300;8;La Chaux-de-Fonds;6421;NE;6.87583677504266;47.11652301191079;fr -La Sagne NE;2314;0;La Chaux-de-Fonds;6421;NE;6.845751023591159;47.07110590319868;fr -Le Crêt-du-Locle;2322;0;La Chaux-de-Fonds;6421;NE;6.784502526822367;47.07726576074009;fr -Renan BE;2616;0;La Chaux-de-Fonds;6421;NE;6.866551524952549;47.093053420497355;fr -Les Planchettes;2325;0;Les Planchettes;6422;NE;6.770941264341842;47.1062439405962;fr -La Sagne NE;2314;0;La Sagne;6423;NE;6.799659384729483;47.03937351467349;fr -Les Sagnettes;2124;0;La Brévine;6432;NE;6.600613196904206;46.95193733705534;fr -La Brévine;2406;0;La Brévine;6432;NE;6.607601204115739;46.97982674900652;fr -Les Taillères;2406;2;La Brévine;6432;NE;6.576150518103901;46.9706479658018;fr -La Châtagne;2406;3;La Brévine;6432;NE;6.641022707353094;46.9889267099201;fr -Le Brouillet;2406;4;La Brévine;6432;NE;6.534768451709043;46.950452224802596;fr -Brot-Plamboz;2318;0;Brot-Plamboz;6433;NE;6.745999442640737;46.97922482756201;fr -Le Prévoux;2400;2;Le Cerneux-Péquignot;6434;NE;6.706029373777253;47.03084642085008;fr -La Chaux-du-Milieu;2405;0;Le Cerneux-Péquignot;6434;NE;6.695206492364235;47.01600118773275;fr -La Brévine;2406;0;Le Cerneux-Péquignot;6434;NE;6.612168775384117;46.98726718594315;fr -Le Cerneux-Péquignot;2414;0;Le Cerneux-Péquignot;6434;NE;6.66499687377727;47.016941121424566;fr -Le Prévoux;2400;2;La Chaux-du-Milieu;6435;NE;6.717788350164505;47.03022921251213;fr -La Chaux-du-Milieu;2405;0;La Chaux-du-Milieu;6435;NE;6.7019602566584515;47.01355496466809;fr -La Châtagne;2406;3;La Chaux-du-Milieu;6435;NE;6.663857935120624;46.98322217805776;fr -Le Crêt-du-Locle;2322;0;Le Locle;6436;NE;6.767541914367628;47.07985251016049;fr -Le Locle;2400;0;Le Locle;6436;NE;6.749502061696968;47.058153665713554;fr -Le Prévoux;2400;2;Le Locle;6436;NE;6.702029898411897;47.03790468204061;fr -Les Brenets;2416;0;Le Locle;6436;NE;6.705492703718813;47.06758821754893;fr -Travers;2105;0;Les Ponts-de-Martel;6437;NE;6.667501561775488;46.97302180183419;fr -La Sagne NE;2314;0;Les Ponts-de-Martel;6437;NE;6.753217807307784;47.02435849491687;fr -Les Ponts-de-Martel;2316;0;Les Ponts-de-Martel;6437;NE;6.73159300216057;46.999745184434005;fr -Petit-Martel;2316;2;Les Ponts-de-Martel;6437;NE;6.751830076857996;47.010545292132704;fr -Brot-Plamboz;2318;0;Les Ponts-de-Martel;6437;NE;6.710488303110739;46.97175055758278;fr -St-Blaise;2072;0;Cornaux;6451;NE;7.004639074640075;47.027761270300125;fr -Thielle;2075;1;Cornaux;6451;NE;7.029265901082747;47.02418513478593;fr -Cornaux NE;2087;0;Cornaux;6451;NE;7.020990580441512;47.03794065192663;fr -St-Blaise;2072;0;Cressier (NE);6452;NE;7.000678368514959;47.05551353617064;fr -Cornaux NE;2087;0;Cressier (NE);6452;NE;7.0145339345951365;47.04328749373949;fr -Cressier NE;2088;0;Cressier (NE);6452;NE;7.035685165438432;47.050984599988865;fr -Chaumont;2067;0;Enges;6453;NE;6.994003732739574;47.06826594929744;fr -Enges;2073;0;Enges;6453;NE;7.012308607764392;47.05646446566596;fr -Hauterive NE;2068;0;Hauterive (NE);6454;NE;6.971680995615762;47.01359518083029;fr -Enges;2073;0;Le Landeron;6455;NE;7.0309389730478795;47.071252635104955;fr -La Neuveville;2520;0;Le Landeron;6455;NE;7.079758988736478;47.06548730108097;fr -Lignières;2523;0;Le Landeron;6455;NE;7.041933339814203;47.0720205742354;fr -Le Landeron;2525;0;Le Landeron;6455;NE;7.065008238063487;47.05364598476162;fr -Lignières;2523;0;Lignières;6456;NE;7.065398697080611;47.08077843731001;fr -Neuchâtel;2000;0;Neuchâtel;6458;NE;6.926355820731355;46.99204504135111;fr -Peseux;2034;0;Neuchâtel;6458;NE;6.888644590250457;46.9873062325755;fr -Corcelles NE;2035;0;Neuchâtel;6458;NE;6.876882330734246;46.98560403560769;fr -Cormondrèche;2036;0;Neuchâtel;6458;NE;6.869734466807548;46.98060296363547;fr -Montmollin;2037;0;Neuchâtel;6458;NE;6.8715966205166445;46.998324377646405;fr -Valangin;2042;0;Neuchâtel;6458;NE;6.9070609579516615;47.01616430092844;fr -Chaumont;2067;0;Neuchâtel;6458;NE;6.956490855691593;47.02839612214464;fr -Hauterive NE;2068;0;Neuchâtel;6458;NE;6.967577706373813;47.008670531182155;fr -St-Blaise;2072;0;Saint-Blaise;6459;NE;6.986882187100492;47.01342491007282;fr -Marin-Epagnier;2074;0;La Tène;6461;NE;7.001169593228425;47.009267717056304;fr -Thielle;2075;1;La Tène;6461;NE;7.029667334222878;47.021172162576036;fr -Wavre;2075;2;La Tène;6461;NE;7.022723569124159;47.02709261208209;fr -Gampelen;3236;0;La Tène;6461;NE;7.0381955086652335;46.98014157808134;de -Rochefort;2019;0;Val-de-Ruz;6487;NE;6.803992617940968;47.013523073758726;fr -Montmollin;2037;0;Val-de-Ruz;6487;NE;6.846902255039954;46.99306177646468;fr -Valangin;2042;0;Val-de-Ruz;6487;NE;6.890728454837001;47.01819774466192;fr -Boudevilliers;2043;0;Val-de-Ruz;6487;NE;6.889987927179504;47.028494442050444;fr -Fontaines NE;2046;0;Val-de-Ruz;6487;NE;6.900967406225793;47.04370612025811;fr -Fontainemelon;2052;0;Val-de-Ruz;6487;NE;6.887373157996488;47.05573809103602;fr -La Vue-des-Alpes;2052;2;Val-de-Ruz;6487;NE;6.869655559649039;47.072858955356246;fr -Cernier;2053;0;Val-de-Ruz;6487;NE;6.904561202810044;47.06145647634551;fr -Chézard-St-Martin;2054;0;Val-de-Ruz;6487;NE;6.933175682401243;47.06648500093366;fr -Les Vieux-Prés;2054;2;Val-de-Ruz;6487;NE;6.936452344577276;47.0816067460657;fr -Dombresson;2056;0;Val-de-Ruz;6487;NE;6.960566200282867;47.07278479111374;fr -Villiers;2057;0;Val-de-Ruz;6487;NE;6.971559400610356;47.07465795092898;fr -Le Pâquier NE;2058;0;Val-de-Ruz;6487;NE;6.986810696243151;47.098351087402676;fr -Vilars NE;2063;0;Val-de-Ruz;6487;NE;6.927209073242388;47.0318531080027;fr -Engollon;2063;2;Val-de-Ruz;6487;NE;6.921352944910493;47.03801542557807;fr -Fenin;2063;3;Val-de-Ruz;6487;NE;6.922901526289012;47.0240658890955;fr -Saules;2063;4;Val-de-Ruz;6487;NE;6.939018435225475;47.03838041684588;fr -Savagnier;2065;0;Val-de-Ruz;6487;NE;6.953389344368498;47.047375047858736;fr -Chaumont;2067;0;Val-de-Ruz;6487;NE;6.963724277324146;47.03804622002629;fr -Les Geneveys-sur-Coffrane;2206;0;Val-de-Ruz;6487;NE;6.846607710474101;47.01276720357482;fr -Coffrane;2207;0;Val-de-Ruz;6487;NE;6.862596358846015;47.01024766896023;fr -Les Hauts-Geneveys;2208;0;Val-de-Ruz;6487;NE;6.873628261147986;47.04837429988661;fr -La Sagne NE;2314;0;Val-de-Ruz;6487;NE;6.838485041815589;47.05519214744644;fr -Nods;2518;0;Val-de-Ruz;6487;NE;7.030395775998415;47.12301948327708;fr -Lignières;2523;0;Val-de-Ruz;6487;NE;7.012367392874894;47.10143918756164;fr -Renan BE;2616;0;Val-de-Ruz;6487;NE;6.871670878805889;47.08544640829556;fr -Buttes;2115;0;La Côte-aux-Fées;6504;NE;6.518416632123761;46.86002948994401;fr -La Côte-aux-Fées;2117;0;La Côte-aux-Fées;6504;NE;6.489548597174979;46.866969311561554;fr -Les Verrières;2126;0;Les Verrières;6511;NE;6.478999503894747;46.905074668237916;fr -Le Brouillet;2406;4;Les Verrières;6511;NE;6.487841841006884;46.93619857071537;fr -Noiraigue;2103;0;Val-de-Travers;6512;NE;6.722967061707644;46.95605554577179;fr -Travers;2105;0;Val-de-Travers;6512;NE;6.674701881164737;46.94087475642971;fr -Couvet;2108;0;Val-de-Travers;6512;NE;6.632553337961208;46.925002013906806;fr -Môtiers NE;2112;0;Val-de-Travers;6512;NE;6.611545970122608;46.9119034057072;fr -Boveresse;2113;0;Val-de-Travers;6512;NE;6.600723918105412;46.91643085672277;fr -Fleurier;2114;0;Val-de-Travers;6512;NE;6.58184606354764;46.901340515408684;fr -Buttes;2115;0;Val-de-Travers;6512;NE;6.5520747660689125;46.88954239329343;fr -Mont-de-Buttes;2116;0;Val-de-Travers;6512;NE;6.509184624842392;46.87723472031467;fr -St-Sulpice NE;2123;0;Val-de-Travers;6512;NE;6.562132250127077;46.91109271465624;fr -Les Sagnettes;2124;0;Val-de-Travers;6512;NE;6.598673089626151;46.93913219135872;fr -Les Verrières;2126;0;Val-de-Travers;6512;NE;6.470251282800632;46.954042387115166;fr -Les Bayards;2127;0;Val-de-Travers;6512;NE;6.520135531983882;46.91683861376518;fr -Les Ponts-de-Martel;2316;0;Val-de-Travers;6512;NE;6.686193708060904;46.97285997959167;fr -Brot-Plamboz;2318;0;Val-de-Travers;6512;NE;6.706337252720002;46.96659842527798;fr -Le Brouillet;2406;4;Val-de-Travers;6512;NE;6.503012521486712;46.94923885740446;fr -Aire-la-Ville;1288;0;Aire-la-Ville;6601;GE;6.043391790815784;46.190836678046296;fr -Anières;1247;0;Anières;6602;GE;6.2229046641382775;46.2762209494312;fr -Avully;1237;0;Avully;6603;GE;5.9999549020316945;46.16946844205166;fr -Cartigny;1236;0;Avusy;6604;GE;6.01973555374658;46.162107300584196;fr -Athenaz (Avusy);1285;0;Avusy;6604;GE;6.007261230642001;46.15468669252625;fr -La Croix-de-Rozon;1257;0;Bardonnex;6605;GE;6.136397574163895;46.1452051972968;fr -Perly;1258;0;Bardonnex;6605;GE;6.098123172566586;46.15351737508995;fr -Bellevue;1293;0;Bellevue;6606;GE;6.153296100433153;46.25376841195622;fr -Confignon;1232;0;Bernex;6607;GE;6.075769055508589;46.169366304100706;fr -Bernex;1233;0;Bernex;6607;GE;6.069660358993669;46.173708396702324;fr -Cartigny;1236;0;Bernex;6607;GE;6.04616296317118;46.17183943882948;fr -Soral;1286;0;Bernex;6607;GE;6.05254322943026;46.155787344748575;fr -Carouge GE;1227;0;Carouge (GE);6608;GE;6.139548921001113;46.18498444272909;fr -Les Acacias;1227;4;Carouge (GE);6608;GE;6.138998546131544;46.18851945796631;fr -Cartigny;1236;0;Cartigny;6609;GE;6.0171659839046;46.17380356084019;fr -Céligny;1298;0;Céligny;6610;GE;6.175357688965923;46.34775086189472;fr -Céligny;1298;0;Céligny;6610;GE;6.195091402069503;46.350243493898994;fr -Avully;1237;0;Chancy;6611;GE;5.976194155298392;46.160487273286535;fr -Chancy;1284;0;Chancy;6611;GE;5.971343350672475;46.14969234949853;fr -Athenaz (Avusy);1285;0;Chancy;6611;GE;5.992355236575079;46.15480200002767;fr -Chêne-Bougeries;1224;0;Chêne-Bougeries;6612;GE;6.188610741790914;46.1977453897447;fr -Conches;1231;0;Chêne-Bougeries;6612;GE;6.176606515062948;46.1843854127378;fr -Chêne-Bourg;1225;0;Chêne-Bourg;6613;GE;6.191914852265288;46.19372665847312;fr -Choulex;1244;0;Choulex;6614;GE;6.226591095327677;46.22812771216722;fr -Collex;1239;0;Collex-Bossy;6615;GE;6.120818291192712;46.270705513747195;fr -Versoix;1290;0;Collex-Bossy;6615;GE;6.1386545279004325;46.277259179867514;fr -Vésenaz;1222;0;Collonge-Bellerive;6616;GE;6.199668029226098;46.23754317890777;fr -Collonge-Bellerive;1245;0;Collonge-Bellerive;6616;GE;6.204034162733675;46.25367873597992;fr -Cologny;1223;0;Cologny;6617;GE;6.181208657691199;46.21625929072952;fr -Plan-les-Ouates;1228;0;Confignon;6618;GE;6.102552555879884;46.16989452673126;fr -Confignon;1232;0;Confignon;6618;GE;6.084483885222576;46.17397280183826;fr -Corsier GE;1246;0;Corsier (GE);6619;GE;6.226212082383404;46.26249121156178;fr -La Plaine;1283;0;Dardagny;6620;GE;5.999767876825216;46.178763512566675;fr -Dardagny;1283;1;Dardagny;6620;GE;5.995317201405164;46.19480713485023;fr -Genève;1201;0;Genève;6621;GE;6.1466557892893094;46.21026704673743;fr -Genève;1202;0;Genève;6621;GE;6.148863533439881;46.221461825724454;fr -Genève;1203;0;Genève;6621;GE;6.123611323388353;46.20858287555155;fr -Genève;1204;0;Genève;6621;GE;6.144968053206059;46.20242095486308;fr -Genève;1205;0;Genève;6621;GE;6.143637747530816;46.195228240003885;fr -Genève;1206;0;Genève;6621;GE;6.158811138647352;46.18716015564269;fr -Genève;1207;0;Genève;6621;GE;6.161604516965235;46.207265026490994;fr -Genève;1208;0;Genève;6621;GE;6.1654352750504895;46.19856016397532;fr -Genève;1209;0;Genève;6621;GE;6.124968056115557;46.22186061069509;fr -Petit-Lancy;1213;0;Genève;6621;GE;6.1198225716251295;46.19939851915948;fr -Le Grand-Saconnex;1218;0;Genève;6621;GE;6.1324560557795875;46.23095329603339;fr -Carouge GE;1227;0;Genève;6621;GE;6.13088960569727;46.189167371793715;fr -Les Acacias;1227;4;Genève;6621;GE;6.133148094123065;46.1934969850963;fr -Chambésy;1292;0;Genève;6621;GE;6.147209926224679;46.227442583739396;fr -Genthod;1294;0;Genthod;6622;GE;6.157561613510195;46.26477168391933;fr -Genève;1209;0;Le Grand-Saconnex;6623;GE;6.124357770910489;46.226121273256915;fr -Genève;1215;0;Le Grand-Saconnex;6623;GE;6.106857756676451;46.235189843667605;fr -Cointrin;1216;0;Le Grand-Saconnex;6623;GE;6.113735824588909;46.223946493239836;fr -Le Grand-Saconnex;1218;0;Le Grand-Saconnex;6623;GE;6.124000575196861;46.23243391906411;fr -Gy;1251;0;Gy;6624;GE;6.257596038233397;46.25247237331644;fr -Jussy;1254;0;Gy;6624;GE;6.277267754496198;46.24625344568169;fr -Hermance;1248;0;Hermance;6625;GE;6.244453013237223;46.301388943419425;fr -Jussy;1254;0;Jussy;6626;GE;6.2660265901462;46.23539011342385;fr -Cartigny;1236;0;Laconnex;6627;GE;6.021192972116358;46.16261112855239;fr -Laconnex;1287;0;Laconnex;6627;GE;6.034670755144155;46.154740457090405;fr -Grand-Lancy;1212;0;Lancy;6628;GE;6.120960543844054;46.18236469547561;fr -Petit-Lancy;1213;0;Lancy;6628;GE;6.11724784672731;46.18908208152802;fr -Onex;1213;3;Lancy;6628;GE;6.110384818947465;46.18333820058358;fr -Les Acacias;1227;4;Lancy;6628;GE;6.1264752964729325;46.18954206547133;fr -Plan-les-Ouates;1228;0;Lancy;6628;GE;6.137415273368223;46.168734749647285;fr -Troinex;1256;0;Lancy;6628;GE;6.139992742313116;46.16762153895073;fr -Meinier;1252;0;Meinier;6629;GE;6.234226276318482;46.24655880265358;fr -Vernier;1214;0;Meyrin;6630;GE;6.0705766415733855;46.219782409422336;fr -Genève;1215;0;Meyrin;6630;GE;6.1000155070087;46.22965150305406;fr -Cointrin;1216;0;Meyrin;6630;GE;6.1055217050210056;46.22444562290391;fr -Meyrin;1217;0;Meyrin;6630;GE;6.070661675591116;46.22826745179406;fr -Grand-Lancy;1212;0;Onex;6631;GE;6.106958708550044;46.17600522162175;fr -Onex;1213;3;Onex;6631;GE;6.100958304483036;46.18206118611807;fr -Perly;1258;0;Perly-Certoux;6632;GE;6.087689170917644;46.155993377811285;fr -Grand-Lancy;1212;0;Plan-les-Ouates;6633;GE;6.1007757308708275;46.174377128576836;fr -Plan-les-Ouates;1228;0;Plan-les-Ouates;6633;GE;6.11585914397746;46.168061573755125;fr -Troinex;1256;0;Plan-les-Ouates;6633;GE;6.138436987852658;46.163014613434584;fr -La Croix-de-Rozon;1257;0;Plan-les-Ouates;6633;GE;6.138024457725067;46.15721695718606;fr -Genève;1202;0;Pregny-Chambésy;6634;GE;6.134998261780611;46.23230267754261;fr -Chambésy;1292;0;Pregny-Chambésy;6634;GE;6.146931845121319;46.24069958897081;fr -Presinge;1243;0;Presinge;6635;GE;6.255053063923055;46.21894167517077;fr -Puplinge;1241;0;Puplinge;6636;GE;6.232415891399487;46.20988745516153;fr -Russin;1281;0;Russin;6637;GE;6.014072201756577;46.18753040206896;fr -Vernier;1214;0;Satigny;6638;GE;6.065743278659183;46.21073920052597;fr -Satigny;1242;0;Satigny;6638;GE;6.03141589621667;46.21823078109354;fr -Russin;1281;0;Satigny;6638;GE;6.000865677890518;46.208106202837996;fr -Soral;1286;0;Soral;6639;GE;6.0430533839385685;46.14479365659224;fr -Thônex;1226;0;Thônex;6640;GE;6.198675910262119;46.188270854951995;fr -Veyrier;1255;0;Troinex;6641;GE;6.173427564784782;46.159254318605875;fr -Troinex;1256;0;Troinex;6641;GE;6.148517414303377;46.1611520017722;fr -La Croix-de-Rozon;1257;0;Troinex;6641;GE;6.145577326636074;46.14892998614221;fr -Vandoeuvres;1253;0;Vandoeuvres;6642;GE;6.2025655411278215;46.22120533923856;fr -Genève;1209;0;Vernier;6643;GE;6.113298217989573;46.21831239247193;fr -Vernier;1214;0;Vernier;6643;GE;6.0865340303455975;46.21528817965728;fr -Cointrin;1216;0;Vernier;6643;GE;6.112921822704137;46.22258339064297;fr -Le Lignon;1219;0;Vernier;6643;GE;6.0955000020391585;46.20423658722336;fr -Aïre;1219;10;Vernier;6643;GE;6.098349941914588;46.19992729782162;fr -Châtelaine;1219;12;Vernier;6643;GE;6.110518730720843;46.21206682386804;fr -Les Avanchets;1220;0;Vernier;6643;GE;6.10894451229884;46.22083360663908;fr -Versoix;1290;0;Versoix;6644;GE;6.165301469254077;46.28190598711997;fr -Vessy;1234;0;Veyrier;6645;GE;6.154693879938098;46.17231370511626;fr -Veyrier;1255;0;Veyrier;6645;GE;6.186075896042856;46.166799394330056;fr -Troinex;1256;0;Veyrier;6645;GE;6.162434719012767;46.16365868800883;fr -Boécourt;2856;0;Boécourt;6702;JU;7.215560609120385;47.34898413387936;fr -Montavon;2857;0;Boécourt;6702;JU;7.235974314481685;47.373421959151;fr -Montmelon;2883;0;Boécourt;6702;JU;7.19647318323783;47.352985716309504;fr -Bourrignon;2803;0;Bourrignon;6703;JU;7.243355669425016;47.397873518862234;fr -Châtillon JU;2843;0;Châtillon (JU);6704;JU;7.344841420017821;47.32639564544007;fr -Vicques;2824;0;Courchapoix;6706;JU;7.445325568442685;47.35731332225508;fr -Courchapoix;2825;0;Courchapoix;6706;JU;7.455878302711934;47.34782532933195;fr -Delémont;2800;0;Courrendlin;6708;JU;7.361260743445201;47.35174831118786;fr -Courrendlin;2830;0;Courrendlin;6708;JU;7.379267941852372;47.338358629311706;fr -Vellerat;2830;2;Courrendlin;6708;JU;7.369965601746369;47.320310033731815;fr -Rebeuvelier;2832;0;Courrendlin;6708;JU;7.409375199928265;47.324767919110144;fr -Soyhières;2805;0;Courroux;6709;JU;7.390429932074881;47.38616053581209;fr -Courroux;2822;0;Courroux;6709;JU;7.375115195017095;47.36221564664432;fr -Courcelon;2823;0;Courroux;6709;JU;7.39667577711979;47.36193088255652;fr -Courrendlin;2830;0;Courroux;6709;JU;7.398679935837864;47.33943300961471;fr -Courtételle;2852;0;Courtételle;6710;JU;7.315917183996275;47.34041243768331;fr -Courfaivre;2853;0;Courtételle;6710;JU;7.302662807081092;47.332180821309315;fr -Delémont;2800;0;Delémont;6711;JU;7.343637117508529;47.36469720079255;fr -Mettembert;2806;0;Delémont;6711;JU;7.305466299401224;47.39002610650893;fr -Courtételle;2852;0;Delémont;6711;JU;7.3270512550828455;47.352685521715465;fr -Delémont;2800;0;Develier;6712;JU;7.312025375152359;47.357094364155515;fr -Develier;2802;0;Develier;6712;JU;7.29128174915686;47.35471570629266;fr -Ederswiler;2813;0;Ederswiler;6713;JU;7.335569975669457;47.426698347837664;de -Roggenburg;2814;0;Ederswiler;6713;JU;7.356489888630752;47.41794237196807;de -Mervelier;2827;0;Mervelier;6715;JU;7.503727721925823;47.34425010125599;fr -Mettembert;2806;0;Mettembert;6716;JU;7.319467758447999;47.39789231409255;fr -Movelier;2812;0;Movelier;6718;JU;7.316351739852451;47.41007069760785;fr -Ederswiler;2813;0;Movelier;6718;JU;7.340506680107226;47.4150883017483;de -Bourrignon;2803;0;Pleigne;6719;JU;7.279859308269503;47.396939775590425;fr -Mettembert;2806;0;Pleigne;6719;JU;7.297969677202409;47.394619971815125;fr -Pleigne;2807;0;Pleigne;6719;JU;7.294114789382651;47.40763285916331;fr -Lucelle;2807;1;Pleigne;6719;JU;7.244741717549298;47.42015973155405;fr -Ederswiler;2813;0;Pleigne;6719;JU;7.312729608723329;47.430057323331;de -Roggenburg;2814;0;Pleigne;6719;JU;7.326841449919343;47.439681615689075;de -Rossemaison;2842;0;Rossemaison;6721;JU;7.34274870487232;47.34579519414779;fr -Fornet-Dessus;2718;2;Saulcy;6722;JU;7.149834271021818;47.289887070578885;fr -Saulcy;2873;0;Saulcy;6722;JU;7.154196117067848;47.30225216846655;fr -Soyhières;2805;0;Soyhières;6724;JU;7.3694687784840855;47.391569869506434;fr -Les Ecorcheresses;2748;2;Haute-Sorne;6729;JU;7.247562723058668;47.28927199823792;fr -Courfaivre;2853;0;Haute-Sorne;6729;JU;7.2831906537662805;47.334089897433955;fr -Bassecourt;2854;0;Haute-Sorne;6729;JU;7.244548704175263;47.336259794280004;fr -Glovelier;2855;0;Haute-Sorne;6729;JU;7.199807358555989;47.33161532186605;fr -Undervelier;2863;0;Haute-Sorne;6729;JU;7.224497320220406;47.30357433879062;fr -Soulce;2864;0;Haute-Sorne;6729;JU;7.2706668160087125;47.305250376780144;fr -Vicques;2824;0;Val Terbi;6730;JU;7.416154421028605;47.34849218886108;fr -Corban;2826;0;Val Terbi;6730;JU;7.4780482453410295;47.34809900070371;fr -Montsevelier;2828;0;Val Terbi;6730;JU;7.510356716387254;47.35912440421226;fr -Vermes;2829;0;Val Terbi;6730;JU;7.47805345187227;47.32977358185158;fr -Rebeuvelier;2832;0;Val Terbi;6730;JU;7.433716390207693;47.33042331597753;fr -Le Bémont JU;2360;0;Le Bémont (JU);6741;JU;7.014141008109299;47.26322269383826;fr -Montfaucon;2362;0;Le Bémont (JU);6741;JU;7.062651896319733;47.24641542800364;fr -Les Enfers;2363;0;Le Bémont (JU);6741;JU;7.03361672927332;47.28057017558089;fr -La Ferrière;2333;0;Les Bois;6742;JU;6.895221352359528;47.156041520838755;fr -Les Bois;2336;0;Les Bois;6742;JU;6.905130749147119;47.17660125835869;fr -Les Breuleux;2345;0;Les Breuleux;6743;JU;7.003539481222807;47.212635310331684;fr -La Chaux-des-Breuleux;2345;3;Les Breuleux;6743;JU;7.027469070941448;47.2227036007061;fr -Les Pommerats;2353;0;Les Enfers;6745;JU;7.012332462970955;47.291724331309005;fr -Les Enfers;2363;0;Les Enfers;6745;JU;7.044251614107399;47.288017098472636;fr -Les Genevez JU;2714;0;Les Genevez (JU);6748;JU;7.130366483323472;47.25953835357055;fr -Le Prédame;2714;2;Les Genevez (JU);6748;JU;7.1070347623314785;47.25750558567884;fr -Montfaucon;2362;0;Lajoux (JU);6750;JU;7.106330255174078;47.28176088860273;fr -Lajoux JU;2718;0;Lajoux (JU);6750;JU;7.139376269866916;47.279215855850495;fr -Fornet-Dessus;2718;2;Lajoux (JU);6750;JU;7.1589884552006;47.279101996867084;fr -Montfaucon;2362;0;Montfaucon;6751;JU;7.051073491829011;47.282656403323706;fr -Montfavergier;2362;2;Montfaucon;6751;JU;7.089784839063442;47.30957929082749;fr -Lajoux JU;2718;0;Montfaucon;6751;JU;7.098917555945802;47.271277095375076;fr -Les Emibois;2338;0;Muriaux;6753;JU;6.985928264555792;47.232214277567465;fr -Muriaux;2338;2;Muriaux;6753;JU;6.97829273446233;47.24608394464996;fr -Les Breuleux;2345;0;Muriaux;6753;JU;6.9637254861440745;47.197657183078675;fr -Le Cerneux-Veusil;2345;2;Muriaux;6753;JU;6.962689508378615;47.183822906928455;fr -Les Bois;2336;0;Le Noirmont;6754;JU;6.917090030566827;47.20255114757937;fr -Le Noirmont;2340;0;Le Noirmont;6754;JU;6.95751669716731;47.22646564782677;fr -Les Breuleux;2345;0;Le Noirmont;6754;JU;6.947955745279126;47.1920708408911;fr -Saignelégier;2350;0;Saignelégier;6757;JU;6.995682601134839;47.25573403865833;fr -Les Pommerats;2353;0;Saignelégier;6757;JU;6.986920207599156;47.271603573056;fr -Goumois;2354;0;Saignelégier;6757;JU;6.952570594985191;47.261389064405925;fr -St-Brais;2364;0;Saint-Brais;6758;JU;7.112479040301928;47.3050266382989;fr -Saulcy;2873;0;Saint-Brais;6758;JU;7.125029350864119;47.29627651118658;fr -St-Ursanne;2882;0;Saint-Brais;6758;JU;7.111904018917308;47.32059872285906;fr -Montmelon;2883;0;Saint-Brais;6758;JU;7.134643680408369;47.32861192961575;fr -Epiquerez;2886;0;Saint-Brais;6758;JU;7.104694809064958;47.31956564812912;fr -Soubey;2887;0;Soubey;6759;JU;7.048514255753543;47.30956138886818;fr -Alle;2942;0;Alle;6771;JU;7.128727316607906;47.42725992711788;fr -Beurnevésin;2935;0;Beurnevésin;6773;JU;7.1371704000328915;47.49352687493887;fr -Boncourt;2926;0;Boncourt;6774;JU;7.01322291098763;47.4964344181208;fr -Bonfol;2944;0;Bonfol;6775;JU;7.147485966545556;47.47952799830399;fr -Bure;2915;0;Bure;6778;JU;7.006006426177857;47.440817226732065;fr -Coeuve;2932;0;Coeuve;6781;JU;7.096215612517213;47.45453339800806;fr -Cornol;2952;0;Cornol;6782;JU;7.163826424497274;47.405904793707954;fr -Courchavon;2922;0;Courchavon;6783;JU;7.054918122214483;47.440929665713355;fr -Courgenay;2950;0;Courgenay;6784;JU;7.126216252707597;47.40308435762176;fr -Courtemautruy;2950;2;Courgenay;6784;JU;7.138720687196809;47.395747549489435;fr -Porrentruy;2900;0;Courtedoux;6785;JU;7.049071291864424;47.40958954137518;fr -Courtedoux;2905;0;Courtedoux;6785;JU;7.042542434216465;47.40870546863922;fr -Fahy;2916;0;Fahy;6789;JU;6.9492035665047425;47.417888033925266;fr -Porrentruy;2900;0;Fontenais;6790;JU;7.0765295166513;47.40680986060854;fr -Fontenais;2902;0;Fontenais;6790;JU;7.081091172234214;47.40298396928059;fr -Villars-sur-Fontenais;2903;0;Fontenais;6790;JU;7.0807674782443755;47.38785955051177;fr -Bressaucourt;2904;0;Fontenais;6790;JU;7.036910884998154;47.38768330708634;fr -Grandfontaine;2908;0;Grandfontaine;6792;JU;6.939734143000999;47.39173442356937;fr -Porrentruy;2900;0;Porrentruy;6800;JU;7.076829393136043;47.41589644345257;fr -Vendlincourt;2943;0;Vendlincourt;6806;JU;7.146347783110028;47.45106202891688;fr -Bure;2915;0;Basse-Allaine;6807;JU;7.018210816431114;47.45992917468369;fr -Courtemaîche;2923;0;Basse-Allaine;6807;JU;7.045591920818905;47.45869498719052;fr -Montignez;2924;0;Basse-Allaine;6807;JU;7.05929159154095;47.48703343808432;fr -Buix;2925;0;Basse-Allaine;6807;JU;7.028405447665326;47.4794074120847;fr -St-Ursanne;2882;0;Clos du Doubs;6808;JU;7.1535904760521465;47.36466787377351;fr -Montmelon;2883;0;Clos du Doubs;6808;JU;7.18127725450903;47.354501445110124;fr -Montenol;2884;0;Clos du Doubs;6808;JU;7.151944518330188;47.35286633578944;fr -Epauvillers;2885;0;Clos du Doubs;6808;JU;7.115581003849413;47.33518927887487;fr -Epiquerez;2886;0;Clos du Doubs;6808;JU;7.057910978410388;47.328656862906335;fr -Seleute;2888;0;Clos du Doubs;6808;JU;7.111432819746247;47.366067566133935;fr -Ocourt;2889;0;Clos du Doubs;6808;JU;7.077922057487893;47.351923354694414;fr -Chevenez;2906;0;Haute-Ajoie;6809;JU;7.001274802964321;47.39176259311166;fr -Rocourt;2907;0;Haute-Ajoie;6809;JU;6.9563864816232;47.38926550362676;fr -Réclère;2912;2;Haute-Ajoie;6809;JU;6.923643731444939;47.37565460827057;fr -Roche-d'Or;2912;3;Haute-Ajoie;6809;JU;6.954013289174863;47.36720572370498;fr -Damvant;2914;0;Haute-Ajoie;6809;JU;6.897077366743106;47.37258688442143;fr -Lucelle;2807;1;La Baroche;6810;JU;7.239121706828359;47.42121234500053;fr -Miécourt;2946;0;La Baroche;6810;JU;7.176427433937339;47.426069166897356;fr -Charmoille;2947;0;La Baroche;6810;JU;7.20439873056064;47.42348834444298;fr -Fregiécourt;2953;2;La Baroche;6810;JU;7.197942527925788;47.41168648005722;fr -Pleujouse;2953;3;La Baroche;6810;JU;7.210998808116126;47.41187460398528;fr -Asuel;2954;0;La Baroche;6810;JU;7.211151149569308;47.40197349669311;fr -Damphreux;2933;2;Damphreux-Lugnez;6811;JU;7.102402941641683;47.47685305066094;fr -Lugnez;2933;3;Damphreux-Lugnez;6811;JU;7.097583023128529;47.483289899031355;fr -Gamprin-Bendern;9487;0;Vaduz;7001;;9.508676735401108;47.19302332504054;de -Vaduz;9490;0;Vaduz;7001;;9.52257934773574;47.136252898379574;de -Schaan;9494;0;Vaduz;7001;;9.511178192822474;47.187763139438616;de -Triesenberg;9497;0;Vaduz;7001;;9.59824701758303;47.099084662565325;de -Triesen;9495;0;Triesen;7002;;9.530340725403049;47.106001352407425;de -Balzers;9496;0;Balzers;7003;;9.502347484238989;47.06527492879466;de -Triesenberg;9497;0;Triesenberg;7004;;9.543957719271463;47.11790272128858;de -Schaan;9494;0;Schaan;7005;;9.506298646660415;47.1731134184683;de -Triesenberg;9497;0;Schaan;7005;;9.592538764999224;47.12833919083449;de -Planken;9498;0;Planken;7006;;9.54577301585781;47.18513492531911;de -Nendeln;9485;0;Eschen;7007;;9.544033688573524;47.19836122968354;de -Gamprin-Bendern;9487;0;Eschen;7007;;9.503241330645368;47.19681682335958;de -Eschen;9492;0;Eschen;7007;;9.524218680309875;47.212046863010286;de -Mauren FL;9493;0;Eschen;7007;;9.540692974285557;47.225487687949034;de -Schaanwald;9486;0;Mauren;7008;;9.561856564803879;47.213181789286516;de -Mauren FL;9493;0;Mauren;7008;;9.543808486292788;47.22028381723761;de -Nendeln;9485;0;Gamprin;7009;;9.553839011845744;47.19451666877899;de -Gamprin-Bendern;9487;0;Gamprin;7009;;9.506075274342836;47.21515608877409;de -Ruggell;9491;0;Ruggell;7010;;9.528830277668794;47.24100025808611;de -Schellenberg;9488;0;Schellenberg;7011;;9.54600684065143;47.23136529420569;de diff --git a/mobility/data/README.md b/mobility/data/README.md deleted file mode 100644 index d28c775b..00000000 --- a/mobility/data/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Données utilisées par Mobility -## Données carbone -### Base Carbone -#### Description -La Base Carbone de l'ADEME recense les facteurs d'émissions en France, et est la base de données de référence. Au moment où cette documentation a été mise à jour (avril 2023), c'est la V22 de la Base Carbone qui est utilisée, et nous développons une requête automatique des données à l'aide de l'[API Base Carbone](https://api.gouv.fr/les-api/api_base_carbone). - -#### Variables -Un fichier de mapping permet de faire le lien entre les modes utilisés dans les enquêtes de mobilité et ceux dont les facteurs d'émission sont répertoriés dans la base. - -## Sondages (`surveys`) -### ENTP-2008 -#### Description -L'enquête nationale transports déplacements a été réalisée en 2007-2008. [D'après l'INSEE](https://www.insee.fr/fr/metadonnees/source/serie/s1277), « son objectif est la connaissance des déplacements des ménages résidant en France métropolitaine et de leur usage des moyens de transport tant collectifs qu'individuels, ainsi que la connaissance du parc des véhicules détenus par les ménages et de leur utilisation ». -### Utilisation -Ces données sont utilisées pour échantillonner sur une certaine durée des déplacement représentatifs de ménages, selon leur CSP, leur catégorie d'unité urbaine, leur nombre de voitures et le nombre de personnes au sein du ménage. -#### Variables -Les variables sont décrites dans [PROGEDO](https://data.progedo.fr/studies/doi/10.13144/lil-0634?tab=variables). -#### Conservation -L'équipe Mobility conserve les données détaillées de l'enquête sur [data.gouv.fr](https://www.data.gouv.fr/fr/datasets/donnees-detaillees-de-lenquete-national-transports-et-deplacements-2008/). -C'est ce lien qui est utilisé par le code de Mobility pour récupérer automatiquement les données si elles ne sont pas déjà présentes localement. - -Les données sont disponibles sous Licence Ouverte. - -#### Traitement des données -Les étapes successives de traitement des données sont documentées dans le code. - -### EMP-2019 -L'[enquête de mobilité des personnes](https://www.statistiques.developpement-durable.gouv.fr/resultats-detailles-de-lenquete-mobilite-des-personnes-de-2019) a été réalisée en 2018 et 2019. Malgré son changement de nom, elle reprend la même méthodologie que l'ENTD 2008, et elle est traitée de manière similaire par `mobility`. -#### Variables -Contrairement à l'ENTD 2008, un [document d'accompagnement est disponible](https://www.statistiques.developpement-durable.gouv.fr/sites/default/files/2022-04/mise_a_disposition_tables_emp2019_public_V2.pdf). -#### Conservation -Les données sont également conservées sur [data.gouv.fr](https://www.data.gouv.fr/fr/datasets/donnees-detaillees-de-lenquete-mobilite-des-personnes-2018-2019/). - -Les données sont disponibles sous Licence Ouverte. - -#### Licence -La base est [publiée par l'ADEME](https://www.data.gouv.fr/fr/datasets/base-carbone-r-1/) sous Licence Ouverte. - -## Autres données INSEE -### ESANE -Données d'équipements issues de l'[Élaboration des statistiques annuelles d'entreprises (ÉSANE)](https://www.insee.fr/fr/metadonnees/source/serie/s1188). - -### Base des unités urbaines 2020 -Le fichier `cities_category.csv` reprend la [base des unités urbaines 2020](https://www.insee.fr/fr/information/4802589) permettant de faire le lien entre une commune et sa catégorie au sens INSEE. Ce fichier est stocké directement dans le répertoire et devrait être actualisé si une nouvelle base est publiée (a priori vers 2030). Pour reproduire les résultats de 2008 « dans leur contexte », il pourrait être utile d'utiliser une base plus ancienne (ce qui n'est pas le cas dans la code en avril 2023). - -Le code R (rural) est devenu H (Hors unité urbaine) dans les dernières données, cela est pris en compte par le parseur dans la conversion de l'EMP 2019 au format de l'ENTD 2008. - -![image](https://user-images.githubusercontent.com/105421514/233382976-7c4f9bb8-f773-4532-9942-01122c399586.png) -![image](https://user-images.githubusercontent.com/105421514/233383016-068a3f15-aad3-4408-a633-c05768ec04a1.png) - -# Voir aussi -* [Principes de gestion des données](https://github.com/mobility-team/mobility/tree/main/mobility#gestion-des-données-externes) diff --git a/mobility/data/__init__.py b/mobility/data/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mobility/data/gtfs/gtfs_route_types.xlsx b/mobility/data/gtfs/gtfs_route_types.xlsx deleted file mode 100644 index 65c34e3e0329a2bb03a1cbf19936894c419a6ae3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12507 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 diff --git a/mobility/data/gtfs/routing_tests/standard_routing_tests.csv b/mobility/data/gtfs/routing_tests/standard_routing_tests.csv deleted file mode 100644 index 5e69a012..00000000 --- a/mobility/data/gtfs/routing_tests/standard_routing_tests.csv +++ /dev/null @@ -1,2 +0,0 @@ -lau_origin;lau_destination;name;from;to; -fr-74258;fr-74012;Samoëns to Annemasse with Cars Région 74;Le Sougey;Annemasse Gare;7 diff --git a/mobility/data/insee/esane/equipments_features.xlsx b/mobility/data/insee/esane/equipments_features.xlsx deleted file mode 100644 index 4d58cd76d9fc51f18bfa7516e6593f78ac1e797b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15208 zcmeIZg?;U4px7Ah>IAcXxMpf&_PW`>kZ}^PRJE?)Mkm zJL`F7o>fy--Cfmh)l5ydtmHc|Gyntu3IG5Q0rXGPO|?M)fM_rP02KfQsv%@!?Pz4} zsH5m=YviCs=VE0^m;(k%kp%z+^8erQzt{q$aU;?_3`in(V$VX`v=Xb;{7|eXegh~} za=e|rvHisc8X0D0ZyBLaNP^ku=Im7{6RYk_7h|T?)>id?A^k1#aN)j#ol4rc?DTyD z#~(T{v19Dj)y}feaQPXrb#x+)QvpeK4L$NK!kYpTr8uVO7`#4P>B|Gk$m{)0aK-9{ zoP#S}8`8>a$Q;8(Ge}!gsI%r~l-EbEjQNUni%?K2Q{us~Sq*c(|o(9``o{~sLx7h~{0hF%&Y zCDX$I7j!1}96We8_ahofP|{gItc6I?%SU__u`V)~6!%95IUbTCj{mz)-fdpb!z({{ zA`b_NZhx|rhNGZylhiwx1tmV(eSxGRvriDUE8XlxcAC4HyG{Ni;Y#7u7DZLkSePw2 zv`!*Ab0J)XG(o3=1C5%87liRK*;l<^N^MR5z8qvuP~oI3sIq}Q>o9gA)q5c!{{WsZ zg!A+9bTay&gTBd9xyPU-(ai&nl7cCxS*3o4Jr}X7j-h4em2heY>Wc@hblRXiF$>B) z)5NEN4_Pa{EvBk8Wa?9e?WgXcqj;RJZ$RnN2DW((9|l69LjXWfB0o@PNhZplnuJDX~t6Sc#6Ki%Qoxl}xGb z&C>*R+9^4|R72R(k^phy$4BQhuT{3X3$ezm()85*UPkz7jMDEXZq{B}+w-F=0likC z7V|Mp55fTt7sox`1-ShLr`YZcfGl)}nwaWvOAR!1vq}yd|rNoAM_eT=s7yNI49=%ojM zpBeLtyk@d9reXUYKbXFrS=hRVdl-yt!fZt0VXatTql<(I$>S{tjnD|rDJb5#iW2*JvLRK z8RE2gqERlnSSq()(D+0A_q0?6)oOUxnyx3hQ#1I2a(26SGrTJ!4`H|;)Hd4_V397N z5aW@-vX7`Gk@^eNQP%XuQRXEkH^(bF=F_G#;A3=5WdPM@x`p^^N zr>@+r$)+w#0C$NNtC;AqE}Zj$s`k@WEkW>M+NU-WaLTpl0W_hVv})}rjJ%~ue9??_ zik6m8;~Sl}Zw^_Vi0>oi+hSIIp02Jzr*FXd1TXoCcgpK0h`3Gd7ch7PohOP2NXR9% zsGS@ZF8##y$GT~%sz+}W*azEq20Q$jc|u@<+|^DTv$OW{A&EISntN9+z&Pb(Mlf+E z#!pR(9t!k$p33o*@y~-|B3FA?!O z^{jl8+_{@?sIt6%`Q?w52-RliVr~AJiDKk-9;KaMKyI?gtgwg&;N!uUhGB_r;N-va zBf5?k6rs8$#7cRLqz0C=`cGG*(0^g}PRUa{E_p7r5xJ)4$}bNweTJe;K;O0Rvbz9e zmRnSZRRILx5kS@#3=O<7xKXqAcaTI8ix~QSO&-j6FA6B6m~_I;2uoIV+G=#hEMHi< zs)N;)jY=23;avSV^>SdfJiffnzs)&P?DM?4K7;G4}e(ju4@SYAIL9h?u>u*Kw(uwN&RN>EGD| zxt@&;INh-#{CtOc(?wkvh63h>YI(*DZZmc@_6|z_r0l)lCva4h+YSiVxVqx%tGx*G=X0e+-*+vhPr;keANwxNMAh0=KE ztx0I*79!Knm0;=$8(N$P-W4#lKTAY?-z9Pjb=mrCEaf_G(UtoMw}V$A`M#L-qeqY< zVesH50&mI~hn<|{7NxUIN5Q9I%8r#wnvv@>E`@;Au(5J<&d`)FQ3Ob{{!KYbwfC)xIt6ruFZI-7meqRxZ?S~#w zbb_a>wBGiP^H}0rvFV3S<8zNUJ{KNuj^Tu30o?57G>CE;Xh%(@oR#hCfxEg`d3~BA zs`+9B`$y0qUK(DnB!alL6o^g~Qb)3a$U4tm*C2MnWIH89e6OPTgwdZRYcBZa8UcMOVJun2)axuMfP3b53U=6KJ9tZACYtoz4)wsCIji9be`3sYW9 zM3xBMUb@OxNQtMN_k<(vAClW*?c#17jJUx4K-s7)IyWy;?R@E>@j9C78lfZJaI+o= zO)S%+4TpOlmeM*QkEEj(tD<@@t!f_#-yvzjEw^(mgN#m6dOdksu6 zMKT%Z>6hfSlvbJ9AwFi;%Z1);S`2a>v7NPqXsg>=x;qmui(6hflef|BrFE2=2Gx|0 zW-BWw)ngeLyRV}*V{7Dx$C=4IPxfM;J0NDBU9Z$fB{l>t9CSXJGWsayRqnzBD@p}* zkARo(hsHHqVlussEeUDurrcD1vnU_sRj?1IkHCC52HBA}YPvXXLBFfo9X@8RtG^F( z+2jhRIBL%ZQuA(qQ$_0U!VGMvFKVkHd+Av z#cHFs(SMv9ror@K!LMOyq#Rt)$*N+lyEAg>6T0)Tq9*K`@k9%T+*;j@pj@4wV){$U zNQ=|(tU9c=iT93HIK|nrTej`(i+T%iAPP|p?WC6q_bXr&XX-*ieF3xmKug9inV6q! zOa6>^rp;-!fR8j;uc-TN3=47{l!{gh79E!L%+)GpWa>{6?RixK=knquPhTi(MRjn2d(2!EFo;{ohgH zt|sn4V7s6wGx4sdiSr1Iq8;SYPqVL`hFm(aJGSk_!;&5a`5y1^)OzN-kIq`cYGWF6 zrf>Ji2DrX0NPaAF@<+(fn)&$bbL=2SuFxCR{yFg-HK5DB`Dnz&AAyHuB;DBGCXnKL zELYiWUjyEDA&#E1Z*IjAJeTZJJVK*iv~>O`fhQ{+WCDnv8YJB52|mS*#DGa=Zdokl z(K12K3#3@Wj0WR z+=j7?VC04OvHO7ToOhl=0DpF;@em>oBRHU9=VduZfZmjEJCRQpuBC@lBO5lKt)HJa z8aBVGVbF`Ik3s@pbjlkyc$KJ5= zFKi9nCODI!55|2KVn5-IVAV3K4DPZxfGIMH=)#TwIU^Ewg~e_jH_pUq2Fu=sge@}C z?8esgv!viR;&Y9vl!2%9m&N52;xM7{2d`L>Y-P)-Zt@sfF9?E!5wz;%OJjcR@?$r@ zoF>T9v^fgQXs(ih@1JgC(J z`wjUF?zU(%5ecZsIE|UD2dIdc#3wAmB^B6i1?j9P&%lQ*P8ydyGG%y`EwM>c+w z?2lAEuQ#V50g`87BP-O`BRh3Bi+?e@2jsRwAyABj?2sv!or&sJMyvNnYPNnts)#Ba z6dR80RE@;7?~T-CvhMX;z`Z180xcX2VMl8DiKt>Oi)%-c7=c^05sA}+EG!}_Zw=P} zAH&kuUip9YCERSFEGGrW^1+(9U)GwK^dbnG;V=2 zXe=1_!fG;WcltHdan`^fjZ*yr@Na%wD<qZ*)0`zx#&IO?`gfvu>cc2`N)!2U#HzMKR0-hpufAd-zG5-WF$EMfq z`WpEcPU(I8sZ){ZZO2?d{x!ONcMv?yr3e>ajegi)R{qsGf16_IWD>0#)Bg6S(yT_%`_h&<HWqjK+ET;TO^mo7e_0iJuUbX5vq0APrk8 zt~Vh+HT=_3xYwZF{oJ9yY_;l9MNcjV5+DNZ!D>?qp8*T?JIuKFrqbW;kW%^la@#J@ zZFGddpahJK;MQxfXs*PBK)+HW$VfC)8zrv(|I{Or0R{E9 zLnpukA}78s(saDnEbg?e;R#<;l*)iUG(|8Wy8lwAy1<}ggmYyejV&pQa9+QiJm+JV z;2&1;MNtL%N+Zp(eqw@jH;xfvB#PpNYv>AOiv|Y$%)Xl*{(ipaIZ2`aecZeIcUGms zjVxx2ts~G;uyL^yQJhAfyDyJqRmq*8BWm~+TStm)&=~l3b5(G??mPRN?nd`t}a_`m(@BC^GfXKWywZ3;OpEj};!8YP|f+ zFS*lEIpRUpf7b_5Kt%A(q5#SYF`OljDxgI4_#Vo#WO0LKo5WrUBO6=)+pc1u?OX^x zf$tawZd#CsaPf`4FGlDN8Lyx16x4pl;^armuEMlRZ-ej1ML`kZZgdz2N_~x{V2(zA zb#@NeS+1x~r?BZN;P`k!-B{~6PVS+OZ?Nno9-#IoIK)?q1%L6|{>2Z%^m}l1b}?&8 zfxntKTKrkNMN&y`I7qoeQc0A{Qu%j3M{P`dCtZb4N;r;3s>E|^tNx~&gHlf5OoB6c z%vY{OZkdcs9@xbgEB_ir`W4iuP3cT@lvtfV%_O3I%va@z-$Tah=rSAp^u1XS!xWZN zT!Xq_i3I3_uj{|;V7}6~`4aFEFRwv~NRtILg@?^C%1wCK%kSBiFE2$HV;_YRoimCM zc#G@f@1YGw{qo$kU)pL`$C?*SK)5J>%K%0JK7qgq@k$$yLl$u*9_4EWHLfO5gj?rpucN zPvcG4v-eb9aULU4RUf$}f|<%Q-Yk30=Kr21*H74#XeUxESaDcfx8&1D zEi%nHy!9wW`Fr_*n9B!z`JxK8%FW#O^r+?br)B&{w>{1zad8u8(Gs2w0#*bM?6g3` zIe2KqSg#w&Y*M3KXVWwgxP|WflFX@9^WS}PB?#8d1{)*V!;Jan{5kW!(dt2x<+UJb z#_8-;K2&B!NAj8A_iN+t6U$f^Og94(*rX2h6Noa}LEb@MEM#^E(ux(zYv;o3j-(-K+JseGq ztc>V?pMRG;j@2~6aoN$l=&$+Uu1@dSwnk9M?^CR*TcFj*KSZf(+)|WaV~ejvLi@(> z+~moMN$S9OT4cvT;F#`95gmmq0(jh3=cou;rd{7>LJ`& z{}5k~4oXtp>p^qq&X!5vAm+2iYvg9uO5dZ3@#^ms&3-apiG?CxV-_t&aY#+&zHee1nLLGxeMyBWFoJ*1wAh>Cp>$Nt?*;*b&OR!>+)tPG-ZEQA2o>@xKW4*w2Uxz5?bV_iHi zJbx~7DN9}7yjq2$Kb(cnbOpkXHn$4(`tzXI!<4ZTSx=f)h`dLC)@R*GaC&tYc!`Tm z9NuFV?vENB5PA2@IPKczcYe)zI{w5GF+Hq~l%+~7BXi}1sG<$&=f+rYhw-0Xzxr9K z8YQOaccU~>F6cX^UVs45qKU;(Wax}t{6wSswSCR}Y|)NE=u0=s=XUgSg&q56wJ9Wv;#59QZ@ZoV}%ul_{y& zuTUhX*weSaU7p$SUA;c;v|u83NEGmfVv@Z+$Yk=po!liB1*7kkyWHO7?nM!NeA*4? z^Y+-ET-)963_ui*2y6(BYCEC{0_Qp&fP5Y!4MHYP01M-95c;AcieYQxTL`<*RS#=p zuZxX&KK)#8bmY~$7sFxPj?#x=o5;AVw|d}1ZBEzI)8oqYMP_`D?37FJQ+ZPhMHT33 z=7f)SsH72lcS7<4g#>BJPcTWDmwp6Br_xglq68i1p%CUSvgsC)Rs>?{M7SZ}c(JBQ zwooEE*hF6>^AYwI_BMpva;3ZTZ;=63zJ)#aMEME0^w~|qRgybMeY1}D2r=JA24BDl zk{jEjkq#*HM~|Yakm!<2@a8SRUSJp^xQ|;Lkypg%hO#C15cEfdZx{901usU;n8k@v zpF%kT&_vc)$+XV3jL(p6;OzK^`fb-q7hLN_3yOU&dm2oDoEoqI1)jBmX(C!xFP z63ng^^%vO4$B*|%3zW^zbU#lq;uswNxbM{y2p*%!+!NLL>Z4R&MO{Tl!mTpr;0J!| zs8u8VjayiivL&j((*I*iIBIVVzj(ww*_b=h7wRvYaSrkaN?cqlzV2X$e1n(;3gs}9 zdZf)odYhmSb<}NWW?@;~#(fOo z((^syL(MsThl17KwOUuKEQadC^d!;>8ZYU%kDDC|w~eq#3KTA@Ve5IbOTv^ZYYGeTF}I6<+7={4iUDK*9YZ|f?oskfJEv<}K6X>&~F4Hb9tBilQ$ifpclpYA+< zM$%?NXFKZ9QLG_1ACYWC8uR!F{P;TkaYzZ)7NcvSw99ZaAI}Usiur-^+mu&;@gxq_ zk@23QVR1osDkBI!$;VRnqWb{rAI>QQEtY9cTq8zvbDy;+qDKcLH_h>y6`4d94qfl8 z^R(}T3YtfnS@?(ALy`Lp>yed$k#BYgg*S~v_v6#U(4~UW;q$z(i;d7!$^kRVa=t3o zh}yFnURdAp4Ndz6TzQr4BvOY)_KP>t%)hg9#-?BcKHM_ByA)%OFT+hNP)^KWwh&%s z>K0>Pfg*t?aX}uhp0RAoG%ihb6{Ee1qfTfcV$WT3A*fO&wfDm{)n@{iYTZiEDG9PI zV-l=M;Pd^;=n-iW%`MpWg@`NAJ@MQ2L6A4Dak3qeyO?lM59`5qOC;3LrcdIlmvfgY zOZ=!~M9cN|;82_XtmV+Pm)Y2m0uBBVCtVUTV??V@ zQ}>J9Sq@(K0%3tS)%F`nP>mcE1#5VyjnEp%Y8l?-2>B6CV$?Y9NYn4=d!n7sw zhx2E%#Cy%VF-L@Q=>@&i(mxhBkl*Y;gy3A@716r~(l_tg1PHiRie!OP+?X{Km~xg1ni^ zzW04+oi^|!O9Q$kP@d!%)6ZO%ily7BZW5u#yon$|vQ2vDJsu5H*odB+4xbM-T=Ssy z$<6)pm}hHi9w)oL-M0hkha5J|_0>e``7uv7_%ryqvDPzW!t|E9;Vd;PC-Xq#x{nlK zZPK}u$Mal)+GQGN@NPdUr|?#<+DPCLmglTxkJw@A>>D(o%s&`;<*F4z#!GM)HsHQw zdD2rG=HTpg^gob$4md?^GHMw}Fd$SI+C6 z&b&WIL}6+T@^{rga5SDX>QgO%s~mxOyAQTfiq_>7X9-d#YdLd1=$Nag8Z;4xyd7H9R{IiwIWnvnJl3w>fI`M#!m=9?ydj5N3$10?&JWEr zuH)L%>EE!kAE2S5*Mrc6dl55t){@wXBSZDLPltnN8fS;+DHb%0PL2^{AX{?k{rd+1QEU%Z!3Vu@X zvuw%w8}~kUt9@Rm+%E8Gh|gQ`Y~ZaOLUWqFTnad_%Ibqt=QsVHW#t>rd1Zm`rMCQL z>Xa2Zx)9kP!N12c6P^CRebMIav6lE=&lG!GFUHX7q*C02f^v|EuiapGFI0=*4mj$4 z^j4jX`}EBB1HotAReoS4L^*!3<@EHaeh20l0)+>4BMHX7Ep~(6njhMQ`Xhervb|mt zS1gY%#+dkceRdfxTiN6QMV5J&L^JyBrc2Vs%p)`Py>if}iVBYcE7)(q|Kmy@lN!J3 zMYfe}3Upyw!ONUir1ljoU6R4J6?G)JZ6SxZs@1BxP2IayX&N*0T~~M`imq`(Xme+0 zcXqjG!(xT!%hbzUyc$ZL>&{HsJmH%nHcfPgdZUB4Cq_PZ;>zsLrb>%`OB4}kOpCx| zm&1T>{A7a{!3*tY-OF`3wQ4^ErV^}4CBSQs8doyd3-#{o;AG2Q>L~bvjI%CKS-=><15gS^P8d}ByCFEf9 z=^6)wIojJ%E()T1qs7>}+LWgyaPGxuPz5UtOTIA`HePi7R;e`rjXC0)_x&Z}(Kolooe z0&(x^LD0vE$-Bk5MRoP%Vc(RuwXEO&;pjk%wTqshpyoo?_idaPf9%Y7Zo}A1Ln-`X zztGd;dDoPuklbCLqb-wW?KHif+x@4P{M$`CjIzu!U;Q23_})$5!%uxL?zSfeK=4&= zU*E$w_r}NUjM0+A9@BG4*5%it6<%JV3F$=>s|+j8nwRITQa_*AK3xz4#!>DFqySE^ ztu<~V(}^S#o530cB?+dmT`oC+TB%6(p&`4t!0GSbBa)t50F3}wz zzBMxxYZx;j>yhe{Fh9#B(;8w3|I7+OAJ~>ziO5Vk<|8pS^Ipt{cQhv1nV68mKE3;r zB8qXj=XrWe;GBsc+Bt4lyu3Gkp>VXel1dvnzhQ@5;Ls0d#?Wu0%DC z*?x=s?fiS6!u)Fogg-qcC4@~|;uTs6#I|^T24j%}H3;_@cp@z$4TCgvI3rmNQJOHV zV?@@b&6b}+N%gLf7u=;HrFmR%HIz5=^Qu`jwi)@+Q5GISD8T4|O* zMpYQN;c_2R6t1P!EpYKQ)35zW0L&BkZnr8aR#>SRh#pP<6~%D5UbaaYLm<;`HuMmu z$hJ3o(CGaGDncLk?9S%|mCrqdP3gm`>N^UD)eld_nn=ja_{&Z2q3=?6Ch~?ov#aQ^ z-5h3<+l~UG8rjx?4%WX^Uk-J=0f61qDF>`f0yk1nrtRa&k8ZU>WM{QeXJcHmDu| zx%xR`U{*aNGO^#Cl`73~y%L@2R_iNQfe?39B&<&u`umr!(Au+^ERszZXdtwW7jDy zk-&3s+vTt36ud%qLYo1BRg*X6-IeKZt$p4w~(=jqg1^4${rm|2-y zVZ$=;Mh5PK&=VUMg{7*Bbp>=v=88pybPKTB$v{Bbpi8XaKxH;hbPMPlT?}sjw!Vjl(~UV zb!iZ^%TuNuGuAkFyIz-Q#R@hQ1UIkSc}U62Ad4Q}T(8CvD@Cv8TIZ`23{=E)Z7h7O z3|^|R$%S(x5juc?}=!+uqm{)r&` zObz_HYxylH1K)oh(Z>-A=)o#L(Dn4PKf-bd=WBhoXeXJRp#*3Tl=t|`0T>S5hw~)& zBxBk)p#!^!l<^i4+~Wh}bXM?o@Glz8*~e6n4;8_~a`@AFeb&ab4eqF$;OR z1VhbmiTsn;Qo=rMY*lhFDy2H1gp=X%Yu&ZiIBsmTe3HQ9{N|m?;~48zm4j&ti4e#- zlKxEbxP}7Bj1$z0p$RE!QLjp}oyv@bF1~F&a*w8!7DgJ^F!W_DxML=rYpQW=S{$?4 z=#grsOgQC;X00!@pLMEtjJ5nTL)c^?*{qu4siOZ^mz8Z%Vp&^{G?0tJPIwKhyXW(J z4qrR_HY}m~$tXtQ7k9z1y?WgX)*J+8ut{FFnN+<=D?I$gd983&^?2p#bJ!ItCe&OM zTr>$tHK8b|#@<6DrUg`uHYf|@VxizTT`c7a}oQM^^j$xC|yH;WsYymt{KvMca8 ztyvQMvaoZ{E#CJzqvUJouJpA*{~&0K<_h%>UFykT{n88$E{H+zcN#D>QdQ@A(%%LA z`pl{H#!nL6R|5%lyXW$mV@popghXskDmUg93#Pz&v3m_podl2x1K6=kZyQ;^=zeTO znB-X!3Tg9!`|eM2+XlM2H{K5LVTFvds}>`DX-WF z?O6j$$!P>!QOHKdg%;1EL;MSh3g_+{h7P?ii6PMQkJl{AjkdA!8yMTebxC!VUTRNt z_7mlJEV_HDcrrQN632UKtGJ8)C&*h)VY3+o$2Mf8wtLK%GZ1xLGvMLUEitRk0@5%6 z$}HBQ=Q*XR0&*=>N11+!(C|=|v$zj5u zRNlZBS@ZL=8;UKQ@8?X4D_;Z>zc7=bV%9QOger{gBxSaxL0)`G5l54mUUpwy07te-sM(#(yJ7*Qh_0&G#5&)WriiuCt=rRIC+8;){)q6YZhpQ& zT-RyBF}fSRF`=XL&Tb4rGC#k~-PD)Vj_l4_Tl}9jBXRp1uf-g)LCHd0f!h9A!HrgR zEqnr!*}KP+RrCU<+D+i6=*lL;XUF^q0XB-o$)YS7bcYjjkdI{pkC3-3F~&`e9YrO{ z9H#GsX5_w5h;|^PLO%DA)4Xb=h+Oe+>RvItA3cwZz*>zs691?(dQLQCB0EOKbJMZ< z{CbmlV|cRz*Up$6TSzclBeA*~{_w-Ge(`lq`a&QAiye{u#@6;tNK|WpYg|Xo zDUL>+nDG~S+=N5?4_x37dEC7M&Qj@Kfe+CCUF8L)M+jZuL$?j^1rr&#AkxsrK-S*I z)`8x@#@^`feK-HN4ifmz5fHO3(Zhh%cLu(mz1=SL)|j1rk~DMB`2s>6=1lZZkG@h% zI%OTT?QpN3f1=Ed*7|w;!HaW`WYaX!WFAs19)nmgV~ZFTjM{~Y4cSd1|Mo+5T)y8- zDH2llM+%m(i3vev6lF2hp&YOx1=$25Xc1NH?6Ua}U8+^I+lrk1L=la2hSGJM!|-&J z?zy;~?MDc92r2f(l;yroOUP3oLu$b^>qhecj-F@%1VQR!&iAhu=Fv@$4q0+;<2-Xu z(~exdCpDZFedBEkW+tV@!$p2%K|^Poi4Q#n3UksTZPXAH2%IFJLFWP^R7MJhUR>%c z^K~-Snqlo^O74>6^7f2(j?nIJc-wJtpO~up!woq#R)g*v`X*DEPEb2(QKM>&z79Ju zG>PX^+-j{i{OG);N16E07471`z|}S6f#1+Jh{*Z+0RdN^AI{Nsj^sUvUF_3!c<=wb z=+f=pGc6oAEwOkEvCzQ<=6HL@LPnS)5tVyiZFg+)}vWPx}% zR2g3((qk0l7=Pf55vg$<$Pbwn&qLtREvd3^Fi}0I$^B48XntGO$k(QgjPM)Gh*vwGJkl9fIPxGtLyiJOnFCQzeRztc|FQfzkcmuy0KAR z#g65x+9>=(^`{b%`w1rpb)$#=RO*gJoIlJ0v*IDK3{)5IoU)Rz7%+0ftvKQ@xCpqf}zPH*} zU`_6?xC#PF3oK9k&wCpG<*{}TLlO$4IiKlWn%Dfs7(lz)r1 z0=Ienu|MTc;eW1>|F$vg#tZ=b oSE~I}{GUPaKgE&R{zLrlkSHq&4)iVn00aE_0JHft$FG0?4}g=5mjD0& diff --git a/mobility/data/insee/esane/equipments_insee_to_naf.xlsx b/mobility/data/insee/esane/equipments_insee_to_naf.xlsx deleted file mode 100644 index b6f22f49d37f92a6846e38c798227cc43a1d806c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10763 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 RzBD92H#iYUqW$^n{{Ssp4+8)I diff --git a/mobility/data/insee/schools/schools.parquet b/mobility/data/insee/schools/schools.parquet deleted file mode 100644 index 7e626af8387ddecafdeecd0ed1d127766798d1a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202838 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

}kiqCho-!n5|!S)|qrXFDP`HM_lZm$>d z3U`TA#lC~=%{jPWwz7OKb>{K?`Eoz8-|)Y{ZYE(_plG{TyOb+Qh%AZS2G5(GZC;Z#70E>HYmNsRPtSHRWb9Bwu=2B-`*gmg>G?>5v}jTZ_2f? z4`WiSW)j-^%`U&+1e}o_=05ErV*-*eA7i9JYonP-nAKE%>Ur!}tDj)*E8&${%_5K; zKhrzmYHYN+%Ix7(^SIByTAS`pjM%S#t2=4xYoGh=;`3^5YCoI2tj&Md!?r4AP5mK` zgfWLU!C}&oV2euvYajeX*xU8k*ye4%+lPMkRFK0bXh(KlKcXw8QDvab9zzsN8ui=r zE+Wg>bU*9DDr1d@#qu z6sd4!pW`OT)m!Y*qAgK-CCxmfMV2&NXqQvjSlqH-H)-l2@=N#qdmAsbkC1?;8m%dl z)QQ`#sb)r))DBhly*1hQ4pyPc=ztbl8n3gTQixyD_Kf|=wd56@L^qbMVkun!PA!hL)Y8ErB7A4snjPjRNbYbKq(>P&M#(8^QQ`2Z~L4z8n z2T!u|*v*)kl{w5CcMY$<#4{G+Rtx!7*yxs&{WAOC)-9C5$5+7|Ip4 z4()-UCWlg!Ud42_E4(0W6E@#*Y`MNZBCpt=l(k{zcK~lTylI(1;U73=Ex6)r-VlPlC9X7U)d^KAOtUZJlHltI!ul0=Q03K*0Ab0p37u-TJ5*aw`V`}=@lp-KdOawOR+>JI_QkE6zB zEf+1f!?p1eh59{=o6wxQy_od}*c+**#>l^y40BNfmEA}d7Vna5*%SdwO$KF2Wd0$L zDb;qeeu8~W1>QYX`R<-dvD4{CK#IcCLMe3N*ED!%UE4GQ72rcs%l}(*ytHN$N&7m5 zrdZ%inIEM3))2IQufTlbg}!!-l*H8mQ|n9S7OFs

?H_I~%w$ve-@rNu7-S9qf^5 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Đ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 diff --git a/mobility/data/insee/territories/departements-france.csv b/mobility/data/insee/territories/departements-france.csv deleted file mode 100644 index c7d65f04..00000000 --- a/mobility/data/insee/territories/departements-france.csv +++ /dev/null @@ -1,102 +0,0 @@ -code_departement,nom_departement,code_region,nom_region -01,Ain,84,Auvergne-Rhône-Alpes -02,Aisne,32,Hauts-de-France -03,Allier,84,Auvergne-Rhône-Alpes -04,Alpes-de-Haute-Provence,93,Provence-Alpes-Côte d'Azur -05,Hautes-Alpes,93,Provence-Alpes-Côte d'Azur -06,Alpes-Maritimes,93,Provence-Alpes-Côte d'Azur -07,Ardèche,84,Auvergne-Rhône-Alpes -08,Ardennes,44,Grand Est -09,Ariège,76,Occitanie -10,Aube,44,Grand Est -11,Aude,76,Occitanie -12,Aveyron,76,Occitanie -13,Bouches-du-Rhône,93,Provence-Alpes-Côte d'Azur -14,Calvados,28,Normandie -15,Cantal,84,Auvergne-Rhône-Alpes -16,Charente,75,Nouvelle-Aquitaine -17,Charente-Maritime,75,Nouvelle-Aquitaine -18,Cher,24,Centre-Val de Loire -19,Corrèze,75,Nouvelle-Aquitaine -21,Côte-d'Or,27,Bourgogne-Franche-Comté -22,Côtes-d'Armor,53,Bretagne -23,Creuse,75,Nouvelle-Aquitaine -24,Dordogne,75,Nouvelle-Aquitaine -25,Doubs,27,Bourgogne-Franche-Comté -26,Drôme,84,Auvergne-Rhône-Alpes -27,Eure,28,Normandie -28,Eure-et-Loir,24,Centre-Val de Loire -29,Finistère,53,Bretagne -2A,Corse-du-Sud,94,Corse -2B,Haute-Corse,94,Corse -30,Gard,76,Occitanie -31,Haute-Garonne,76,Occitanie -32,Gers,76,Occitanie -33,Gironde,75,Nouvelle-Aquitaine -34,Hérault,76,Occitanie -35,Ille-et-Vilaine,53,Bretagne -36,Indre,24,Centre-Val de Loire -37,Indre-et-Loire,24,Centre-Val de Loire -38,Isère,84,Auvergne-Rhône-Alpes -39,Jura,27,Bourgogne-Franche-Comté -40,Landes,75,Nouvelle-Aquitaine -41,Loir-et-Cher,24,Centre-Val de Loire -42,Loire,84,Auvergne-Rhône-Alpes -43,Haute-Loire,84,Auvergne-Rhône-Alpes -44,Loire-Atlantique,52,Pays de la Loire -45,Loiret,24,Centre-Val de Loire -46,Lot,76,Occitanie -47,Lot-et-Garonne,75,Nouvelle-Aquitaine -48,Lozère,76,Occitanie -49,Maine-et-Loire,52,Pays de la Loire -50,Manche,28,Normandie -51,Marne,44,Grand Est -52,Haute-Marne,44,Grand Est -53,Mayenne,52,Pays de la Loire -54,Meurthe-et-Moselle,44,Grand Est -55,Meuse,44,Grand Est -56,Morbihan,53,Bretagne -57,Moselle,44,Grand Est -58,Nièvre,27,Bourgogne-Franche-Comté -59,Nord,32,Hauts-de-France -60,Oise,32,Hauts-de-France -61,Orne,28,Normandie -62,Pas-de-Calais,32,Hauts-de-France -63,Puy-de-Dôme,84,Auvergne-Rhône-Alpes -64,Pyrénées-Atlantiques,75,Nouvelle-Aquitaine -65,Hautes-Pyrénées,76,Occitanie -66,Pyrénées-Orientales,76,Occitanie -67,Bas-Rhin,44,Grand Est -68,Haut-Rhin,44,Grand Est -69,Rhône,84,Auvergne-Rhône-Alpes -70,Haute-Saône,27,Bourgogne-Franche-Comté -71,Saône-et-Loire,27,Bourgogne-Franche-Comté -72,Sarthe,52,Pays de la Loire -73,Savoie,84,Auvergne-Rhône-Alpes -74,Haute-Savoie,84,Auvergne-Rhône-Alpes -75,Paris,11,Île-de-France -76,Seine-Maritime,28,Normandie -77,Seine-et-Marne,11,Île-de-France -78,Yvelines,11,Île-de-France -79,Deux-Sèvres,75,Nouvelle-Aquitaine -80,Somme,32,Hauts-de-France -81,Tarn,76,Occitanie -82,Tarn-et-Garonne,76,Occitanie -83,Var,93,Provence-Alpes-Côte d'Azur -84,Vaucluse,93,Provence-Alpes-Côte d'Azur -85,Vendée,52,Pays de la Loire -86,Vienne,75,Nouvelle-Aquitaine -87,Haute-Vienne,75,Nouvelle-Aquitaine -88,Vosges,44,Grand Est -89,Yonne,27,Bourgogne-Franche-Comté -90,Territoire de Belfort,27,Bourgogne-Franche-Comté -91,Essonne,11,Île-de-France -92,Hauts-de-Seine,11,Île-de-France -93,Seine-Saint-Denis,11,Île-de-France -94,Val-de-Marne,11,Île-de-France -95,Val-d'Oise,11,Île-de-France -971,Guadeloupe,01,Guadeloupe -972,Martinique,02,Martinique -973,Guyane,03,Guyane -974,La Réunion,04,La Réunion -976,Mayotte,06,Mayotte diff --git a/mobility/data/insee/territories/donneesCommunesFrance.csv b/mobility/data/insee/territories/donneesCommunesFrance.csv deleted file mode 100644 index 0f68b7dd..00000000 --- a/mobility/data/insee/territories/donneesCommunesFrance.csv +++ /dev/null @@ -1,34887 +0,0 @@ -NOM_COM,INSEE_COM,POPULATION,surface,r,distance_interne,x,y -Magny-la-Fosse,2451,125,3.687,0.611,0.553,721,6983 -Magnieu,1227,640,11.462,1.078,0.976,910,6523 -Becquigny,2061,260,4.723,0.692,0.627,731,6991 -Pont-l'Évêque,14514,4740,13.176,1.155,1.046,496,6915 -Lehaucourt,2374,886,9.390,0.975,0.883,721,6978 -Saint-Martin-Rivière,2683,121,5.531,0.749,0.678,740,6995 -Saint-Julien-d'Intres,7103,343,21.281,1.468,1.329,803,6433 -Cambremer,14126,1356,27.649,1.674,1.516,484,6902 -Saint-Désir,14574,1696,19.500,1.406,1.273,497,6895 -Val-de-Dagne,11251,726,51.697,2.289,2.072,664,6229 -Arles,13004,52857,756.846,8.757,7.929,842,6290 -Cernay,14147,144,5.876,0.772,0.699,505,6884 -Valorbiquet,14570,2507,28.892,1.711,1.549,502,6888 -Espins,14248,237,4.553,0.679,0.615,451,6884 -Condé-en-Normandie,14174,6671,63.194,2.530,2.291,436,6873 -Courtonne-les-Deux-Églises,14194,659,14.068,1.194,1.081,506,6892 -Croisilles,14207,644,10.211,1.017,0.921,448,6882 -Terres de Druance,14357,966,37.521,1.950,1.766,429,6878 -Lisieux,14366,20301,13.083,1.151,1.042,500,6899 -Périgny,14496,58,2.668,0.520,0.471,435,6874 -Semousies,59563,246,3.115,0.562,0.509,770,7007 -Pontécoulant,14512,81,2.393,0.492,0.445,437,6870 -Montillières-sur-Orne,14713,605,9.421,0.977,0.885,444,6887 -Courcôme,16110,806,29.964,1.742,1.577,474,6546 -Aigre,16005,1602,23.797,1.553,1.406,469,6537 -La Barde,17033,498,21.339,1.470,1.331,460,6449 -Dompierre-sur-Mer,17142,5387,18.406,1.366,1.237,388,6576 -Puilboreau,17291,5993,8.010,0.901,0.816,384,6572 -Saint-Hilaire-de-Villefranche,17344,1308,25.854,1.619,1.466,425,6532 -Baugy,18023,1725,48.401,2.215,2.005,679,6661 -Corquoy,18073,217,36.830,1.932,1.749,643,6643 -Beaulieu-sur-Dordogne,19019,1320,16.981,1.312,1.188,610,6435 -Chassagne-Montrachet,21150,308,6.505,0.812,0.735,832,6651 -Corpeau,21196,961,4.681,0.689,0.624,835,6648 -Saint-Aubin,21541,223,9.481,0.980,0.887,830,6649 -Boulazac Isle Manoire,24053,10557,57.551,2.415,2.187,530,6447 -Calès,24073,392,8.056,0.903,0.818,527,6423 -Saint-Privat,34286,403,27.001,1.654,1.498,738,6294 -Coursac,24139,2132,25.297,1.601,1.450,515,6448 -Église-Neuve-de-Vergt,24160,546,7.702,0.883,0.799,522,6444 -Eygurande-et-Gardedeuil,24165,398,36.144,1.914,1.733,470,6445 -Lacropte,24220,657,27.072,1.656,1.499,533,6440 -Molières,24273,327,21.082,1.462,1.324,526,6416 -La Roche-Chalais,24354,2987,89.778,3.016,2.731,463,6454 -Saint-Bohaire,41203,491,13.857,1.185,1.073,570,6729 -Saint-Pierre-de-Chignac,24484,869,15.725,1.262,1.143,534,6447 -La Vieille-Lyre,27685,655,19.710,1.413,1.279,535,6874 -Pays-de-Clerval,25156,1231,22.563,1.512,1.369,961,6705 -Fontain,25245,1289,21.391,1.472,1.333,933,6681 -Tarcenay-Foucherans,25558,1487,24.133,1.564,1.416,936,6681 -Châtillon-en-Diois,26086,667,110.258,3.342,3.026,894,6404 -Chambois,27032,1356,27.402,1.666,1.508,567,6870 -Domloup,35099,3354,18.427,1.366,1.237,360,6787 -Authon-du-Perche,28018,1519,35.212,1.889,1.710,541,6790 -Bailleau-Armenonville,28023,1399,17.822,1.344,1.217,599,6824 -Gallardon,28168,3654,11.339,1.072,0.971,602,6828 -Gas,28172,788,12.259,1.114,1.009,602,6832 -Saint-Gilles,30258,13615,152.179,3.927,3.556,813,6298 -Yermenonville,28423,589,5.140,0.722,0.654,598,6827 -Plouigneau,29199,5107,65.352,2.573,2.330,210,6848 -Poullaouen,29227,1510,89.104,3.005,2.721,211,6830 -Arboras,34011,126,6.570,0.816,0.739,737,6293 -Montpeyroux,34173,1334,22.565,1.512,1.369,739,6295 -Saint-Béat-Lez,31471,404,9.938,1.003,0.908,513,6203 -Riscle,32344,1802,36.889,1.933,1.750,455,6283 -Saint-Christophe-de-Double,33385,725,36.136,1.913,1.732,466,6443 -Saint-Saturnin-de-Lucian,34287,287,9.834,0.998,0.904,739,6287 -Montauban-de-Bretagne,35184,5747,46.112,2.162,1.958,322,6805 -Saint-Marc-le-Blanc,35292,1682,22.999,1.527,1.383,374,6815 -Domblans,39199,1212,14.775,1.224,1.108,900,6632 -Saint-Maurice-l'Exil,38425,6092,13.442,1.167,1.057,842,6480 -Brevans,39078,660,3.642,0.607,0.550,892,6672 -Dampierre,39190,1266,9.668,0.990,0.896,906,6679 -La Chapelle-Vendômoise,41040,763,13.221,1.157,1.048,570,6730 -Morcenx-la-Nouvelle,40197,5077,138.342,3.744,3.390,394,6339 -Derval,44051,3488,63.833,2.543,2.302,350,6734 -Treillières,44209,8978,29.164,1.719,1.556,347,6706 -Vigneux-de-Bretagne,44217,5923,52.914,2.315,2.096,348,6700 -Saint-Paul-Flaugnac,46103,994,51.576,2.286,2.070,578,6358 -Montdoumerc,46202,531,13.613,1.174,1.063,581,6354 -Sauveterre-de-Béarn,64513,1387,14.548,1.214,1.099,383,6267 -Avranches,50025,10068,11.030,1.057,0.957,378,6853 -Moyon Villages,50363,1503,33.044,1.830,1.657,398,6889 -Saint-Martin-de-Bonfossé,50512,531,12.839,1.141,1.033,393,6888 -Quettehou,50417,1786,20.084,1.427,1.292,385,6949 -Tirepied-sur-Sée,50597,936,22.898,1.523,1.379,383,6854 -Évron,53097,8757,69.119,2.646,2.396,451,6787 -Ferrières-en-Brie,77181,3222,6.160,0.790,0.715,680,6856 -Demange-Baudignécourt,55150,570,31.236,1.779,1.611,880,6837 -Bernay-Neuvy-en-Champagne,72219,861,25.239,1.599,1.448,476,6776 -Ploërmel,56165,9890,58.517,2.435,2.205,302,6773 -Saint-Souplet,59545,1233,12.675,1.133,1.026,736,6997 -Pluméliau-Bieuzy,56173,4395,87.424,2.976,2.695,254,6786 -Gros-Réderching,57261,1338,15.721,1.262,1.143,1008,6897 -Obergailbach,57517,317,8.988,0.954,0.864,1010,6898 -Busigny,59118,2488,16.525,1.294,1.172,732,6996 -Floursies,59240,128,4.675,0.688,0.623,769,7012 -Formerie,60245,2145,12.732,1.136,1.029,608,6948 -Mortrée,61294,1189,32.592,1.817,1.645,487,6841 -Saint-Diéry,63335,476,24.545,1.577,1.428,702,6496 -Bonnières,62154,674,27.083,1.657,1.500,651,7017 -Saint-Martin-lez-Tatinghem,62757,5897,10.401,1.027,0.930,642,7073 -Saint-Omer,62765,14443,16.512,1.293,1.171,647,7078 -Oraàs,64423,173,10.585,1.036,0.938,381,6268 -Athos-Aspis,64071,211,5.931,0.775,0.702,379,6263 -Chagny,71073,5605,18.904,1.384,1.253,832,6645 -Marolles-les-Braults,72189,2210,24.372,1.571,1.422,499,6797 -Bussy-Saint-Georges,77058,26971,15.291,1.245,1.127,680,6861 -Chenoise-Cucharmoy,77109,1611,48.777,2.223,2.013,710,6833 -La Celle-Saint-Cloud,78126,20973,5.845,0.770,0.697,635,6860 -Valdelaume,79140,866,51.130,2.276,2.061,468,6561 -Chef-Boutonne,79083,2583,40.834,2.034,1.842,460,6564 -Melle,79174,6284,65.704,2.580,2.336,463,6579 -Thouars,79329,14055,81.840,2.880,2.608,457,6661 -Hombleux,80442,1173,15.760,1.264,1.144,703,6961 -Albi,81004,49024,44.948,2.134,1.932,629,6311 -Le Sequestre,81284,1755,5.557,0.750,0.679,626,6313 -Carlus,81059,682,10.803,1.046,0.947,630,6312 -Montpezat-de-Quercy,82131,1558,43.963,2.111,1.911,578,6355 -La Farlède,83054,8768,8.375,0.921,0.834,946,6233 -Solliès-Ville,83132,2412,14.132,1.197,1.084,945,6234 -Les Sables-d'Olonne,85194,43219,85.946,2.951,2.672,338,6606 -Gland,89191,39,16.779,1.304,1.181,790,6746 -Sennevoy-le-Haut,89386,117,8.896,0.949,0.859,796,6745 -Gennevilliers,92036,46653,11.629,1.085,0.982,648,6873 -Arvière-en-Valromey,1453,716,41.309,2.046,1.852,914,6535 -Coteaux-du-Blanzacais,16046,1049,23.930,1.557,1.410,468,6490 -Rouillac,16286,2984,56.844,2.400,2.173,465,6532 -Saint-Sornin,16353,808,11.267,1.068,0.967,499,6516 -Jumelles,27360,315,7.300,0.860,0.779,569,6868 -Brantôme en Périgord,24064,3747,137.906,3.738,3.384,525,6475 -Levroux,36093,2957,82.628,2.893,2.619,587,6651 -Les Trois Châteaux,39378,772,19.393,1.402,1.269,882,6590 -Nanchez,39130,800,31.463,1.785,1.616,917,6603 -Carentan-les-Marais,50099,10148,136.141,3.714,3.363,392,6927 -Mesnils-sur-Iton,27198,6116,125.047,3.559,3.222,562,6865 -Gouville-sur-Mer,50215,3154,35.024,1.884,1.706,375,6897 -Sainte-Mère-Église,50523,3107,52.702,2.311,2.092,390,6933 -Bourmont-entre-Meuse-et-Mouzon,52064,814,42.845,2.084,1.887,898,6792 -Montsûrs,53161,3272,68.678,2.638,2.388,440,6796 -Val-de-Moder,67372,5135,9.062,0.958,0.867,1039,6868 -Porte des Pierres Dorées,69159,3686,13.525,1.171,1.060,827,6544 -Héricourt,70285,10646,21.050,1.460,1.322,979,6727 -La Léchère,73187,2543,128.989,3.615,3.273,964,6495 -Valserhône,1033,16302,62.878,2.524,2.285,921,6565 -Bresse Vallons,1130,2263,26.170,1.628,1.474,865,6580 -Lavans-lès-Saint-Claude,39286,2498,23.635,1.547,1.401,912,6588 -Bourgvallées,50546,3193,48.968,2.227,2.016,392,6884 -Airvault,79005,3289,64.121,2.549,2.308,463,6643 -Saint-Martin-la-Pallu,86281,5553,95.178,3.105,2.811,484,6634 -Les Belleville,73257,3488,227.834,4.805,4.351,974,6489 -Celles-sur-Belle,79061,3884,41.876,2.060,1.865,448,6575 -Aigondigné,79185,4789,70.459,2.672,2.419,449,6574 -Sainte-Menehould,51507,4110,57.231,2.408,2.180,846,6890 -Ancenis-Saint-Géréon,44003,10595,27.787,1.678,1.519,381,6703 -Auzouville-l'Esneval,76045,360,5.672,0.758,0.686,548,6950 -Valromey-sur-Séran,1036,1299,56.611,2.395,2.168,907,6538 -Montgenèvre,5085,483,39.707,2.006,1.816,993,6438 -Yves,17483,1475,25.933,1.621,1.468,388,6560 -Laudun-l'Ardoise,30141,6204,34.093,1.859,1.683,830,6334 -Névache,5093,357,191.072,4.400,3.984,982,6439 -Chusclan,30081,981,13.227,1.158,1.048,837,6342 -Orsan,30191,1125,6.979,0.841,0.761,833,6340 -Saint-Étienne-des-Sorts,30251,561,9.714,0.992,0.898,837,6342 -Caupenne-d'Armagnac,32094,431,21.661,1.481,1.341,451,6301 -Laujuzan,32202,274,11.453,1.077,0.975,449,6308 -Arnéguy,64047,236,21.160,1.464,1.326,352,6234 -Quettreville-sur-Sienne,50419,3199,49.829,2.247,2.034,371,6882 -Eyne,66075,124,20.498,1.441,1.305,628,6151 -Dourlers,59181,585,8.705,0.939,0.850,767,7007 -Estérençuby,64218,354,45.816,2.155,1.951,358,6234 -Lasse,64322,329,14.799,1.225,1.109,354,6239 -Lées-Athas,64330,267,43.968,2.111,1.911,405,6217 -Lecumberry,64327,171,58.106,2.426,2.197,366,6238 -Lescun,64336,179,61.642,2.499,2.263,401,6204 -Saint-Michel,64492,292,29.830,1.739,1.575,355,6236 -Llo,66100,169,28.564,1.701,1.540,624,6148 -Itteville,91315,6633,12.291,1.116,1.010,650,6824 -Séez,73285,2364,42.664,2.079,1.882,999,6517 -Saint-Ouen-de-Mimbré,72305,1021,10.725,1.042,0.943,480,6803 -Ballancourt-sur-Essonne,91045,7627,11.426,1.076,0.974,654,6827 -Baulne,91047,1318,8.191,0.911,0.825,656,6823 -Surjoux-Lhopital,1215,126,8.051,0.903,0.818,911,6550 -Cessières-Suzy,2153,764,19.884,1.419,1.285,737,6938 -Saint-Laurent-les-Bains-Laval-d'Aurelle,7262,178,35.695,1.902,1.722,780,6387 -Abriès-Ristolas,5001,382,161.100,4.040,3.658,1010,6414 -Villeneuve-sur-Aisne,2360,2673,25.189,1.598,1.447,767,6930 -Anizy-le-Grand,2018,2527,20.922,1.456,1.318,728,6933 -Vallées-d'Antraigues-Asperjoc,7011,952,22.243,1.501,1.359,805,6401 -Val-de-Sos,9334,656,53.357,2.325,2.105,577,6187 -Aulos-Sinsat,9296,173,5.136,0.721,0.653,591,6191 -Val-du-Faby,11131,572,24.660,1.581,1.431,634,6206 -Cesny-les-Sources,14150,1328,33.899,1.853,1.678,451,6879 -Roquetaillade-et-Conilhac,11323,276,16.335,1.286,1.164,633,6212 -Le Castelet,14554,1455,12.595,1.130,1.023,458,6891 -Castine-en-Plaine,14538,1442,8.276,0.916,0.829,457,6895 -Goupil-Othon,27290,1257,14.932,1.230,1.114,538,6896 -Thibouville,27630,307,8.841,0.946,0.857,538,6896 -Éole-en-Beauce,28406,1244,104.227,3.250,2.943,595,6792 -Fozières,34106,167,5.418,0.741,0.671,727,6294 -Soumont,34306,188,11.172,1.064,0.963,728,6289 -Châtelaudren-Plouagat,22206,3844,32.855,1.825,1.652,261,6841 -Valforêt,21178,326,22.069,1.495,1.354,845,6685 -Lagarde-Marc-la-Tour,19098,979,28.229,1.691,1.531,604,6453 -Val-d'Auge,16339,821,44.878,2.132,1.930,458,6534 -Saint-Dizier-Masbaraud,23189,1122,67.150,2.608,2.361,606,6547 -Mainxe-Gondeville,16153,1178,15.604,1.257,1.138,453,6509 -Longeault-Pluvault,21352,1124,4.711,0.691,0.626,870,6683 -Linard-Malval,23109,208,16.661,1.299,1.176,613,6584 -Terres-de-Haute-Charente,16192,3982,86.566,2.962,2.682,515,6528 -Marennes-Hiers-Brouage,17219,6273,52.787,2.313,2.094,379,6533 -Laguenne-sur-Avalouze,19101,1550,12.177,1.111,1.006,606,6459 -Plouguenast-Langast,22219,2492,55.515,2.372,2.148,279,6809 -La Rochefoucauld-en-Angoumois,16281,4003,24.257,1.568,1.420,498,6521 -Le Val-Larrey,21272,265,20.154,1.429,1.294,802,6703 -Tart,21623,1584,13.682,1.177,1.066,870,6678 -Lamballe-Armor,22093,16553,132.091,3.658,3.312,292,6837 -Moulins-sur-Tardoire,16406,776,22.178,1.499,1.357,499,6513 -Langoat,22101,1165,18.718,1.377,1.247,240,6868 -Coly-Saint-Amand,24364,605,35.435,1.895,1.716,559,6437 -Saint-Julien-Innocence-Eulalie,24423,294,19.740,1.414,1.280,494,6408 -Eyraud-Crempse-Maurens,24259,1600,50.610,2.264,2.050,502,6432 -Sanguinet,40287,4009,100.553,3.192,2.890,376,6390 -Saint-Cloud,92064,30193,7.517,0.873,0.790,643,6860 -Ychoux,40332,2265,111.272,3.358,3.040,379,6377 -Parentis-en-Born,40217,6094,124.548,3.552,3.216,379,6377 -Biscarrosse,40046,14214,193.099,4.423,4.005,366,6384 -Ville-d'Avray,92077,11509,3.694,0.612,0.554,640,6857 -Quincy-sous-Sénart,91514,8957,5.240,0.729,0.660,665,6840 -La Roche-Jaudy,22264,2721,29.969,1.743,1.578,243,6868 -Les Eyzies,24172,1092,55.679,2.375,2.150,543,6432 -Valherbasse,26210,1002,43.958,2.110,1.910,864,6460 -Sigoulès-et-Flaugeac,24534,1244,18.262,1.360,1.231,495,6408 -Frenelles-en-Vexin,27070,1688,29.198,1.720,1.557,591,6910 -Treis-Sants-en-Ouche,27516,1425,30.964,1.771,1.603,523,6888 -Le Mesnil-Saint-Jean,27541,202,7.916,0.896,0.811,523,6904 -Le Perrey,27263,1235,21.592,1.479,1.339,524,6925 -Saint-Denis-Lanneray,28334,2264,40.783,2.033,1.841,574,6776 -Arcisses,28236,2209,45.844,2.155,1.951,542,6806 -Saintigny,28331,1009,45.284,2.142,1.939,554,6803 -Bréau-Mars,30052,599,28.474,1.699,1.538,747,6321 -Val-d'Aigoual,30339,1469,95.602,3.112,2.818,746,6336 -Val-Couesnon,35004,4214,79.576,2.839,2.570,369,6830 -Entre-Vignes,34246,2123,16.942,1.310,1.186,788,6294 -Val-de-Livenne,33380,1739,37.382,1.946,1.762,421,6471 -Luitré-Dompierre,35163,1872,39.154,1.992,1.804,399,6809 -Rives-du-Couesnon,35282,2845,49.174,2.232,2.021,379,6811 -Pessat-Villeneuve,63278,656,6.256,0.796,0.721,711,6536 -Mesnil-Roc'h,35308,4279,41.521,2.051,1.857,337,6826 -Plateau-des-Petites-Roches,38395,2460,36.738,1.929,1.747,922,6470 -Chantepérier,38073,210,81.522,2.874,2.602,939,6436 -Le Haut-Bréda,38163,403,118.679,3.468,3.140,938,6465 -Villentrois-Faverolles-en-Berry,36244,913,74.108,2.740,2.481,583,6675 -Ornacieux-Balbins,38284,848,12.227,1.113,1.008,872,6480 -Val-de-Virieu,38560,1558,16.256,1.283,1.162,894,6491 -Porte-des-Bonnevaux,38479,2011,44.083,2.113,1.913,879,6484 -Gardanne,13041,20407,27.162,1.659,1.502,898,6267 -Rognes,13082,4765,58.245,2.429,2.199,895,6283 -Faches-Thumesnil,59220,17591,4.614,0.684,0.619,706,7054 -Meyreuil,13060,5543,20.142,1.429,1.294,905,6268 -La Roque-d'Anthéron,13084,5455,25.394,1.604,1.452,887,6295 -Wattignies,59648,14485,6.307,0.799,0.723,703,7053 -Branges,71056,2364,24.733,1.583,1.433,863,6617 -Louhans,71263,6349,22.754,1.518,1.374,869,6615 -Chassal-Molinges,39339,1137,7.855,0.892,0.808,915,6587 -Beaufort-Orbagna,39043,1349,17.332,1.325,1.200,888,6610 -Grande-Rivière Château,39258,630,39.449,1.999,1.810,921,6604 -Campagnan,34047,658,3.803,0.621,0.562,739,6271 -Saclas,91533,1779,13.669,1.177,1.066,635,6810 -Saint-Cyr-la-Rivière,91544,517,8.833,0.946,0.857,635,6803 -Le Controis-en-Sologne,41059,6822,100.755,3.195,2.893,575,6700 -Vézelin-sur-Loire,42268,781,39.668,2.005,1.815,781,6536 -Vallée-de-Ronsard,41070,525,20.034,1.425,1.290,529,6742 -Vêtre-sur-Anzon,42245,549,20.370,1.437,1.301,766,6526 -Le Vignon-en-Quercy,46232,1028,21.678,1.482,1.342,593,6433 -Cressensac-Sarrazac,46083,1131,41.321,2.046,1.852,586,6434 -Porte-du-Quercy,46033,580,49.165,2.232,2.021,552,6373 -Barguelonne-en-Quercy,46263,681,46.233,2.164,1.959,560,6362 -Plateau d'Hauteville,1185,4845,106.411,3.284,2.973,896,6536 -Condat,15054,1006,40.559,2.027,1.835,683,6476 -Évosges,1155,145,12.033,1.104,1.000,895,6546 -Mehun-sur-Yèvre,18141,6571,24.434,1.573,1.424,643,6669 -Port-Brillet,53182,1817,8.224,0.913,0.827,403,6786 -Le Péage-de-Roussillon,38298,6652,7.451,0.869,0.787,837,6476 -Gonfreville-l'Orcher,76305,9146,26.539,1.640,1.485,498,6939 -Harfleur,76341,8409,4.218,0.654,0.592,496,6940 -Corlier,1121,113,5.547,0.750,0.679,892,6550 -Foëcy,18096,2084,16.292,1.285,1.163,636,6673 -Aranc,1012,326,21.714,1.483,1.343,895,6550 -Prémillieu,1311,46,8.508,0.928,0.840,897,6535 -Malouy,27381,161,3.133,0.563,0.510,519,6894 -Saint-Barthélemy,38363,944,7.679,0.882,0.799,864,6474 -Turretot,76716,1471,6.120,0.787,0.713,501,6951 -Saint-Géron,43191,258,10.868,1.049,0.950,722,6473 -Torsiac,43247,71,9.185,0.965,0.874,714,6473 -Brioude,43040,6718,13.516,1.170,1.059,728,6467 -Saint-Étienne-sur-Blesle,43182,56,17.952,1.349,1.221,710,6465 -Paulhac,43147,642,8.677,0.938,0.849,725,6464 -Grenier-Montgon,43103,115,5.131,0.721,0.653,719,6465 -Louverné,53140,4228,20.833,1.453,1.316,425,6790 -Cohade,43074,853,10.100,1.012,0.916,727,6473 -Bournoncle-Saint-Pierre,43038,996,16.197,1.281,1.160,724,6474 -La Chapelle-Anthenaise,53056,1009,20.208,1.431,1.296,426,6784 -Forcé,53099,1067,5.047,0.715,0.647,425,6778 -Lorlanges,43123,372,14.636,1.218,1.103,722,6472 -Espalem,43088,298,14.721,1.221,1.106,717,6470 -Ahuillé,53001,1812,30.586,1.760,1.594,407,6778 -Entrammes,53094,2249,26.826,1.649,1.493,424,6775 -Saint-Berthevin,53201,7344,32.212,1.807,1.636,410,6782 -Beaumont,43022,290,12.265,1.115,1.010,729,6468 -Blesle,43033,635,29.902,1.741,1.576,715,6464 -Saint-Ilpize,43195,190,11.766,1.092,0.989,731,6459 -Autrac,43014,62,8.466,0.926,0.838,709,6470 -Châlons-du-Maine,53049,708,9.856,0.999,0.905,430,6792 -Saint-Laurent-Chabreuges,43207,263,8.363,0.921,0.834,729,6463 -Saint-Just-près-Brioude,43206,426,47.114,2.185,1.978,729,6456 -Argentré,53007,2782,37.211,1.942,1.758,428,6781 -Changé,53054,5950,35.700,1.902,1.722,412,6787 -Montigné-le-Brillant,53157,1255,17.877,1.346,1.219,416,6778 -Saint-Beauzire,43170,381,23.632,1.547,1.401,721,6460 -Saint-Ouën-des-Toits,53243,1746,21.232,1.467,1.328,414,6791 -La Brûlatte,53045,704,15.526,1.254,1.135,407,6785 -Beaulieu-sur-Oudon,53026,504,20.211,1.431,1.296,399,6773 -La Gravelle,53108,532,6.265,0.797,0.722,400,6782 -Saint-Germain-le-Fouilloux,53224,1158,15.676,1.260,1.141,414,6789 -Bonchamp-lès-Laval,53034,5948,27.580,1.672,1.514,426,6785 -Olivet,53169,417,9.900,1.002,0.907,407,6785 -Montflours,53156,255,7.987,0.900,0.815,423,6794 -Louvigné,53141,1137,12.734,1.136,1.029,429,6777 -L'Huisserie,53119,4213,15.137,1.238,1.121,417,6777 -Le Bourgneuf-la-Forêt,53039,1799,28.958,1.713,1.551,406,6796 -Loiron-Ruillé,53137,2640,40.087,2.015,1.824,411,6780 -Soulgé-sur-Ouette,53262,1087,23.204,1.533,1.388,432,6781 -Fontannes,43096,962,9.950,1.004,0.909,736,6466 -Vieille-Brioude,43262,1203,27.864,1.680,1.521,736,6459 -Chaniat,43055,172,13.999,1.191,1.078,739,6469 -Lavaudieu,43117,237,17.617,1.336,1.210,736,6465 -Agnat,43001,187,19.857,1.418,1.284,736,6469 -Lamothe,43110,870,12.488,1.125,1.019,732,6471 -Javaugues,43105,195,6.988,0.841,0.761,736,6466 -Frugières-le-Pin,43100,156,11.646,1.086,0.983,738,6462 -Angerville-l'Orcher,76014,1436,9.885,1.001,0.906,507,6948 -Rolleville,76534,1200,7.055,0.845,0.765,498,6944 -Marcilly-en-Gault,41125,743,56.903,2.401,2.174,613,6704 -Notre-Dame-du-Bec,76477,454,4.020,0.638,0.578,500,6947 -Routot,27500,1569,6.676,0.822,0.744,536,6924 -Bougé-Chambalud,38051,1391,15.831,1.266,1.146,849,6470 -Montseveroux,38259,957,16.653,1.299,1.176,857,6481 -Saint-Bonnet-de-Condat,15173,116,17.359,1.326,1.201,682,6462 -Saint-Jean-sur-Mayenne,53229,1653,18.042,1.352,1.224,425,6791 -La Haye-du-Theil,27320,298,7.051,0.845,0.765,546,6905 -Saint-Martin-du-Bec,76615,605,4.056,0.641,0.580,497,6947 -Saint-Cyr-le-Gravelais,53209,536,20.476,1.440,1.304,400,6776 -Lubilhac,43125,87,24.230,1.567,1.419,719,6465 -Cuverville,76206,354,4.538,0.678,0.614,502,6956 -Émerchicourt,59192,879,5.152,0.723,0.655,716,7023 -Baume-les-Messieurs,39041,169,13.205,1.157,1.048,899,6625 -Sablons,38349,2300,10.276,1.020,0.924,842,6468 -Montjean,53158,1025,20.157,1.429,1.294,407,6772 -Montboudif,15129,189,20.334,1.435,1.299,678,6476 -Champdor-Corcelles,1080,657,31.492,1.786,1.617,903,6551 -Les Roches-de-Condrieu,38340,1977,1.007,0.319,0.289,837,6485 -La Harengère,27313,584,3.653,0.608,0.550,554,6904 -Bourgon,53040,648,21.358,1.471,1.332,398,6788 -La Remuée,76522,1292,7.075,0.847,0.767,513,6941 -Chanterelle,15040,94,19.459,1.404,1.271,683,6476 -Saint-Salvi-de-Carcavès,81268,72,10.950,1.053,0.953,668,6302 -Escatalens,82052,1087,18.002,1.351,1.223,558,6326 -Buzet-sur-Tarn,31094,2716,30.383,1.755,1.589,589,6301 -Laboissière-en-Thelle,60330,1330,9.694,0.991,0.897,640,6908 -Boury-en-Vexin,60095,340,11.193,1.065,0.964,612,6906 -Courcelles-lès-Gisors,60169,827,6.912,0.837,0.758,605,6907 -Étretat,76254,1339,4.144,0.648,0.587,500,6960 -Mannevillette,76409,842,4.210,0.653,0.591,497,6946 -La Poterie-Cap-d'Antifer,76508,450,5.833,0.769,0.696,498,6956 -Saint-Jouin-Bruneval,76595,1872,20.025,1.424,1.289,496,6949 -Saint-Martin-du-Manoir,76616,1533,5.159,0.723,0.655,501,6942 -Pierrefiques,76501,136,2.314,0.484,0.438,499,6956 -Cauville-sur-Mer,76167,1524,11.313,1.071,0.970,495,6949 -Heuqueville,76361,712,5.207,0.726,0.657,494,6952 -Sainte-Marie-au-Bosc,76609,368,3.218,0.571,0.517,497,6955 -Montivilliers,76447,15942,19.033,1.389,1.258,498,6939 -Épouville,76238,2718,5.605,0.754,0.683,501,6943 -Beaurepaire,76064,499,2.880,0.540,0.489,499,6953 -Fontaine-la-Mallet,76270,2638,6.383,0.804,0.728,491,6941 -Sainte-Adresse,76552,7410,2.309,0.484,0.438,488,6939 -Le Havre,76351,170352,53.291,2.324,2.104,494,6941 -Le Tilleul,76693,697,6.185,0.792,0.717,498,6956 -Fontenay,76275,1100,5.615,0.754,0.683,494,6945 -Octeville-sur-Mer,76481,5850,21.011,1.459,1.321,491,6947 -Beaurepaire,38034,4906,18.438,1.367,1.238,861,6475 -Courmemin,41068,518,26.097,1.626,1.472,597,6713 -Fouqueville,27261,460,8.172,0.910,0.824,551,6905 -Mandeville,27382,322,3.061,0.557,0.504,556,6905 -La Saussaye,27616,1862,3.566,0.601,0.544,554,6908 -Les Trois-Pierres,76714,738,7.516,0.873,0.790,514,6944 -Hermeville,76357,371,3.823,0.622,0.563,501,6947 -Saint-Laurent-de-Brèvedent,76596,1444,7.873,0.893,0.809,501,6940 -Étainhus,76250,1122,8.342,0.919,0.832,507,6943 -Bordeaux-Saint-Clair,76117,665,10.224,1.018,0.922,502,6961 -Criquetot-l'Esneval,76196,2568,13.661,1.176,1.065,502,6949 -Sainneville,76551,844,7.047,0.845,0.765,503,6941 -Saint-Vigor-d'Ymonville,76657,1113,31.519,1.787,1.618,510,6931 -Saint-Vincent-Cramesnil,76658,641,4.848,0.701,0.635,507,6937 -Fongueusemare,76268,190,11.978,1.102,0.998,507,6958 -Saint-Aubin-Routot,76563,1886,6.849,0.833,0.754,503,6939 -Rogerville,76533,1331,10.280,1.021,0.924,501,6938 -Graimbouville,76314,617,6.472,0.810,0.733,506,6946 -Saint-Romain-de-Colbosc,76647,4093,11.756,1.091,0.988,510,6942 -Sandouville,76660,797,15.348,1.247,1.129,507,6938 -Manéglise,76404,1277,8.353,0.920,0.833,503,6941 -Épretot,76239,726,6.888,0.835,0.756,506,6943 -Gommerville,76303,728,7.481,0.871,0.789,507,6943 -Saint-Gilles-de-la-Neuville,76586,657,7.170,0.852,0.771,511,6944 -Bénouville,76079,174,2.949,0.547,0.495,503,6962 -Oudalle,76489,452,10.720,1.042,0.943,504,6938 -Gainneville,76296,2592,4.618,0.684,0.619,503,6939 -Rougemontiers,27497,1047,11.997,1.103,0.999,533,6920 -La Lande-Saint-Léger,27361,356,7.954,0.898,0.813,508,6914 -Saint-Samson-de-la-Roque,27601,431,17.720,1.340,1.213,510,6930 -Bouquelon,27101,489,11.769,1.092,0.989,517,6923 -Fort-Moville,27258,488,9.283,0.970,0.878,512,6920 -Le Torpt,27646,436,6.623,0.819,0.742,509,6916 -Martainville,27393,483,8.931,0.951,0.861,511,6913 -Marais-Vernier,27388,508,26.192,1.629,1.475,514,6932 -La Cerlangue,76169,1295,29.453,1.727,1.564,513,6932 -Tourville-la-Campagne,27654,1061,8.103,0.906,0.820,546,6903 -Le Bosc du Theil,27302,1363,20.367,1.437,1.301,540,6904 -Saint-Meslin-du-Bosc,27572,287,1.563,0.398,0.360,546,6905 -Pact,38290,844,9.678,0.990,0.896,857,6473 -Pommier-de-Beaurepaire,38311,704,19.226,1.396,1.264,864,6474 -Moissieu-sur-Dolon,38240,692,14.472,1.211,1.096,857,6481 -Pisieu,38307,535,18.838,1.382,1.251,862,6476 -Revel-Tourdan,38335,1041,11.681,1.088,0.985,857,6477 -Primarette,38324,722,22.033,1.494,1.353,857,6477 -Cour-et-Buis,38134,853,13.884,1.186,1.074,859,6486 -Salaise-sur-Sanne,38468,4542,16.193,1.281,1.160,844,6474 -Anjou,38009,1008,5.132,0.721,0.653,848,6476 -Agnin,38003,1100,7.969,0.899,0.814,844,6473 -Chanas,38072,2581,11.581,1.083,0.981,844,6473 -Jarcieu,38198,1027,6.412,0.806,0.730,855,6473 -Saint-Romain-de-Surieu,38452,345,4.761,0.695,0.629,849,6477 -Auberives-sur-Varèze,38019,1487,7.042,0.845,0.765,843,6485 -Vernioz,38536,1244,11.349,1.072,0.971,845,6482 -Chalon,38066,178,5.201,0.726,0.657,850,6485 -Saint-Clair-du-Rhône,38378,3873,7.169,0.852,0.771,838,6484 -Cheyssieu,38101,1025,8.583,0.933,0.845,846,6483 -Sonnay,38496,1238,14.170,1.198,1.085,849,6473 -Monsteroux-Milieu,38244,789,8.175,0.910,0.824,852,6481 -Roussillon,38344,8327,11.841,1.095,0.991,841,6478 -Saint-Alban-du-Rhône,38353,842,3.462,0.592,0.536,836,6480 -Saint-Prim,38448,1355,7.324,0.861,0.780,842,6485 -La Chapelle-de-Surieu,38077,751,11.222,1.066,0.965,851,6477 -Ville-sous-Anjou,38556,1195,18.294,1.361,1.232,848,6476 -Saint-Aubin-sur-Gaillon,27517,1930,19.620,1.410,1.277,576,6893 -Léotoing,43121,242,19.751,1.415,1.281,717,6474 -Vergetot,76734,439,4.282,0.659,0.597,504,6948 -Clonas-sur-Varèze,38114,1459,6.774,0.828,0.750,840,6483 -Allouis,18005,1074,36.361,1.919,1.737,644,6672 -Le Genest-Saint-Isle,53103,2131,18.784,1.380,1.249,413,6786 -Anglesqueville-l'Esneval,76017,573,4.283,0.659,0.597,500,6953 -Nuillé-sur-Vicoin,53168,1217,24.134,1.564,1.416,419,6769 -Assieu,38017,1436,12.294,1.116,1.010,843,6480 -Saint-Pierre-la-Cour,53247,2153,16.035,1.275,1.154,398,6786 -Villainville,76741,306,3.532,0.598,0.541,502,6954 -Villiers-sur-Marne,94079,29226,4.320,0.662,0.599,665,6859 -Bagnolet,93006,35864,2.570,0.510,0.462,658,6864 -Arcueil,94003,21567,2.339,0.487,0.441,652,6856 -Noiseau,94053,4680,4.592,0.682,0.617,668,6854 -Vincennes,94080,49853,1.905,0.439,0.397,658,6860 -Clichy-sous-Bois,93014,29835,3.962,0.634,0.574,668,6869 -La Garenne-Colombes,92035,29248,1.781,0.425,0.385,644,6867 -Épinay-sur-Seine,93031,55593,4.583,0.681,0.617,651,6873 -Argenteuil,95018,110468,17.414,1.328,1.202,648,6873 -Châtillon,92020,36779,2.930,0.545,0.493,647,6855 -La Courneuve,93027,42485,7.526,0.873,0.790,657,6869 -Savigny-sur-Orge,91589,36307,6.977,0.841,0.761,652,6845 -L'ÃŽle-Saint-Denis,93039,7786,1.738,0.420,0.380,650,6869 -Marnes-la-Coquette,92047,1815,3.479,0.594,0.538,638,6858 -Garches,92033,17663,2.719,0.525,0.475,640,6860 -Les Lilas,93045,22993,1.258,0.357,0.323,657,6864 -Villejuif,94076,55478,5.285,0.732,0.663,652,6855 -Boissy-Saint-Léger,94004,15812,8.915,0.950,0.860,663,6851 -Malakoff,92046,29973,2.074,0.458,0.415,647,6857 -Gentilly,94037,17442,1.183,0.346,0.313,651,6857 -Joinville-le-Pont,94042,18824,2.281,0.481,0.436,660,6857 -Fontenay-sous-Bois,94033,53424,5.567,0.751,0.680,663,6862 -Le Pré-Saint-Gervais,93061,17780,0.703,0.267,0.242,657,6865 -Sceaux,92071,19479,3.599,0.604,0.547,647,6854 -Boulogne-Billancourt,92012,119645,6.153,0.790,0.715,644,6858 -Santeny,94070,3708,10.035,1.008,0.913,668,6850 -Livry-Gargan,93046,44466,7.375,0.864,0.782,668,6870 -Bondy,93010,53193,5.468,0.744,0.674,661,6869 -Saint-Ouen-sur-Seine,93070,49664,4.308,0.661,0.598,650,6868 -Montreuil,93048,108402,8.916,0.950,0.860,657,6861 -Antony,92002,62210,9.572,0.985,0.892,649,6853 -Noisy-le-Sec,93053,43537,5.049,0.715,0.647,661,6867 -Neuilly-sur-Marne,93050,34685,6.957,0.840,0.761,665,6864 -Villemomble,93077,30051,4.042,0.640,0.579,663,6866 -Vaucresson,92076,8628,3.098,0.560,0.507,638,6858 -Saint-Mandé,94067,22731,0.907,0.303,0.274,657,6861 -Créteil,94028,89392,11.425,1.076,0.974,658,6853 -Le Bourget,93013,16484,2.080,0.459,0.416,659,6872 -Marolles-en-Brie,94048,4856,4.604,0.683,0.618,668,6850 -Drancy,93029,70269,7.766,0.887,0.803,661,6869 -Vitry-sur-Seine,94081,92755,11.669,1.087,0.984,654,6853 -Villetaneuse,93079,13141,2.308,0.484,0.438,653,6872 -Le Plessis-Robinson,92060,29028,3.411,0.588,0.532,647,6854 -Bobigny,93008,52337,6.787,0.829,0.751,657,6869 -Neuilly-sur-Seine,92051,60580,3.724,0.614,0.556,645,6864 -Morangis,91432,13566,4.819,0.699,0.633,651,6843 -Le Blanc-Mesnil,93007,55987,8.081,0.905,0.819,660,6873 -Les Pavillons-sous-Bois,93057,23695,2.923,0.544,0.493,664,6867 -Aulnay-sous-Bois,93005,84662,16.168,1.280,1.159,660,6873 -Bourg-la-Reine,92014,20531,1.861,0.434,0.393,650,6853 -Ablon-sur-Seine,94001,5785,1.145,0.341,0.309,658,6847 -Villeneuve-la-Garenne,92078,24248,3.205,0.570,0.516,651,6869 -Le Raincy,93062,14501,2.231,0.475,0.430,664,6867 -Charenton-le-Pont,94018,30500,1.849,0.433,0.392,657,6858 -Courbevoie,92026,81720,4.165,0.650,0.589,644,6867 -Sucy-en-Brie,94071,26279,10.398,1.026,0.929,664,6854 -Ormesson-sur-Marne,94055,10287,3.436,0.590,0.534,668,6854 -Sèvres,92072,23675,3.930,0.631,0.571,641,6859 -Dugny,93030,10659,3.872,0.626,0.567,657,6873 -Pierrefitte-sur-Seine,93059,29608,3.413,0.588,0.532,654,6875 -Athis-Mons,91027,33691,8.615,0.934,0.846,656,6845 -Romainville,93063,26510,3.442,0.591,0.535,658,6866 -Fresnes,94034,27416,3.553,0.600,0.543,651,6850 -Choisy-le-Roi,94022,44450,5.433,0.742,0.672,656,6853 -Sevran,93071,50629,7.262,0.858,0.777,668,6871 -Chennevières-sur-Marne,94019,18396,5.223,0.727,0.658,669,6856 -Le Plessis-Trévise,94059,20279,4.325,0.662,0.599,670,6855 -Chaville,92022,20322,3.570,0.601,0.544,640,6857 -Paray-Vieille-Poste,91479,7411,6.040,0.782,0.708,652,6845 -Clichy,92024,60387,3.080,0.559,0.506,649,6866 -Villecresnes,94075,9828,5.627,0.755,0.684,664,6848 -Périgny,94056,2662,2.764,0.529,0.479,668,6845 -Colombes,92025,85368,7.787,0.888,0.804,643,6869 -Châtenay-Malabry,92019,33016,6.373,0.804,0.728,644,6852 -Ivry-sur-Seine,94041,60771,6.124,0.788,0.713,655,6859 -Stains,93072,39618,5.411,0.740,0.670,654,6875 -Rungis,94065,5610,4.201,0.652,0.590,654,6850 -Meudon,92048,45328,9.957,1.004,0.909,644,6858 -Villepinte,93078,36656,10.392,1.026,0.929,663,6875 -Champigny-sur-Marne,94017,77409,11.318,1.071,0.970,663,6859 -Nogent-sur-Marne,94052,31947,2.797,0.532,0.482,662,6859 -Villeneuve-le-Roi,94077,21021,8.443,0.925,0.838,654,6847 -Fontenay-aux-Roses,92032,24117,2.532,0.507,0.459,646,6855 -Thiais,94073,29006,6.430,0.807,0.731,656,6850 -Saint-Maurice,94069,14312,1.449,0.383,0.347,657,6858 -Clamart,92023,52528,8.767,0.942,0.853,643,6853 -Le Perreux-sur-Marne,94058,33729,3.967,0.634,0.574,664,6859 -Bry-sur-Marne,94015,16717,3.336,0.581,0.526,664,6861 -Neuilly-Plaisance,93049,21177,3.415,0.588,0.532,665,6861 -Rosny-sous-Bois,93064,45411,5.920,0.774,0.701,662,6866 -Bagneux,92007,39763,4.189,0.651,0.589,650,6857 -Chevilly-Larue,94021,19347,4.228,0.655,0.593,654,6853 -Porte-de-Benauge,33008,513,16.714,1.301,1.178,443,6400 -Saint-Pierre-La-Noue,17340,1593,24.985,1.591,1.441,407,6558 -Puilacher,34222,552,2.704,0.523,0.474,739,6274 -Castillon-du-Gard,30073,1659,17.744,1.341,1.214,823,6323 -Saint-Martin-Lacaussade,33441,1086,3.925,0.631,0.571,414,6457 -Saint-Hilaire-d'Ozilhan,30260,1062,16.807,1.305,1.182,828,6318 -Saint-Pargoire,34281,2258,23.914,1.557,1.410,745,6267 -Plaissan,34204,1107,5.965,0.777,0.704,744,6274 -La Ferté-sur-Chiers,8168,170,6.582,0.817,0.740,863,6942 -Blaye,33058,4856,15.623,1.258,1.139,410,6452 -Villy,8485,215,7.774,0.888,0.804,862,6946 -La Celette,18041,176,25.313,1.601,1.450,667,6612 -Ainay-le-Vieil,18002,183,13.833,1.184,1.072,663,6620 -Lieuran-Cabrières,34138,324,6.142,0.789,0.714,734,6275 -Cabrières,34045,479,28.955,1.713,1.551,730,6278 -Fontès,34103,1007,17.716,1.340,1.213,731,6269 -Bel-Air-Val-d'Ance,48038,517,41.673,2.055,1.861,752,6413 -Lachamp-Ribennes,48126,340,51.153,2.277,2.062,728,6393 -Monts-de-Randon,48127,1307,148.207,3.875,3.508,745,6400 -Huillé-Lézigné,49174,1321,22.047,1.495,1.354,451,6730 -Bellevigne-les-Châteaux,49060,3552,35.440,1.895,1.716,469,6684 -Saint-Léger-de-Linières,49298,3529,24.502,1.576,1.427,419,6716 -Rives-du-Loir-en-Anjou,49377,5503,48.083,2.207,1.998,437,6723 -Les Hauts-d'Anjou,49080,8776,145.426,3.839,3.476,435,6745 -Gavray-sur-Sienne,50197,1980,38.169,1.967,1.781,383,6873 -Port-Bail-sur-Mer,50412,2640,38.960,1.987,1.799,363,6925 -Bouligneux,1052,319,26.241,1.631,1.477,850,6550 -Péronnas,1289,6287,17.900,1.347,1.220,874,6564 -Challex,1078,1450,8.718,0.940,0.851,929,6566 -Crans,1129,263,13.257,1.159,1.049,867,6544 -Lent,1211,1416,31.752,1.794,1.624,872,6563 -Polliat,1301,2504,20.249,1.432,1.297,864,6577 -Viriat,1451,6350,45.352,2.144,1.941,873,6579 -Scionzier,74264,8530,10.600,1.036,0.938,973,6559 -Rignieux-le-Franc,1325,976,15.100,1.237,1.120,865,6542 -Saint-Jean-de-Gonville,1360,1720,12.241,1.114,1.009,924,6573 -La Tranclière,1425,289,14.778,1.224,1.108,877,6559 -Villars-les-Dombes,1443,4628,24.728,1.583,1.433,858,6550 -Villieu-Loyes-Mollon,1450,3586,15.858,1.268,1.148,870,6539 -Sissy,2721,475,10.846,1.048,0.949,727,6969 -Brumetz,2125,213,7.241,0.857,0.776,710,6892 -Charly-sur-Marne,2163,2638,20.659,1.447,1.310,719,6871 -Crouttes-sur-Marne,2242,644,4.340,0.663,0.600,719,6874 -Ribemont,2648,1971,27.067,1.656,1.499,734,6969 -Castries,34058,6105,24.118,1.563,1.415,783,6287 -Gandelu,2339,689,10.102,1.012,0.916,713,6889 -Cervens,74053,1181,6.367,0.803,0.727,966,6581 -Marigny-en-Orxois,2465,484,15.553,1.255,1.136,719,6882 -Montreuil-aux-Lions,2521,1373,13.016,1.148,1.039,717,6881 -Chainaz-les-Frasses,74054,700,5.564,0.751,0.680,933,6523 -Vendières,2777,169,12.786,1.138,1.030,730,6864 -La Chapelle-aux-Chasses,3057,212,25.965,1.622,1.469,742,6621 -Chevagnes,3074,667,49.887,2.248,2.035,742,6609 -Challonges,74055,518,7.891,0.894,0.809,917,6549 -Escurolles,3109,768,13.367,1.164,1.054,719,6559 -Baix,7022,1090,17.552,1.334,1.208,840,6405 -Hérisson,3127,627,32.466,1.814,1.642,683,6601 -Louroux-Bourbonnais,3150,215,33.363,1.839,1.665,692,6603 -Monteignet-sur-l'Andelot,3182,267,9.600,0.986,0.893,720,6556 -La Beaume,5019,156,29.648,1.733,1.569,907,6389 -La Chapelle-Rambaud,74059,256,4.296,0.660,0.598,949,6559 -Le Monêtier-les-Bains,5079,1040,134.683,3.694,3.345,974,6446 -Nozières,7166,258,21.893,1.489,1.348,824,6436 -Châtillon-sur-Cluses,74064,1271,9.147,0.963,0.872,975,6562 -La Colle-sur-Loup,6044,7866,9.823,0.998,0.904,1032,6295 -Isola,6073,697,99.616,3.177,2.877,1021,6348 -Fleigneux,8170,203,13.752,1.180,1.068,844,6968 -Saint-Paul-de-Vence,6128,3456,7.268,0.858,0.777,1032,6295 -Contamine-Sarzin,74086,692,6.871,0.834,0.755,930,6549 -Désaignes,7079,1087,51.566,2.286,2.070,813,6432 -Hargnies,8214,476,42.779,2.082,1.885,827,6984 -Labatie-d'Andaure,7114,210,10.068,1.010,0.914,818,6440 -Contamine-sur-Arve,74087,2046,6.739,0.826,0.748,958,6566 -Labégude,7116,1410,3.191,0.569,0.515,809,6394 -Mitry-Mory,77294,19911,29.894,1.740,1.575,669,6878 -Saint-Agrève,7204,2366,48.521,2.217,2.007,813,6432 -Hierges,8226,208,4.096,0.644,0.583,825,7001 -Chilly,8121,147,5.890,0.773,0.700,806,6971 -Fépin,8166,265,5.866,0.771,0.698,821,6994 -Regniowez,8355,395,18.340,1.363,1.234,804,6983 -Sévigny-la-Forêt,8417,272,26.240,1.631,1.477,809,6976 -Tremblois-lès-Rocroi,8460,161,1.687,0.413,0.374,809,6972 -Menthonnex-sous-Clermont,74178,695,10.137,1.013,0.917,929,6545 -Williers,8501,42,2.311,0.484,0.438,868,6954 -Bédeille,9046,72,9.575,0.985,0.892,547,6221 -Auzat,9030,498,162.786,4.061,3.677,570,6189 -Bagert,9033,38,3.327,0.581,0.526,544,6222 -Balacet,9034,24,2.154,0.467,0.423,534,6202 -Benagues,9050,503,3.106,0.561,0.508,586,6222 -Bonac-Irazein,9059,119,37.941,1.961,1.776,534,6202 -Sillingy,74272,5143,14.770,1.223,1.107,932,6543 -Brassac,9066,639,24.442,1.574,1.425,578,6207 -Freychenet,9126,91,25.410,1.605,1.453,600,6202 -Ganac,9130,705,20.263,1.433,1.297,585,6204 -Gaudiès,9132,241,10.493,1.031,0.933,601,6230 -Leychert,9166,101,5.898,0.773,0.700,596,6204 -Montaut,9199,716,35.193,1.888,1.709,588,6232 -Montbel,9200,120,17.524,1.332,1.206,614,6211 -Moulin-Neuf,9213,235,2.886,0.541,0.490,614,6221 -Péreille,9227,212,5.429,0.742,0.672,604,6204 -Laborel,26153,104,23.583,1.546,1.400,908,6360 -Roumengoux,9251,173,6.802,0.830,0.751,611,6219 -Cassis,13022,7162,26.015,1.624,1.470,911,6241 -Saint-Jean-du-Falga,9265,2946,4.017,0.638,0.578,587,6222 -Saint-Paul-de-Jarrat,9272,1306,22.461,1.509,1.366,591,6204 -Saint-Sulpice-de-Cognac,16355,1221,23.806,1.553,1.406,431,6523 -Soula,9300,183,11.327,1.071,0.970,592,6204 -Villeneuve-d'Olmes,9336,1002,5.985,0.779,0.705,603,6201 -Cabariot,17075,1324,15.246,1.243,1.125,404,6543 -Courceroy,10106,126,6.685,0.823,0.745,728,6820 -La Louptière-Thénard,10208,291,13.728,1.179,1.067,731,6810 -La Flotte,17161,2754,12.256,1.114,1.009,364,6572 -Dormelles,77161,807,13.006,1.148,1.039,690,6804 -La Motte-Tilly,10259,382,11.665,1.087,0.984,733,6818 -Mirabel-et-Blacons,26183,1058,17.776,1.342,1.215,872,6405 -Saint-Nicolas-la-Chapelle,10355,63,11.623,1.085,0.982,738,6825 -Mirambeau,17236,1487,26.750,1.646,1.490,422,6479 -La Saulsotte,10367,698,18.916,1.384,1.253,734,6830 -Nieul-lès-Saintes,17262,1221,20.475,1.440,1.304,407,6522 -Traînel,10382,1073,19.976,1.423,1.288,735,6809 -La Palme,11188,1711,32.629,1.818,1.646,699,6204 -Port-la-Nouvelle,11266,5600,37.405,1.947,1.763,702,6218 -Doue,77162,994,20.046,1.425,1.290,715,6866 -Rivel,11316,193,24.868,1.587,1.437,617,6198 -Prades-d'Aubrac,12187,398,46.683,2.175,1.969,702,6389 -Nieul-le-Virouil,17263,580,22.587,1.513,1.370,424,6488 -Saint-Chély-d'Aubrac,12214,538,77.002,2.793,2.529,690,6386 -Villedoux,17472,2240,15.720,1.262,1.143,388,6578 -Châtelaillon-Plage,17094,5923,6.737,0.826,0.748,383,6563 -Nod-sur-Seine,21455,215,25.226,1.599,1.448,821,6739 -Chaunac,17096,85,2.232,0.476,0.431,437,6478 -Chenac-Saint-Seurin-d'Uzet,17098,588,40.812,2.033,1.841,396,6493 -Lahourcade,64306,696,10.962,1.054,0.954,408,6257 -La Clisse,17112,671,5.254,0.730,0.661,407,6521 -L'Albère,66001,83,16.282,1.284,1.163,691,6155 -Consac,17116,214,9.092,0.960,0.869,419,6487 -Épargnes,17152,854,23.764,1.552,1.405,408,6501 -Esnandes,17153,2056,7.646,0.880,0.797,384,6582 -Douy-la-Ramée,77163,323,7.954,0.898,0.813,690,6885 -Lussant,17216,996,9.009,0.955,0.865,405,6543 -Marsilly,17222,3003,12.061,1.105,1.000,384,6578 -Saint-Dizant-du-Bois,17324,113,4.171,0.650,0.589,421,6486 -Villiers-le-Duc,21704,81,86.582,2.962,2.682,831,6748 -Saint-Martin-de-Ré,17369,2288,4.744,0.693,0.627,365,6575 -Plan-de-Baix,26240,145,19.585,1.409,1.276,872,6414 -Salles-sur-Mer,17420,2103,14.109,1.196,1.083,387,6563 -Dreux,28134,30977,24.256,1.568,1.420,579,6854 -Le Seure,17426,252,5.401,0.740,0.670,438,6528 -Vibrac,17468,153,5.050,0.715,0.647,438,6479 -Bussy,18040,380,26.967,1.653,1.497,673,6641 -Dingy-Saint-Clair,74102,1414,34.000,1.856,1.680,951,6545 -Osmery,18173,271,21.704,1.483,1.343,672,6651 -Glay,25274,341,6.627,0.819,0.742,993,6706 -Larrey,21343,91,18.622,1.374,1.244,805,6759 -Poinçon-lès-Larrey,21488,195,10.463,1.030,0.933,808,6757 -Vertault,21671,56,19.311,1.399,1.267,797,6759 -Villedieu,21693,69,14.122,1.196,1.083,801,6756 -Villers-le-Lac,25321,4889,30.315,1.753,1.587,978,6672 -Coulounieix-Chamiers,24138,7948,21.621,1.480,1.340,518,6452 -Périgueux,24322,29912,10.120,1.013,0.917,519,6459 -Trélissac,24557,6629,24.049,1.561,1.413,522,6458 -Fournet-Blancheroche,25255,366,13.153,1.154,1.045,987,6681 -Izon-la-Bruisse,26150,10,14.587,1.216,1.101,910,6358 -Montancy,25386,148,8.843,0.947,0.857,1006,6701 -Beaurières,26040,73,24.422,1.573,1.424,903,6384 -Essert-Romand,74114,516,6.786,0.829,0.751,981,6573 -La Garde-Adhémar,26138,1048,27.836,1.679,1.520,842,6365 -Faucigny,74122,605,4.922,0.706,0.639,960,6564 -Lemps,26161,48,16.967,1.311,1.187,891,6364 -Omblèze,26221,71,45.027,2.136,1.934,881,6424 -Beaucaire,30032,15882,86.482,2.960,2.680,831,6297 -Beauvoisin,30033,4724,28.018,1.685,1.526,807,6294 -Pierrelatte,26235,13286,49.449,2.238,2.026,838,6365 -Héry-sur-Alby,74142,971,7.340,0.862,0.780,935,6525 -Saillans,26289,1233,15.748,1.263,1.144,871,6402 -Saulce-sur-Rhône,26337,1850,18.996,1.387,1.256,843,6405 -Verclause,26369,60,25.983,1.623,1.469,892,6372 -Vernouillet,28404,12494,12.269,1.115,1.010,581,6848 -Locmaria-Plouzané,29130,5052,23.221,1.534,1.389,135,6839 -Cabrières,30057,1611,14.837,1.226,1.110,816,6316 -Ploumoguer,29201,2029,38.928,1.986,1.798,129,6835 -Sainte-Anastasie,30228,1677,43.664,2.103,1.904,812,6314 -Aigaliers,30001,501,27.907,1.682,1.523,801,6331 -Aubais,30019,2682,11.876,1.097,0.993,792,6293 -Saint-Brès,30237,648,11.355,1.073,0.972,795,6356 -Aubord,30020,2384,9.500,0.981,0.888,806,6297 -Bellegarde,30034,6987,45.130,2.138,1.936,818,6299 -La Bruguière,30056,330,16.535,1.294,1.172,810,6335 -Sainte-Cécile-d'Andorge,30239,580,19.030,1.389,1.258,780,6349 -Campestre-et-Luc,30064,103,38.350,1.971,1.785,734,6313 -Saint-Germain-sous-Doue,77411,526,10.016,1.007,0.912,713,6861 -Fontarèches,30115,261,13.357,1.163,1.053,813,6339 -Poulx,30206,3835,11.988,1.102,0.998,815,6312 -Saint-Laurent-la-Vernède,30279,685,11.840,1.095,0.991,819,6337 -Vissec,30353,56,21.813,1.487,1.346,734,6308 -Saint-Victor-de-Malcap,30303,836,10.981,1.055,0.955,801,6353 -Sanilhac-Sagriès,30308,793,22.214,1.500,1.358,817,6320 -Serviers-et-Labaume,30319,600,12.582,1.129,1.022,808,6331 -Arlos,31017,99,9.517,0.982,0.889,509,6198 -Artigue,31019,29,9.786,0.996,0.902,505,6195 -Bagnères-de-Luchon,31042,2324,52.159,2.299,2.082,503,6193 -Oô,31404,88,41.790,2.058,1.863,492,6186 -Castelginest,31116,10199,8.191,0.911,0.825,574,6292 -Ambès,33004,3143,24.765,1.584,1.434,417,6444 -Castillon-de-Larboust,31123,54,27.904,1.681,1.522,498,6193 -Fos,31190,240,18.295,1.361,1.232,513,6201 -Launaguet,31282,8564,7.082,0.847,0.767,576,6288 -Cabara,33078,515,3.438,0.590,0.534,450,6421 -Anglade,33006,943,13.899,1.187,1.075,411,6466 -Publier,74218,7072,8.975,0.954,0.864,974,6595 -Artigues-près-Bordeaux,33013,8638,7.256,0.857,0.776,424,6422 -Espiet,33157,778,6.777,0.829,0.751,443,6415 -Grézillac,33194,695,7.782,0.888,0.804,448,6420 -Magalas,34147,3313,20.876,1.454,1.316,720,6264 -La Lande-de-Fronsac,33219,2351,8.547,0.931,0.843,435,6436 -Montagnac,34162,4310,39.831,2.009,1.819,746,6264 -Lormont,33249,23247,7.825,0.890,0.806,424,6426 -Cazouls-d'Hérault,34068,403,4.372,0.666,0.603,736,6268 -Lugaignac,33257,476,3.809,0.621,0.562,448,6417 -Mouillac,33295,90,1.859,0.434,0.393,436,6440 -Vanzy,74291,328,5.601,0.753,0.682,921,6552 -Pujols,33344,544,7.400,0.866,0.784,461,6415 -Saint-Androny,33370,558,36.242,1.916,1.735,409,6459 -Fabrègues,34095,6914,31.976,1.800,1.630,763,6268 -Saint-Aubin-de-Branne,33375,350,5.524,0.748,0.677,448,6417 -Saint-André-de-Boëge,74226,546,12.563,1.128,1.021,963,6572 -Saint-Michel-de-Rieufret,33452,748,18.955,1.386,1.255,423,6397 -Saint-Vincent-de-Paul,33487,1011,13.885,1.186,1.074,425,6440 -Saint-Pey-de-Castets,33460,623,11.111,1.061,0.961,457,6415 -Saint-Quentin-de-Baron,33466,2398,8.848,0.947,0.857,443,6420 -Saint-Selve,33474,2865,17.883,1.346,1.219,423,6405 -Tarnès,33524,316,1.441,0.382,0.346,435,6436 -Sainte-Terre,33485,1891,14.087,1.195,1.082,454,6418 -Vendays-Montalivet,33540,2464,100.353,3.189,2.887,384,6477 -Taillecavat,33520,312,9.515,0.982,0.889,475,6397 -Vensac,33541,972,33.626,1.846,1.671,382,6488 -Vérac,33542,921,8.603,0.934,0.846,439,6439 -Autignac,34018,904,11.627,1.085,0.982,713,6269 -Jonquières,34122,439,2.063,0.457,0.414,739,6285 -Pézènes-les-Mines,34200,244,27.017,1.655,1.498,722,6280 -Sceaux-du-Gâtinais,45303,637,31.742,1.793,1.623,669,6778 -Lagamas,34125,111,4.512,0.676,0.612,744,6285 -Vulbens,74314,1541,12.399,1.121,1.015,924,6562 -Mourèze,34175,192,13.529,1.171,1.060,727,6282 -Nizas,34184,666,8.653,0.936,0.847,735,6269 -Thézan-lès-Béziers,34310,2971,13.617,1.175,1.064,712,6255 -Pailhès,34191,564,5.991,0.779,0.705,716,6259 -Usclas-d'Hérault,34315,393,2.809,0.533,0.483,739,6270 -Puimisson,34223,1052,6.487,0.811,0.734,715,6261 -Roujan,34237,2122,16.914,1.309,1.185,726,6265 -Saint-André-de-Sangonis,34239,5855,19.641,1.411,1.278,741,6282 -Saint-Guiraud,34262,207,6.076,0.785,0.711,738,6286 -Capbreton,40065,8753,21.183,1.465,1.326,345,6294 -Saint-Jean-de-Védas,34270,9539,13.160,1.155,1.046,769,6273 -Saint-Pons-de-Mauchiens,34285,669,13.591,1.173,1.062,739,6270 -Vailhan,34319,160,11.340,1.072,0.971,722,6271 -Valmascle,34323,40,6.917,0.837,0.758,725,6276 -Dax,40088,20891,19.702,1.413,1.279,376,6300 -Vendargues,34327,6176,9.185,0.965,0.874,780,6284 -Tarnos,40312,12363,26.947,1.652,1.496,343,6276 -Acigné,35001,6645,30.223,1.750,1.584,360,6790 -Noyal-sur-Vilaine,35207,5914,31.247,1.779,1.611,368,6787 -Ciboure,64189,6297,7.449,0.869,0.787,324,6263 -La Buisse,38061,3133,11.748,1.091,0.988,904,6472 -Chuzelles,38110,2050,13.350,1.163,1.053,848,6498 -Reventin-Vaugris,38336,1861,18.416,1.366,1.237,843,6485 -Seyssuel,38487,1996,9.677,0.990,0.896,844,6500 -Vielle-Saint-Girons,40326,1246,74.510,2.748,2.488,354,6320 -Voreppe,38565,9356,28.939,1.712,1.550,907,6465 -Mimizan,40184,6902,115.944,3.427,3.103,368,6346 -Biarrotte,40042,269,4.956,0.709,0.642,355,6281 -Biaudos,40044,884,15.589,1.257,1.138,350,6284 -Mées,40179,1786,15.204,1.241,1.124,369,6296 -Saint-Paul-lès-Dax,40279,13092,58.308,2.431,2.201,376,6301 -Orx,40213,608,12.019,1.104,1.000,345,6289 -Saint-Julien-en-Born,40266,1614,73.022,2.720,2.463,364,6337 -Saubrigues,40292,1391,21.532,1.477,1.337,350,6285 -Soorts-Hossegor,40304,3701,14.480,1.211,1.096,347,6296 -Tosse,40317,2734,17.948,1.349,1.221,353,6297 -Amilly,45004,12694,40.273,2.020,1.829,688,6767 -Auxy,45018,977,20.268,1.433,1.297,664,6781 -Yvoire,74315,981,3.143,0.564,0.511,956,6589 -Boësses,45033,390,13.110,1.153,1.044,659,6781 -Saint-Germain-des-Prés,45279,1916,26.415,1.636,1.481,686,6761 -Bromeilles,45056,330,14.754,1.223,1.107,664,6791 -Desmonts,45124,169,4.764,0.695,0.629,663,6790 -Albas,46001,525,21.735,1.484,1.344,559,6372 -Anglars-Juillac,46005,322,5.544,0.749,0.678,557,6377 -Concorès,46072,323,19.071,1.390,1.259,570,6402 -Cabrerets,46040,229,43.990,2.111,1.911,593,6377 -Dégagnac,46087,656,37.889,1.959,1.774,568,6402 -Caillac,46044,604,7.551,0.875,0.792,571,6379 -Figeac,46102,9833,35.368,1.893,1.714,626,6390 -Cazals,46066,626,10.546,1.034,0.936,556,6396 -Crayssac,46080,769,15.112,1.237,1.120,565,6381 -Frayssinet-le-Gélat,46114,355,23.220,1.534,1.389,550,6391 -Gindou,46120,314,15.654,1.259,1.140,563,6389 -Gorses,46125,322,35.890,1.907,1.727,620,6412 -Bellefont-La Rauze,46156,1224,37.746,1.956,1.771,577,6379 -Latronquière,46160,451,10.403,1.027,0.930,626,6414 -Luzech,46182,1805,22.154,1.498,1.356,565,6381 -Montcléra,46200,275,20.928,1.456,1.318,558,6390 -Peyrilles,46219,370,28.552,1.701,1.540,575,6390 -Planioles,46221,513,5.787,0.766,0.694,624,6396 -Rampoux,46234,97,5.779,0.765,0.693,567,6396 -Saint-Caprais,46250,71,9.074,0.959,0.868,551,6393 -Saint-Vincent-Rive-d'Olt,46296,444,19.882,1.419,1.285,569,6374 -Saint-Julien-des-Points,48163,111,3.777,0.619,0.560,778,6351 -Bouchy-Saint-Genest,51071,197,19.641,1.411,1.278,740,6839 -Courgivaux,51185,319,10.837,1.048,0.949,738,6846 -Meures,52322,136,8.155,0.909,0.823,853,6792 -Nesle-la-Reposte,51395,103,10.640,1.038,0.940,742,6837 -Villeneuve-la-Lionne,51625,286,15.298,1.245,1.127,735,6854 -Avrecourt,52033,121,7.647,0.880,0.797,889,6764 -Parnoy-en-Bassigny,52377,299,40.772,2.033,1.841,901,6769 -Breuvannes-en-Bassigny,52074,682,48.668,2.221,2.011,892,6784 -Boisleux-Saint-Marc,62152,254,3.401,0.587,0.531,686,7014 -Laneuville-à-Rémy,52266,65,5.965,0.777,0.704,838,6822 -Saint-Eusèbe,74231,524,6.915,0.837,0.758,930,6539 -La Porte du Der,52331,2285,47.498,2.194,1.986,838,6822 -Saint-Dizier,52448,24932,48.547,2.218,2.008,843,6843 -Val-de-Meuse,52332,1875,77.563,2.803,2.538,885,6773 -Bouret-sur-Canche,62163,260,5.005,0.712,0.645,652,7021 -Sexfontaines,52472,130,20.811,1.452,1.315,853,6792 -Voutré,53276,911,18.626,1.374,1.244,459,6789 -Viéville,52522,336,11.298,1.070,0.969,858,6796 -Denguin,64198,1752,12.130,1.109,1.004,419,6258 -Vraincourt,52548,90,3.449,0.591,0.535,857,6793 -Saulxerotte,54494,110,3.117,0.562,0.509,916,6824 -Assé-le-Bérenger,53010,442,11.937,1.100,0.996,455,6788 -Affléville,54004,179,9.593,0.986,0.893,898,6911 -Augan,56006,1560,41.055,2.040,1.847,310,6769 -Arnaville,54022,564,5.262,0.730,0.661,923,6883 -Val de Briey,54099,8358,38.931,1.986,1.798,913,6915 -Barbonville,54045,439,10.823,1.047,0.948,945,6832 -Manoncourt-en-Vermois,54345,340,6.695,0.824,0.746,941,6836 -Batilly,54051,1261,6.371,0.803,0.727,918,6900 -Bonviller,54083,185,5.061,0.716,0.648,958,6844 -Chaligny,54111,2868,13.447,1.167,1.057,926,6840 -Chavigny,54123,1895,6.751,0.827,0.749,930,6843 -Marainviller,54350,672,17.158,1.319,1.194,966,6836 -Courbesseaux,54139,334,6.411,0.806,0.730,950,6848 -Moutiers,54391,1569,6.830,0.832,0.753,913,6907 -Nancy,54395,104592,14.952,1.231,1.115,935,6850 -Damelevières,54152,3176,8.216,0.912,0.826,949,6836 -Rosières-aux-Salines,54462,2861,27.476,1.669,1.511,951,6837 -Deuxville,54155,429,7.249,0.857,0.776,956,6841 -Hussigny-Godbrange,54270,3511,15.309,1.245,1.127,904,6939 -Jaillon,54272,472,7.469,0.870,0.788,917,6854 -Laneuveville-aux-Bois,54297,316,19.185,1.394,1.262,968,6845 -Mairy-Mainville,54334,567,12.484,1.125,1.019,908,6917 -Norroy-le-Sec,54402,419,13.794,1.182,1.070,903,6909 -Saint-Eustache,74232,506,10.538,1.033,0.935,941,6527 -Ochey,54405,519,18.132,1.355,1.227,920,6839 -Saint-Félix,74233,2400,6.601,0.818,0.741,930,6526 -Pagny-sur-Moselle,54415,4158,11.288,1.069,0.968,921,6879 -Réméréville,54456,536,13.500,1.170,1.059,951,6852 -Saint-Jean-de-Sixt,74239,1444,12.210,1.112,1.007,967,6542 -Rosières-en-Haye,54463,237,10.789,1.046,0.947,921,6860 -Saint-Max,54482,9872,1.836,0.431,0.390,936,6851 -Saint-Nicolas-de-Port,54483,7573,8.398,0.922,0.835,941,6841 -Selaincourt,54500,177,11.072,1.059,0.959,915,6824 -Cagnicourt,62192,432,9.539,0.983,0.890,702,7013 -Sexey-aux-Forges,54505,696,14.430,1.209,1.095,925,6840 -Calais,62193,74978,34.331,1.865,1.689,620,7093 -Tucquegnieux,54536,2489,9.151,0.963,0.872,912,6918 -Ecques,62288,2120,12.814,1.139,1.031,647,7065 -Ancerville,55010,2766,21.467,1.475,1.335,850,6837 -Aire-sur-la-Lys,62014,9859,33.243,1.835,1.661,657,7059 -Caro,56035,1164,38.184,1.967,1.781,306,6767 -Hennebont,56083,15620,18.776,1.379,1.249,229,6763 -Ploërdut,56163,1216,76.262,2.780,2.517,230,6790 -Échouboulains,77164,557,20.898,1.455,1.317,695,6822 -Plumergat,56175,4088,42.195,2.068,1.872,254,6756 -Pluneret,56176,5584,27.197,1.660,1.503,252,6748 -Sainte-Anne-d'Auray,56263,2660,4.981,0.710,0.643,253,6752 -Imling,57344,713,6.454,0.809,0.732,995,6852 -Forbach,57227,21627,16.453,1.291,1.169,986,6906 -Maizières-lès-Metz,57433,11232,8.836,0.946,0.857,932,6903 -Sarrebourg,57630,11987,16.685,1.300,1.177,995,6855 -Manom,57441,2757,10.395,1.026,0.929,930,6926 -Semécourt,57645,974,2.299,0.483,0.437,927,6904 -Morsbach,57484,2680,4.977,0.710,0.643,983,6904 -Croix-Caluyau,59164,262,3.982,0.635,0.575,742,7005 -Sainte-Marie-aux-Chênes,57620,4143,10.191,1.016,0.920,917,6903 -Montdauphin,77303,245,9.844,0.999,0.905,729,6863 -Thionville,57672,40586,49.846,2.247,2.034,930,6920 -Vincly,62862,154,4.628,0.685,0.620,643,7052 -Zoufftgen,57764,1208,16.693,1.301,1.178,928,6932 -Bantouzelle,59049,420,7.704,0.884,0.800,718,6995 -Bissezeele,59083,243,3.587,0.603,0.546,659,7091 -Bousies,59099,1734,9.859,0.999,0.905,744,7008 -Haussy,59289,1538,16.157,1.279,1.158,732,7012 -Cappelle-la-Grande,59131,7888,5.485,0.745,0.675,654,7101 -Herzeele,59305,1629,17.209,1.320,1.195,670,7089 -Coudekerque-Branche,59155,21204,9.130,0.962,0.871,656,7102 -Steenbecque,59578,1707,11.978,1.102,0.998,662,7066 -Vertain,59612,523,5.795,0.766,0.694,737,7014 -Crochte,59162,669,7.861,0.892,0.808,657,7091 -Witternesse,62900,587,5.540,0.749,0.678,655,7059 -Deûlémont,59173,1680,9.979,1.006,0.911,699,7071 -Arbonne,64035,2164,10.710,1.042,0.943,332,6272 -Escautpont,59207,4211,5.749,0.763,0.691,737,7038 -Brégy,60101,621,13.218,1.157,1.048,693,6887 -Fresnes-sur-Escaut,59253,7601,11.715,1.089,0.986,743,7037 -Hon-Hergies,59310,853,11.000,1.056,0.956,761,7028 -Morbecque,59416,2556,44.385,2.121,1.920,662,7067 -Moustier-en-Fagne,59420,61,7.165,0.852,0.771,785,6999 -Ève,60226,420,10.513,1.032,0.934,681,6889 -Ohain,59445,1204,11.849,1.096,0.992,781,6991 -Bischwiller,67046,12561,17.197,1.320,1.195,1057,6859 -Les Rues-des-Vignes,59517,794,17.720,1.340,1.213,718,6992 -Wallers-en-Fagne,59633,288,7.765,0.887,0.803,785,6998 -Montereau-Fault-Yonne,77305,19361,9.043,0.957,0.866,699,6809 -Wormhout,59663,5598,27.405,1.666,1.508,666,7085 -Oroër,60480,560,9.149,0.963,0.872,641,6936 -Béthisy-Saint-Pierre,60068,3113,6.583,0.817,0.740,687,6912 -Le Plessis-Belleville,60500,3194,6.908,0.837,0.758,681,6889 -Fontaine-Saint-Lucien,60243,163,7.274,0.858,0.777,637,6936 -Lagny-le-Sec,60341,2067,11.328,1.071,0.970,680,6887 -Saint-Sauveur,60597,1670,16.556,1.295,1.173,689,6914 -Silly-le-Long,60619,1165,11.437,1.076,0.974,686,6889 -Ablain-Saint-Nazaire,62001,1784,9.961,1.005,0.910,681,7032 -Bernex,74033,1309,22.295,1.503,1.361,982,6593 -Avion,62065,17900,13.028,1.149,1.040,686,7035 -Le Biot,74034,570,13.136,1.154,1.045,980,6584 -Bailleulval,62074,249,3.954,0.633,0.573,671,7014 -Baincthun,62075,1290,26.862,1.650,1.494,607,7071 -Basseux,62085,136,3.393,0.586,0.531,675,7013 -Boisleux-au-Mont,62151,519,4.722,0.692,0.627,684,7011 -Blendecques,62139,5022,9.596,0.986,0.893,652,7068 -Blessy,62141,866,5.364,0.737,0.667,653,7059 -Dennebrœucq,62267,385,3.728,0.615,0.557,640,7052 -Givenchy-en-Gohelle,62371,1962,5.936,0.776,0.703,686,7033 -Mencas,62565,76,2.014,0.452,0.409,640,7052 -Hesdin-l'Abbé,62448,1872,7.410,0.866,0.784,607,7063 -Morval,62593,95,2.434,0.497,0.450,690,6992 -Heuringhem,62452,1329,5.892,0.773,0.700,651,7067 -Lambres,62486,1058,4.388,0.667,0.604,657,7057 -Marck,62548,10760,31.425,1.784,1.615,629,7095 -Ransart,62689,411,7.471,0.870,0.788,675,7011 -Rebreuve-sur-Canche,62694,197,8.348,0.920,0.833,652,7016 -Reclinghem,62696,246,6.079,0.785,0.711,643,7052 -Rivière,62712,1124,12.023,1.104,1.000,678,7017 -Villers-lès-Cagnicourt,62858,267,4.437,0.670,0.607,702,7014 -Souchez,62801,2509,6.668,0.822,0.744,681,7031 -Le Transloy,62829,401,10.475,1.030,0.933,690,6996 -Ahetze,64009,2111,10.575,1.035,0.937,328,6267 -Castelmoron-d'Albret,33103,53,0.028,0.053,0.048,461,6402 -Aïcirits-Camou-Suhast,64010,672,9.472,0.980,0.887,374,6255 -Ainhoa,64014,671,16.230,1.282,1.161,337,6256 -Bonnevaux,74041,271,7.841,0.891,0.807,982,6581 -Amendeuix-Oneix,64018,448,7.592,0.877,0.794,370,6256 -Arette,64040,1040,92.109,3.055,2.766,400,6225 -Ascain,64065,4213,19.350,1.400,1.268,323,6262 -Autevielle-Saint-Martin-Bideren,64083,212,5.941,0.776,0.703,379,6263 -Bayonne,64102,50589,25.775,1.616,1.463,340,6275 -Bardos,64094,1828,42.810,2.083,1.886,356,6269 -Béguios,64105,249,11.246,1.067,0.966,365,6257 -Barzun,64097,595,8.208,0.912,0.826,443,6240 -Bilhères,64128,161,17.243,1.322,1.197,414,6222 -Bustince-Iriberry,64155,89,5.698,0.760,0.688,361,6240 -Saint-Jean-de-Tholome,74240,978,12.372,1.120,1.014,966,6563 -Espelette,64213,2061,27.272,1.662,1.505,337,6263 -Géronce,64241,444,16.149,1.279,1.158,400,6241 -Saint-Paul-en-Chablais,74249,2393,14.381,1.207,1.093,977,6591 -Gabat,64228,245,8.463,0.926,0.838,375,6263 -Hasparren,64256,6757,77.488,2.802,2.537,353,6261 -Lahonce,64304,2346,9.791,0.996,0.902,341,6276 -Hendaye,64260,16599,10.442,1.029,0.932,315,6265 -Izeste,64280,421,6.942,0.839,0.760,417,6226 -Jatxou,64282,1142,13.978,1.190,1.077,344,6265 -Jaxu,64283,205,10.682,1.040,0.942,357,6245 -Mormant,77317,4797,16.617,1.298,1.175,693,6831 -Labastide-Monréjeau,64290,591,8.336,0.919,0.832,415,6259 -Laruns,64320,1187,248.150,5.014,4.540,429,6200 -Louvie-Soubiron,64354,120,26.429,1.636,1.481,432,6217 -Mouguerre,64407,5013,22.441,1.508,1.365,345,6268 -Lucq-de-Béarn,64359,941,48.791,2.223,2.013,406,6256 -Luxe-Sumberraute,64362,402,8.466,0.926,0.838,370,6256 -Montardon,64399,2295,8.362,0.920,0.833,426,6256 -Bonneville,74042,12735,27.247,1.662,1.505,960,6560 -Mourenx,64410,6487,6.430,0.807,0.731,405,6260 -Estaing,65169,78,74.507,2.748,2.488,441,6211 -Osserain-Rivareyte,64435,211,6.543,0.814,0.737,381,6261 -Pau,64445,77251,31.484,1.786,1.617,429,6257 -Poey-d'Oloron,64449,168,4.808,0.698,0.632,401,6246 -Pontacq,64453,2932,29.057,1.716,1.554,450,6236 -Sainte-Engrâce,64475,192,73.017,2.720,2.463,388,6222 -Urrugne,64545,9995,51.612,2.287,2.071,316,6265 -Saint-Goin,64481,223,5.593,0.753,0.682,395,6242 -Saint-Palais,64493,1842,7.533,0.874,0.791,373,6253 -Urt,64546,2269,19.250,1.397,1.265,356,6277 -Ustaritz,64547,6826,32.747,1.822,1.650,334,6265 -Génos,65195,144,23.895,1.556,1.409,486,6188 -Verdets,64551,264,5.580,0.752,0.681,403,6244 -Saint-Pierre-en-Faucigny,74250,6389,14.983,1.232,1.115,958,6556 -Arrens-Marsous,65032,721,99.129,3.169,2.869,428,6208 -Asté,65042,553,26.166,1.628,1.474,473,6221 -Cauterets,65138,924,157.968,4.001,3.623,442,6207 -Saint-Sigismond,74252,590,7.901,0.895,0.810,979,6561 -Ferrières,65176,97,17.284,1.323,1.198,434,6217 -Loudenvielle,65282,293,44.225,2.117,1.917,489,6194 -Tramezaïgues,65450,34,35.016,1.884,1.706,477,6193 -Saint-Lary-Soulan,65388,844,91.140,3.039,2.752,482,6195 -Banyuls-sur-Mer,66016,4766,42.868,2.084,1.887,706,6154 -Baltzenheim,68019,574,6.486,0.811,0.734,1037,6787 -Dorres,66062,166,25.035,1.593,1.442,613,6153 -Wintzenheim,68374,7534,19.021,1.388,1.257,1017,6780 -Enveitg,66066,651,30.298,1.752,1.586,606,6160 -Porta,66146,117,65.239,2.571,2.328,606,6160 -Porté-Puymorens,66147,103,49.782,2.246,2.034,607,6165 -Prats-de-Mollo-la-Preste,66150,1155,118.681,3.468,3.140,644,6147 -Les Déserts,73098,780,33.478,1.842,1.668,931,6512 -Saleilles,66189,5190,6.157,0.790,0.715,694,6174 -Saint-Alban-d'Hurtières,73220,346,19.495,1.405,1.272,957,6492 -Le Soler,66195,7666,10.395,1.026,0.929,686,6177 -Saint-Pierre-de-Belleville,73272,168,7.385,0.865,0.783,951,6486 -Val-Cenis,73290,2116,456.077,6.798,6.155,1018,6467 -Le Tech,66206,99,26.364,1.634,1.479,655,6154 -Théza,66208,2011,4.854,0.701,0.635,697,6170 -Thuir,66210,7551,19.973,1.423,1.288,678,6173 -Alex,74003,1052,16.905,1.309,1.185,948,6537 -Gresswiller,67168,1696,9.587,0.986,0.893,1024,6831 -Allèves,74004,409,8.839,0.946,0.857,941,6520 -Mutzig,67313,5992,8.441,0.925,0.838,1027,6834 -Reichstett,67389,4430,8.026,0.902,0.817,1048,6850 -Saint-Sixt,74253,1010,5.217,0.727,0.658,957,6556 -Scheibenhard,67443,817,4.641,0.686,0.621,1077,6885 -Schweighouse-sur-Moder,67458,4915,9.938,1.003,0.908,1046,6870 -Mésigny,74179,748,6.738,0.826,0.748,932,6546 -Souffelweyersheim,67471,7860,4.518,0.677,0.613,1050,6847 -Allinges,74005,4433,15.085,1.236,1.119,964,6585 -Buhl,68058,3290,8.796,0.944,0.855,1012,6765 -Allonzier-la-Caille,74006,2042,9.608,0.987,0.894,942,6549 -Colmar,68066,69899,66.556,2.597,2.351,1022,6788 -Amancy,74007,2579,8.629,0.935,0.847,955,6559 -Scientrier,74262,1176,7.217,0.855,0.774,955,6561 -Guebwiller,68112,11062,9.637,0.988,0.895,1015,6766 -Annemasse,74012,35041,4.970,0.710,0.643,948,6570 -Anthy-sur-Léman,74013,2159,4.666,0.688,0.623,965,6591 -Horbourg-Wihr,68145,5834,9.450,0.979,0.886,1028,6782 -Kunheim,68172,1747,11.776,1.092,0.989,1036,6784 -Leymen,68182,1203,11.623,1.085,0.982,1036,6722 -Sainte-Marie-aux-Mines,68298,5118,45.159,2.139,1.937,1005,6796 -Wettolsheim,68365,1727,8.749,0.942,0.853,1024,6780 -Mont-Saxonnex,74189,1650,25.850,1.618,1.465,968,6550 -Amage,70011,349,6.555,0.815,0.738,962,6754 -Arbusigny,74015,1102,12.235,1.113,1.008,947,6561 -Saint-Bresson,70460,438,26.753,1.646,1.490,960,6760 -Archamps,74016,2571,10.725,1.042,0.943,944,6562 -Le Noyer,73192,213,12.315,1.117,1.011,936,6509 -Valloire,73306,1109,137.734,3.736,3.383,965,6447 -Arenthon,74018,1679,11.436,1.076,0.974,958,6562 -Argonay,74019,2866,5.175,0.724,0.656,943,6542 -Abondance,74001,1408,58.870,2.442,2.211,993,6574 -Alby-sur-Chéran,74002,2580,6.548,0.815,0.738,932,6529 -Beaumont,74031,2806,9.744,0.994,0.900,939,6560 -Ambilly,74008,6302,1.244,0.355,0.321,949,6572 -Annecy,74010,126419,69.879,2.661,2.409,939,6537 -Armoy,74020,1303,4.911,0.705,0.638,968,6590 -Arthaz-Pont-Notre-Dame,74021,1513,5.923,0.775,0.702,950,6568 -Ayse,74024,2132,10.463,1.030,0.933,967,6562 -Cercier,74051,667,11.520,1.080,0.978,938,6550 -Ballaison,74025,1479,13.278,1.160,1.050,960,6583 -La Balme-de-Sillingy,74026,5011,16.453,1.291,1.169,939,6547 -La Balme-de-Thuy,74027,454,17.775,1.342,1.215,951,6538 -Bons-en-Chablais,74043,5563,19.054,1.389,1.258,961,6583 -Brenthonne,74048,1017,8.386,0.922,0.835,961,6583 -Brizon,74049,479,10.420,1.028,0.931,964,6555 -Bossey,74044,1001,3.852,0.625,0.566,946,6565 -Boussy,74046,502,5.250,0.729,0.660,933,6532 -Chapeiry,74061,772,5.782,0.765,0.693,935,6532 -Chavanod,74067,2594,13.313,1.161,1.051,937,6538 -Chêne-en-Semine,74068,480,9.449,0.978,0.885,922,6555 -Mûres,74194,730,5.231,0.728,0.659,937,6527 -Charvonnex,74062,1320,4.721,0.692,0.627,945,6546 -Chens-sur-Léman,74070,2653,10.883,1.050,0.951,951,6587 -Chevrier,74074,517,5.381,0.738,0.668,923,6562 -Collonges-sous-Salève,74082,3958,6.119,0.787,0.713,943,6566 -Chilly,74075,1356,18.568,1.372,1.242,929,6550 -Choisy,74076,1586,16.505,1.293,1.171,934,6550 -Clermont,74078,409,6.969,0.840,0.761,926,6544 -Cordon,74089,968,22.224,1.501,1.359,977,6538 -Cornier,74090,1304,6.802,0.830,0.751,952,6558 -La Côe-d'Arbroz,74091,327,12.176,1.111,1.006,977,6570 -Cranves-Sales,74094,6685,13.589,1.173,1.062,958,6573 -Crempigny-Bonneguête,74095,313,5.865,0.771,0.698,924,6544 -Cruseilles,74096,4365,25.483,1.607,1.455,941,6558 -Nancy-sur-Cluses,74196,445,14.237,1.201,1.087,976,6550 -Cusy,74097,1853,17.440,1.329,1.203,933,6521 -Cuvat,74098,1302,4.713,0.691,0.626,942,6547 -Desingy,74100,803,18.898,1.384,1.253,924,6551 -Doussard,74104,3609,22.573,1.512,1.369,948,6520 -Douvaine,74105,5922,10.548,1.034,0.936,956,6584 -Nangy,74197,1657,4.352,0.664,0.601,954,6566 -Duingt,74108,974,5.985,0.779,0.705,948,6529 -Villiers-Saint-Georges,77519,1223,33.271,1.836,1.662,733,6841 -Entrevernes,74111,217,8.215,0.912,0.826,947,6521 -Epagny Metz-Tessy,74112,7626,11.994,1.102,0.998,938,6545 -Etaux,74116,1946,13.826,1.184,1.072,954,6559 -Évian-les-Bains,74119,9074,4.402,0.668,0.605,975,6593 -Excenevex,74121,1095,6.712,0.825,0.747,956,6587 -Faverges-Seythenex,74123,7602,59.216,2.449,2.217,961,6520 -Feigères,74124,1566,7.617,0.879,0.796,936,6559 -Fessy,74126,902,8.510,0.929,0.841,961,6583 -Fillinges,74128,3390,11.686,1.088,0.985,958,6571 -Franclens,74130,534,5.347,0.736,0.666,917,6553 -Frangy,74131,2153,9.672,0.990,0.896,926,6549 -Les Gets,74134,1249,29.909,1.741,1.576,984,6572 -Giez,74135,548,12.620,1.131,1.024,951,6517 -Le Grand-Bornand,74136,2134,61.303,2.492,2.256,968,6550 -Groisy,74137,3531,21.395,1.472,1.333,945,6548 -Gruffy,74138,1590,14.428,1.209,1.095,941,6524 -Habère-Lullin,74139,984,8.830,0.946,0.857,969,6576 -Habère-Poche,74140,1423,11.933,1.100,0.996,965,6579 -Loisin,74150,1523,7.859,0.892,0.808,956,6579 -Lornay,74151,552,9.649,0.989,0.895,922,6537 -Lugrin,74154,2405,13.276,1.160,1.050,984,6593 -Lullin,74155,806,13.268,1.159,1.049,969,6583 -Lucinges,74153,1633,7.663,0.881,0.798,958,6571 -Lully,74156,710,4.848,0.701,0.635,961,6583 -Mégevette,74174,571,21.799,1.486,1.345,968,6573 -Machilly,74158,1083,5.755,0.764,0.692,954,6579 -Magland,74159,3299,40.274,2.020,1.829,986,6548 -Menthon-Saint-Bernard,74176,1893,6.656,0.821,0.743,949,6534 -Marcellaz-Albanais,74161,1887,14.564,1.215,1.100,935,6533 -Marcellaz,74162,993,4.167,0.650,0.589,959,6565 -Margencel,74163,2120,7.417,0.867,0.785,965,6589 -Marignier,74164,6435,20.757,1.450,1.313,968,6558 -Val de Chaise,74167,1354,18.658,1.375,1.245,961,6520 -Marlioz,74168,1005,8.086,0.905,0.819,934,6553 -Marnaz,74169,5447,8.989,0.954,0.864,972,6559 -Massingy,74170,861,12.355,1.119,1.013,924,6530 -Massongy,74171,1531,9.799,0.996,0.902,953,6586 -Menthonnex-en-Bornes,74177,1075,8.529,0.930,0.842,947,6557 -Maxilly-sur-Léman,74172,1365,4.092,0.644,0.583,979,6596 -Mieussy,74183,2332,44.417,2.121,1.920,969,6569 -Montagny-les-Lanches,74186,702,4.414,0.669,0.606,937,6532 -Montriond,74188,907,24.816,1.586,1.436,987,6577 -Morzine,74191,2827,44.087,2.114,1.914,985,6569 -Moye,74192,1035,23.636,1.548,1.402,927,6536 -La Muraz,74193,1058,14.345,1.206,1.092,949,6565 -Nernier,74199,382,1.827,0.430,0.389,955,6591 -Neuvecelle,74200,3019,4.009,0.637,0.577,976,6593 -Neydens,74201,1776,7.004,0.842,0.762,939,6560 -Onnion,74205,1276,18.902,1.384,1.253,974,6572 -Pers-Jussy,74211,3025,18.650,1.375,1.245,955,6561 -Passy,74208,10863,80.028,2.848,2.579,996,6547 -Peillonnex,74209,1410,6.422,0.807,0.731,962,6565 -Perrignier,74210,1839,7.869,0.893,0.809,962,6585 -Glières-Val-de-Borne,74212,1787,71.582,2.693,2.438,963,6555 -Reignier-Ésery,74220,7923,25.066,1.594,1.443,949,6565 -Le Reposoir,74221,515,37.267,1.943,1.759,976,6550 -La Rivière-Enverse,74223,462,8.013,0.901,0.816,983,6562 -La Roche-sur-Foron,74224,11795,17.887,1.346,1.219,951,6554 -Rumilly,74225,15270,16.991,1.312,1.188,926,6531 -Saint-Germain-sur-Rhône,74235,514,7.863,0.893,0.809,917,6555 -Saint-Jean-d'Aulps,74238,1340,40.338,2.022,1.831,981,6573 -Saint-Jeoire,74241,3246,22.775,1.519,1.375,967,6562 -Saint-Jorioz,74242,5726,22.833,1.521,1.377,941,6527 -Saint-Julien-en-Genevois,74243,14045,10.645,1.039,0.941,937,6563 -Saint-Laurent,74244,829,10.940,1.053,0.953,958,6556 -Saint-Sylvestre,74254,602,5.339,0.735,0.665,935,6532 -Sales,74255,1930,9.225,0.967,0.876,931,6537 -Sciez,74263,5866,20.459,1.440,1.304,956,6587 -Sallanches,74256,15902,65.618,2.578,2.334,977,6537 -Sallenôves,74257,678,3.644,0.608,0.550,930,6549 -Samoëns,74258,2451,97.255,3.139,2.842,994,6566 -Le Sappey,74259,404,13.617,1.175,1.064,944,6562 -Saxel,74261,472,5.619,0.755,0.684,964,6578 -Serraval,74265,683,19.710,1.413,1.279,960,6525 -Sevrier,74267,4215,18.452,1.367,1.238,946,6533 -Seyssel,74269,2315,16.953,1.311,1.187,919,6544 -Sixt-Fer-à-Cheval,74273,773,118.945,3.472,3.144,988,6550 -Talloires-Montmin,74275,2013,42.079,2.065,1.870,953,6526 -Thollon-les-Mémises,74279,776,13.955,1.189,1.077,984,6593 -Thônes,74280,6576,52.259,2.301,2.083,953,6534 -Thonon-les-Bains,74281,35132,16.326,1.286,1.164,970,6593 -Thusy,74283,1086,10.770,1.045,0.946,927,6542 -La Tour,74284,1262,7.711,0.884,0.800,963,6565 -Vacheresse,74286,831,31.084,1.775,1.607,981,6585 -Valleiry,74288,4527,6.959,0.840,0.761,930,6560 -Vallières-sur-Fier,74289,2473,19.254,1.397,1.265,922,6541 -Veigy-Foncenex,74293,3562,12.986,1.147,1.039,950,6582 -Vers,74296,837,5.957,0.777,0.704,932,6560 -Versonnex,74297,609,4.230,0.655,0.593,928,6540 -Vétraz-Monthoux,74298,8678,7.115,0.849,0.769,950,6569 -Veyrier-du-Lac,74299,2279,13.254,1.159,1.049,948,6539 -Les Villards-sur-Thônes,74302,1058,13.301,1.161,1.051,960,6542 -Ville-en-Sallaz,74304,889,3.365,0.584,0.529,965,6568 -Viry,74309,5072,26.078,1.626,1.472,937,6563 -Viuz-la-Chiésaz,74310,1332,13.890,1.186,1.074,941,6527 -Les Écrennes,77165,600,18.549,1.371,1.241,694,6821 -Viuz-en-Sallaz,74311,4309,20.972,1.458,1.320,960,6570 -Paris,75056,2190327,105.447,3.269,2.960,653,6858 -Changis-sur-Marne,77084,1203,7.008,0.843,0.763,702,6873 -Vougy,74312,1532,4.001,0.637,0.577,971,6559 -Bois-Guillaume,76108,13562,8.866,0.948,0.858,563,6930 -Mont-Saint-Aignan,76451,18944,7.945,0.897,0.812,562,6933 -Arville,77009,125,11.430,1.076,0.974,668,6788 -Achères-la-Forêt,77001,1139,12.618,1.131,1.024,667,6808 -Amillis,77002,819,20.150,1.429,1.294,711,6851 -Amponville,77003,351,11.939,1.100,0.996,663,6798 -Andrezel,77004,285,8.083,0.905,0.819,683,6834 -Arbonne-la-Forêt,77006,1011,15.041,1.234,1.117,666,6811 -Aubepierre-Ozouer-le-Repos,77010,914,26.831,1.649,1.493,688,6834 -Aufferville,77011,516,17.763,1.342,1.215,668,6788 -Bannost-Villegagnon,77020,669,19.475,1.405,1.272,717,6840 -Augers-en-Brie,77012,302,13.406,1.165,1.055,724,6843 -Aulnoy,77013,357,14.274,1.203,1.089,704,6861 -Avon,77014,14001,3.812,0.621,0.562,682,6812 -Baby,77015,96,4.111,0.645,0.584,726,6809 -Bagneaux-sur-Loing,77016,1686,5.326,0.735,0.665,677,6791 -Bernay-Vilbert,77031,828,16.891,1.308,1.184,696,6843 -Balloy,77019,326,13.395,1.165,1.055,709,6812 -Barbizon,77022,1160,5.356,0.737,0.667,670,6815 -Blandy,77034,723,14.084,1.195,1.082,682,6831 -Barcy,77023,299,7.019,0.843,0.763,693,6881 -Blennes,77035,560,20.266,1.433,1.297,704,6794 -Bassevelle,77024,352,17.503,1.332,1.206,722,6867 -Bazoches-lès-Bray,77025,861,22.673,1.516,1.373,716,6807 -Beauchery-Saint-Martin,77026,384,27.848,1.680,1.521,735,6830 -Le Châtelet-en-Brie,77100,4456,22.731,1.518,1.374,687,6820 -Beaumont-du-Gâtinais,77027,1157,16.591,1.297,1.174,661,6784 -Bellot,77030,780,16.351,1.287,1.165,723,6863 -Beton-Bazoches,77032,894,18.179,1.357,1.229,718,6842 -Boisdon,77036,143,4.358,0.664,0.601,716,6844 -Bray-sur-Seine,77051,2211,2.136,0.465,0.421,719,6814 -Bois-le-Roi,77037,5786,6.954,0.839,0.760,681,6821 -Brie-Comte-Robert,77053,17200,19.959,1.422,1.287,674,6846 -Égligny,77167,335,16.644,1.299,1.176,707,6818 -Boissise-le-Roi,77040,3782,7.131,0.850,0.770,668,6826 -Chaintreaux,77071,915,23.844,1.554,1.407,690,6791 -Boissy-aux-Cailles,77041,296,16.389,1.289,1.167,663,6799 -Chaumes-en-Brie,77107,3180,20.046,1.425,1.290,689,6839 -Boitron,77043,376,5.138,0.722,0.654,720,6865 -Émerainville,77169,7786,5.364,0.737,0.667,670,6857 -Bombon,77044,961,15.020,1.234,1.117,689,6827 -Bouleurs,77047,1496,8.206,0.912,0.826,691,6863 -Chelles,77108,54196,16.014,1.274,1.153,671,6863 -Bourron-Marlotte,77048,2766,11.259,1.068,0.967,680,6803 -Boutigny,77049,870,9.865,1.000,0.905,697,6868 -Chevry-Cossigny,77114,3969,16.798,1.305,1.182,673,6844 -La Brosse-Montceaux,77054,800,12.033,1.104,1.000,701,6807 -Brou-sur-Chantereine,77055,4396,4.378,0.666,0.603,675,6866 -Bussières,77057,526,8.359,0.920,0.833,719,6872 -Bussy-Saint-Martin,77059,687,2.448,0.498,0.451,676,6860 -Chevry-en-Sereine,77115,518,22.874,1.522,1.378,699,6797 -Buthiers,77060,735,19.619,1.410,1.277,663,6799 -Cannes-Écluse,77061,2477,8.593,0.933,0.845,697,6808 -Carnetin,77062,454,1.602,0.403,0.365,677,6867 -Chalifert,77075,1263,2.423,0.495,0.448,683,6865 -Cély,77065,1152,6.186,0.792,0.717,663,6818 -Choisy-en-Brie,77116,1379,25.143,1.596,1.445,716,6854 -Cerneux,77066,319,22.004,1.493,1.352,723,6846 -Cesson,77067,10238,7.010,0.843,0.763,671,6832 -Cessoy-en-Montois,77068,214,5.284,0.732,0.663,712,6822 -La Ferté-Gaucher,77182,4818,17.383,1.327,1.201,721,6858 -Chailly-en-Bière,77069,2034,13.127,1.153,1.044,669,6818 -Chalautre-la-Grande,77072,714,18.273,1.361,1.232,731,6826 -Chalautre-la-Petite,77073,582,9.376,0.975,0.883,723,6827 -Chambry,77077,973,9.748,0.994,0.900,693,6880 -Chamigny,77078,1381,14.226,1.201,1.087,709,6879 -Champagne-sur-Seine,77079,6174,7.305,0.860,0.779,684,6813 -Champdeuil,77081,726,4.020,0.638,0.578,679,6834 -Champcenest,77080,214,12.729,1.136,1.029,723,6839 -La Ferté-sous-Jouarre,77183,9651,10.052,1.009,0.914,712,6872 -La Chapelle-Iger,77087,163,8.735,0.941,0.852,698,6841 -La Chapelle-la-Reine,77088,2447,15.972,1.272,1.152,672,6803 -La Chapelle-Moutils,77093,439,19.476,1.405,1.272,729,6851 -Charmentray,77094,278,4.682,0.689,0.624,685,6874 -Clos-Fontaine,77119,270,5.982,0.779,0.705,699,6834 -Charny,77095,1279,12.548,1.128,1.021,682,6877 -Fontenailles,77191,1070,27.425,1.667,1.509,696,6830 -Chartronges,77097,297,8.242,0.914,0.828,718,6852 -Fontenay-Trésigny,77192,5470,22.175,1.499,1.357,692,6842 -Châteaubleau,77098,364,3.390,0.586,0.531,709,6830 -Château-Landon,77099,2956,29.532,1.730,1.566,675,6780 -Châtenay-sur-Seine,77101,1020,13.395,1.165,1.055,709,6812 -Châtenoy,77102,172,4.969,0.710,0.643,673,6794 -Coulommes,77130,413,3.667,0.610,0.552,696,6865 -Châtres,77104,667,15.162,1.239,1.122,684,6846 -Chauffry,77106,1022,5.152,0.723,0.655,712,6858 -Chenou,77110,315,13.806,1.183,1.071,674,6783 -Mary-sur-Marne,77280,1173,2.233,0.476,0.431,701,6879 -Chevrainvilliers,77112,233,8.952,0.952,0.862,668,6794 -Chevru,77113,1116,13.976,1.190,1.077,712,6851 -Citry,77117,900,5.057,0.716,0.648,717,6875 -Claye-Souilly,77118,12394,15.088,1.236,1.119,674,6870 -Meaux,77284,54331,15.386,1.249,1.131,696,6873 -Cocherel,77120,639,8.297,0.917,0.830,710,6879 -Melun,77288,40228,8.010,0.901,0.816,674,6829 -Collégien,77121,3412,3.385,0.586,0.531,675,6859 -Courtomer,77138,528,4.618,0.684,0.619,694,6839 -Combs-la-Ville,77122,22212,14.539,1.214,1.099,666,6840 -Compans,77123,792,5.304,0.733,0.664,676,6875 -Melz-sur-Seine,77289,355,18.475,1.368,1.239,730,6821 -Conches-sur-Gondoire,77124,1737,1.515,0.392,0.355,680,6861 -Coutençon,77140,298,6.279,0.798,0.723,700,6821 -Congis-sur-Thérouanne,77126,1764,15.223,1.242,1.125,701,6879 -La Croix-en-Brie,77147,673,29.534,1.730,1.566,707,6829 -Coubert,77127,1988,8.397,0.922,0.835,680,6842 -Couilly-Pont-aux-Dames,77128,2174,4.723,0.692,0.627,688,6865 -Coulombs-en-Valois,77129,577,22.527,1.511,1.368,707,6885 -Coupvray,77132,2837,8.096,0.906,0.820,686,6865 -Courcelles-en-Bassée,77133,219,10.802,1.046,0.947,706,6811 -Courchamp,77134,154,12.446,1.123,1.017,722,6836 -Courpalay,77135,1366,14.748,1.222,1.106,695,6836 -Courquetaine,77136,198,7.812,0.890,0.806,680,6842 -Courtacon,77137,250,12.137,1.109,1.004,724,6843 -Courtry,77139,6580,4.168,0.650,0.589,672,6867 -Crouy-sur-Ourcq,77148,1958,19.417,1.403,1.270,708,6890 -Crécy-la-Chapelle,77142,4392,15.457,1.251,1.133,697,6862 -Crégy-lès-Meaux,77143,4726,3.658,0.609,0.551,690,6875 -Cuisy,77150,441,3.353,0.583,0.528,683,6881 -Crisenoy,77145,679,12.903,1.143,1.035,684,6835 -Dammarie-les-Lys,77152,21891,10.267,1.020,0.924,671,6824 -Dampmart,77155,3372,5.960,0.777,0.704,681,6865 -Dammartin-en-Goële,77153,9644,8.974,0.954,0.864,675,6881 -Darvault,77156,859,7.832,0.891,0.807,677,6799 -Dhuisy,77157,298,8.149,0.909,0.823,710,6879 -Donnemarie-Dontilly,77159,2875,12.086,1.107,1.002,710,6818 -Diant,77158,192,10.995,1.055,0.955,702,6798 -Esbly,77171,6206,3.113,0.562,0.509,685,6868 -Étrépilly,77173,883,13.238,1.158,1.048,693,6880 -Everly,77174,597,8.779,0.943,0.854,721,6817 -Évry-Grégy-sur-Yerre,77175,2788,19.100,1.391,1.259,675,6841 -Favières,77177,1111,28.367,1.695,1.535,680,6855 -Féricy,77179,580,9.313,0.971,0.879,685,6820 -Férolles-Attilly,77180,1213,12.781,1.138,1.030,672,6846 -Villiers-sur-Seine,77522,301,11.439,1.077,0.975,729,6815 -Flagy,77184,643,7.185,0.853,0.772,692,6798 -Fleury-en-Bière,77185,661,13.964,1.189,1.077,664,6814 -Fontainebleau,77186,14907,172.418,4.180,3.785,681,6820 -Fontaine-Fourches,77187,601,12.000,1.103,0.999,731,6812 -Forfry,77193,217,5.813,0.767,0.694,691,6884 -Forges,77194,428,13.335,1.162,1.052,694,6815 -Fouju,77195,578,7.793,0.889,0.805,684,6831 -Fresnes-sur-Marne,77196,917,7.487,0.871,0.789,682,6869 -Germigny-sous-Coulombs,77204,208,6.547,0.814,0.737,713,6885 -Frétoy,77197,168,6.566,0.816,0.739,716,6844 -Fromont,77198,236,10.672,1.040,0.942,662,6793 -Fublaines,77199,1284,5.482,0.745,0.675,694,6871 -Gesvres-le-Chapitre,77205,154,4.238,0.655,0.593,690,6883 -Gastins,77201,698,14.945,1.231,1.115,701,6838 -Giremoutiers,77206,165,6.006,0.780,0.706,703,6864 -Grandpuits-Bailly-Carrois,77211,1020,24.480,1.575,1.426,698,6829 -Gironville,77207,156,13.748,1.180,1.068,668,6782 -Gretz-Armainvilliers,77215,8743,13.561,1.172,1.061,679,6853 -Grisy-Suisnes,77217,2408,18.280,1.361,1.232,676,6839 -Gouaix,77208,1478,14.113,1.196,1.083,723,6817 -Gouvernes,77209,1166,2.766,0.529,0.479,678,6863 -La Grande-Paroisse,77210,2763,29.094,1.717,1.555,693,6807 -Gravon,77212,159,7.596,0.877,0.794,708,6811 -Guermantes,77221,1143,1.261,0.357,0.323,679,6862 -Gressy,77214,860,3.349,0.583,0.528,676,6875 -Grisy-sur-Seine,77218,107,6.570,0.816,0.739,726,6815 -Guignes,77222,3936,5.719,0.761,0.689,686,6839 -La Haute-Maison,77225,304,12.961,1.146,1.038,700,6867 -Hermé,77227,647,15.966,1.272,1.152,724,6819 -Hondevilliers,77228,256,5.527,0.748,0.677,722,6867 -La Houssaye-en-Brie,77229,1634,12.449,1.123,1.017,689,6851 -Isles-les-Meldeuses,77231,802,6.862,0.834,0.755,699,6876 -Jaignes,77235,292,10.154,1.014,0.918,702,6875 -Jaulnes,77236,376,15.869,1.268,1.148,719,6811 -Jossigny,77237,672,9.626,0.988,0.895,682,6861 -Juilly,77241,1978,7.763,0.887,0.803,680,6882 -Jouarre,77238,4275,42.312,2.071,1.875,713,6872 -Jouy-le-Châtel,77239,1551,37.699,1.954,1.769,709,6836 -Jouy-sur-Morin,77240,2098,18.454,1.367,1.238,720,6852 -Jutigny,77242,547,4.598,0.683,0.618,716,6821 -Lescherolles,77247,474,11.035,1.057,0.957,727,6849 -Lagny-sur-Marne,77243,21264,5.789,0.766,0.694,680,6865 -Lorrez-le-Bocage-Préaux,77261,1260,19.870,1.419,1.285,690,6791 -Larchant,77244,705,29.296,1.723,1.560,669,6795 -Laval-en-Brie,77245,467,20.266,1.433,1.297,698,6813 -Léchelle,77246,592,21.953,1.491,1.350,731,6830 -Lesches,77248,725,4.115,0.646,0.585,686,6869 -Lésigny,77249,7270,10.030,1.008,0.913,670,6848 -Louan-Villegruis-Fontaine,77262,485,38.002,1.962,1.776,737,6834 -Leudon-en-Brie,77250,163,4.328,0.662,0.599,717,6849 -Nanteuil-sur-Marne,77331,442,1.259,0.357,0.323,717,6875 -Lieusaint,77251,13363,11.962,1.101,0.997,666,6834 -Limoges-Fourches,77252,472,7.980,0.899,0.814,677,6835 -Noyen-sur-Seine,77341,363,12.237,1.113,1.008,727,6815 -Lissy,77253,201,6.740,0.826,0.748,679,6836 -Ocquerre,77343,458,10.166,1.015,0.919,705,6879 -Liverdy-en-Brie,77254,1331,9.130,0.962,0.871,683,6842 -Les Ormes-sur-Voulzie,77347,859,12.254,1.114,1.009,717,6815 -Lizy-sur-Ourcq,77257,3597,11.181,1.064,0.963,701,6879 -Longueville,77260,1806,5.602,0.753,0.682,720,6824 -Paroy,77355,171,4.260,0.657,0.595,715,6818 -Luzancy,77265,1108,6.616,0.819,0.742,713,6877 -Maisoncelles-en-Gâtinais,77271,131,8.581,0.932,0.844,672,6785 -Machault,77266,785,16.279,1.284,1.163,688,6814 -Magny-le-Hongre,77268,8419,4.672,0.688,0.623,688,6862 -Maincy,77269,1694,10.278,1.020,0.924,679,6830 -Maisoncelles-en-Brie,77270,882,13.544,1.171,1.060,697,6862 -Maison-Rouge,77272,887,13.893,1.186,1.074,710,6826 -Les Marêts,77275,150,5.389,0.739,0.669,722,6843 -Marcilly,77274,488,6.954,0.839,0.760,689,6881 -Mareuil-lès-Meaux,77276,2959,7.167,0.852,0.771,689,6867 -Marolles-en-Brie,77278,401,9.088,0.960,0.869,711,6851 -Marolles-sur-Seine,77279,1722,20.252,1.432,1.297,702,6807 -Mauregard,77282,340,8.758,0.942,0.853,667,6879 -May-en-Multien,77283,904,19.067,1.390,1.259,699,6886 -Le Mée-sur-Seine,77285,20749,5.571,0.751,0.680,673,6825 -Misy-sur-Yonne,77293,977,6.275,0.797,0.722,708,6805 -Meigneux,77286,238,7.814,0.890,0.806,704,6824 -Le Mesnil-Amelot,77291,997,9.814,0.997,0.903,673,6879 -Messy,77292,1149,10.337,1.023,0.926,676,6875 -Moisenay,77295,1371,8.734,0.941,0.852,679,6830 -Moissy-Cramayel,77296,17695,14.277,1.203,1.089,669,6834 -Verdelot,77492,694,25.553,1.609,1.457,724,6868 -Mons-en-Montois,77298,456,6.276,0.797,0.722,712,6820 -Montceaux-lès-Meaux,77300,598,4.721,0.692,0.627,700,6873 -Vernou-la-Celle-sur-Seine,77494,2684,22.430,1.508,1.365,688,6810 -Vert-Saint-Denis,77495,7490,16.194,1.281,1.160,674,6833 -Montceaux-lès-Provins,77301,335,15.367,1.248,1.130,731,6845 -Montereau-sur-le-Jard,77306,521,11.406,1.075,0.973,677,6835 -Montgé-en-Goële,77308,756,11.521,1.080,0.978,679,6879 -Villemer,77506,741,18.532,1.370,1.240,686,6802 -Monthyon,77309,1710,12.130,1.109,1.004,688,6877 -Villenauxe-la-Petite,77507,435,20.763,1.450,1.313,725,6808 -Montigny-le-Guesdier,77310,299,7.929,0.896,0.811,719,6811 -Passy-sur-Seine,77356,49,4.566,0.680,0.616,724,6814 -Montigny-Lencoup,77311,1369,20.820,1.452,1.315,705,6820 -Montigny-sur-Loing,77312,2721,9.197,0.965,0.874,679,6806 -Montolivet,77314,241,16.402,1.289,1.167,731,6858 -Montry,77315,3602,2.859,0.538,0.487,686,6864 -Moret-Loing-et-Orvanne,77316,12459,33.417,1.840,1.666,686,6802 -Mortery,77319,150,13.188,1.156,1.047,717,6835 -Mouroux,77320,5413,16.755,1.303,1.180,701,6860 -Mousseaux-lès-Bray,77321,729,8.687,0.938,0.849,717,6808 -Le Plessis-aux-Bois,77364,290,3.412,0.588,0.532,683,6879 -Moussy-le-Neuf,77322,3052,14.838,1.226,1.110,670,6887 -Moussy-le-Vieux,77323,1379,7.208,0.855,0.774,671,6882 -Le Plessis-Placy,77367,271,8.247,0.914,0.828,698,6886 -Mouy-sur-Seine,77325,356,8.629,0.935,0.847,716,6813 -Nandy,77326,5976,8.610,0.934,0.846,665,6830 -Nanteau-sur-Lunain,77329,700,13.336,1.162,1.052,687,6793 -Nanteuil-lès-Meaux,77330,6016,7.598,0.877,0.794,693,6868 -Nantouillet,77332,275,5.152,0.723,0.655,679,6879 -Pommeuse,77371,2914,12.827,1.140,1.032,700,6861 -Nemours,77333,13172,10.125,1.013,0.917,680,6795 -Pontault-Combault,77373,38326,13.590,1.173,1.062,672,6851 -Chauconin-Neufmontiers,77335,3157,17.384,1.327,1.201,686,6877 -Hennezel,88238,404,32.134,1.804,1.633,933,6774 -Neufmoutiers-en-Brie,77336,1020,16.241,1.283,1.162,690,6854 -Noisiel,77337,15495,4.325,0.662,0.599,671,6863 -Noisy-Rudignon,77338,616,4.169,0.650,0.589,696,6804 -Verneuil-sur-Seine,78642,15475,9.605,0.987,0.894,623,6875 -Noisy-sur-École,77339,1834,29.960,1.742,1.577,668,6808 -Oissery,77344,2199,15.161,1.239,1.122,685,6888 -Orly-sur-Morin,77345,682,5.877,0.772,0.699,716,6866 -Ormesson,77348,247,3.813,0.622,0.563,673,6794 -Vinantes,77525,383,5.299,0.733,0.664,682,6877 -Othis,77349,6702,13.091,1.152,1.043,674,6885 -Ozoir-la-Ferrière,77350,20196,15.606,1.257,1.138,678,6854 -Ozouer-le-Voulgis,77352,1895,11.360,1.073,0.972,685,6843 -Paley,77353,420,9.309,0.971,0.879,690,6792 -Pamfou,77354,945,10.417,1.027,0.930,690,6817 -Perthes,77359,2004,12.304,1.117,1.011,665,6819 -Pézarches,77360,400,8.992,0.955,0.865,701,6850 -Rouvres,77392,883,4.153,0.649,0.588,679,6884 -Pierre-Levée,77361,478,13.004,1.148,1.039,703,6863 -Le Pin,77363,1407,6.712,0.825,0.747,672,6869 -Sablonnières,77398,716,13.969,1.190,1.077,721,6867 -Le Plessis-Feu-Aussoux,77365,571,5.592,0.753,0.682,705,6847 -Le Plessis-l'Évêque,77366,295,3.582,0.602,0.545,686,6877 -Poigny,77368,522,5.978,0.778,0.704,718,6829 -Poincy,77369,682,6.165,0.790,0.715,694,6877 -Poligny,77370,807,27.306,1.663,1.506,683,6790 -Presles-en-Brie,77377,2302,17.485,1.331,1.205,684,6846 -Pringy,77378,2944,4.116,0.646,0.585,667,6826 -Provins,77379,11859,14.722,1.221,1.106,723,6828 -Sainte-Aulde,77401,692,8.630,0.935,0.847,714,6877 -Puisieux,77380,318,9.261,0.969,0.877,692,6886 -Saint-Cyr-sur-Morin,77405,1943,19.096,1.391,1.259,710,6865 -Quiers,77381,669,11.797,1.093,0.990,698,6833 -Quincy-Voisins,77382,5430,10.319,1.023,0.926,692,6868 -Rampillon,77383,826,23.056,1.528,1.383,708,6826 -Réau,77384,1814,13.328,1.162,1.052,670,6833 -Saint-Paul-en-Gâtine,79286,446,15.441,1.251,1.133,424,6620 -Rebais,77385,2286,11.028,1.057,0.957,718,6859 -Recloses,77386,660,9.361,0.974,0.882,676,6803 -Villeneuve-sous-Dammartin,77511,648,7.577,0.876,0.793,675,6882 -Remauville,77387,456,10.876,1.050,0.951,689,6791 -Reuil-en-Brie,77388,828,5.952,0.777,0.704,710,6873 -La Rochette,77389,3365,5.843,0.769,0.696,676,6821 -Villeneuve-sur-Bellot,77512,1138,9.514,0.982,0.889,726,6863 -Roissy-en-Brie,77390,23104,13.632,1.175,1.064,673,6856 -Rouilly,77391,485,7.765,0.887,0.803,720,6834 -Voinsles,77527,605,28.504,1.699,1.538,702,6838 -Rubelles,77394,2152,3.918,0.630,0.570,675,6829 -Rumont,77395,124,6.603,0.818,0.741,663,6798 -Saint-Benoît,86214,7112,13.621,1.175,1.064,500,6607 -Rupéreux,77396,102,6.312,0.800,0.724,723,6839 -Saint-Fiacre,77408,405,2.755,0.528,0.478,697,6868 -Saâcy-sur-Marne,77397,1800,13.637,1.175,1.064,714,6871 -Saint-Barthélemy,77402,325,15.032,1.234,1.117,724,6858 -Saint-Denis-lès-Rebais,77406,955,15.115,1.238,1.121,712,6860 -Saint-Fargeau-Ponthierry,77407,14386,16.626,1.298,1.175,665,6830 -Saint-Germain-Laval,77409,2790,8.871,0.948,0.858,700,6811 -Saint-Germain-Laxis,77410,746,7.222,0.855,0.774,680,6831 -Saint-Hilliers,77414,470,19.092,1.391,1.259,722,6834 -Saint-Jean-les-Deux-Jumeaux,77415,1267,13.391,1.165,1.055,701,6868 -Saint-Just-en-Brie,77416,238,7.357,0.863,0.781,708,6835 -Saint-Mard,77420,3838,6.263,0.797,0.722,677,6880 -Saint-Léger,77417,261,9.826,0.998,0.904,719,6862 -Saint-Martin-des-Champs,77423,661,10.420,1.028,0.931,724,6851 -Saint-Mars-Vieux-Maisons,77421,283,19.064,1.390,1.259,724,6847 -Saint-Martin-du-Boschet,77424,292,17.107,1.317,1.192,734,6847 -Saint-Mesmes,77427,613,7.702,0.883,0.799,680,6877 -Saint-Martin-en-Bière,77425,764,7.858,0.892,0.808,670,6815 -Beautheil-Saints,77433,2054,38.381,1.972,1.785,708,6848 -Saint-Méry,77426,354,9.972,1.005,0.910,689,6833 -Saint-Ouen-en-Brie,77428,843,5.680,0.759,0.687,693,6830 -Saint-Ouen-sur-Morin,77429,541,3.787,0.619,0.560,715,6866 -Saint-Siméon,77436,899,12.891,1.143,1.035,716,6854 -Saint-Pathus,77430,6042,5.370,0.738,0.668,684,6888 -Saint-Pierre-lès-Nemours,77431,5466,21.722,1.484,1.344,677,6799 -Saint-Rémy-la-Vanne,77432,978,15.139,1.239,1.122,716,6859 -Saint-Sauveur-lès-Bray,77434,355,6.467,0.809,0.732,715,6817 -Saint-Soupplets,77437,3252,13.717,1.179,1.067,685,6880 -Sept-Sorts,77448,491,3.080,0.559,0.506,707,6872 -Saint-Thibault-des-Vignes,77438,6457,4.625,0.685,0.620,675,6864 -Salins,77439,1082,10.558,1.034,0.936,703,6815 -Sivry-Courtry,77453,1243,22.431,1.508,1.365,685,6826 -Sammeron,77440,1124,6.103,0.786,0.712,707,6872 -Samois-sur-Seine,77441,2068,6.310,0.800,0.724,680,6814 -La Tombe,77467,233,7.851,0.892,0.808,706,6811 -Samoreau,77442,2321,5.643,0.756,0.684,685,6814 -Sancy,77443,380,5.462,0.744,0.674,698,6864 -Sancy-lès-Provins,77444,322,18.191,1.358,1.230,731,6845 -Treuzy-Levelay,77473,435,14.115,1.196,1.083,682,6796 -Savins,77446,606,6.612,0.818,0.741,714,6822 -Serris,77449,8843,5.644,0.756,0.684,684,6862 -Trilbardou,77474,672,7.995,0.900,0.815,685,6870 -Signy-Signets,77451,590,13.443,1.167,1.057,702,6869 -Sigy,77452,53,4.771,0.695,0.629,711,6820 -Soignolles-en-Brie,77455,1969,10.789,1.046,0.947,678,6841 -Soisy-Bouy,77456,823,11.715,1.089,0.986,725,6824 -Solers,77457,1235,6.274,0.797,0.722,678,6841 -Souppes-sur-Loing,77458,5397,27.605,1.672,1.514,680,6790 -Tancrou,77460,361,12.229,1.113,1.008,709,6879 -Thénisy,77461,288,5.407,0.740,0.670,712,6822 -Thieux,77462,841,12.075,1.106,1.001,676,6882 -Thorigny-sur-Marne,77464,9610,5.136,0.721,0.653,677,6867 -Torcy,77468,23215,6.163,0.790,0.715,675,6859 -Touquin,77469,1209,11.767,1.092,0.989,705,6848 -Tournan-en-Brie,77470,8777,15.514,1.254,1.135,685,6851 -Trilport,77475,5005,10.964,1.054,0.954,698,6871 -Varreddes,77483,1945,8.035,0.902,0.817,696,6879 -Trocy-en-Multien,77476,242,7.525,0.873,0.790,697,6884 -Vaux-sur-Lunain,77489,219,8.492,0.928,0.840,699,6790 -Ury,77477,845,8.291,0.917,0.830,672,6806 -Vanvillé,77481,181,7.568,0.876,0.793,708,6830 -Ussy-sur-Marne,77478,1055,13.908,1.187,1.075,708,6872 -Valence-en-Brie,77480,949,11.034,1.057,0.957,695,6815 -Varennes-sur-Seine,77482,3429,9.986,1.006,0.911,697,6808 -Le Vaudoué,77485,749,17.149,1.318,1.193,662,6803 -Vaudoy-en-Brie,77486,894,27.646,1.674,1.516,706,6848 -Vaux-le-Pénil,77487,11049,11.830,1.095,0.991,676,6824 -Vendrest,77490,747,17.692,1.339,1.212,706,6881 -Villeneuve-les-Bordes,77509,610,20.813,1.452,1.315,704,6825 -Villeparisis,77514,26327,8.346,0.920,0.833,673,6870 -Villeroy,77515,729,5.718,0.761,0.689,685,6874 -Villiers-en-Bière,77518,212,10.687,1.041,0.943,673,6822 -Villevaudé,77517,2109,9.999,1.007,0.912,674,6870 -Villiers-sous-Grez,77520,710,12.156,1.110,1.005,676,6803 -Villiers-sur-Morin,77521,1937,6.268,0.797,0.722,690,6864 -Villuis,77523,271,9.344,0.973,0.881,727,6815 -Vimpelles,77524,519,11.373,1.073,0.972,712,6814 -Voisenon,77528,1121,3.400,0.587,0.531,676,6831 -Vulaines-sur-Seine,77533,2711,4.434,0.670,0.607,681,6814 -Voulangis,77529,1536,9.585,0.985,0.892,689,6859 -Voulton,77530,317,26.367,1.634,1.479,728,6836 -Voulx,77531,1762,12.621,1.131,1.024,698,6801 -Yèbles,77534,914,11.709,1.089,0.986,685,6836 -Achères,78005,20823,9.487,0.980,0.887,630,6873 -Chatou,78146,31134,5.070,0.717,0.649,639,6867 -Saint-Germain-en-Laye,78551,44008,53.137,2.320,2.101,632,6872 -Poissy,78498,37146,12.897,1.143,1.035,627,6866 -Vernouillet,78643,10014,6.734,0.826,0.748,624,6873 -Le Vésinet,78650,16047,5.022,0.713,0.646,635,6866 -Lesbœufs,80472,174,6.010,0.780,0.706,690,6996 -Sailly-Saillisel,80695,475,9.470,0.980,0.887,695,6991 -Bouloc-en-Quercy,82021,188,14.778,1.224,1.108,548,6356 -Lauzerte,82094,1461,44.618,2.126,1.925,555,6352 -Léojac,82098,1260,12.901,1.143,1.035,574,6327 -Montauban,82121,60444,135.893,3.711,3.360,568,6318 -Carqueiranne,83034,9846,14.662,1.219,1.104,951,6229 -L'Aiguillon-sur-Mer,85001,2101,9.872,1.000,0.905,368,6591 -Beauvoir-sur-Mer,85018,3925,35.184,1.888,1.709,315,6654 -Bretignolles-sur-Mer,85035,4468,27.325,1.664,1.507,331,6625 -Jard-sur-Mer,85114,2647,16.748,1.303,1.180,349,6604 -Noirmoutier-en-l'ÃŽle,85163,4675,20.006,1.424,1.289,302,6668 -Poitiers,86194,87961,42.541,2.076,1.880,502,6612 -Arnac-la-Poste,87003,967,46.897,2.180,1.974,579,6579 -Aureil,87005,1002,10.173,1.015,0.919,574,6526 -Berneuil,87012,420,26.006,1.623,1.469,556,6549 -Beynac,87015,691,12.669,1.133,1.026,559,6522 -Blond,87018,691,64.568,2.558,2.316,545,6547 -Boisseuil,87019,2875,19.319,1.399,1.267,569,6517 -Bosmie-l'Aiguille,87021,2571,8.059,0.904,0.818,559,6522 -Burgnac,87025,836,11.571,1.083,0.981,560,6518 -Couzeix,87050,9158,30.696,1.764,1.597,558,6535 -Saint-Gence,87143,2113,21.625,1.480,1.340,553,6539 -Eyjeaux,87063,1298,24.407,1.573,1.424,577,6522 -Saint-Genest-sur-Roselle,87144,521,19.527,1.407,1.274,575,6512 -Feytiat,87065,6131,24.241,1.567,1.419,574,6525 -Jourgnac,87081,1103,14.461,1.210,1.096,564,6519 -Limoges,87085,132660,79.802,2.844,2.575,569,6538 -Val d'Issoire,87097,1098,70.994,2.682,2.428,542,6556 -Nouic,87108,469,35.910,1.907,1.727,538,6549 -Saint-Just-le-Martel,87156,2684,32.193,1.806,1.635,572,6532 -Oradour-sur-Glane,87110,2481,38.374,1.972,1.785,545,6543 -Panazol,87114,10983,20.109,1.427,1.292,569,6529 -Saint-Hilaire-la-Treille,87149,383,29.166,1.719,1.556,573,6571 -Saint-Léger-la-Montagne,87159,346,32.714,1.821,1.649,575,6549 -Saint-Junien-les-Combes,87155,168,20.605,1.445,1.308,557,6558 -Solignac,87192,1571,16.807,1.305,1.182,562,6516 -Saint-Paul,87174,1241,37.450,1.948,1.764,575,6518 -Bettegney-Saint-Brice,88055,170,5.389,0.739,0.669,946,6807 -Saint-Sulpice-Laurière,87181,836,14.357,1.206,1.092,585,6551 -Veyrac,87202,2047,34.678,1.874,1.697,551,6533 -Bois-de-Champ,88064,114,17.708,1.339,1.212,985,6801 -Le Vigen,87205,2151,29.767,1.737,1.573,569,6522 -Chantraine,88087,3194,6.142,0.789,0.714,953,6788 -Attignéville,88015,225,14.651,1.218,1.103,911,6814 -Auzainvilliers,88022,224,8.242,0.914,0.828,913,6798 -Champ-le-Duc,88086,550,3.956,0.633,0.573,976,6795 -Beauménil,88046,120,3.309,0.579,0.524,978,6794 -Jubainville,88255,93,4.350,0.664,0.601,903,6822 -Belmont-sur-Buttant,88050,300,8.523,0.929,0.841,980,6796 -Circourt-sur-Mouzon,88104,189,10.180,1.016,0.920,902,6802 -Belrupt,88052,100,9.401,0.976,0.884,931,6781 -Bonvillet,88065,312,10.106,1.012,0.916,930,6784 -Brantigny,88073,210,2.986,0.550,0.498,942,6811 -Claudon,88105,219,21.782,1.486,1.345,923,6775 -Brouvelieures,88076,440,7.457,0.869,0.787,975,6800 -Épinal,88160,31558,59.372,2.453,2.221,964,6795 -Bruyères,88078,3080,16.002,1.273,1.153,980,6796 -Bulgnéville,88079,1525,13.359,1.163,1.053,909,6797 -Escles,88161,435,22.456,1.508,1.365,939,6787 -La Chapelle-aux-Bois,88088,666,31.003,1.772,1.604,946,6773 -La Chapelle-devant-Bruyères,88089,586,20.468,1.440,1.304,982,6795 -Châtenois,88095,1704,17.629,1.336,1.210,909,6802 -Clézentaine,88110,215,13.054,1.150,1.041,959,6818 -Darney,88124,1107,7.874,0.893,0.809,930,6779 -Deycimont,88131,309,6.384,0.804,0.728,970,6794 -Étival-Clairefontaine,88165,2601,27.257,1.662,1.505,988,6813 -Dommartin-sur-Vraine,88150,314,7.057,0.846,0.766,916,6807 -Doncières,88156,140,7.708,0.884,0.800,970,6818 -Éloyes,88158,3224,12.520,1.126,1.019,970,6785 -Granges-Aumontzey,88218,2700,33.271,1.836,1.662,986,6784 -Fiménil,88172,226,5.204,0.726,0.657,975,6790 -Gircourt-lès-Viéville,88202,180,8.720,0.940,0.851,936,6807 -Houéville,88242,48,3.225,0.572,0.518,909,6811 -Jainvillotte,88249,78,7.422,0.867,0.785,901,6798 -Laveline-devant-Bruyères,88262,630,3.113,0.562,0.509,980,6793 -Midrevaux,88303,220,14.256,1.202,1.088,895,6811 -Liézey,88269,278,13.255,1.159,1.049,980,6784 -Monthureux-sur-Saône,88310,862,19.326,1.399,1.267,922,6777 -Prey,88359,96,2.117,0.463,0.419,974,6793 -Nonville,88330,202,8.959,0.953,0.863,923,6778 -Nossoncourt,88333,113,5.367,0.737,0.667,970,6816 -La Petite-Fosse,88345,80,5.033,0.714,0.646,1000,6808 -Pompierre,88352,231,12.638,1.132,1.025,899,6798 -Provenchères-et-Colroy,88361,1389,19.274,1.397,1.265,1000,6809 -Rainville,88366,278,8.646,0.936,0.847,916,6811 -Regney,88378,84,3.841,0.624,0.565,945,6801 -Relanges,88381,211,13.893,1.186,1.074,925,6785 -Le Roulier,88399,197,5.688,0.759,0.687,967,6794 -Remiremont,88383,7728,17.200,1.320,1.195,967,6776 -Rouvres-la-Chétive,88401,452,11.320,1.071,0.970,907,6802 -Ruppes,88407,137,7.534,0.874,0.791,906,6822 -Roville-aux-Chênes,88402,364,8.654,0.936,0.847,967,6817 -Rugney,88406,136,5.761,0.764,0.692,940,6811 -Saint-Benoît-la-Chipotte,88412,420,20.662,1.447,1.310,980,6811 -Saint-Étienne-lès-Remiremont,88415,3838,33.932,1.854,1.679,970,6774 -Savigny,88449,188,6.299,0.799,0.723,938,6812 -Saint-Gorgon,88417,398,5.832,0.769,0.696,972,6807 -Saint-Maurice-sur-Mortagne,88425,181,6.856,0.833,0.754,963,6817 -Saint-Ouen-lès-Parey,88430,491,21.348,1.471,1.332,903,6790 -Tilleux,88474,55,3.893,0.628,0.569,904,6804 -Sauville,88448,186,14.561,1.215,1.100,906,6784 -Tollaincourt,88475,128,14.225,1.201,1.087,901,6781 -Sionne,88457,141,11.903,1.098,0.994,896,6811 -Tendon,88464,519,22.003,1.493,1.352,976,6787 -Villotte,88510,152,8.281,0.916,0.829,905,6783 -Vomécourt,88521,286,7.072,0.846,0.766,970,6807 -Wisembach,88526,403,11.211,1.066,0.965,1008,6805 -Xertigny,88530,2628,50.628,2.265,2.051,958,6777 -Perceneige,89469,952,61.200,2.490,2.254,735,6808 -Champlay,89075,720,21.017,1.459,1.321,728,6760 -Chéroy,89100,1651,10.521,1.032,0.934,701,6791 -Compigny,89115,191,7.850,0.892,0.808,721,6806 -Auvernaux,91037,333,6.506,0.812,0.735,661,6824 -Pailly,89285,290,14.739,1.222,1.106,724,6808 -Morsang-sur-Seine,91435,540,4.423,0.669,0.606,665,6830 -Senan,89384,711,17.941,1.348,1.220,728,6760 -Sergines,89391,1295,18.901,1.384,1.253,716,6807 -Nainville-les-Roches,91441,454,5.997,0.780,0.706,662,6822 -Villeneuve-la-Guyard,89460,3444,16.949,1.310,1.186,704,6807 -Villethierry,89467,840,21.100,1.462,1.324,702,6797 -Vinneuf,89480,1498,15.308,1.245,1.127,713,6809 -Le Coudray-Montceaux,91179,4898,11.486,1.079,0.977,665,6830 -Courances,91180,344,8.313,0.918,0.831,661,6816 -Juvisy-sur-Orge,91326,16341,2.247,0.477,0.432,654,6843 -Tigery,91617,3840,9.404,0.976,0.884,665,6837 -Varennes-Jarcy,91631,2312,5.541,0.749,0.678,667,6841 -Bois-Colombes,92009,28323,1.931,0.442,0.400,647,6870 -Viry-Châtillon,91687,30575,6.119,0.787,0.713,654,6843 -Asnières-sur-Seine,92004,85973,4.828,0.699,0.633,650,6869 -Coubron,93015,4812,4.176,0.650,0.589,668,6869 -Bonneuil-sur-Marne,94011,17452,5.499,0.746,0.675,664,6854 -Gagny,93032,39148,6.972,0.840,0.761,668,6865 -Gournay-sur-Marne,93033,6861,1.681,0.413,0.374,669,6862 -Montfermeil,93047,26085,5.444,0.743,0.673,670,6868 -Cachan,94016,30208,2.786,0.531,0.481,650,6854 -Noisy-le-Grand,93051,66659,13.148,1.154,1.045,664,6861 -Pantin,93055,55342,5.009,0.712,0.645,657,6869 -Tremblay-en-France,93073,35691,22.681,1.516,1.373,663,6875 -Vaujours,93074,6969,3.716,0.614,0.556,668,6871 -Alfortville,94002,43886,3.672,0.610,0.552,657,6858 -L'Haÿ-les-Roses,94038,31189,3.901,0.629,0.570,650,6852 -Limeil-Brévannes,94044,26703,6.954,0.839,0.760,663,6851 -Maisons-Alfort,94046,55289,5.356,0.737,0.667,657,6858 -La Queue-en-Brie,94060,11835,9.391,0.975,0.883,669,6856 -Saint-Maur-des-Fossés,94068,74893,11.261,1.068,0.967,661,6856 -Valenton,94074,14858,5.316,0.734,0.665,659,6851 -Villeneuve-Saint-Georges,94078,32966,8.086,0.905,0.819,659,6847 -Franconville,95252,36112,6.233,0.795,0.720,643,6878 -Soisy-sous-Montmorency,95598,18046,3.959,0.633,0.573,649,6875 -Montmorency,95428,21457,5.202,0.726,0.657,650,6879 -Sannois,95582,26537,4.776,0.696,0.630,643,6875 -Saint-Sauveur-Villages,50550,3568,54.382,2.347,2.125,379,6899 -Bierné-les-Villages,53029,1254,48.217,2.210,2.001,438,6753 -Château-Gontier-sur-Mayenne,53062,16858,68.304,2.631,2.382,423,6756 -Gennes-Longuefuye,53104,1328,40.934,2.037,1.844,433,6758 -La Roche-Neuville,53136,1165,28.447,1.698,1.537,423,6756 -Bois-de-Haye,54557,2225,24.986,1.591,1.441,921,6850 -Douaumont-Vaux,55537,81,12.608,1.130,1.023,879,6904 -Forges de Lanouée,56102,2246,97.403,3.141,2.844,284,6776 -Rezonville-Vionville,57578,507,23.054,1.528,1.383,917,6894 -Villers Saint Frambourg-Ognon,60682,717,14.704,1.221,1.106,672,6905 -Les Hauts Talican,60054,884,23.015,1.527,1.383,625,6917 -Montchevreuil,60256,1266,17.211,1.321,1.196,628,6908 -La Corne en Vexin,60209,528,17.011,1.313,1.189,624,6912 -L'Orée-d'Écouves,61228,720,44.613,2.126,1.925,474,6826 -Beyrède-Jumet-Camous,65092,213,19.445,1.404,1.271,481,6212 -Le Vernet-Chaméane,63448,826,45.886,2.156,1.952,731,6486 -Mur-sur-Allier,63226,3403,15.147,1.239,1.122,717,6515 -Rountzenheim-Auenheim,67418,1945,10.778,1.045,0.946,1066,6871 -Deux-Grosnes,69135,1904,83.657,2.911,2.636,821,6578 -Belleville-en-Beaujolais,69019,12776,22.830,1.521,1.377,837,6558 -Fougerolles-Saint-Valbert,70245,3859,55.288,2.367,2.143,957,6759 -Vindry-sur-Turdine,69157,5095,23.768,1.552,1.405,818,6532 -Navour-sur-Grosne,71134,646,22.801,1.520,1.376,821,6587 -Seveux-Motey,70491,482,20.060,1.426,1.291,911,6717 -Cherré-Au,72080,2685,29.772,1.737,1.573,531,6792 -Saint-Hymetière-sur-Valouse,39137,434,18.407,1.366,1.237,899,6588 -Manderen-Ritzing,57439,587,15.193,1.241,1.124,950,6931 -Porte-de-Savoie,73151,3581,22.189,1.499,1.357,937,6495 -Val d'Étangson,72128,526,31.381,1.783,1.614,522,6752 -Aniane,34010,2947,30.334,1.753,1.587,750,6283 -Saint-Gervais-sur-Mare,34260,848,24.134,1.564,1.416,707,6284 -Saint-Jean-de-Fos,34267,1672,14.144,1.197,1.084,743,6288 -Graissessac,34117,656,9.868,1.000,0.905,706,6290 -Le Pouget,34210,2037,13.926,1.188,1.076,740,6276 -Vendémian,34328,1053,16.943,1.310,1.186,746,6278 -Aubazat,43011,174,16.560,1.295,1.173,735,6444 -Puteaux,92062,44662,3.191,0.569,0.515,645,6865 -Langeac,43112,3743,34.002,1.856,1.680,741,6444 -Mazeyrat-d'Allier,43132,1497,45.830,2.155,1.951,740,6452 -Saint-Arcons-d'Allier,43167,195,16.152,1.279,1.158,741,6444 -Rueil-Malmaison,92063,78195,14.544,1.214,1.099,638,6864 -Suresnes,92073,48620,3.804,0.621,0.562,642,6864 -Le Cros,34091,54,22.195,1.500,1.358,730,6306 -Saint-Maurice-Navacelles,34277,177,68.596,2.636,2.387,743,6299 -Saint-Michel,34278,44,25.521,1.608,1.456,734,6308 -La Vacquerie-et-Saint-Martin-de-Castries,34317,186,43.489,2.099,1.900,740,6295 -Laval,53130,49492,34.206,1.862,1.686,417,6777 -Argelès-sur-Mer,66008,10434,58.800,2.441,2.210,699,6164 -Pourcharesses,48117,118,32.100,1.803,1.632,767,6368 -Perpignan,66136,121875,67.950,2.624,2.376,686,6177 -Saint-Pierre-du-Mont,14652,80,5.088,0.718,0.650,411,6926 -Grand-Aigueblanche,73003,3813,27.344,1.664,1.507,973,6491 -Saint-Genix-les-Villages,73236,2966,25.361,1.603,1.451,906,6502 -La Tour-en-Maurienne,73135,1079,40.946,2.037,1.844,968,6475 -Val-d'Arc,73212,1995,14.238,1.201,1.087,957,6500 -Valgelon-La Rochette,73215,4097,7.342,0.862,0.780,942,6490 -Salasc,34292,307,9.034,0.957,0.866,723,6280 -Mérifons,34156,45,6.736,0.826,0.748,723,6280 -Prunières,5106,298,15.308,1.245,1.127,967,6386 -Chorges,5040,2891,57.318,2.410,2.182,965,6385 -Dio-et-Valquières,34093,150,18.631,1.374,1.244,715,6284 -Octon,34186,516,21.791,1.486,1.345,727,6284 -Réallon,5114,258,70.656,2.676,2.423,972,6394 -Brenas,34040,52,10.499,1.031,0.933,719,6283 -Les Hauts-de-Caux,76041,1398,11.728,1.090,0.987,536,6955 -Val-de-Scie,76034,2557,22.059,1.495,1.354,569,6957 -Villemaréchal,77504,1110,17.503,1.332,1.206,693,6798 -Notre-Dame-de-la-Mer,78320,654,9.008,0.955,0.865,592,6882 -Le Chesnay-Rocquencourt,78158,31324,7.162,0.852,0.771,634,6861 -Beugnon-Thireuil,79077,726,34.002,1.856,1.680,429,6613 -Les Châteliers,79105,497,26.547,1.640,1.485,463,6602 -Loretz-d'Argenton,79014,2674,52.872,2.315,2.096,449,6671 -Marcillé,79251,768,18.378,1.365,1.236,461,6570 -Fontivillié,79064,871,24.786,1.585,1.435,461,6569 -Saint-Pardoux-Soutiers,79285,1879,40.231,2.019,1.828,449,6613 -Prailles-La Couarde,79217,945,35.385,1.893,1.714,453,6587 -Val-du-Mignon,79334,1108,28.707,1.705,1.544,427,6568 -Ô-de-Selle,80485,1222,26.987,1.654,1.498,641,6959 -Plaine-et-Vallées,79196,2413,93.281,3.074,2.783,460,6650 -Moncoutant-sur-Sèvre,79179,5041,93.334,3.075,2.784,426,6623 -Carnoy-Mametz,80505,283,10.194,1.016,0.920,682,6991 -Marchélepot-Misery,80509,600,8.904,0.950,0.860,689,6969 -Trois-Rivières,80625,1490,16.808,1.305,1.182,669,6957 -Terre-de-Bancalié,81233,1696,84.769,2.931,2.654,639,6302 -Les Velluire-sur-Vendée,85177,1375,26.574,1.641,1.486,399,6596 -Montaigu-Vendée,85146,20084,118.282,3.462,3.135,370,6658 -Chanverrie,85302,5545,59.370,2.453,2.221,400,6654 -Saint-Pardoux-le-Lac,87128,1320,69.219,2.648,2.398,559,6556 -Boivre-la-Vallée,86123,3109,118.160,3.460,3.133,476,6614 -Rives-d'Autise,85162,2126,32.145,1.805,1.634,417,6597 -Valence-en-Poitou,86082,4454,83.521,2.909,2.634,482,6579 -Val-d'Oire-et-Gartempe,87028,1692,120.707,3.497,3.166,538,6579 -Treigny-Perreuse-Sainte-Colombe,89420,1007,67.770,2.620,2.372,709,6715 -Guillon-Terre-Plaine,89197,770,49.125,2.231,2.020,781,6718 -Le Mérévillois,91390,3381,33.207,1.834,1.661,635,6803 -Meroux-Moval,90068,1304,10.041,1.009,0.914,996,6729 -Évry-Courcouronnes,91228,68090,13.108,1.152,1.043,660,6838 -Puycapel,15027,813,44.203,2.116,1.916,652,6406 -Janville-en-Beauce,28199,2569,42.655,2.079,1.882,615,6787 -Dole,39198,23579,38.212,1.968,1.782,889,6665 -Saint-Marcel-d'Urfé,42255,294,14.037,1.193,1.080,767,6531 -Le Tremblois,70505,183,5.598,0.753,0.682,896,6699 -Seuilly,37248,346,15.734,1.263,1.144,486,6672 -Noiron,70389,57,5.738,0.762,0.690,897,6703 -La Garnache,85096,4956,60.544,2.477,2.243,333,6659 -Souternon,42303,292,17.124,1.317,1.192,780,6530 -Pontchâteau,44129,10666,55.750,2.377,2.152,318,6715 -Ignol,18113,180,17.994,1.350,1.222,691,6654 -Villefontaine,38553,18653,10.397,1.026,0.929,866,6503 -Croizet-sur-Gand,42077,315,6.002,0.780,0.706,794,6533 -Gelles,63163,965,47.738,2.199,1.991,685,6522 -Cottance,42073,708,13.911,1.187,1.075,801,6520 -Blain,44015,9687,102.304,3.220,2.915,344,6722 -Le Cellier,44028,3698,35.738,1.903,1.723,371,6698 -Vienne,38544,29454,22.599,1.513,1.370,846,6494 -Saint-Laurent-Rochefort,42252,244,15.723,1.262,1.143,772,6521 -Ailleux,42002,158,9.332,0.972,0.880,771,6524 -Bussières,70107,412,6.119,0.787,0.713,927,6700 -Le Chambon-Feugerolles,42044,12486,17.470,1.330,1.204,802,6478 -Vinay,38559,4217,16.068,1.276,1.155,887,6462 -La Valla-en-Gier,42322,1019,34.810,1.878,1.700,823,6477 -Aresches,39586,34,4.769,0.695,0.629,921,6649 -Vaux-sur-Poligny,39548,83,1.345,0.369,0.334,909,6639 -Orval,18172,1815,7.654,0.881,0.798,658,6625 -Bélarga,34029,586,4.153,0.649,0.588,742,6272 -Pesmes,70408,1092,18.919,1.385,1.254,898,6691 -Sanilhac,24312,4515,61.963,2.506,2.269,528,6445 -Saint-Denis-Combarnazat,63333,224,10.240,1.019,0.923,725,6543 -Esmoulins,70218,137,4.480,0.674,0.610,891,6705 -Noirétable,42159,1597,40.755,2.032,1.840,756,6528 -Saint-Julien-de-l'Herms,38406,147,9.260,0.969,0.877,866,6484 -Vérin,42327,671,3.225,0.572,0.518,837,6485 -Saint-Sauveur-en-Rue,42287,1096,30.633,1.762,1.595,814,6463 -Saint-Ferréol,74234,850,16.759,1.303,1.180,959,6523 -Yffiniac,22389,5019,17.356,1.326,1.201,277,6835 -Briantes,36025,607,23.313,1.537,1.392,627,6605 -Vellefrie,70534,132,5.948,0.776,0.703,941,6737 -Calan,56029,1187,12.245,1.114,1.009,228,6770 -Denezières,39192,73,6.451,0.808,0.732,915,6617 -Rostrenen,22266,3062,32.360,1.811,1.640,235,6807 -Ameugny,71007,170,6.491,0.811,0.734,830,6603 -Guingamp,22070,6899,3.465,0.593,0.537,245,6847 -Piré-Chancé,35220,2860,41.895,2.060,1.865,369,6773 -Saint-Laurent-sur-Gorre,87158,1490,39.720,2.006,1.816,541,6517 -Mens,38226,1397,28.352,1.695,1.535,923,6416 -Pont-de-Vaux,1305,2290,7.755,0.886,0.802,847,6598 -Saint-André-sur-Vieux-Jonc,1336,1126,24.548,1.577,1.428,865,6567 -Bourg-en-Bresse,1053,41365,24.041,1.561,1.413,876,6572 -Brénod,1060,522,24.035,1.561,1.413,900,6555 -Corenc,38126,3996,6.174,0.791,0.716,915,6463 -Cours-de-Monségur,33136,280,9.620,0.987,0.894,473,6401 -Tonnay-Boutonne,17448,1159,23.127,1.531,1.386,411,6546 -Saint-Tugdual,56238,370,20.142,1.429,1.294,228,6799 -Caden,56028,1650,38.205,1.967,1.781,306,6739 -Blaignan-Prignac,33055,469,14.440,1.210,1.096,398,6478 -Baladou,46016,406,15.535,1.255,1.136,584,6424 -Vanves,92075,27846,1.555,0.397,0.359,649,6859 -Les Mazures,8284,915,36.319,1.918,1.737,814,6976 -Saint-Aubin-de-Locquenay,72266,669,17.522,1.332,1.206,477,6797 -Aubervilliers,93001,86061,5.770,0.765,0.693,654,6869 -Cournonterral,34088,5950,28.826,1.709,1.547,759,6271 -Saint-Denis,93066,111354,12.373,1.120,1.014,652,6872 -Flize,8173,1716,25.965,1.622,1.469,827,6956 -Issy-les-Moulineaux,92040,68395,4.248,0.656,0.594,645,6858 -Biganos,33051,10470,51.180,2.277,2.062,382,6403 -Salon-de-Provence,13103,45574,70.512,2.673,2.420,861,6282 -Villers-le-Tilleul,8478,235,8.636,0.935,0.847,823,6947 -Rimogne,8365,1399,3.792,0.620,0.561,812,6971 -Lys-Haut-Layon,49373,7882,172.316,4.178,3.783,449,6671 -Savigny-le-Temple,77445,30097,12.023,1.104,1.000,669,6834 -Saint-Pierre-du-Perray,91573,10851,11.766,1.092,0.989,664,6837 -Mouais,44105,384,9.998,1.006,0.911,352,6743 -Loire-Authion,49307,15821,114.824,3.411,3.088,439,6708 -Chalonnes-sur-Loire,49063,6557,38.531,1.976,1.789,420,6700 -Rochefort-sur-Loire,49259,2343,28.383,1.696,1.536,422,6703 -Sauville,8405,258,15.105,1.237,1.120,832,6942 -Chagny,8095,185,13.430,1.167,1.057,821,6943 -La Sabotterie,8374,110,3.637,0.607,0.550,821,6938 -Villers-sur-le-Mont,8482,111,5.300,0.733,0.664,822,6952 -Baâlons,8041,220,14.640,1.218,1.103,819,6944 -Olargues,34187,682,18.525,1.370,1.240,692,6274 -Guignicourt-sur-Vence,8203,313,9.525,0.982,0.889,815,6956 -Bouvellemont,8080,117,4.344,0.663,0.600,822,6944 -Saint-Loup-Terrier,8387,178,15.279,1.244,1.126,815,6944 -Loubeyrat,63198,1297,24.261,1.568,1.420,697,6536 -Poix-Terron,8341,793,14.301,1.204,1.090,822,6952 -Saint-Vincent-d'Olargues,34291,351,15.900,1.269,1.149,690,6276 -Le Verdier,81313,221,9.618,0.987,0.894,605,6321 -Gruissan,11170,5011,62.343,2.513,2.275,703,6218 -Roqueredonde,34233,212,22.872,1.522,1.378,712,6302 -Châbons,38065,2086,18.546,1.371,1.241,887,6483 -Bévenais,38042,1000,14.275,1.203,1.089,889,6477 -Le Grand-Lemps,38182,3096,12.869,1.142,1.034,891,6477 -Nouvoitou,35204,3016,19.410,1.402,1.269,361,6777 -Fondamente,12155,324,50.783,2.268,2.053,712,6311 -Ceilhes-et-Rocozels,34071,323,27.977,1.684,1.525,704,6300 -Fresnay-sur-Sarthe,72138,3026,29.284,1.723,1.560,488,6801 -Belsentes,7165,548,25.705,1.614,1.461,821,6421 -Bairon et ses environs,8116,1056,45.133,2.138,1.936,825,6941 -Grand-Fougeray,35124,2455,55.335,2.368,2.144,345,6752 -Grans,13044,4911,27.710,1.676,1.517,869,6280 -Chanteloup-en-Brie,77085,3811,3.184,0.568,0.514,680,6861 -Chessy,77111,5297,5.765,0.764,0.692,681,6865 -Rocroi,8367,2357,50.413,2.260,2.046,817,6984 -Montévrain,77307,10950,5.443,0.743,0.673,680,6863 -Saint-Paul-et-Valmalle,34282,1102,12.808,1.139,1.031,752,6281 -Achicourt,62004,7678,5.831,0.769,0.696,685,7019 -Trélazé,49353,14402,12.241,1.114,1.009,435,6712 -Boulzicourt,8076,961,6.646,0.821,0.743,821,6955 -Audenge,33019,7653,81.912,2.881,2.609,396,6412 -Le Châtelet-sur-Sormonne,8110,160,9.861,1.000,0.905,810,6971 -Marquigny,8278,89,6.697,0.824,0.746,822,6940 -Omont,8335,82,17.792,1.343,1.216,823,6945 -Yvernaumont,8503,140,2.795,0.532,0.482,820,6953 -Singly,8422,135,9.945,1.004,0.909,822,6950 -La Horgne,8228,207,5.329,0.735,0.665,823,6948 -Tourteron,8458,179,8.904,0.950,0.860,820,6941 -Jonval,8238,97,2.520,0.505,0.457,820,6941 -Colomiers,31149,38716,21.034,1.460,1.322,561,6279 -Castelnau-de-Montmiral,81064,1038,89.742,3.015,2.730,607,6315 -Cornebarrieu,31150,6521,18.805,1.380,1.249,563,6283 -Kaltenhouse,67230,2232,3.743,0.616,0.558,1056,6866 -Narbonne,11262,53594,174.741,4.208,3.810,705,6233 -Charbonnières-les-Varennes,63092,1698,32.352,1.811,1.640,702,6534 -Beauvène,7030,212,12.171,1.110,1.005,817,6419 -Plozévet,29215,2980,27.648,1.674,1.516,147,6794 -Messemé,86156,240,9.854,0.999,0.905,487,6660 -Sillars,86262,620,60.675,2.479,2.245,529,6598 -Coussay,86085,249,20.202,1.431,1.296,489,6640 -Magné,86141,676,20.466,1.440,1.304,503,6586 -Bourseul,22014,1134,22.533,1.511,1.368,310,6834 -Valdallière,14726,6054,159.113,4.015,3.635,434,6872 -Saint-Méloir-des-Bois,22317,257,6.341,0.802,0.726,311,6825 -Saint-Michel-de-Plélan,22318,330,7.731,0.885,0.801,313,6831 -Orly,94054,23378,6.694,0.824,0.746,654,6848 -Audun-le-Tiche,57038,6800,15.459,1.252,1.134,913,6935 -Hauconcourt,57303,635,7.915,0.896,0.811,932,6903 -Monneren,57476,423,11.069,1.059,0.959,949,6923 -Hesse,57321,576,12.997,1.148,1.039,1001,6850 -Erstroff,57198,199,5.035,0.714,0.646,977,6883 -Salonnes,57625,193,12.671,1.133,1.026,959,6862 -Hottviller,57338,529,8.293,0.917,0.830,1021,6893 -Bibiche,57079,451,12.547,1.128,1.021,955,6922 -Saint-Clément,54472,863,16.377,1.288,1.166,964,6832 -Pierre-Percée,54427,90,9.889,1.001,0.906,993,6826 -Vroncourt,54592,270,4.173,0.650,0.589,928,6821 -Pannes,54416,171,8.461,0.926,0.838,905,6875 -Puyrolland,17294,198,13.130,1.153,1.044,416,6556 -Gariès,82064,115,14.276,1.203,1.089,546,6304 -Montaïn,82118,108,4.022,0.638,0.578,549,6316 -Sérignac,82180,534,32.685,1.820,1.648,544,6314 -Saint François Longchamp,73235,489,60.584,2.478,2.244,966,6487 -Gélacourt,54217,168,4.875,0.703,0.637,977,6825 -Blémerey,54078,68,3.868,0.626,0.567,977,6839 -Cayrac,82039,548,6.241,0.795,0.720,581,6335 -Saint-Christoly-de-Blaye,33382,1983,28.140,1.689,1.529,428,6461 -Colombelles,14167,6769,7.100,0.848,0.768,462,6905 -Uz,65458,33,2.453,0.499,0.452,448,6212 -Listrac-Médoc,33248,2737,60.764,2.481,2.246,394,6451 -Bourideys,33068,73,48.544,2.218,2.008,420,6366 -Bancigny,2044,26,3.338,0.582,0.527,774,6967 -La Chavatte,80189,74,1.919,0.441,0.399,682,6962 -Fleurines,60238,1909,12.000,1.103,0.999,671,6909 -Cerny-lès-Bucy,2151,114,3.166,0.566,0.512,740,6941 -Janville,60323,691,0.951,0.310,0.281,689,6928 -Xouaxange,57756,302,5.187,0.725,0.656,995,6851 -Plumetot,14509,221,1.235,0.354,0.321,456,6914 -Lannoy,59332,1752,0.185,0.137,0.124,715,7063 -Sarrians,84122,5966,37.587,1.952,1.767,856,6330 -Pailhac,65354,69,0.969,0.313,0.283,485,6204 -Ris,65379,17,1.863,0.434,0.393,489,6201 -Les Thilliers-en-Vexin,27633,491,1.590,0.401,0.363,599,6906 -Thorrenc,7321,234,3.718,0.614,0.556,837,6461 -Obsonville,77342,107,7.053,0.845,0.765,666,6791 -Montségur-sur-Lauzon,26211,1291,18.434,1.367,1.238,851,6365 -Fontenay-de-Bossery,10154,73,8.336,0.919,0.832,735,6819 -Les Noës-près-Troyes,10265,3257,0.748,0.275,0.249,777,6801 -Montreuil-sur-Blaise,52336,163,1.410,0.378,0.342,844,6822 -La Ferrière-sur-Risle,27240,224,0.249,0.159,0.144,538,6878 -Crèvecœur-sur-l'Escaut,59161,740,19.035,1.389,1.258,722,6996 -Les Bordes,71043,87,2.257,0.478,0.433,856,6647 -La Vergenne,70544,120,2.967,0.548,0.496,965,6731 -Saint-Barthélemy-Lestra,42202,684,11.193,1.065,0.964,802,6516 -Châtillon,3069,316,12.857,1.141,1.033,713,6597 -Verlans,70547,183,1.657,0.410,0.371,979,6727 -Sainte-Paule,69230,332,7.668,0.881,0.798,821,6545 -Les Mayons,83075,641,28.859,1.710,1.548,975,6249 -Blauvac,84018,520,21.058,1.461,1.323,874,6329 -Cuiry-lès-Iviers,2251,28,4.855,0.701,0.635,779,6965 -Bois-lès-Pargny,2096,203,10.458,1.029,0.932,749,6961 -Deluz,25197,623,7.971,0.899,0.814,943,6693 -Bieuxy,2087,28,4.532,0.678,0.614,721,6927 -Magny-Cours,58152,1403,32.232,1.807,1.636,716,6643 -Bellegarde-Poussieu,38037,987,16.911,1.309,1.185,854,6481 -Ozolles,71339,431,27.379,1.666,1.508,808,6587 -Margival,2464,373,5.483,0.745,0.675,729,6924 -Zalana,2B356,141,13.203,1.157,1.048,1227,6147 -Jayat,1196,1166,16.292,1.285,1.163,861,6589 -Bonboillon,70075,199,4.508,0.676,0.612,902,6697 -Suzan,9304,17,2.397,0.493,0.446,572,6215 -Monteux,84080,12870,39.469,2.000,1.811,861,6331 -Lourde,31306,91,1.213,0.351,0.318,509,6213 -Vaudherland,95633,86,0.097,0.099,0.090,662,6878 -Villaines-sous-Bois,95660,770,1.891,0.438,0.397,654,6886 -Le Plessis-Bouchard,95491,8230,2.661,0.519,0.470,643,6878 -Gouzangrez,95282,168,0.774,0.280,0.254,620,6891 -Montrouge,92049,49128,2.069,0.458,0.415,651,6858 -Levallois-Perret,92044,63462,2.413,0.494,0.447,648,6867 -Mondonville-Saint-Jean,28257,87,5.503,0.747,0.676,612,6807 -Walincourt-Selvigny,59631,2135,15.135,1.238,1.121,722,6995 -Beauvallon,69179,3973,24.611,1.579,1.430,834,6499 -Esnes,59209,681,14.513,1.213,1.098,720,7002 -Montigny-en-Cambrésis,59413,564,5.850,0.770,0.697,728,6999 -Dolignon,2266,50,3.176,0.567,0.513,777,6961 -Lesdain,59341,408,8.455,0.926,0.838,721,6997 -Gonnelieu,59267,313,4.960,0.709,0.642,712,6997 -Sarry,51525,2054,19.925,1.421,1.287,803,6868 -Clairfontaine,2197,562,14.405,1.208,1.094,774,6988 -La Chapelle-du-Mont-de-France,71091,187,9.191,0.965,0.874,818,6590 -Saint-Clément,2674,52,5.078,0.717,0.649,779,6965 -Étréaupont,2295,868,17.648,1.337,1.211,767,6975 -Saint-Julia-de-Bec,11347,104,14.156,1.198,1.085,638,6194 -Lesquielles-Saint-Germain,2422,809,16.504,1.293,1.171,747,6979 -Saint-Martin-d'Heuille,58254,609,13.538,1.171,1.060,716,6658 -Ternay,69297,5437,7.925,0.896,0.811,841,6501 -Balham,8044,138,1.777,0.424,0.384,784,6933 -Villette-de-Vienne,38558,1821,11.018,1.057,0.957,847,6502 -Yzeure,3321,13230,43.224,2.093,1.895,726,6609 -Communay,69272,4175,10.487,1.031,0.933,844,6504 -Riverie,69166,316,0.407,0.203,0.184,824,6501 -Asfeld,8024,1113,22.128,1.497,1.355,783,6928 -Chaourse,2160,535,18.601,1.373,1.243,774,6958 -Unac,9318,119,2.554,0.509,0.461,601,6185 -Sainte-Preuve,2690,83,9.629,0.988,0.895,768,6946 -Nampcelles-la-Cour,2535,121,10.989,1.055,0.955,771,6963 -Aire,8004,218,6.757,0.827,0.749,786,6929 -Saint-Fergeux,8380,207,25.531,1.608,1.456,791,6941 -Doumely-Bégny,8143,79,7.803,0.889,0.805,794,6947 -Berlise,2069,115,6.683,0.823,0.745,781,6954 -Inaumont,8234,97,4.725,0.692,0.627,796,6943 -Font-Romeu-Odeillo-Via,66124,1941,29.728,1.736,1.572,619,6161 -Tavaux-et-Pontséricourt,2737,577,25.615,1.611,1.459,768,6962 -Givors,69091,19312,17.452,1.330,1.204,835,6499 -Saint-Priest,69290,45844,29.722,1.735,1.571,853,6515 -Lordat,9171,63,7.528,0.873,0.790,597,6187 -Luzinay,38215,2319,19.066,1.390,1.259,856,6502 -Asnières-sur-Saône,1023,63,4.666,0.688,0.623,844,6587 -La Cabanasse,66027,657,3.190,0.569,0.515,625,6155 -Logny-Bogny,8257,180,10.716,1.042,0.943,799,6964 -Vésines,1439,99,3.843,0.624,0.565,843,6588 -Château,71112,225,14.110,1.196,1.083,824,6591 -Savy,2702,612,7.507,0.872,0.790,715,6969 -Berzé-la-Ville,71032,666,5.506,0.747,0.676,829,6588 -Villiers-le-Sec,58310,49,1.385,0.375,0.340,732,6698 -La Salle,71494,548,5.721,0.761,0.689,845,6593 -Saint-Gengoux-de-Scissé,71416,608,11.049,1.058,0.958,834,6597 -Vaychis,9325,23,4.562,0.680,0.616,605,6185 -Chassieu,69271,10234,11.585,1.083,0.981,854,6519 -Berlancourt,60062,337,7.118,0.849,0.769,706,6955 -La Ville-aux-Bois-lès-Dizy,2802,208,10.181,1.016,0.920,772,6953 -Neuville-Bourjonval,62608,169,3.124,0.563,0.510,702,6995 -Bucy-lès-Pierrepont,2133,416,14.593,1.216,1.101,763,6951 -Bouillancy,60091,382,13.694,1.178,1.067,693,6889 -Sault-Brénaz,1396,960,5.680,0.759,0.687,888,6530 -Renneval,2641,120,6.760,0.828,0.750,776,6962 -Reyssouze,1323,975,9.631,0.988,0.895,845,6595 -Pérouges,1290,1205,19.324,1.399,1.267,867,6536 -Ginoles,11165,309,6.380,0.804,0.728,629,6197 -Montalieu-Vercieu,38247,3379,8.957,0.953,0.863,889,6529 -Targassonne,66202,181,7.892,0.894,0.809,615,6158 -Bourg-Madame,66025,1221,7.710,0.884,0.800,616,6149 -Marseille,13055,862211,238.138,4.912,4.447,895,6233 -Foissiat,1163,2062,40.153,2.017,1.826,866,6585 -Quillan,11304,3288,35.944,1.908,1.728,631,6195 -Canaveilles,66036,32,11.224,1.066,0.965,639,6161 -Sainte-Léocadie,66181,132,8.819,0.945,0.856,620,6146 -Caudiès-de-Conflent,66047,17,6.507,0.812,0.735,629,6165 -Mazuby,11229,25,8.866,0.948,0.858,622,6187 -Croix-Moligneaux,80226,288,8.015,0.901,0.816,699,6970 -Planès,66142,53,14.287,1.203,1.089,630,6149 -Fontpédrouse,66080,126,64.070,2.548,2.307,637,6153 -Fougax-et-Barrineuf,9125,437,31.552,1.788,1.619,608,6195 -Quirbajou,11306,49,14.066,1.194,1.081,628,6194 -Masseret,19129,682,13.735,1.180,1.068,582,6496 -Marcillac-la-Croze,19126,179,6.092,0.786,0.712,602,6439 -Carcanières,9078,77,6.497,0.811,0.734,627,6181 -Ax-les-Thermes,9032,1223,30.248,1.751,1.585,599,6172 -Sansa,66191,24,23.089,1.530,1.385,634,6173 -Escouloubre,11127,74,32.282,1.809,1.638,626,6182 -Aunat,11019,65,10.750,1.044,0.945,629,6186 -Mérial,11230,31,16.555,1.295,1.173,612,6185 -Formiguères,66082,468,46.925,2.180,1.974,627,6167 -Ascou,9023,133,35.666,1.901,1.721,608,6180 -Les Angles,66004,537,43.360,2.096,1.898,619,6162 -Brains-sur-les-Marches,53041,265,7.772,0.887,0.803,387,6760 -Nébias,11263,240,13.025,1.149,1.040,629,6198 -Artigues,9020,55,12.425,1.122,1.016,625,6181 -Latour-de-Carol,66095,421,12.969,1.146,1.038,607,6156 -Saint-Germain-du-Pinel,35272,914,11.297,1.070,0.969,390,6773 -Sainte-Colombe-sur-Guette,11335,47,21.169,1.465,1.326,641,6184 -Saillagouse,66167,1101,11.247,1.068,0.967,624,6148 -Artigues,11017,73,6.534,0.814,0.737,635,6186 -Égat,66064,447,4.397,0.667,0.604,619,6155 -Sauto,66192,93,8.431,0.924,0.837,628,6157 -Nahuja,66120,76,5.676,0.758,0.686,616,6148 -Quérigut,9239,135,36.276,1.917,1.736,626,6180 -Matigny,80519,500,6.995,0.842,0.762,702,6968 -Coudons,11101,53,9.726,0.993,0.899,631,6195 -Tignac,9311,24,3.698,0.612,0.554,600,6184 -Chaudun,2172,249,8.561,0.931,0.843,717,6914 -La Llagonne,66098,219,23.354,1.538,1.393,628,6157 -Montaillou,9197,17,8.830,0.946,0.857,611,6186 -Rodome,11317,125,11.989,1.102,0.998,624,6187 -Belvianes-et-Cavirac,11035,265,11.924,1.099,0.995,637,6195 -Ayguatébia-Talau,66010,41,29.942,1.742,1.577,630,6159 -Roquefort-de-Sault,11321,85,22.232,1.501,1.359,635,6186 -Fontrabiouse,66081,130,15.716,1.262,1.143,619,6173 -Bolquère,66020,807,17.897,1.347,1.220,619,6161 -Matemale,66105,264,19.294,1.398,1.266,628,6162 -Nohèdes,66122,64,28.935,1.712,1.550,642,6167 -Caussou,9087,59,15.860,1.268,1.148,605,6185 -Palau-de-Cerdagne,66132,403,11.361,1.073,0.972,619,6140 -Joucou,11177,35,6.754,0.827,0.749,625,6191 -Petit-Fayt,59461,305,8.178,0.910,0.824,757,7000 -La Fajolle,11135,10,15.824,1.266,1.146,618,6182 -Prades,9232,35,29.111,1.717,1.555,607,6192 -Saint-Pierre-dels-Forcats,66188,266,12.884,1.143,1.035,629,6156 -Comus,11096,43,14.302,1.204,1.090,610,6190 -Valcebollère,66220,42,26.077,1.625,1.471,619,6140 -Cailla,11060,47,7.706,0.884,0.800,632,6190 -Hancourt,80413,95,4.087,0.644,0.583,706,6977 -Galinagues,11160,31,4.200,0.652,0.590,621,6190 -Mont-Louis,66117,161,0.385,0.198,0.179,627,6157 -Bourget-en-Huile,73052,148,6.764,0.828,0.750,949,6494 -Saint-M'Hervé,35300,1366,31.078,1.775,1.607,397,6792 -Montferrier,9206,502,51.955,2.294,2.077,595,6196 -Marsa,11219,20,19.878,1.419,1.285,633,6192 -Campagna-de-Sault,11062,18,10.757,1.044,0.945,621,6183 -Thuès-Entre-Valls,66209,36,20.433,1.439,1.303,638,6159 -Le Puch,9237,29,2.833,0.536,0.485,625,6181 -Bestiac,9053,19,6.475,0.810,0.733,602,6185 -Espezel,11130,195,14.548,1.214,1.099,619,6191 -Orgeix,9218,87,18.530,1.370,1.240,606,6180 -Rouze,9252,84,9.557,0.984,0.891,625,6184 -Fontanès-de-Sault,11147,5,5.521,0.748,0.677,623,6186 -Le Pla,9230,56,13.151,1.154,1.045,622,6174 -Belvis,11036,157,24.133,1.564,1.416,628,6194 -Oreilla,66128,20,16.403,1.289,1.167,639,6161 -Le Clat,11093,33,10.609,1.037,0.939,632,6190 -Olette,66125,371,29.105,1.717,1.555,642,6162 -Angoustrine-Villeneuve-des-Escaldes,66005,653,87.029,2.969,2.688,619,6162 -Osséja,66130,1323,17.038,1.314,1.190,621,6146 -Belfort-sur-Rebenty,11031,30,5.211,0.727,0.658,622,6194 -Puyvalador,66154,76,19.116,1.392,1.260,621,6174 -Rozoy-sur-Serre,2666,1006,16.703,1.301,1.178,781,6960 -Réal,66159,65,10.575,1.035,0.937,632,6173 -Mérens-les-Vals,9189,167,80.097,2.849,2.580,606,6176 -Ignaux,9140,110,5.465,0.744,0.674,605,6185 -Orlu,9220,171,71.460,2.691,2.436,616,6177 -Montségur,9211,125,37.365,1.946,1.762,608,6195 -Le Bousquet,11047,43,26.038,1.624,1.470,633,6185 -Counozouls,11104,47,27.828,1.679,1.520,636,6183 -Driencourt,80258,95,5.020,0.713,0.646,699,6984 -Axat,11021,553,11.982,1.102,0.998,640,6191 -Dampleux,2259,400,8.160,0.909,0.823,709,6903 -Ur,66218,360,6.738,0.826,0.748,611,6153 -Roquefeuil,11320,286,22.645,1.515,1.372,619,6199 -Belcaire,11028,393,31.710,1.792,1.623,616,6191 -Estavar,66072,464,9.276,0.969,0.877,618,6155 -Remaucourt,8356,171,10.828,1.047,0.948,790,6945 -Niort-de-Sault,11265,27,22.028,1.494,1.353,618,6182 -Passa,66134,761,13.427,1.166,1.056,683,6160 -Railleu,66157,30,10.207,1.017,0.921,630,6164 -Vernaux,9330,29,6.073,0.784,0.710,599,6186 -Strenquels,46312,263,9.086,0.959,0.868,592,6433 -Sorgeat,9298,83,19.214,1.395,1.263,611,6186 -Rivesaltes,66164,8647,28.838,1.709,1.547,691,6183 -Saint-Martin-Lys,11358,25,10.262,1.020,0.924,635,6193 -Elne,66065,8780,21.886,1.489,1.348,699,6168 -Bessède-de-Sault,11038,52,15.479,1.252,1.134,630,6190 -Camurac,11066,101,11.532,1.081,0.979,614,6188 -Fourques,66084,1265,9.563,0.984,0.891,679,6166 -Paziols,11276,532,28.225,1.691,1.531,680,6195 -Montner,66118,343,11.002,1.056,0.956,673,6183 -Justine-Herbigny,8240,177,11.868,1.097,0.993,796,6949 -Villers-devant-le-Thour,8476,419,16.494,1.293,1.171,775,6935 -Contilly,72091,142,12.515,1.126,1.019,503,6817 -Iviers,2388,228,7.537,0.874,0.791,785,6966 -Braye-en-Thiérache,2116,145,9.264,0.969,0.877,770,6966 -Vaux-lès-Rubigny,8465,50,3.947,0.632,0.572,785,6954 -Renneville,8360,208,9.919,1.002,0.907,781,6949 -Rubigny,8372,68,5.074,0.717,0.649,788,6954 -Nanteuil-sur-Aisne,8313,131,7.989,0.900,0.815,792,6934 -Hannogne-Saint-Rémy,8210,111,18.113,1.355,1.227,785,6946 -Dagny-Lambercy,2256,128,10.048,1.009,0.914,774,6962 -Écly,8150,179,9.361,0.974,0.882,792,6942 -Bazus-Aure,65075,132,1.923,0.441,0.399,483,6200 -Barby,8048,407,11.222,1.066,0.965,793,6936 -Loucelles,14380,183,3.050,0.556,0.503,439,6908 -Burelles,2136,129,13.970,1.190,1.077,764,6962 -Chaumont-Porcien,8113,479,36.058,1.911,1.730,785,6953 -Blanzy-la-Salonnaise,8070,329,12.231,1.113,1.008,788,6935 -Avançon,8038,303,21.311,1.469,1.330,792,6934 -Mesnil-Saint-Laurent,2481,464,5.513,0.747,0.676,728,6970 -Saint-Quentin-le-Petit,8396,117,8.962,0.953,0.863,778,6942 -Raillimont,2634,78,4.934,0.707,0.640,784,6956 -Sévigny-Waleppe,8418,228,24.248,1.567,1.419,777,6945 -Le Fréty,8182,58,7.202,0.854,0.773,788,6959 -Saint-Laurent-des-Bois,27555,248,3.293,0.578,0.523,575,6862 -Dallon,2257,436,5.771,0.765,0.693,718,6969 -Dizy-le-Gros,2264,758,20.040,1.425,1.290,774,6952 -La Férée,8167,88,11.047,1.058,0.958,796,6961 -Hesbécourt,80435,56,3.578,0.602,0.545,712,6984 -Montcornet,2502,1337,5.804,0.767,0.694,775,6952 -Brognon,8087,151,7.457,0.869,0.787,791,6983 -Parfondeval,2586,142,10.281,1.021,0.924,784,6960 -Maranwez,8272,63,3.083,0.559,0.506,796,6959 -Rocquigny,8366,689,36.780,1.930,1.747,794,6957 -Acy-Romance,8001,435,11.062,1.059,0.959,798,6935 -Hauteville,8219,103,5.570,0.751,0.680,795,6943 -Brancourt-le-Grand,2112,573,13.358,1.163,1.053,726,6988 -Fraillicourt,8178,186,14.410,1.208,1.094,783,6955 -Blanchefosse-et-Bay,8069,156,20.429,1.439,1.303,792,6965 -Montloué,2519,188,15.648,1.259,1.140,775,6952 -Chéry-lès-Rozoy,2181,83,5.024,0.713,0.646,779,6961 -Herpy-l'Arlésienne,8225,196,10.633,1.038,0.940,783,6939 -Villeret,2808,302,4.005,0.637,0.577,712,6983 -La Romagne,8369,128,10.046,1.009,0.914,796,6954 -Étreillers,2296,1214,8.670,0.937,0.848,710,6971 -Wasigny,8499,340,9.951,1.004,0.909,800,6951 -Montigny-le-Franc,2513,146,9.846,0.999,0.905,769,6954 -Condé-lès-Herpy,8126,218,11.616,1.085,0.982,788,6936 -Orcinas,26222,38,5.364,0.737,0.667,871,6385 -Saint-Jean-aux-Bois,8382,117,8.803,0.944,0.855,796,6961 -Noircourt,2556,83,5.490,0.746,0.675,779,6955 -Grandrieux,2354,87,4.383,0.666,0.603,786,6962 -Le Thuel,2743,175,7.123,0.850,0.770,781,6950 -Boncourt,2097,261,13.428,1.166,1.056,768,6949 -Estrées,2291,410,7.047,0.845,0.765,722,6986 -Son,8426,100,9.093,0.960,0.869,790,6945 -Vigneux-Hocquet,2801,266,13.952,1.189,1.077,774,6963 -Givron,8192,87,7.200,0.854,0.773,795,6953 -Morgny-en-Thiérache,2526,84,7.040,0.845,0.765,777,6961 -Chappes,8102,99,9.682,0.990,0.896,795,6945 -Pierrerue,34201,292,11.627,1.085,0.982,694,6263 -Liart,8254,595,13.498,1.169,1.058,796,6966 -Soize,2723,100,6.010,0.780,0.706,777,6956 -Lappion,2409,272,23.653,1.548,1.402,768,6945 -Remaisnil,80666,28,2.964,0.548,0.496,645,7011 -Perthes,8339,303,23.642,1.548,1.402,800,6927 -Les Pins,16261,464,21.040,1.460,1.322,497,6524 -Vieux-lès-Asfeld,8473,322,6.672,0.822,0.744,779,6927 -Archon,2021,89,6.420,0.807,0.731,782,6962 -Banogne-Recouvrance,8046,157,19.108,1.391,1.259,779,6942 -Taizy,8438,108,9.121,0.961,0.870,793,6937 -Bellenglise,2063,384,6.448,0.808,0.732,718,6982 -Arnicourt,8021,158,8.376,0.921,0.834,799,6942 -Saint-Pompain,79290,942,24.234,1.567,1.419,421,6599 -Le Thour,8451,418,16.648,1.299,1.176,778,6936 -Tagnon,8435,882,23.989,1.559,1.412,791,6928 -Draize,8146,103,6.750,0.827,0.749,796,6949 -Sainte-Geneviève,2678,74,4.567,0.680,0.616,777,6961 -Agnicourt-et-Séchelles,2004,179,10.735,1.043,0.944,768,6955 -Châtillon-sur-Oise,2170,127,2.633,0.517,0.468,730,6965 -Résigny,2642,185,7.949,0.897,0.812,789,6960 -Omissy,2571,704,7.242,0.857,0.776,720,6976 -Seraincourt,8413,272,16.303,1.285,1.163,783,6949 -Ramicourt,2635,152,3.808,0.621,0.562,724,6987 -Sery,8415,360,18.346,1.363,1.234,796,6943 -Levergies,2426,549,7.794,0.889,0.805,721,6982 -Rouvroy-sur-Serre,2660,39,3.904,0.629,0.570,784,6960 -Montbrehain,2500,823,9.934,1.003,0.908,724,6987 -Gomont,8195,332,7.191,0.854,0.773,783,6934 -Sault-lès-Rethel,8403,1914,6.544,0.814,0.737,796,6931 -Lislet,2433,227,8.293,0.917,0.830,774,6952 -Fontaine-lès-Clercs,2320,259,5.340,0.736,0.666,714,6969 -Sains-du-Nord,59525,2939,16.040,1.275,1.154,777,6999 -Fontaine-Notre-Dame,2322,391,12.009,1.103,0.999,729,6974 -Vendelles,2774,117,5.277,0.731,0.662,708,6979 -Homblières,2383,1470,14.668,1.219,1.104,728,6976 -Marcy,2459,178,7.434,0.868,0.786,729,6971 -Neuville-Saint-Amand,2549,843,8.075,0.905,0.819,723,6968 -Regny,2636,201,12.028,1.104,1.000,728,6969 -Itancourt,2387,1034,7.116,0.849,0.769,726,6966 -Pontru,2614,256,15.075,1.236,1.119,717,6978 -Longavesnes,80487,89,4.080,0.643,0.582,705,6985 -Étaves-et-Bocquiaux,2293,568,13.709,1.179,1.067,735,6983 -Pontruet,2615,338,6.787,0.829,0.751,719,6979 -Hargicourt,2370,592,8.082,0.905,0.819,712,6984 -Roupy,2658,230,5.907,0.774,0.701,714,6967 -Saint-Genis-sur-Menthon,1355,472,11.690,1.088,0.985,857,6578 -Harly,2371,1630,3.710,0.613,0.555,724,6972 -Bellicourt,2065,604,9.788,0.996,0.902,716,6982 -Remaucourt,2637,302,6.407,0.806,0.730,727,6976 -Fonsomme,2319,477,9.636,0.988,0.895,729,6976 -Maissemy,2452,242,8.161,0.909,0.823,715,6975 -Villers-Outréaux,59624,2091,7.100,0.848,0.768,722,6994 -Morcourt,2525,574,6.020,0.781,0.707,722,6974 -Saint-Quentin,2691,54443,22.829,1.521,1.377,722,6974 -Croix-Fonsomme,2240,253,9.449,0.978,0.885,727,6984 -Ronssoy,80679,587,7.578,0.876,0.793,710,6987 -Vermand,2785,1086,16.026,1.274,1.153,714,6975 -Castres,2142,244,5.777,0.765,0.693,720,6967 -Fieulaine,2310,263,7.803,0.889,0.805,733,6978 -Seboncourt,2703,1100,11.854,1.096,0.992,732,6983 -Lesdins,2420,832,10.903,1.051,0.952,723,6981 -Gouy,2352,562,17.688,1.339,1.212,718,6985 -Holnon,2382,1400,6.397,0.805,0.729,713,6974 -Grugies,2359,1337,5.107,0.719,0.651,721,6967 -Marquaix,80516,207,5.388,0.739,0.669,706,6985 -Lempire,2417,93,2.627,0.516,0.467,712,6990 -Essigny-le-Petit,2288,349,4.613,0.684,0.619,728,6976 -Saint-Malo-en-Donziois,58252,129,14.862,1.227,1.111,723,6692 -Attilly,2029,368,11.844,1.095,0.991,710,6971 -Marçay,37144,512,21.396,1.472,1.333,491,6669 -Villers-Faucon,80802,611,11.458,1.077,0.975,706,6985 -Gricourt,2355,989,9.994,1.006,0.911,715,6977 -Rouvroy,2659,513,5.151,0.722,0.654,725,6972 -Gauchy,2340,5300,6.255,0.796,0.721,723,6968 -Le Catelet,2143,194,0.409,0.204,0.185,717,6989 -Aubencheul-aux-Bois,2030,277,2.110,0.462,0.418,718,6992 -Vendhuile,2776,561,10.976,1.055,0.955,718,6992 -Jeancourt,2390,273,5.842,0.769,0.696,710,6982 -Fresnoy-le-Grand,2334,2938,15.172,1.240,1.123,727,6984 -Templeux-le-Guérard,80748,173,6.561,0.815,0.738,708,6985 -Honnecourt-sur-Escaut,59312,790,15.523,1.254,1.135,718,6994 -Joncourt,2392,303,7.350,0.863,0.781,721,6983 -Fayet,2303,664,5.921,0.775,0.702,719,6976 -Liéramont,80475,233,7.303,0.860,0.779,703,6987 -Ruyaulcourt,62731,302,6.454,0.809,0.732,703,6998 -Saint-Nazaire-de-Valentane,82168,365,17.321,1.325,1.200,540,6344 -Gouzeaucourt,59269,1544,12.153,1.110,1.005,706,6995 -Metz-en-Couture,62572,684,10.639,1.038,0.940,702,6995 -Livry-Louvercy,51326,1112,30.829,1.767,1.600,791,6892 -Épehy,80271,1176,17.397,1.328,1.202,709,6992 -Guyencourt-Saulcourt,80404,143,5.041,0.715,0.647,705,6987 -Nurlu,80601,398,6.743,0.827,0.749,703,6990 -Villers-Plouich,59625,409,11.021,1.057,0.957,706,6997 -Heudicourt,80438,519,12.666,1.133,1.026,708,6993 -Villers-Guislain,59623,694,11.329,1.071,0.970,709,6992 -Trescault,62830,181,4.624,0.684,0.619,707,7001 -Fins,80312,279,6.818,0.831,0.752,702,6995 -Équancourt,80275,297,7.798,0.889,0.805,702,6991 -Monchy-Lagache,80555,664,15.439,1.251,1.133,701,6971 -Beauvois-en-Vermandois,2060,275,7.512,0.872,0.790,706,6969 -Bouvincourt-en-Vermandois,80128,154,1.974,0.447,0.405,704,6977 -Villefranche-le-Château,26375,22,7.454,0.869,0.787,898,6348 -Bernes,80088,353,7.658,0.881,0.798,707,6981 -Douilly,80252,236,9.982,1.006,0.911,702,6966 -Estrées-Mons,80557,601,15.459,1.252,1.134,698,6976 -Hervilly,80434,181,6.279,0.798,0.723,708,6979 -Pœuilly,80629,128,6.150,0.789,0.714,708,6977 -Vraignes-en-Vermandois,80812,144,4.236,0.655,0.593,704,6977 -Buire-Courcelles,80150,238,7.836,0.891,0.807,702,6981 -Quivières,80658,144,6.866,0.834,0.755,702,6968 -Foreste,2327,169,4.932,0.707,0.640,706,6968 -Trefcon,2747,87,4.088,0.644,0.583,705,6975 -Templeux-la-Fosse,80747,141,7.287,0.859,0.778,701,6988 -Tincourt-Boucly,80762,359,12.869,1.142,1.034,704,6985 -Caulaincourt,2144,146,5.982,0.779,0.705,709,6972 -Dominois,80244,180,6.249,0.796,0.721,618,7028 -Meilly-sur-Rouvres,21399,189,15.073,1.236,1.119,818,6683 -Cartigny,80177,760,15.315,1.246,1.128,699,6980 -Roisel,80677,1656,10.021,1.008,0.913,706,6980 -Ugny-l'Équipée,80771,41,2.913,0.543,0.492,706,6969 -Housset,2385,152,13.274,1.160,1.050,751,6965 -Audigny,2035,283,10.748,1.044,0.945,747,6976 -Bernot,2070,446,16.757,1.303,1.180,733,6978 -Chaulgnes,58067,1495,25.362,1.603,1.451,712,6673 -Sains-Richaumont,2668,1034,12.540,1.127,1.020,749,6971 -Vervins,2789,2526,10.487,1.031,0.933,768,6973 -Thenailles,2740,224,16.770,1.304,1.181,769,6966 -Urzy,58300,1802,23.829,1.554,1.407,718,6664 -Rougeries,2657,240,4.248,0.656,0.594,758,6967 -Saint-Gobert,2681,261,7.844,0.891,0.807,758,6967 -Générac,33184,544,9.506,0.981,0.888,421,6457 -Marfontaine,2463,84,9.228,0.967,0.876,756,6970 -Le Hérie-la-Viéville,2379,233,9.296,0.971,0.879,745,6971 -Laigny,2401,197,10.884,1.050,0.951,763,6977 -Saint-Pierre-lès-Franqueville,2688,53,7.173,0.853,0.772,761,6970 -Landouzy-la-Ville,2405,558,15.872,1.268,1.148,774,6972 -La Bouteille,2109,491,19.388,1.402,1.269,771,6979 -Neuvillette,2552,187,6.479,0.810,0.733,732,6972 -Franqueville,2331,116,2.914,0.543,0.492,757,6970 -Voulpaix,2826,389,11.592,1.084,0.981,757,6971 -Colonfay,2206,80,3.389,0.586,0.531,750,6974 -Le Sourd,2731,167,7.446,0.869,0.787,756,6973 -Origny-Sainte-Benoite,2575,1694,23.290,1.536,1.391,734,6969 -La Hérie,2378,150,4.187,0.651,0.589,773,6975 -La Vallée-au-Blé,2759,363,5.228,0.728,0.659,756,6975 -Thenelles,2741,551,6.999,0.842,0.762,734,6971 -Fontaine-lès-Vervins,2321,926,19.876,1.419,1.285,764,6975 -Hary,2373,215,11.199,1.065,0.964,764,6968 -Landifay-et-Bertaignemont,2403,274,19.449,1.404,1.271,743,6966 -Beaumont-Sardolles,58028,118,29.575,1.731,1.567,730,6647 -Parpeville,2592,190,15.864,1.268,1.148,742,6969 -Harcigny,2369,244,7.564,0.875,0.792,772,6966 -Macquigny,2450,377,20.313,1.435,1.299,740,6972 -Puisieux-et-Clanlieu,2629,291,17.510,1.332,1.206,751,6972 -Aizelles,2007,123,4.884,0.703,0.637,758,6932 -Wiège-Faty,2832,208,7.613,0.878,0.795,751,6975 -Tracy-le-Val,60642,1109,4.694,0.690,0.625,703,6933 -Haution,2377,148,9.518,0.982,0.889,758,6977 -Mont-d'Origny,2503,864,13.480,1.169,1.058,738,6975 -Pleine-Selve,2605,162,6.111,0.787,0.713,738,6964 -Lemé,2416,436,11.614,1.085,0.982,757,6972 -Gronard,2357,74,7.171,0.852,0.771,761,6967 -Goudelancourt-lès-Pierrepont,2350,136,8.756,0.942,0.853,763,6951 -Mâchecourt,2448,122,10.163,1.015,0.919,759,6948 -Épagny,2277,336,10.966,1.054,0.954,718,6932 -Chivres-en-Laonnois,2189,368,13.736,1.180,1.068,762,6946 -Cuirieux,2248,158,6.601,0.818,0.741,760,6953 -Saint-Pierremont,2689,45,7.030,0.844,0.764,762,6956 -Berrieux,2072,190,4.988,0.711,0.644,760,6933 -Le Tholonet,13109,2344,10.846,1.048,0.949,901,6271 -Liesse-Notre-Dame,2430,1297,10.111,1.012,0.916,759,6948 -Parçay-sur-Vienne,37180,647,18.798,1.380,1.249,512,6667 -Montaigu,2498,755,23.660,1.548,1.402,759,6936 -Sécheras,7312,551,7.382,0.865,0.783,838,6451 -Cilly,2194,201,9.337,0.973,0.881,759,6962 -Hautefontaine,60305,332,5.523,0.748,0.677,706,6919 -Saint-Erme-Outre-et-Ramecourt,2676,1728,20.363,1.436,1.300,760,6934 -Laversine,2415,160,7.201,0.854,0.773,708,6917 -Goudelancourt-lès-Berrieux,2349,55,5.500,0.747,0.676,760,6933 -Saint-Thomas,2696,82,2.484,0.502,0.455,759,6935 -Les Guerreaux,71229,239,20.354,1.436,1.300,768,6606 -Marchais,2457,430,15.565,1.256,1.137,762,6946 -Saint-Vincent-du-Pendit,46295,188,9.220,0.967,0.876,612,6413 -Corbeny,2215,767,15.284,1.244,1.126,758,6932 -Bosmont-sur-Serre,2101,196,9.761,0.994,0.900,763,6962 -Lugny,2444,109,4.787,0.696,0.630,760,6965 -Prisces,2623,106,6.599,0.818,0.741,764,6963 -La Neuville-Bosmont,2545,191,9.955,1.004,0.909,762,6956 -Vézaponin,2793,130,3.229,0.572,0.518,716,6928 -Ébouleau,2274,204,13.072,1.151,1.042,764,6956 -Houry,2384,50,3.492,0.595,0.539,760,6965 -Foufflin-Ricametz,62348,156,3.013,0.553,0.501,658,7029 -Rogny,2652,117,5.656,0.757,0.685,758,6963 -Saint-Aubin,2671,297,8.425,0.924,0.837,712,6933 -Saint-Christophe-à-Berry,2673,443,7.944,0.897,0.812,712,6925 -Courtieux,60171,179,2.618,0.515,0.466,707,6922 -Morsain,2527,433,14.371,1.207,1.093,715,6931 -Osly-Courtil,2576,320,5.242,0.729,0.660,719,6923 -Audignicourt,2034,113,5.726,0.762,0.690,708,6930 -Nampcel,60445,317,16.726,1.302,1.179,704,6933 -Trosly-Loire,2750,611,15.261,1.243,1.125,716,6931 -Ternant,58289,194,19.493,1.405,1.272,762,6630 -Cuise-la-Motte,60188,2169,10.157,1.014,0.918,698,6919 -Vauxrezis,2767,328,6.564,0.816,0.739,720,6926 -Attichy,60025,1866,14.817,1.225,1.109,702,6928 -Selens,2704,251,7.684,0.882,0.799,716,6931 -Jaulzy,60324,916,7.601,0.878,0.795,705,6922 -Croutoy,60184,209,3.240,0.573,0.519,703,6918 -Nouvron-Vingré,2562,231,9.252,0.968,0.876,712,6927 -Cuisy-en-Almont,2253,352,9.105,0.960,0.869,719,6923 -Vassens,2762,157,9.865,1.000,0.905,711,6932 -Autrêches,60032,744,13.001,1.148,1.039,712,6928 -Pont-Saint-Mard,2616,203,6.835,0.832,0.753,721,6931 -Carlepont,60129,1503,19.657,1.411,1.278,704,6933 -Pernant,2598,661,9.808,0.997,0.903,717,6918 -Bitry,60072,319,6.636,0.820,0.742,706,6922 -Camelin,2140,454,9.201,0.966,0.875,708,6934 -Avrée,58019,82,13.048,1.150,1.041,765,6637 -Fontenoy,2326,498,8.996,0.955,0.865,716,6924 -Saint-Pierre-lès-Bitry,60593,151,3.427,0.589,0.533,707,6925 -Berny-Rivière,2071,648,7.955,0.898,0.813,713,6925 -Guny,2363,421,9.426,0.977,0.885,719,6932 -Moulin-sous-Touvent,60438,222,18.182,1.357,1.229,703,6932 -Saint-Pierre-Aigle,2687,336,12.064,1.106,1.001,713,6915 -Ambleny,2011,1162,17.253,1.322,1.197,708,6918 -Blérancourt,2093,1270,10.819,1.047,0.948,711,6936 -Pommiers,2610,648,6.726,0.826,0.748,719,6923 -Ressons-le-Long,2643,772,10.665,1.040,0.942,714,6922 -Corcy,2216,309,7.330,0.862,0.780,716,6907 -Caisnes,60118,519,6.163,0.790,0.715,706,6936 -Cœuvres-et-Valsery,2201,439,12.359,1.119,1.013,709,6916 -Tracy-le-Mont,60641,1737,18.666,1.375,1.245,696,6929 -Puiseux-en-Retz,2628,212,9.854,0.999,0.905,711,6909 -Taillefontaine,2734,270,10.589,1.036,0.938,703,6914 -Isles-sur-Suippe,51299,887,12.370,1.120,1.014,790,6921 -Ancienville,2015,76,3.869,0.626,0.567,714,6901 -Fleury,2316,139,6.626,0.819,0.742,710,6906 -Saint-Prix,71472,220,34.197,1.861,1.685,776,6655 -Faverolles,2302,313,13.703,1.178,1.067,716,6905 -Oudry,71334,391,20.786,1.451,1.314,787,6607 -Vauciennes,60658,683,6.301,0.799,0.723,703,6903 -Dommiers,2267,287,7.255,0.857,0.776,717,6915 -Largny-sur-Automne,2410,244,9.629,0.988,0.895,702,6905 -Caurel,51101,638,9.752,0.994,0.900,783,6910 -Saint-Léger-sous-Beuvray,71440,386,35.105,1.886,1.708,782,6644 -Vez,60672,292,10.806,1.046,0.947,702,6907 -Saint-Étienne-Roilaye,60572,318,7.926,0.896,0.811,699,6919 -Lavannes,51318,607,17.801,1.343,1.216,788,6914 -Ivors,60320,255,8.248,0.914,0.828,700,6899 -Chouy,2192,370,20.371,1.437,1.301,719,6904 -Louâtre,2441,203,11.130,1.062,0.962,716,6905 -Ploisy,2607,76,2.886,0.541,0.490,722,6915 -Longpont,2438,268,10.793,1.046,0.947,715,6910 -Missy-aux-Bois,2485,99,3.049,0.556,0.503,717,6914 -Courmas,51188,207,2.862,0.538,0.487,767,6900 -Vierzy,2799,449,12.708,1.135,1.028,718,6909 -Alincourt,8005,146,8.916,0.950,0.860,797,6920 -Mortefontaine,2528,237,11.881,1.097,0.993,705,6916 -Mercin-et-Vaux,2477,965,7.828,0.891,0.807,720,6917 -Oigny-en-Valois,2568,151,12.004,1.103,0.999,711,6903 -Montaron,58173,161,33.935,1.854,1.679,753,6642 -Montigny-Lengrain,2514,695,11.533,1.081,0.979,706,6917 -Saconin-et-Breuil,2667,240,8.678,0.938,0.849,716,6917 -Vivières,2822,396,13.981,1.190,1.077,706,6910 -Lanty,58139,123,12.097,1.107,1.002,760,6633 -Noroy-sur-Ourcq,2557,133,5.195,0.726,0.657,713,6901 -Clessy,71136,239,16.885,1.308,1.184,781,6608 -Boult-sur-Suippe,51074,1707,19.734,1.414,1.280,787,6923 -Époye,51232,437,15.376,1.248,1.130,787,6910 -Ménil-Lépinois,8287,131,17.918,1.347,1.220,790,6921 -Bazancourt,51043,2126,11.658,1.087,0.984,786,6923 -Neuflize,8314,777,13.704,1.178,1.067,797,6925 -Pomacle,51439,438,11.207,1.066,0.965,782,6914 -Bergnicourt,8060,283,8.263,0.915,0.828,791,6928 -Selles,51529,402,11.444,1.077,0.975,794,6914 -Bétheniville,51054,1278,17.706,1.339,1.212,799,6914 -Witry-lès-Reims,51662,5017,16.533,1.294,1.172,779,6909 -L'Écaille,8148,267,9.124,0.961,0.870,786,6923 -Roizy,8368,218,11.050,1.058,0.958,785,6928 -Saint-Masmes,51505,457,6.651,0.821,0.743,789,6912 -Heutrégiville,51293,427,11.798,1.093,0.990,788,6913 -Le Châtelet-sur-Retourne,8111,789,9.837,0.998,0.904,795,6926 -Berru,51052,554,13.678,1.177,1.066,786,6911 -Pontfaverger-Moronvilliers,51440,1749,31.645,1.791,1.622,795,6915 -Bourgogne-Fresne,51075,1383,27.059,1.656,1.499,776,6918 -Luzy,58149,1976,41.980,2.062,1.867,772,6635 -Sémelay,58276,240,33.476,1.842,1.668,762,6641 -Saint-Léger-de-Fougeret,58249,385,32.375,1.811,1.640,768,6661 -Broye,71063,758,28.667,1.704,1.543,803,6641 -Moulins-Engilbert,58182,1455,41.490,2.050,1.856,766,6655 -Savigny-Poil-Fol,58274,129,17.522,1.332,1.206,767,6630 -Laizy,71251,586,31.275,1.780,1.612,794,6645 -Saint-Symphorien-de-Marmagne,71482,851,37.616,1.952,1.767,798,6641 -Thil-sur-Arroux,71537,140,13.484,1.169,1.058,781,6636 -Poil,58211,140,27.033,1.655,1.498,780,6645 -Larochemillay,58140,231,40.412,2.024,1.833,770,6644 -Autun,71014,13532,61.757,2.501,2.264,797,6646 -La Fermeté,58112,675,35.664,1.901,1.721,726,6647 -Uchon,71551,102,11.949,1.100,0.996,794,6636 -Fours,58118,652,25.801,1.617,1.464,757,6636 -Chiddes,58074,333,26.132,1.627,1.473,773,6639 -Fâchin,58111,111,13.950,1.189,1.077,774,6659 -Villapourçon,58309,418,51.042,2.274,2.059,775,6654 -Charbonnat,71098,250,22.336,1.504,1.362,780,6631 -Brion,71062,302,16.678,1.300,1.177,795,6644 -Millay,58168,447,37.442,1.948,1.764,780,6637 -Mesvres,71297,761,23.465,1.542,1.396,797,6646 -La Comelle,71142,222,22.752,1.518,1.374,782,6644 -La Grande-Verrière,71223,551,46.648,2.174,1.968,783,6656 -Saint-Nizier-sur-Arroux,71466,128,10.194,1.016,0.920,791,6638 -Vernais,18276,196,26.243,1.631,1.477,680,6627 -La Tagnière,71531,237,34.135,1.860,1.684,789,6634 -Rémilly,58221,154,36.328,1.919,1.737,758,6633 -Onlay,58199,150,19.785,1.416,1.282,765,6652 -Tavernay,71535,485,25.808,1.617,1.464,795,6661 -Préporché,58219,203,29.713,1.735,1.571,763,6647 -Étang-sur-Arroux,71192,1900,34.605,1.872,1.695,795,6644 -La Celle-en-Morvan,71509,486,20.185,1.430,1.295,790,6654 -Sermages,58277,189,22.460,1.509,1.366,765,6660 -Toulon-sur-Arroux,71542,1584,43.677,2.104,1.905,792,6621 -Palinges,71340,1519,36.650,1.927,1.745,788,6607 -Cronat,71155,547,60.895,2.484,2.249,754,6628 -Chassy,71111,318,13.421,1.166,1.056,787,6612 -Vendenesse-sur-Arroux,71565,577,16.223,1.282,1.161,785,6617 -Bourbon-Lancy,71047,5034,55.991,2.382,2.157,755,6615 -Dompierre-sous-Sanvignes,71179,77,13.577,1.173,1.062,792,6621 -Tazilly,58287,202,25.908,1.620,1.467,767,6632 -Tintury,58292,186,23.411,1.540,1.394,742,6656 -La Chapelle-au-Mans,71088,225,27.655,1.674,1.516,775,6618 -Saint-Romain-sous-Versigny,71478,86,17.773,1.342,1.215,788,6617 -Issy-l'Évêque,71239,732,71.212,2.686,2.432,774,6618 -Souvigny,3275,1866,44.687,2.128,1.927,716,6606 -Gueugnon,71230,7092,28.656,1.704,1.543,783,6610 -Saint-Aubin-en-Charollais,71388,480,19.667,1.412,1.278,791,6598 -Saint-Aubin-sur-Loire,71389,299,11.025,1.057,0.957,756,6606 -Vitry-sur-Loire,71589,436,28.218,1.691,1.531,750,6621 -Lesme,71255,191,5.229,0.728,0.659,754,6617 -Baron,71021,294,13.369,1.164,1.054,796,6599 -Grandvaux,71224,76,6.212,0.793,0.718,796,6599 -La Nocle-Maulaix,58195,280,32.652,1.819,1.647,760,6627 -Maltat,71273,286,31.480,1.786,1.617,761,6623 -Effry,2275,329,2.689,0.522,0.473,771,6979 -Grury,71227,537,46.095,2.161,1.957,772,6623 -Cuzy,71166,120,18.062,1.353,1.225,781,6630 -Gilly-sur-Loire,71220,495,22.703,1.517,1.374,762,6603 -Saint-Seine,58268,208,17.903,1.347,1.220,763,6623 -Perrecy-les-Forges,71346,1654,33.971,1.855,1.680,798,6616 -Sainte-Radegonde,71474,158,23.069,1.529,1.384,784,6620 -Froidestrées,2337,181,4.924,0.706,0.639,766,6982 -Génelard,71212,1360,22.258,1.502,1.360,796,6613 -Mont,71301,198,16.210,1.282,1.161,766,6615 -Mouflaines,27420,170,3.766,0.618,0.560,594,6905 -Diou,3100,1403,25.768,1.616,1.463,757,6607 -Saint-Agnan,71382,709,26.097,1.626,1.472,765,6602 -Toulon-sur-Allier,3286,1139,39.412,1.998,1.809,725,6599 -Cressy-sur-Somme,71152,188,28.175,1.690,1.530,767,6626 -Dettey,71172,81,22.523,1.511,1.368,789,6634 -Saint-Eugène,71411,147,35.343,1.892,1.713,797,6630 -Agonges,3002,312,24.246,1.567,1.419,707,6613 -Marly-sur-Arroux,71281,331,25.780,1.616,1.463,784,6612 -Montmort,71317,182,31.669,1.791,1.622,781,6627 -Autry-Issards,3012,326,19.454,1.404,1.271,707,6605 -Curdin,71161,317,8.037,0.902,0.817,776,6609 -La Boulaye,71046,105,13.930,1.188,1.076,790,6624 -Botmeur,29013,212,14.329,1.205,1.091,190,6829 -Saint-Menoux,3247,1016,27.591,1.672,1.514,708,6607 -Saint-Vincent-Bragny,71490,1005,40.899,2.036,1.843,782,6604 -Marly-sous-Issy,71280,89,21.571,1.478,1.338,774,6630 -Neuvy-Grandchamp,71330,765,49.654,2.243,2.031,774,6607 -Vic-sous-Thil,21678,193,21.533,1.477,1.337,798,6699 -Molphey,21422,131,7.657,0.881,0.798,792,6693 -Montlay-en-Auxois,21434,183,17.486,1.331,1.205,794,6691 -Juillenay,21328,43,5.477,0.745,0.675,795,6698 -Nevers,58194,33235,17.410,1.328,1.202,715,6656 -Lalheue,71252,407,6.910,0.837,0.758,838,6619 -La Motte-Ternant,21445,151,21.721,1.484,1.344,803,6689 -La Roche-en-Brenil,21525,876,51.593,2.286,2.070,786,6696 -Donzy,58102,1589,63.502,2.537,2.297,703,6697 -Lacour-d'Arcenay,21335,126,20.477,1.440,1.304,791,6695 -Dompierre-sur-Nièvre,58101,195,18.612,1.373,1.243,719,6684 -Saint-Jean-aux-Amognes,58247,501,18.320,1.362,1.233,723,6657 -Toutenant,71544,190,13.604,1.174,1.063,861,6645 -Anthien,58008,182,19.711,1.413,1.279,753,6691 -Fleury-sur-Loire,58115,233,19.849,1.418,1.284,725,6639 -Lion-en-Beauce,45183,141,7.026,0.844,0.764,619,6782 -Varzy,58304,1219,41.360,2.047,1.853,732,6698 -Sainte-Agnès,39474,355,4.153,0.649,0.588,888,6617 -Savianges,71505,75,6.548,0.815,0.738,822,6623 -Marcheseuil,21379,154,17.463,1.330,1.204,805,6670 -La Charité-sur-Loire,58059,4965,15.834,1.267,1.147,700,6678 -Vaux d'Amognes,58204,546,38.804,1.983,1.795,720,6661 -Fourchambault,58117,4253,4.454,0.672,0.608,706,6657 -Bretenière,21106,900,6.024,0.781,0.707,860,6683 -Sainte-Colombe-des-Bois,58236,126,29.582,1.731,1.567,715,6689 -Sauvigny-les-Bois,58273,1458,29.776,1.737,1.573,720,6656 -Coulanges-lès-Nevers,58088,3612,10.614,1.037,0.939,714,6659 -Nannay,58188,118,11.464,1.078,0.976,716,6684 -Massilly,71287,361,5.559,0.750,0.679,828,6599 -Rumegies,59519,1763,7.669,0.881,0.798,725,7042 -Cordesse,71144,188,10.556,1.034,0.936,803,6660 -Pougny,58213,463,19.260,1.397,1.265,703,6702 -Langeron,58138,369,20.339,1.436,1.300,703,6634 -Messigny-et-Vantoux,21408,1664,33.992,1.856,1.680,848,6705 -Virey-le-Grand,71585,1329,12.754,1.137,1.029,842,6644 -Mont-Saint-Jean,21441,245,27.869,1.680,1.521,806,6692 -Glanon,21301,239,3.704,0.613,0.555,861,6661 -Saulon-la-Chapelle,21585,976,10.012,1.007,0.912,860,6682 -Challuy,58051,1543,18.992,1.387,1.256,709,6646 -Pontoux,71355,271,14.015,1.192,1.079,863,6645 -Rainans,39449,270,3.719,0.614,0.556,889,6675 -Civry-en-Montagne,21176,132,7.774,0.888,0.804,820,6688 -Vignoles,21684,899,6.710,0.825,0.747,843,6662 -Chavéria,39134,232,10.266,1.020,0.924,898,6602 -Présilly,39443,130,11.309,1.070,0.969,897,6608 -Gissey-le-Vieil,21298,112,8.402,0.923,0.836,814,6692 -Meuilley,21409,466,6.155,0.790,0.715,843,6671 -Garchizy,58121,3723,16.563,1.295,1.173,708,6662 -Menou,58163,182,17.590,1.335,1.209,719,6697 -Couzon,3090,291,20.200,1.431,1.296,712,6617 -Beaumont-la-Ferrière,58027,123,28.556,1.701,1.540,719,6673 -Giry,58127,199,23.820,1.554,1.407,729,6681 -Annoisin-Chatelans,38010,666,13.378,1.164,1.054,875,6518 -Cessy-les-Bois,58048,97,17.642,1.337,1.211,714,6694 -Crux-la-Ville,58092,408,46.050,2.160,1.956,736,6675 -Murlin,58186,92,15.098,1.237,1.120,714,6674 -Parigny-les-Vaux,58207,960,31.423,1.784,1.615,710,6663 -Bulcy,58042,132,8.475,0.927,0.839,703,6685 -Avril-sur-Loire,58020,266,24.970,1.591,1.441,726,6631 -Raveau,58220,686,36.080,1.912,1.731,706,6674 -Courlans,39170,930,6.147,0.789,0.714,892,6623 -Varennes-Vauzelles,58303,9389,33.989,1.856,1.680,708,6658 -Imphy,58134,3416,16.595,1.297,1.174,724,6647 -Saint-Ouen-sur-Loire,58258,561,23.933,1.557,1.410,721,6645 -La Celle-sur-Nièvre,58045,161,13.046,1.150,1.041,713,6679 -Saint-Romans,38453,1782,17.112,1.317,1.192,879,6448 -Bagneux,3015,318,25.458,1.606,1.454,716,6620 -Puy-d'Arnac,19169,289,12.292,1.116,1.010,602,6439 -Vielmanay,58307,181,21.462,1.475,1.335,711,6688 -Le Pallet,44117,3236,11.346,1.072,0.971,369,6683 -Gimouille,58126,463,14.195,1.199,1.086,705,6649 -Monay,39342,126,2.486,0.502,0.455,899,6641 -Bagnot,21042,160,12.630,1.131,1.024,855,6662 -Blagny-sur-Vingeanne,21079,133,7.600,0.878,0.795,879,6708 -Chardonnay,71100,199,6.393,0.805,0.729,840,6602 -Saint-Parize-le-Châtel,58260,1329,49.753,2.245,2.033,709,6640 -Bilhac,19026,229,7.117,0.849,0.769,603,6426 -Padirac,46213,159,8.869,0.948,0.858,601,6420 -Queyssac-les-Vignes,19170,198,11.185,1.065,0.964,602,6428 -Thégra,46317,469,12.762,1.137,1.029,599,6414 -Marsais,17221,914,23.850,1.555,1.408,420,6567 -Montigny-aux-Amognes,58176,603,25.155,1.596,1.445,726,6659 -Tauriac,46313,412,8.215,0.912,0.826,603,6426 -Curemonte,19067,211,8.737,0.941,0.852,604,6434 -Saint-Aubin-les-Forges,58231,405,26.591,1.641,1.486,711,6670 -Saint-Ythaire,71492,125,9.389,0.975,0.883,822,6607 -Le Fête,21264,51,3.101,0.561,0.508,814,6678 -Menotey,39323,298,4.997,0.712,0.645,890,6678 -Lantenay,21339,511,17.320,1.325,1.200,838,6697 -Combertault,21185,565,3.942,0.632,0.572,844,6657 -Saint-Léopardin-d'Augy,3241,358,39.950,2.012,1.822,711,6623 -Villeneuve-sur-Allier,3316,1067,26.218,1.630,1.476,722,6624 -Saint-Hélier,21552,37,3.917,0.630,0.570,829,6700 -Lentillères,7141,233,8.770,0.943,0.854,800,6391 -Toury-sur-Jour,58294,120,24.648,1.580,1.431,722,6624 -Chasnay,58061,115,11.859,1.096,0.992,715,6682 -Congé-sur-Orne,72088,348,11.311,1.071,0.970,496,6795 -Neuville-lès-Decize,58192,238,27.080,1.656,1.499,724,6633 -Aubigny,3009,139,17.094,1.316,1.192,710,6619 -Arbourse,58009,125,9.235,0.967,0.876,716,6684 -Couloutre,58089,200,21.216,1.466,1.327,719,6698 -Saint-Parize-en-Viry,58259,154,15.804,1.265,1.145,726,6630 -Béard,58025,177,7.622,0.879,0.796,724,6640 -Oulon,58203,66,11.008,1.056,0.956,729,6680 -Sermoise-sur-Loire,58278,1540,25.146,1.596,1.445,715,6653 -Marzy,58160,3666,21.619,1.480,1.340,709,6651 -Trévol,3290,1622,40.766,2.032,1.840,721,6612 -Saint-Bonnot,58234,132,16.121,1.278,1.157,725,6681 -Dornes,58104,1411,40.089,2.015,1.824,727,6621 -Aurouër,3011,416,25.827,1.618,1.465,722,6618 -Oudan,58201,145,20.100,1.427,1.292,726,6691 -Chantenay-Saint-Imbert,58057,1195,41.948,2.062,1.867,711,6623 -Garchy,58122,428,21.398,1.472,1.333,706,6684 -Champlemy,58053,335,37.026,1.937,1.754,728,6689 -Limoise,3146,159,12.730,1.136,1.029,702,6620 -Liouc,30148,260,9.634,0.988,0.895,781,6310 -Livry,58144,702,26.975,1.653,1.497,708,6626 -Sichamps,58279,194,5.928,0.775,0.702,720,6672 -Druy-Parigny,58105,325,25.139,1.596,1.445,727,6637 -Saint-Sulpice,58269,409,25.796,1.617,1.464,727,6659 -Saincaize-Meauce,58225,383,21.588,1.479,1.339,705,6643 -Villons-les-Buissons,14758,728,3.779,0.619,0.560,453,6909 -Tresnay,58296,153,17.953,1.349,1.221,716,6620 -Varennes-lès-Narcy,58302,976,18.526,1.370,1.240,703,6679 -Châteauneuf-Val-de-Bargis,58064,546,48.067,2.207,1.998,721,6684 -Nolay,58196,361,43.005,2.087,1.890,727,6672 -Saint-Éloi,58238,2128,16.473,1.292,1.170,717,6651 -Azy-le-Vif,58021,207,47.120,2.185,1.978,715,6630 -Colméry,58081,344,24.292,1.569,1.421,719,6697 -Mars-sur-Allier,58158,300,21.195,1.465,1.326,704,6637 -Montilly,3184,516,22.266,1.502,1.360,719,6615 -Reculfoz,25483,41,2.525,0.506,0.458,939,6629 -Avermes,3013,3907,15.611,1.258,1.139,727,6612 -Pazy,58208,310,22.100,1.496,1.355,751,6680 -Gipcy,3122,239,27.573,1.671,1.513,704,6597 -Meillers,3170,141,23.785,1.552,1.405,712,6601 -Moulins,3190,19613,8.716,0.940,0.851,724,6609 -Marigny,3162,201,17.304,1.324,1.199,716,6611 -Aumur,39029,367,9.166,0.964,0.873,874,6665 -Coulandon,3085,652,16.984,1.312,1.188,719,6604 -Ciry-le-Noble,71132,2288,33.236,1.835,1.661,798,6607 -Saint-Bonnet-de-Vieille-Vigne,71395,196,17.834,1.344,1.217,795,6601 -Saint-Berain-sous-Sanvignes,71390,1097,45.282,2.142,1.939,794,6623 -Saint-Martin-du-Puy,58255,274,30.815,1.767,1.600,766,6697 -Sanvignes-les-Mines,71499,4366,35.605,1.899,1.719,798,6616 -Cervon,58047,649,54.162,2.343,2.121,752,6680 -Saint-Aubin-des-Chaumes,58230,71,10.802,1.046,0.947,758,6701 -Empury,58108,80,11.813,1.094,0.991,763,6692 -Pouques-Lormes,58216,161,14.151,1.197,1.084,758,6693 -Quarré-les-Tombes,89318,643,46.642,2.174,1.968,779,6692 -Montigny-sur-Canne,58178,151,30.668,1.763,1.596,749,6652 -Marigny,71278,152,22.534,1.511,1.368,816,6620 -Marigny-l'Église,58157,299,39.931,2.011,1.821,772,6699 -Chastellux-sur-Cure,89089,135,10.542,1.034,0.936,767,6697 -Mouron-sur-Yonne,58183,96,11.021,1.057,0.957,757,6675 -Saint-Michel-d'Aurance,7276,278,8.054,0.903,0.818,818,6423 -Corcelles-lès-Cîteaux,21191,814,6.801,0.830,0.751,856,6676 -Bligny-sur-Ouche,21087,838,28.091,1.687,1.527,825,6667 -Epiry,58110,233,12.216,1.113,1.008,757,6672 -Saint-Léger-Vauban,89349,361,33.890,1.853,1.678,780,6701 -Aunay-en-Bazois,58017,229,45.278,2.142,1.939,752,6675 -Chalaux,58049,87,10.173,1.015,0.919,768,6695 -Magny-Lormes,58153,74,8.442,0.925,0.838,757,6687 -Neuffontaines,58190,106,14.648,1.218,1.103,758,6694 -Saint-Agnan,58226,143,24.351,1.571,1.422,786,6690 -Talon,58284,42,6.253,0.796,0.721,743,6691 -Bazoches,58023,176,14.769,1.223,1.107,759,6699 -Ougny,58202,25,8.164,0.909,0.823,752,6664 -Villebéon,77500,480,16.429,1.290,1.168,692,6791 -Cuncy-lès-Varzy,58093,130,15.312,1.246,1.128,737,6698 -Saizy,58271,192,13.442,1.167,1.057,751,6693 -Montmerle-sur-Saône,1263,3811,4.139,0.648,0.587,836,6554 -Asnan,58015,127,4.835,0.700,0.634,742,6692 -Jailly,58136,59,10.923,1.052,0.952,736,6667 -Beuvron,58029,78,9.590,0.986,0.893,737,6693 -Vitry-en-Perthois,51647,844,17.696,1.339,1.212,816,6851 -Champvert,58055,819,46.499,2.171,1.966,741,6643 -Ville-Langy,58311,264,27.303,1.663,1.506,740,6646 -Taconnay,58283,79,7.961,0.898,0.813,736,6691 -Châtillon-sur-Seine,21154,5378,33.299,1.837,1.663,814,6750 -Talant,21617,11702,4.952,0.708,0.641,849,6696 -Mimeure,21414,306,13.959,1.189,1.077,810,6672 -Saint-Thibault,21576,162,12.424,1.122,1.016,810,6696 -Neuilly,58191,121,14.088,1.195,1.082,742,6682 -Bazolles,58024,282,28.643,1.704,1.543,746,6676 -Saint-Germain-des-Bois,58242,115,12.552,1.128,1.021,736,6697 -Gibercourt,2345,43,2.691,0.522,0.473,720,6962 -Lys,58150,108,10.770,1.045,0.946,748,6692 -Frasnay-Reugny,58119,89,13.948,1.189,1.077,742,6656 -Vignol,58308,62,9.141,0.962,0.871,752,6698 -Cercy-la-Tour,58046,1763,45.617,2.150,1.947,746,6643 -Lurcy-le-Bourg,58147,294,22.790,1.520,1.376,732,6671 -Anlezy,58006,255,21.586,1.479,1.339,734,6651 -Saint-Maurice,58257,59,10.541,1.033,0.935,745,6668 -Grenois,58130,99,14.508,1.212,1.097,740,6694 -Saint-Maurice-de-Satonnay,71460,495,10.379,1.025,0.928,838,6591 -Saint-Didier,58237,28,3.626,0.606,0.549,747,6696 -Marcilly-la-Gueurce,71276,117,11.061,1.059,0.959,799,6592 -Marcellois,21377,51,3.724,0.614,0.556,821,6695 -Diennes-Aubigny,58097,95,37.388,1.946,1.762,740,6644 -Saint-Firmin,58239,183,10.547,1.034,0.936,728,6659 -Amazy,58005,230,13.897,1.187,1.075,746,6698 -Metz-le-Comte,58165,163,14.414,1.208,1.094,746,6701 -Chitry-les-Mines,58075,207,5.831,0.769,0.696,750,6689 -Thianges,58291,170,12.862,1.142,1.034,740,6646 -Beaulieu,58026,168,15.672,1.260,1.141,743,6684 -Moraches,58181,139,15.025,1.234,1.117,743,6689 -Anor,59012,3267,22.293,1.503,1.361,779,6992 -Isenay,58135,96,20.515,1.442,1.306,753,6650 -Rouy,58223,604,36.187,1.915,1.734,744,6659 -Marcy,58156,158,14.605,1.216,1.101,728,6689 -Bona,58035,312,23.598,1.546,1.400,730,6666 -Saint-Vallerin,71485,266,6.763,0.828,0.750,827,6621 -Montenoison,58174,122,16.807,1.305,1.182,733,6677 -Sardy-lès-Épiry,58272,115,15.643,1.259,1.140,752,6675 -Champallement,58052,51,8.131,0.908,0.822,735,6680 -Quetteville,14528,375,10.329,1.023,0.926,504,6921 -Vitry-Laché,58313,83,22.482,1.509,1.366,744,6675 -Guipy,58132,243,18.461,1.368,1.239,746,6684 -Verneuil,58306,297,26.993,1.654,1.498,745,6637 -Trois-Vèvres,58297,239,7.575,0.876,0.793,730,6647 -Saint-Léger-des-Vignes,58250,1901,9.098,0.960,0.869,734,6641 -Héry,58133,73,7.804,0.889,0.805,747,6685 -Cizely,58078,65,7.158,0.852,0.771,734,6653 -Saint-Gratien-Savigny,58243,112,19.897,1.420,1.286,752,6647 -Saint-Révérien,58266,162,18.617,1.373,1.243,737,6675 -Morey,71321,202,13.484,1.169,1.058,819,6631 -Brinay,58040,147,16.102,1.277,1.156,753,6660 -Asnois,58016,151,5.762,0.764,0.692,746,6699 -Branscourt,51081,299,3.718,0.614,0.556,760,6907 -Corvol-d'Embernard,58084,88,9.896,1.001,0.906,728,6687 -Challement,58050,56,9.597,0.986,0.893,743,6691 -Sougy-sur-Loire,58280,644,32.659,1.819,1.647,727,6637 -Cussy-le-Châtel,21222,104,7.289,0.859,0.778,819,6674 -Tamnay-en-Bazois,58285,173,10.586,1.036,0.938,753,6660 -Saint-Benin-des-Bois,58233,169,19.538,1.407,1.274,729,6671 -Champlin,58054,39,7.982,0.899,0.814,735,6684 -Saint-Saulge,58267,747,26.196,1.629,1.475,740,6663 -Chaumot,58069,161,7.921,0.896,0.811,748,6686 -Limanton,58142,242,46.923,2.180,1.974,756,6649 -La Machine,58151,3385,18.136,1.356,1.228,737,6644 -Moissy-Moulinot,58169,20,2.870,0.539,0.488,754,6693 -Marigny-sur-Yonne,58159,204,11.318,1.071,0.970,750,6690 -Sainte-Cécile,71397,291,7.297,0.860,0.779,828,6588 -Germenay,58123,142,12.932,1.145,1.037,747,6690 -Buffières,71065,276,12.228,1.113,1.008,820,6594 -Saint-Franchy,58240,74,18.823,1.381,1.250,732,6675 -Tannay,58286,588,15.527,1.254,1.135,741,6696 -Parigny-la-Rose,58206,40,8.859,0.947,0.857,736,6693 -Suin,71529,268,22.195,1.500,1.358,809,6596 -Chazeuil,58070,61,4.660,0.687,0.622,732,6688 -Authiou,58018,43,7.397,0.866,0.784,730,6684 -Teigny,58288,103,7.424,0.867,0.785,752,6698 -Mont-et-Marré,58175,165,18.223,1.359,1.230,745,6668 -Biches,58030,294,24.628,1.580,1.431,752,6653 -Flez-Cuzy,58116,133,5.964,0.777,0.704,748,6694 -Fertrève,58113,103,24.843,1.587,1.437,743,6654 -Saint-Benin-d'Azy,58232,1288,36.313,1.918,1.737,733,6651 -Arthel,58013,95,7.799,0.889,0.805,730,6684 -Brinon-sur-Beuvron,58041,186,8.089,0.905,0.819,738,6689 -Tréduder,22350,196,4.810,0.698,0.632,217,6862 -Moussy,58184,107,12.009,1.103,0.999,736,6679 -Monceaux-le-Comte,58170,123,3.346,0.582,0.527,750,6694 -Achun,58001,159,24.698,1.582,1.432,751,6675 -Ruages,58224,94,10.469,1.030,0.933,752,6688 -La Collancelle,58080,178,23.450,1.541,1.395,751,6675 -Dieulivol,33150,335,10.452,1.029,0.932,470,6404 -Saint-Pierre-du-Mont,58263,201,17.635,1.337,1.211,734,6698 -Bussy-la-Pesle,58043,57,5.207,0.726,0.657,735,6684 -Chevannes-Changy,58071,129,18.947,1.386,1.255,732,6687 -Saxi-Bourdon,58275,298,18.692,1.376,1.246,738,6665 -Billy-Chevannes,58031,324,23.876,1.555,1.408,738,6656 -Nuars,58197,155,15.834,1.267,1.147,754,6702 -Germigny-sur-Loire,58124,770,18.898,1.384,1.253,706,6666 -Le Veurdre,3309,454,21.504,1.476,1.336,703,6630 -Mornay-sur-Allier,18155,428,22.160,1.498,1.356,704,6638 -Cours-les-Barres,18075,1044,21.592,1.479,1.339,701,6656 -Pouzy-Mésangy,3210,403,35.425,1.895,1.716,702,6620 -Cuffy,18082,1097,35.695,1.902,1.722,706,6651 -Beaubery,71025,372,23.235,1.534,1.389,805,6591 -Apremont-sur-Allier,18007,71,30.833,1.767,1.600,705,6648 -Saint-Galmier,42222,5707,19.634,1.410,1.277,806,6502 -Jouet-sur-l'Aubois,18118,1364,17.363,1.326,1.201,702,6663 -Bourbon-l'Archambault,3036,2550,55.350,2.368,2.144,704,6605 -Franchesse,3117,467,40.630,2.029,1.837,699,6619 -Beffes,18025,653,11.825,1.095,0.991,702,6668 -Neuvy-le-Barrois,18164,142,42.323,2.071,1.875,705,6644 -Thiel-sur-Acolin,3283,1117,57.580,2.415,2.187,743,6598 -Gennetines,3121,671,39.338,1.996,1.807,734,6618 -Paray-le-Frésil,3203,387,37.186,1.941,1.757,743,6616 -Toury-Lurcy,58293,421,25.924,1.621,1.468,733,6624 -Beaulon,3019,1664,63.777,2.542,2.302,757,6609 -Montbeugny,3180,691,32.766,1.822,1.650,740,6604 -Colombier-en-Brionnais,71141,309,13.420,1.166,1.056,801,6584 -Dompierre-sur-Besbre,3102,3052,45.898,2.156,1.952,747,6605 -Bois-Sainte-Marie,71041,200,2.686,0.522,0.473,804,6584 -Curtil-sous-Buffières,71163,88,5.281,0.731,0.662,816,6589 -Saint-Albain,71383,502,5.663,0.757,0.685,845,6594 -Vaudebarrier,71562,228,8.090,0.905,0.819,803,6590 -Courtes,1128,310,8.966,0.953,0.863,863,6596 -Saint-Vincent-des-Prés,71488,110,6.383,0.804,0.728,818,6597 -Gorrevod,1175,861,6.886,0.835,0.756,852,6592 -Servignat,1406,175,7.953,0.898,0.813,860,6594 -Villers-sous-Ailly,80804,185,6.379,0.804,0.728,631,6996 -Boz,1057,515,7.697,0.883,0.799,845,6593 -Igé,71236,867,14.736,1.222,1.106,830,6592 -Clessé,71135,863,10.109,1.012,0.916,842,6593 -Lescheroux,1212,727,20.243,1.432,1.297,868,6593 -La Vineuse sur Fregande,71582,649,36.150,1.914,1.733,821,6599 -Lugny,71267,886,13.891,1.186,1.074,841,6602 -Boissey,1050,338,9.457,0.979,0.886,855,6586 -Chavannes-sur-Reyssouze,1094,750,16.508,1.293,1.171,852,6593 -Blanot,71039,169,11.630,1.086,0.983,834,6597 -Vernols,15253,66,24.525,1.576,1.427,688,6459 -Saint-Julien-sur-Reyssouze,1367,698,7.507,0.872,0.790,863,6591 -Donzy-le-Pertuis,71181,166,6.116,0.787,0.713,833,6597 -Charbonnières,71099,332,4.195,0.652,0.590,841,6588 -Saint-Nizier-le-Bouchoux,1380,683,28.185,1.690,1.530,864,6595 -Montbellet,71305,803,19.406,1.402,1.269,842,6601 -Arbigny,1016,462,17.555,1.334,1.208,848,6602 -Bourgvilain,71050,326,11.851,1.096,0.992,824,6587 -Bergesserin,71030,205,7.263,0.858,0.777,821,6588 -Béréziat,1040,494,11.274,1.069,0.968,856,6589 -Chiddes,71128,95,7.611,0.878,0.795,813,6597 -Burgy,71066,119,2.896,0.542,0.491,841,6597 -Péronne,71345,653,10.605,1.037,0.939,837,6595 -Dompierre-les-Ormes,71178,916,30.258,1.751,1.585,812,6588 -Azé,71016,1027,15.066,1.236,1.119,833,6597 -Senozan,71513,1121,4.919,0.706,0.639,845,6591 -Verosvres,71571,448,23.114,1.530,1.385,808,6587 -Pressy-sous-Dondin,71358,97,12.389,1.120,1.014,818,6599 -Jalogny,71240,354,10.220,1.018,0.922,825,6594 -Sologny,71525,599,10.683,1.040,0.942,829,6584 -Curbigny,71160,317,9.609,0.987,0.894,800,6578 -Vescours,1437,250,12.547,1.128,1.021,854,6602 -Mantenay-Montlin,1230,310,10.883,1.050,0.951,863,6596 -Ozan,1284,674,6.586,0.817,0.740,849,6590 -Berzé-le-Châtel,71031,59,5.604,0.754,0.683,830,6589 -Ouroux-sous-le-Bois-Sainte-Marie,71335,67,4.793,0.697,0.631,802,6586 -Neufchâtel-en-Bray,76462,4722,10.989,1.055,0.955,590,6962 -Viré,71584,1161,11.257,1.068,0.967,840,6596 -Pusignan,69285,4063,13.215,1.157,1.048,863,6521 -Bois-de-Gand,39060,56,3.304,0.579,0.524,890,6639 -Niévroz,1276,1577,10.435,1.028,0.931,862,6526 -Toussieu,69298,2959,5.075,0.717,0.649,854,6510 -Faramans,1156,801,11.232,1.067,0.966,867,6536 -Bouilland,21092,210,16.790,1.304,1.181,834,6669 -Meyzieu,69282,32996,23.452,1.541,1.395,854,6525 -Birieux,1045,285,15.779,1.264,1.144,856,6539 -Bressolles,1062,891,7.661,0.881,0.798,861,6531 -Beynost,1043,4557,10.691,1.041,0.943,855,6525 -Balan,1027,2856,17.997,1.350,1.222,863,6526 -Pizay,1297,796,11.226,1.067,0.966,864,6534 -Béligneux,1032,3314,13.359,1.163,1.053,866,6529 -Janneyrias,38197,1796,10.720,1.042,0.943,866,6517 -Dagneux,1142,4706,6.836,0.832,0.753,860,6529 -Bourg-Saint-Christophe,1054,1325,9.000,0.955,0.865,864,6534 -La Boisse,1049,3021,9.430,0.977,0.885,855,6531 -Lapeyrouse,1207,324,20.200,1.431,1.296,851,6546 -Saint-Pierre-de-Chandieu,69289,4521,29.326,1.724,1.561,859,6504 -Grenay,38184,1596,6.738,0.826,0.748,863,6511 -Dolomieu,38148,3123,13.403,1.165,1.055,896,6505 -Satolas-et-Bonce,38475,2404,16.794,1.304,1.181,863,6510 -Cornillé,35087,967,12.603,1.130,1.023,378,6788 -Genas,69277,12624,24.152,1.564,1.416,860,6517 -Salagnon,38467,1404,8.289,0.916,0.829,881,6510 -Anthon,38011,1049,9.078,0.959,0.868,867,6525 -Ruy-Montceau,38348,4471,21.065,1.461,1.323,885,6503 -Saint-Bonnet-de-Mure,69287,6827,16.616,1.298,1.175,860,6514 -Saint-Chef,38374,3618,27.553,1.671,1.513,879,6509 -Le Plantay,1299,553,20.775,1.451,1.314,864,6549 -Versailleux,1434,421,19.360,1.401,1.268,860,6543 -Saint-Maurice-de-Beynost,1376,3965,6.953,0.839,0.760,855,6525 -Guéreins,1183,1435,4.478,0.674,0.610,837,6558 -Saint-Laurent-de-Mure,69288,5380,18.826,1.381,1.250,864,6513 -Villette-d'Anthon,38557,4881,22.861,1.522,1.378,863,6526 -Charvieu-Chavagneux,38085,9292,8.501,0.928,0.840,867,6520 -Saint-Jean-sur-Vilaine,35283,1245,10.791,1.046,0.947,380,6788 -Joyeux,1198,274,16.602,1.297,1.174,865,6543 -Châteauvieux-les-Fossés,25130,13,4.497,0.675,0.611,943,6668 -Colombier-Saugnieu,69299,2602,27.848,1.680,1.521,868,6514 -Le Montellier,1260,293,15.334,1.246,1.128,863,6538 -Corps-Nuds,35088,3256,22.912,1.524,1.380,359,6772 -Saint-Éloi,1349,453,14.121,1.196,1.083,867,6537 -Hottot-les-Bagues,14336,477,8.473,0.927,0.839,436,6901 -Beuzec-Cap-Sizun,29008,1003,34.931,1.881,1.703,137,6800 -Sainte-Croix,1342,566,10.680,1.040,0.942,861,6536 -Frontonas,38176,2049,12.743,1.136,1.029,870,6506 -Villemoirieu,38554,1867,13.341,1.163,1.053,872,6517 -Heyrieux,38189,4695,13.993,1.191,1.078,862,6504 -Domalain,35097,1993,33.577,1.844,1.670,381,6770 -La Verpillière,38537,7104,6.706,0.824,0.746,869,6507 -Veyssilieu,38542,336,6.574,0.816,0.739,874,6511 -Bonnefamille,38048,1107,9.441,0.978,0.885,862,6503 -Pelleautier,5100,700,12.743,1.136,1.029,937,6385 -Vaulx-Milieu,38530,2532,9.046,0.957,0.866,870,6507 -Saint-Savin,38455,4037,24.834,1.586,1.436,877,6507 -Culhat,63131,1182,18.747,1.378,1.248,726,6532 -Moras,38260,507,8.263,0.915,0.828,875,6514 -Bourisp,65106,158,1.891,0.438,0.397,482,6195 -Trept,38515,2106,15.905,1.269,1.149,884,6511 -Seyssel,1407,997,2.391,0.492,0.445,918,6541 -Diémoz,38144,2692,13.893,1.186,1.074,861,6502 -La Couyère,35089,495,11.900,1.098,0.994,364,6762 -Valencin,38519,2751,9.586,0.986,0.893,860,6502 -Décines-Charpieu,69275,27851,17.134,1.318,1.193,853,6525 -Saint-Just-Chaleyssin,38408,2526,14.055,1.193,1.080,856,6502 -Saint-Quentin-Fallavier,38449,6099,23.631,1.547,1.401,862,6504 -Chamagnieu,38067,1651,13.815,1.183,1.071,868,6513 -Saint-Alban-de-Roche,38352,1908,4.431,0.670,0.607,873,6503 -Dizimieu,38146,842,9.700,0.991,0.897,878,6513 -Saint-Hilaire-de-Brens,38392,624,7.561,0.875,0.792,879,6509 -Saint-Symphorien-d'Ancelles,71481,1176,6.380,0.804,0.728,835,6569 -L'Isle-d'Abeau,38193,16074,12.968,1.146,1.038,872,6506 -Saint-Clair-de-la-Tour,38377,3395,9.236,0.967,0.876,892,6499 -Vasselin,38525,466,3.881,0.627,0.568,892,6505 -Brangues,38055,621,11.622,1.085,0.982,895,6513 -Framecourt,62352,105,2.264,0.479,0.434,650,7026 -Saint-Victor-de-Morestel,38465,1097,13.222,1.157,1.048,897,6516 -Soleymieu,38494,773,13.337,1.162,1.052,886,6513 -La Bâtie-Montgascon,38029,1904,8.454,0.926,0.838,895,6501 -Les Avenières Veyrins-Thuellin,38022,7712,41.487,2.050,1.856,900,6511 -Vézeronce-Curtin,38543,2097,14.650,1.218,1.103,889,6508 -Griesbach-au-Val,68109,727,4.867,0.702,0.636,1010,6776 -Morestel,38261,4425,8.038,0.902,0.817,894,6511 -Sermérieu,38483,1657,17.378,1.327,1.201,890,6511 -Saint-Romain-en-Jarez,42283,1232,16.886,1.308,1.184,817,6497 -Corbelin,38124,2226,12.117,1.108,1.003,898,6502 -Rochetoirin,38341,1124,10.688,1.041,0.943,887,6501 -Vignieu,38546,1039,9.406,0.976,0.884,891,6507 -Saint-Aubin-des-Landes,35252,945,10.345,1.024,0.927,378,6788 -Saint-Sorlin-de-Morestel,38458,634,5.476,0.745,0.675,894,6507 -Vinzelles,71583,694,4.444,0.671,0.608,835,6576 -Saint-Jean-de-Soudain,38401,1576,7.555,0.875,0.792,888,6498 -La Chapelle-de-la-Tour,38076,1767,9.110,0.961,0.870,895,6501 -Bartherans,25044,52,5.832,0.769,0.696,922,6661 -Montcarra,38250,530,4.929,0.707,0.640,890,6505 -Faverges-de-la-Tour,38162,1388,7.683,0.882,0.799,896,6504 -La Roche-Vineuse,71371,1544,12.033,1.104,1.000,832,6586 -Saint-Didier-sur-Chalaronne,1348,2832,25.158,1.597,1.446,839,6563 -Jullié,69104,439,9.815,0.997,0.903,831,6572 -Neuilly-en-Donjon,3196,220,25.089,1.594,1.443,766,6585 -Régnié-Durette,69165,1114,11.735,1.090,0.987,825,6566 -Saint-Cyr-sur-Menthon,1343,1761,17.044,1.314,1.190,849,6578 -Chénelette,69054,327,11.035,1.057,0.957,816,6563 -Dourdain,35101,1157,13.923,1.188,1.076,373,6799 -Roz-Landrieux,35246,1339,18.073,1.353,1.225,345,6835 -Cercié,69036,1123,4.992,0.711,0.644,827,6559 -Taillis,35330,1001,13.117,1.153,1.044,383,6794 -Saint-Georges-de-Reneins,69206,4363,27.387,1.666,1.508,830,6550 -Saint-Didier-sur-Beaujeu,69196,616,14.527,1.213,1.098,816,6562 -Sermoyer,1402,678,16.944,1.310,1.186,848,6603 -Vauxrenard,69258,322,19.171,1.394,1.262,824,6570 -Leynes,71258,524,4.864,0.702,0.636,833,6576 -Triguères,45329,1307,35.881,1.907,1.727,702,6756 -Pierreclos,71350,910,12.400,1.121,1.015,828,6585 -Saint-André-de-Bâgé,1332,742,2.715,0.524,0.474,848,6578 -Bruz,35047,18094,29.965,1.742,1.577,346,6775 -Odenas,69145,930,9.083,0.959,0.868,827,6558 -Rancy,71365,546,5.842,0.769,0.696,858,6612 -Lion-sur-Mer,14365,2424,4.755,0.694,0.628,456,6916 -Beaujeu,69018,2122,17.744,1.341,1.214,822,6567 -Leval,90066,245,6.111,0.787,0.713,1001,6746 -Émeringes,69082,251,3.005,0.552,0.500,827,6572 -Valleroy-le-Sec,88490,173,5.959,0.777,0.704,921,6791 -Falletans,39220,391,24.813,1.586,1.436,896,6665 -Couchey,21200,1138,12.694,1.134,1.027,853,6684 -Pluvet,21487,416,6.455,0.809,0.732,873,6680 -Molay,39338,502,6.392,0.805,0.729,886,6659 -Fauverney,21261,670,8.686,0.938,0.849,862,6689 -Recanoz,39454,90,3.074,0.558,0.505,892,6636 -Conliège,39164,673,6.087,0.785,0.711,899,6619 -Noidan,21457,75,7.922,0.896,0.811,809,6696 -Petit-Noir,39415,1112,21.070,1.461,1.323,877,6655 -Créancey,21210,519,16.836,1.306,1.182,818,6683 -Blanzy,71040,6247,40.211,2.018,1.827,803,6627 -Malange,39308,323,8.482,0.927,0.839,896,6681 -Tichey,21637,211,6.896,0.836,0.757,873,6658 -Le Perréon,69151,1566,14.519,1.213,1.098,822,6555 -Oslon,71333,1235,4.803,0.698,0.632,850,6631 -Saint-Philibert,21565,440,4.694,0.690,0.625,853,6680 -Chemin,39138,343,9.275,0.969,0.877,878,6658 -Sioniac,19260,229,10.658,1.039,0.941,605,6429 -Grosbois-en-Montagne,21310,102,14.052,1.193,1.080,819,6691 -Aloxe-Corton,21010,133,2.614,0.515,0.466,840,6664 -Trenal,39537,461,9.595,0.986,0.893,887,6619 -Flagy,71199,167,8.427,0.924,0.837,827,6600 -Chapaize,71087,152,13.774,1.181,1.069,835,6607 -Roynac,26287,484,17.406,1.328,1.202,853,6394 -Sainte-Sabine,21570,184,8.522,0.929,0.841,823,6676 -Le Bodéo,22009,162,10.265,1.020,0.924,264,6820 -Bray,71057,127,9.981,1.006,0.911,833,6602 -Charnay-lès-Chalon,71104,184,9.201,0.966,0.875,860,6652 -Grièges,1179,1881,14.788,1.224,1.108,840,6576 -Chalon-sur-Saône,71076,45446,15.240,1.243,1.125,842,6631 -Blaisy-Bas,21080,685,13.313,1.161,1.051,829,6700 -Bétaille,46028,976,13.932,1.188,1.076,599,6431 -Gintrac,46122,105,6.772,0.828,0.750,601,6419 -Bain-de-Bretagne,35012,7243,66.039,2.587,2.342,345,6760 -Bio,46030,353,10.805,1.046,0.947,606,6411 -Saint-Armel,35250,1869,7.899,0.895,0.810,358,6780 -Louvigné-de-Bais,35161,1904,15.724,1.262,1.143,376,6779 -Val-d'Izé,35347,2586,45.715,2.152,1.948,383,6795 -Bourg-des-Comptes,35033,3244,23.421,1.540,1.394,351,6768 -Moussé,35199,330,3.449,0.591,0.535,379,6765 -Les Salles-de-Castillon,33499,378,11.216,1.066,0.965,465,6430 -Chelun,35077,348,11.510,1.080,0.978,385,6759 -Lesneven,29124,7301,10.199,1.017,0.921,160,6856 -Rennes,35238,216268,50.368,2.259,2.045,354,6786 -Pléchâtel,35221,2749,36.257,1.917,1.736,352,6763 -Saint-Malo-de-Phily,35289,1089,18.833,1.381,1.250,343,6765 -Drouges,35102,524,11.697,1.089,0.986,379,6764 -La Bouëxière,35031,4400,49.787,2.246,2.034,375,6794 -Chavagne,35076,3909,12.560,1.128,1.021,343,6786 -Moulins,35198,717,15.402,1.249,1.131,373,6779 -Le Sel-de-Bretagne,35322,1097,8.554,0.931,0.843,355,6763 -Janzé,35136,8287,41.668,2.055,1.861,360,6768 -Bourgbarré,35032,3986,14.811,1.225,1.109,356,6778 -Brie,35041,935,13.710,1.179,1.067,358,6770 -Marpiré,35166,1065,11.309,1.070,0.969,374,6792 -Vergéal,35350,804,11.191,1.065,0.964,385,6781 -Tresbœuf,35343,1265,25.745,1.615,1.462,360,6761 -Châteaugiron,35069,9798,23.735,1.551,1.404,366,6780 -Champeaux,35052,499,10.387,1.026,0.929,380,6789 -Étrelles,35109,2534,27.939,1.683,1.524,385,6785 -Bais,35014,2407,35.222,1.889,1.710,380,6781 -Saint-Jacques-de-la-Lande,35281,12917,12.355,1.119,1.013,346,6785 -Forges-la-Forêt,35114,268,6.133,0.788,0.713,381,6758 -Crevin,35090,2767,8.469,0.926,0.838,351,6768 -Pollionnay,69154,2512,15.744,1.263,1.144,832,6519 -Thourie,35335,786,24.641,1.580,1.431,363,6758 -Cesson-Sévigné,35051,17371,32.169,1.805,1.634,361,6787 -Torcé,35338,1185,14.303,1.204,1.090,381,6780 -Landavran,35141,689,5.211,0.727,0.658,380,6792 -Girefontaine,70269,38,3.613,0.605,0.548,936,6761 -Arbrissel,35005,303,4.635,0.685,0.620,380,6768 -Rannée,35235,1102,52.520,2.307,2.089,381,6767 -Visseiche,35359,812,16.290,1.285,1.163,380,6774 -Saint-Grégoire,35278,9521,17.515,1.332,1.206,351,6797 -Orgères,35208,4494,16.784,1.304,1.181,353,6773 -Saulnières,35321,754,10.603,1.036,0.938,360,6768 -Noyal-Châtillon-sur-Seiche,35206,6915,26.488,1.638,1.483,350,6786 -La Chapelle-des-Fougeretz,35059,4800,8.739,0.941,0.852,348,6796 -L'Hermitage,35131,4321,6.941,0.839,0.760,341,6793 -Brécé,35039,2112,7.245,0.857,0.776,368,6787 -La Guerche-de-Bretagne,35125,4262,11.692,1.088,0.985,380,6769 -Le Petit-Fougeray,35218,899,9.100,0.960,0.869,358,6769 -Saint-Didier,35264,2026,14.199,1.199,1.086,378,6788 -Sainte-Colombe,35262,342,7.760,0.887,0.803,367,6766 -Retiers,35239,4313,42.140,2.066,1.871,374,6768 -Boistrudan,35028,699,12.930,1.145,1.037,375,6774 -Vezin-le-Coquet,35353,5650,7.922,0.896,0.811,347,6788 -Pont-Péan,35363,4225,8.795,0.944,0.855,348,6778 -Liffré,35152,7524,66.710,2.600,2.354,357,6797 -Trignac,44210,7871,14.276,1.203,1.089,305,6703 -Nivillac,56147,4551,55.832,2.378,2.153,309,6725 -Saint-Gorgon,56216,386,5.755,0.764,0.692,306,6739 -Sainte-Reine-de-Bretagne,44189,2353,19.652,1.411,1.278,312,6716 -Saint-Nicolas-du-Tertre,56230,467,13.183,1.156,1.047,308,6758 -Saint-Malo-de-Guersac,44176,3175,15.384,1.248,1.130,307,6706 -Saint-Jean-sur-Veyle,1365,1122,11.308,1.070,0.969,850,6574 -Allaire,56001,3841,42.447,2.074,1.878,310,6734 -Malansac,56123,2184,36.359,1.919,1.737,301,6749 -La Chapelle-des-Marais,44030,4109,17.954,1.349,1.221,307,6718 -Saint-Dolay,56212,2465,48.853,2.225,2.015,313,6726 -Montoir-de-Bretagne,44103,7079,35.688,1.902,1.722,313,6701 -Saint-Joachim,44168,3983,86.410,2.959,2.679,299,6708 -Peillac,56154,1860,24.538,1.577,1.428,312,6745 -Herbignac,44072,6719,71.548,2.692,2.437,302,6726 -Gazaupouy,32143,308,21.172,1.465,1.326,500,6328 -Saint-Congard,56211,739,21.798,1.486,1.345,302,6750 -Végennes,19280,176,10.044,1.009,0.914,601,6433 -Sulignat,1412,577,10.771,1.045,0.946,849,6567 -Le Chastang,19048,371,7.948,0.897,0.812,602,6452 -Tudeils,19271,245,9.489,0.981,0.888,602,6439 -Francheleins,1165,1574,13.667,1.177,1.066,840,6555 -Illiat,1188,615,20.412,1.438,1.302,849,6567 -Saint-Amour-Bellevue,71385,548,5.187,0.725,0.656,832,6573 -Neuville,19149,190,14.191,1.199,1.086,606,6448 -Ménoire,19132,112,6.450,0.808,0.732,605,6445 -Saint-Christophe,73229,530,11.003,1.056,0.956,920,6485 -Bey,1042,276,2.779,0.531,0.481,843,6569 -Les Ardillats,69012,627,22.955,1.525,1.381,821,6568 -Murol,63247,587,15.146,1.239,1.122,688,6501 -Thorailles,45322,179,3.478,0.594,0.538,693,6769 -Claveisolles,69060,664,28.142,1.689,1.529,818,6559 -Landerrouat,33223,203,4.975,0.710,0.643,477,6409 -Cintré,35080,2276,8.541,0.930,0.842,339,6791 -Massanes,30161,194,1.691,0.414,0.375,789,6326 -Billy-le-Grand,51061,123,7.298,0.860,0.779,791,6892 -Genouilleux,1169,600,4.109,0.645,0.584,837,6559 -Saint-Laurent-sur-Saône,1370,1754,0.516,0.229,0.207,842,6580 -Chénas,69053,551,8.176,0.910,0.824,833,6571 -Égliseneuve-d'Entraigues,63144,358,56.776,2.398,2.171,683,6476 -Arc-sous-Montenot,25026,198,10.834,1.048,0.949,929,6648 -Thoissey,1420,1725,1.333,0.368,0.333,838,6564 -Milly-Lamartine,71299,343,2.842,0.537,0.486,831,6585 -Mont-Dore,63236,1303,35.989,1.910,1.729,686,6502 -Brezons,15026,188,43.484,2.099,1.900,686,6429 -Rayol-Canadel-sur-Mer,83152,717,6.911,0.837,0.758,983,6234 -Bessins,38041,119,4.605,0.683,0.618,879,6460 -Valeins,1428,131,4.356,0.664,0.601,845,6559 -Bèze,21071,717,23.430,1.541,1.395,868,6710 -Lancié,69108,1020,6.591,0.817,0.740,831,6565 -Saint-Pierre-le-Vieux,71469,353,15.818,1.266,1.146,818,6580 -La Bourboule,63047,1782,12.664,1.133,1.026,682,6499 -La Tour-d'Auvergne,63192,644,48.820,2.224,2.014,670,6493 -Chaumont,89093,659,8.970,0.953,0.863,708,6804 -Saint-Médard-de-Mussidan,24462,1715,23.815,1.553,1.406,488,6437 -Bouguenais,44020,19049,31.198,1.778,1.610,347,6687 -Vezels-Roussy,15257,133,13.061,1.150,1.041,668,6414 -Picherande,63279,362,45.163,2.139,1.937,686,6491 -Évenos,83053,2325,42.023,2.063,1.868,939,6240 -La Chapelle-au-Moine,61094,582,5.437,0.742,0.672,437,6852 -Mur-de-Barrez,12164,788,20.314,1.435,1.299,676,6418 -Saint-Donat,63336,209,33.474,1.842,1.668,676,6482 -Saint-Hippolyte-de-Montaigu,30262,255,4.120,0.646,0.585,821,6328 -Besse-et-Saint-Anastaise,63038,1503,72.862,2.717,2.460,691,6492 -Compains,63117,124,50.441,2.261,2.047,700,6481 -Hautot-Saint-Sulpice,76348,678,8.548,0.931,0.843,538,6955 -Seillonnaz,1400,138,9.692,0.991,0.897,893,6524 -Beaumont-en-Argonne,8055,431,31.273,1.780,1.612,851,6938 -Arpajon-sur-Cère,15012,6263,47.710,2.199,1.991,661,6417 -Cesse,55095,119,5.323,0.734,0.665,857,6938 -Continvoir,37082,416,41.451,2.049,1.855,488,6698 -Thérondels,12280,408,38.717,1.981,1.794,681,6417 -Taussac,12277,510,39.485,2.000,1.811,667,6410 -Sansac-Veinazès,15222,216,12.681,1.134,1.027,653,6406 -Montézic,12151,232,18.679,1.376,1.246,668,6400 -Carlat,15028,352,20.874,1.454,1.316,667,6416 -Lieutadès,15106,165,40.713,2.031,1.839,690,6412 -Berville-sur-Seine,76088,566,6.999,0.842,0.762,549,6933 -Badailhac,15017,135,12.440,1.123,1.017,670,6425 -Notre-Dame-de-Bellecombe,73186,483,21.330,1.470,1.331,977,6530 -Prémery,58218,1853,45.718,2.152,1.948,727,6672 -Coincy,2203,1326,17.261,1.322,1.197,730,6896 -La Chapelle-Montmartin,41038,437,10.963,1.054,0.954,605,6684 -Brommat,12036,639,43.569,2.101,1.902,676,6418 -Céreste,4045,1199,32.602,1.817,1.645,906,6310 -Mogneneins,1252,774,8.530,0.930,0.842,839,6561 -Parleboscq,40218,505,40.207,2.018,1.827,465,6324 -Saint-Urcize,15216,447,55.026,2.361,2.138,699,6395 -Cantaous,65482,437,5.634,0.756,0.684,493,6227 -Suilly-la-Tour,58281,600,37.174,1.941,1.757,703,6696 -Cantoin,12051,303,44.002,2.111,1.911,689,6419 -La Trinitat,15241,49,17.772,1.342,1.215,694,6403 -Marly-Gomont,2469,468,13.071,1.151,1.042,756,6980 -Espinasse,15065,80,17.013,1.313,1.189,691,6419 -Lapeyrugue,15093,106,8.539,0.930,0.842,665,6404 -Varennes-lès-Mâcon,71556,539,4.788,0.697,0.631,840,6574 -Saint-Étienne-de-Carlat,15183,136,10.598,1.036,0.938,665,6423 -Labesserette,15084,293,13.795,1.182,1.070,661,6404 -Loison-sous-Lens,62523,5417,3.508,0.596,0.540,689,7037 -Prunet,15156,662,27.392,1.666,1.508,661,6411 -Junhac,15082,310,28.013,1.685,1.526,659,6402 -Chaudardes,2171,86,4.687,0.689,0.624,757,6921 -Jabrun,15078,158,34.204,1.862,1.686,695,6409 -Payzac,7171,541,13.213,1.157,1.048,794,6374 -Saint-Hippolyte,12226,443,36.749,1.930,1.747,663,6402 -Houetteville,27342,204,6.836,0.832,0.753,562,6893 -Guise,2361,4868,16.238,1.283,1.162,744,6980 -La Terrasse,38503,2554,9.076,0.959,0.868,929,6476 -Pont-Audemer,27467,10436,14.826,1.226,1.110,519,6921 -La Chapelle-de-Guinchay,71090,4106,12.668,1.133,1.026,838,6569 -Pré-Saint-Évroult,28305,297,21.627,1.480,1.340,588,6788 -Longchamp,88273,463,10.387,1.026,0.929,961,6799 -Saint-Germain-de-Pasquier,27545,126,1.987,0.449,0.407,553,6907 -Eydoche,38159,531,5.695,0.760,0.688,881,6487 -Saint-André-d'Huiriat,1334,602,9.070,0.959,0.868,849,6568 -Épénancourt,80272,123,3.565,0.601,0.544,695,6970 -Sainte-Marie,15198,110,18.039,1.352,1.224,689,6419 -Guérigny,58131,2498,7.479,0.871,0.789,714,6667 -Porcheville,78501,3128,4.626,0.685,0.620,609,6875 -Vergisson,71567,254,5.804,0.767,0.694,830,6579 -Chevagny-les-Chevrières,71126,598,3.790,0.620,0.561,837,6582 -Mayrinhac-Lentour,46189,507,15.529,1.254,1.135,603,6411 -Boisset,15021,633,37.657,1.953,1.768,643,6414 -Chevenon,58072,576,33.019,1.829,1.656,715,6646 -Cieutat,65147,599,18.822,1.381,1.250,470,6228 -Leynhac,15104,348,27.632,1.673,1.515,644,6402 -Leyme,46170,936,10.146,1.014,0.918,614,6412 -Bâgé-Dommartin,1025,4088,57.033,2.404,2.177,853,6579 -Dracé,69077,957,14.888,1.228,1.112,839,6563 -Autoire,46011,362,7.380,0.865,0.783,606,6416 -Cayrols,15030,294,9.396,0.976,0.884,638,6417 -Saignes,46246,80,3.588,0.603,0.546,606,6410 -Couthures-sur-Garonne,47074,342,6.969,0.840,0.761,468,6383 -Le Bouyssou,46036,145,5.575,0.752,0.681,617,6402 -Marchampt,69124,455,17.776,1.342,1.215,820,6555 -L'Abergement-Clémenciat,1001,767,15.652,1.259,1.140,851,6563 -Tramayes,71545,1045,18.604,1.373,1.243,821,6578 -Taponas,69242,972,7.591,0.877,0.794,837,6559 -Dompierre-sur-Chalaronne,1146,431,4.776,0.696,0.630,846,6560 -Rueyres,46243,200,9.352,0.973,0.881,608,6408 -Lamadeleine-Val-des-Anges,90061,39,6.442,0.808,0.732,991,6746 -Rousses,48130,113,22.328,1.504,1.362,748,6346 -Marcolès,15117,593,53.484,2.328,2.108,648,6404 -Saint-Julien-sur-Veyle,1368,798,9.883,1.001,0.906,849,6568 -Sauve,30311,1935,31.664,1.791,1.622,777,6312 -Bully,42027,411,19.133,1.392,1.260,774,6536 -Buironfosse,2135,1146,17.670,1.338,1.211,757,6984 -Montigny-en-Arrouaise,2511,297,9.863,1.000,0.905,737,6979 -Ver-lès-Chartres,28403,790,9.482,0.980,0.887,588,6812 -Signy-le-Petit,8420,1267,38.745,1.981,1.794,790,6979 -Lavaqueresse,2414,203,4.476,0.673,0.609,753,6983 -Bernardswiller,67031,1457,5.528,0.748,0.677,1028,6826 -Trambly,71546,399,12.093,1.107,1.002,820,6583 -Pont-de-Veyle,1306,1618,1.957,0.445,0.403,844,6575 -Quincié-en-Beaujolais,69162,1322,22.030,1.494,1.353,827,6559 -Saint-Caradec,22279,1110,22.195,1.500,1.358,267,6803 -Roquefort-la-Bédoule,13085,5632,30.912,1.770,1.603,920,6242 -Saint-Pair-sur-Mer,50532,4045,14.767,1.223,1.107,368,6864 -Miramont-d'Astarac,32254,350,14.941,1.230,1.114,498,6277 -Laiz,1203,1213,10.393,1.026,0.929,847,6572 -Crottet,1134,1734,12.277,1.115,1.010,841,6579 -Corcelles-en-Beaujolais,69065,927,9.340,0.973,0.881,835,6565 -Le Givre,85101,492,12.530,1.127,1.020,361,6602 -Meyenheim,68205,1465,12.892,1.143,1.035,1030,6765 -Sonac,46306,85,7.329,0.862,0.780,608,6398 -Albiac,46002,73,3.817,0.622,0.563,606,6407 -Sabadel-Latronquière,46244,95,12.329,1.118,1.012,626,6406 -Maurs,15122,2164,31.044,1.774,1.606,631,6400 -Bus-la-Mésière,80152,177,7.017,0.843,0.763,680,6950 -Saint-Simon,46292,171,9.199,0.965,0.874,609,6401 -Ohis,2567,315,6.557,0.815,0.738,771,6978 -Lacapelle-Marival,46143,1279,11.698,1.089,0.986,615,6406 -Saint-Michel,2684,3470,42.322,2.071,1.875,780,6977 -Le Rouget-Pers,15268,1258,25.946,1.621,1.468,640,6417 -Castelnau-Magnoac,65129,789,12.754,1.137,1.029,500,6251 -Roumégoux,15166,312,13.559,1.172,1.061,637,6416 -Valailles,27667,388,5.401,0.740,0.670,528,6893 -Châtenois,70141,127,5.736,0.762,0.690,948,6735 -Saint-Christol,84107,1347,46.434,2.169,1.964,896,6327 -Petit-Verly,2784,155,5.204,0.726,0.657,740,6983 -Saint-Jean-Lespinasse,46271,387,5.898,0.773,0.700,610,6421 -Cézac,33123,2535,19.381,1.401,1.268,426,6446 -Trélon,59601,2915,39.182,1.992,1.804,776,6998 -Hurigny,71235,1999,9.247,0.968,0.876,839,6582 -Saint-Mamet-la-Salvetat,15196,1548,52.280,2.302,2.084,650,6420 -Bertheauville,76083,108,2.407,0.494,0.447,527,6964 -Parlan,15147,431,24.626,1.580,1.431,633,6417 -Barzy-sur-Marne,2051,381,7.603,0.878,0.795,740,6889 -Monchy-sur-Eu,76442,588,9.062,0.958,0.867,590,6988 -Le Falgoux,15066,124,30.636,1.762,1.595,673,6452 -Le Bourg,46034,325,13.321,1.162,1.052,613,6404 -Charentay,69045,1240,13.976,1.190,1.077,829,6557 -Cursan,33145,645,6.064,0.784,0.710,438,6417 -Chânes,71084,546,2.293,0.482,0.436,836,6571 -Saint-Cirgues,46255,351,32.530,1.815,1.643,629,6401 -Lemoncourt,57391,72,5.435,0.742,0.672,948,6867 -Chazeaux,7062,134,4.679,0.689,0.624,805,6389 -Proisy,2624,286,5.336,0.735,0.665,756,6975 -Noyales,2563,169,7.235,0.856,0.775,739,6981 -Les Plantiers,30198,255,30.997,1.772,1.604,752,6335 -Mondrepuis,2495,1031,20.318,1.435,1.299,773,6987 -Ruillé-Froid-Fonds,53193,564,23.829,1.554,1.407,429,6759 -Biziat,1046,857,11.580,1.083,0.981,849,6574 -Luçay-le-Libre,36102,102,12.128,1.109,1.004,615,6667 -Luzoir,2445,287,11.128,1.062,0.962,771,6979 -Neuve-Maison,2544,607,8.459,0.926,0.838,774,6983 -Mélicourt,27395,80,6.458,0.809,0.732,515,6870 -Neuville-lez-Beaulieu,8319,335,36.049,1.911,1.730,796,6974 -Bouillac,82020,647,30.498,1.758,1.592,544,6305 -Chanville,57127,126,3.879,0.627,0.568,950,6887 -Savigné-l'Évêque,72329,4008,28.493,1.699,1.538,500,6783 -Puihardy,79223,54,1.182,0.346,0.313,429,6609 -Bulson,8088,134,6.451,0.808,0.732,837,6950 -Escot,64206,129,22.703,1.517,1.374,409,6229 -Bancourt,62079,86,4.574,0.681,0.617,694,7000 -Saint-Étienne-des-Oullières,69197,2191,9.657,0.989,0.895,826,6553 -Labathude,46139,213,9.991,1.006,0.911,620,6401 -Rudelle,46242,169,6.809,0.831,0.752,611,6406 -Mâcon,71270,33427,27.108,1.657,1.500,842,6581 -Pruzilly,71362,326,4.358,0.664,0.601,832,6574 -Crupilly,2244,66,3.483,0.594,0.538,753,6982 -Peyzieux-sur-Saône,1295,663,8.678,0.938,0.849,839,6561 -Vaudesincourt,51600,88,12.707,1.135,1.028,805,6904 -Théminettes,46319,170,8.769,0.943,0.854,609,6405 -Chevillé,72083,410,14.282,1.203,1.089,462,6765 -Vadencourt,2757,548,12.414,1.122,1.016,740,6979 -Saint-Gervais-en-Belin,72287,2103,9.592,0.986,0.893,490,6753 -Lerzy,2418,208,11.569,1.083,0.981,765,6985 -Bourdeaux,26056,639,23.182,1.533,1.388,867,6388 -Féron,59229,568,13.434,1.167,1.057,770,6994 -Bouër,72041,324,12.076,1.106,1.001,521,6776 -Secondigny,79311,1850,37.898,1.960,1.775,441,6617 -Lauresses,46161,271,23.890,1.556,1.409,633,6408 -Saint-Médard-Nicourby,46282,89,7.818,0.890,0.806,621,6407 -Bolsenheim,67054,517,4.463,0.672,0.608,1042,6822 -Montet-et-Bouxal,46203,221,11.536,1.081,0.979,623,6405 -Villers-Cotterêts,2810,10694,42.259,2.069,1.873,707,6900 -Bussières,71069,561,4.086,0.643,0.582,831,6582 -Cormoranche-sur-Saône,1123,1118,9.949,1.004,0.909,840,6574 -Hannapes,2366,315,9.278,0.970,0.878,746,6984 -Sissonne,2720,2075,53.559,2.330,2.110,772,6938 -Saint-Vérand,71487,167,2.480,0.501,0.454,834,6574 -Dorengt,2269,154,10.492,1.031,0.933,753,6984 -Saint-Julien-de-Toursac,15194,118,9.651,0.989,0.895,635,6411 -Molières,46195,367,12.786,1.138,1.030,614,6412 -Saint-Médard-de-Presque,46281,200,5.204,0.726,0.657,608,6420 -Buire,2134,871,4.148,0.648,0.587,777,6979 -Mescoules,24267,172,4.857,0.702,0.636,495,6407 -Anglars,46004,212,10.003,1.007,0.912,613,6404 -Englancourt,2276,127,8.032,0.902,0.817,758,6979 -Bocognano,2A040,416,71.188,2.686,2.432,1202,6134 -Blaignac,33054,289,3.222,0.571,0.517,457,6389 -Saint-Lager,69218,1030,7.748,0.886,0.802,829,6557 -Buxeuil,36029,222,19.793,1.416,1.282,598,6667 -Saint-Étienne-la-Varenne,69198,743,6.499,0.811,0.734,826,6553 -Iron,2386,245,9.795,0.996,0.902,746,6986 -Serrières,71518,278,9.868,1.000,0.905,830,6579 -Cellieu,42032,1699,12.082,1.106,1.001,820,6491 -Saint-Pierre-Colamine,63383,249,17.511,1.332,1.206,697,6493 -Fuissé,71210,381,4.903,0.705,0.638,835,6576 -Le Mas-de-Tence,43129,177,12.640,1.132,1.025,809,6446 -Sainte-Marie-Lapanouze,19219,63,6.658,0.821,0.743,650,6480 -Coulombs,28113,1365,12.647,1.132,1.025,594,6843 -Fontanges,15070,202,17.852,1.345,1.218,659,6448 -La Motte,22155,2130,43.541,2.100,1.901,272,6812 -Sommeron,2725,141,4.627,0.685,0.620,769,6983 -Grougis,2358,359,11.402,1.075,0.973,737,6986 -Jusix,47120,123,7.549,0.875,0.792,465,6388 -Chasselas,71108,175,2.638,0.517,0.468,832,6576 -Saint-Bonnet-près-Bort,19190,194,16.946,1.310,1.186,654,6487 -Petreto-Bicchisano,2A211,565,39.133,1.991,1.803,1194,6096 -Saint-Algis,2670,160,6.923,0.838,0.759,761,6976 -Larodde,63190,270,23.100,1.530,1.385,662,6494 -Buschwiller,68061,1029,4.098,0.644,0.583,1037,6728 -Limans,4104,364,20.967,1.458,1.320,915,6325 -Chirac-Bellevue,19055,291,20.612,1.445,1.308,647,6483 -Saint-Germain-du-Bois,71419,1912,30.353,1.754,1.588,874,6626 -Cavron-Saint-Martin,62220,463,11.878,1.097,0.993,628,7038 -Wahlenheim,67510,428,2.515,0.505,0.457,1046,6862 -Juliénas,69103,915,7.604,0.878,0.795,829,6574 -Genestelle,7093,284,21.513,1.476,1.336,808,6402 -Origny-en-Thiérache,2574,1461,16.370,1.288,1.166,773,6975 -Trémouille-Saint-Loup,63437,143,12.337,1.118,1.012,664,6484 -Baives,59045,165,8.001,0.900,0.815,784,6995 -Champs-sur-Tarentaine-Marchal,15038,1061,61.125,2.489,2.254,676,6482 -Montricher-Albanne,73173,475,27.943,1.683,1.524,965,6459 -Esquéhéries,2286,858,16.194,1.281,1.160,757,6987 -Mauriac,15120,3667,28.363,1.695,1.535,647,6461 -Thalamy,19266,96,11.568,1.083,0.981,659,6491 -Garnerans,1167,654,8.629,0.935,0.847,839,6571 -Tauves,63426,787,34.092,1.859,1.683,675,6497 -Ciamannacce,2A089,133,25.039,1.593,1.442,1209,6112 -Villié-Morgon,69267,2109,18.606,1.373,1.243,829,6561 -Chaneins,1083,898,12.733,1.136,1.029,840,6555 -Châtillon-sur-Thouet,79080,2688,16.265,1.284,1.163,450,6622 -Chiroubles,69058,401,7.289,0.859,0.778,828,6568 -Villers-lès-Guise,2814,173,8.143,0.908,0.822,748,6982 -La Capelle,2141,1801,12.282,1.116,1.010,765,6985 -Monceau-sur-Oise,2494,127,5.923,0.775,0.702,751,6979 -Sorbais,2728,282,13.949,1.189,1.077,763,6977 -Hirson,2381,8985,33.934,1.854,1.679,777,6979 -Ally,15003,612,23.412,1.540,1.394,648,6453 -Ville-Dommange,51622,401,3.373,0.585,0.530,767,6900 -Watigny,2831,377,21.378,1.472,1.333,789,6985 -Saint-Étienne-la-Geneste,19200,94,5.019,0.713,0.646,651,6483 -Sauzé-Vaussais,79307,1636,19.283,1.398,1.266,479,6560 -Châtillon-sur-Chalaronne,1093,4886,18.084,1.354,1.226,849,6560 -Saint-Trivier-sur-Moignans,1389,1822,42.330,2.071,1.875,848,6558 -Chaon,41036,463,31.913,1.798,1.628,643,6727 -Montacher-Villegardin,89264,768,29.173,1.719,1.556,702,6782 -Glageon,59261,1831,11.806,1.094,0.991,775,6993 -Cahus,46043,209,10.182,1.016,0.920,612,6429 -Belval-en-Argonne,51047,49,12.219,1.113,1.008,847,6873 -Eguenigue,90036,278,2.506,0.504,0.456,994,6740 -Rouet,34236,62,25.020,1.592,1.441,763,6302 -La Demie,70203,143,6.305,0.799,0.723,939,6726 -Gergny,2342,135,5.983,0.779,0.705,766,6985 -Davayé,71169,682,4.189,0.651,0.589,835,6581 -Campana,2B052,18,2.344,0.487,0.441,1221,6164 -Erloy,2284,93,7.459,0.869,0.787,760,6979 -Floyon,59241,526,17.373,1.327,1.201,760,6995 -Saint-Laurent-d'Olt,12237,641,28.780,1.708,1.546,708,6376 -Chigny,2188,150,10.613,1.037,0.939,753,6983 -Rocquigny,2650,359,11.098,1.060,0.960,770,6994 -Sancé,71497,1982,6.583,0.817,0.740,842,6585 -Fleurie,69084,1256,13.951,1.189,1.077,833,6566 -Fourmies,59249,12119,22.990,1.526,1.382,778,6987 -Lurcy,1225,379,4.792,0.697,0.631,836,6553 -La Monselie,15128,106,8.817,0.945,0.856,667,6470 -La Neuville-aux-Joûtes,8318,360,13.167,1.155,1.046,790,6981 -Suaux,16375,401,11.919,1.099,0.995,509,6529 -Margerides,19128,299,11.950,1.100,0.996,652,6482 -Romanèche-Thorins,71372,1993,9.818,0.997,0.903,833,6568 -Bissy-la-Mâconnaise,71035,205,4.990,0.711,0.644,838,6600 -Lantignié,69109,887,7.431,0.868,0.786,824,6566 -Solutré-Pouilly,71526,357,6.218,0.794,0.719,831,6578 -Cruzilles-lès-Mépillat,1136,855,11.924,1.099,0.995,844,6569 -Saint-Martin-d'Abbat,45290,1759,38.902,1.985,1.797,644,6751 -Romery,2654,85,4.003,0.637,0.577,754,6976 -Mousseaux-sur-Seine,78437,687,7.213,0.855,0.774,604,6884 -Veyrières,15254,109,13.747,1.180,1.068,648,6470 -Saint-Fréjoux,19204,293,25.012,1.592,1.441,650,6498 -Arthez-d'Armagnac,40013,110,11.181,1.064,0.963,440,6316 -La Madeleine-Villefrouin,41121,30,9.740,0.993,0.899,579,6742 -Le Vaulmier,15249,70,17.424,1.329,1.203,668,6456 -Écoivres,62283,129,2.225,0.475,0.430,650,7026 -Charnay,69047,1062,7.223,0.855,0.774,828,6534 -Séméacq-Blachon,64517,169,10.913,1.052,0.952,449,6274 -Auzers,15015,163,19.770,1.415,1.281,657,6463 -Solignac-sur-Loire,43241,1264,24.181,1.565,1.417,772,6431 -Rouelles,52437,26,6.607,0.818,0.741,859,6746 -Saint-Martin-Valmeroux,15202,763,26.079,1.626,1.472,659,6449 -Saignes,15169,845,6.900,0.836,0.757,659,6469 -Saint-Côme-de-Fresné,14565,265,4.307,0.661,0.598,439,6922 -Saint-Bonnet-de-Salers,15174,281,32.786,1.823,1.651,663,6451 -Molinet,3173,1161,26.194,1.629,1.475,773,6599 -La Flamengrie,2312,1142,26.604,1.642,1.487,768,6993 -Bullainville,28065,108,6.719,0.825,0.747,587,6786 -Rillieux-la-Pape,69286,29885,14.553,1.214,1.099,847,6530 -Sathonay-Camp,69292,5926,1.924,0.442,0.400,847,6528 -Val d'Oingt,69024,3966,18.287,1.361,1.232,822,6543 -Sainte-Eulalie,15186,211,14.537,1.214,1.099,650,6445 -Wimy,2833,476,12.038,1.104,1.000,770,6984 -Jaleyrac,15079,366,17.003,1.313,1.189,649,6462 -Fareins,1157,2203,8.265,0.915,0.828,835,6549 -Trémouille,15240,177,29.144,1.718,1.556,678,6476 -Civry-la-Forêt,78163,338,9.398,0.976,0.884,599,6862 -Salins,15220,145,8.758,0.942,0.853,653,6457 -Riom-ès-Montagnes,15162,2520,46.817,2.178,1.972,676,6467 -Romazy,35244,257,7.232,0.856,0.775,367,6816 -Moiré,69134,201,2.043,0.455,0.412,825,6537 -Salers,15219,329,4.728,0.692,0.627,659,6449 -Antignac,15008,282,16.073,1.276,1.155,663,6470 -Vaux-Champagne,8462,130,10.828,1.047,0.948,813,6930 -Veyrières,19283,72,4.003,0.637,0.577,653,6489 -Lanobre,15092,1424,43.658,2.103,1.904,663,6478 -Champagnac,15037,1089,27.561,1.671,1.513,656,6477 -Fleurieux-sur-l'Arbresle,69086,2356,9.544,0.983,0.890,827,6526 -Authon,41007,715,32.325,1.810,1.639,542,6725 -Saint-Julien-du-Terroux,53230,238,11.438,1.077,0.975,447,6826 -Villefranche-sur-Saône,69264,37266,9.380,0.975,0.883,835,6546 -Saint-Désiré,3225,440,42.488,2.075,1.879,652,6602 -Ussel,19275,9782,51.123,2.276,2.061,648,6493 -Roissard,38342,300,14.495,1.212,1.097,909,6421 -Civrieux-d'Azergues,69059,1520,4.975,0.710,0.643,833,6532 -Huismes,37118,1510,23.766,1.552,1.405,494,6681 -Dizy,51210,1540,3.215,0.571,0.517,771,6885 -Saint-Privat-du-Dragon,43222,157,21.556,1.478,1.338,735,6453 -Frontenas,69090,818,3.488,0.594,0.538,828,6536 -Le Plessier-Huleu,2606,72,5.188,0.725,0.656,726,6906 -Sérandon,19256,357,34.525,1.870,1.693,648,6470 -Tramoyes,1424,1664,13.137,1.154,1.045,854,6532 -Saint-Jean-des-Vignes,69212,408,2.594,0.513,0.464,831,6531 -Hénanbihen,22076,1339,31.822,1.796,1.626,302,6840 -Lissieu,69117,3116,5.736,0.762,0.690,835,6532 -Sathonay-Village,69293,2346,5.113,0.720,0.652,845,6528 -Saint-Vérand,69239,1176,17.570,1.334,1.208,821,6536 -Wailly,62869,1107,9.738,0.993,0.899,678,7017 -Allier,65005,400,3.738,0.615,0.557,468,6235 -Malzy,2455,202,10.474,1.030,0.933,753,6983 -Monestier-Port-Dieu,19142,106,18.808,1.380,1.249,658,6487 -Trizac,15243,519,45.315,2.143,1.940,668,6456 -Privas,7186,8305,12.013,1.103,0.999,827,6406 -Jeurre,39269,271,7.213,0.855,0.774,906,6587 -Rainsars,59490,184,6.187,0.792,0.717,771,6999 -Hauteville,2376,162,7.064,0.846,0.766,737,6974 -Commer,53072,1204,23.084,1.529,1.384,427,6799 -Denicé,69074,1467,9.453,0.979,0.886,829,6548 -Acheville,62003,638,3.073,0.558,0.505,692,7033 -Roche-le-Peyroux,19175,98,7.087,0.847,0.767,652,6480 -Wignehies,59659,2935,13.902,1.187,1.075,773,6988 -Madic,15111,207,6.733,0.826,0.748,657,6474 -Aisonville-et-Bernoville,2006,251,8.722,0.940,0.851,735,6982 -Saint-Mars-du-Désert,53236,161,11.877,1.097,0.993,466,6806 -Le Fau,15067,30,19.457,1.404,1.271,666,6444 -Saint-Sulpice-des-Landes,35316,801,11.339,1.072,0.971,356,6751 -Neuville-sur-Saône,69143,7435,5.447,0.743,0.673,842,6533 -Igney,54271,126,4.769,0.695,0.629,982,6843 -Salperwick,62772,495,3.930,0.631,0.571,646,7077 -Lentilly,69112,5450,18.659,1.375,1.245,829,6523 -Friaucourt,80364,772,4.153,0.649,0.588,591,6998 -Le Vigean,15261,825,29.126,1.718,1.556,648,6455 -Inchy,59321,738,3.863,0.626,0.567,733,7004 -Sarroux - Saint Julien,19252,842,56.372,2.390,2.164,656,6477 -Cendrey,25107,191,5.579,0.752,0.681,945,6702 -Saint-Exupéry-les-Roches,19201,590,36.191,1.915,1.734,647,6491 -Méallet,15123,173,21.914,1.490,1.349,655,6466 -Trévoux,1427,6849,5.636,0.756,0.684,836,6539 -Saint-Pierre,15206,135,14.261,1.202,1.088,650,6480 -Saint-Cyr-sous-Dourdan,91546,998,10.063,1.010,0.914,627,6829 -Fontaines,71202,1948,24.940,1.590,1.440,839,6643 -Flavigny-le-Grand-et-Beaurain,2313,480,13.779,1.182,1.070,747,6974 -Aingoulaincourt,52004,13,5.119,0.720,0.652,867,6821 -Labessette,63183,62,10.470,1.030,0.933,662,6487 -Ameuvelle,88007,50,5.617,0.754,0.683,921,6767 -Valette,15246,232,15.085,1.236,1.119,666,6463 -Saint-Pierre-la-Palud,69231,2636,7.536,0.874,0.791,827,6521 -Cros,63129,179,19.997,1.423,1.288,671,6483 -Villeneuve-Frouville,41284,61,4.328,0.662,0.599,576,6744 -Ervillers,62306,403,7.115,0.849,0.769,686,7006 -Saint-Genis-les-Ollières,69205,4879,3.769,0.618,0.560,833,6520 -Leschelle,2419,273,14.698,1.220,1.105,753,6984 -Villeneuve,1446,1481,26.967,1.653,1.497,848,6549 -Tupigny,2753,342,12.996,1.148,1.039,743,6990 -Préaux-Bocage,14519,119,4.262,0.657,0.595,445,6890 -Arches,15010,176,17.834,1.344,1.217,646,6468 -Papleux,2584,125,1.965,0.446,0.404,764,6991 -Beaupréau-en-Mauges,49023,23146,232.270,4.851,4.392,384,6683 -Saffloz,39473,108,8.779,0.943,0.854,920,6624 -Anglards-de-Salers,15006,781,48.107,2.208,1.999,656,6453 -Saint-Victour,19247,181,14.582,1.216,1.101,651,6483 -Croisy-sur-Eure,27190,192,3.936,0.632,0.572,578,6881 -Beaulieu,15020,92,8.735,0.941,0.852,661,6485 -Vrigny,51657,223,4.484,0.674,0.610,765,6904 -Pailherols,15146,130,25.966,1.622,1.469,680,6437 -Saint-Euphraise-et-Clairizet,51479,233,4.821,0.699,0.633,766,6901 -Variscourt,2761,189,5.519,0.748,0.677,773,6924 -Vèze,15256,58,26.015,1.624,1.470,696,6468 -Neussargues en Pinatelle,15141,1844,92.267,3.058,2.769,702,6446 -Gueux,51282,1677,8.871,0.948,0.858,767,6908 -Narnhac,15139,74,10.394,1.026,0.929,682,6423 -Clerlande,63112,552,8.549,0.931,0.843,714,6534 -Marchastel,15116,153,23.020,1.527,1.383,682,6460 -Paulhac,15148,405,46.561,2.172,1.967,685,6437 -Cussac,15059,130,13.933,1.188,1.076,697,6434 -Longwé,8259,79,10.815,1.047,0.948,833,6923 -Anzat-le-Luguet,63006,181,66.634,2.598,2.352,694,6472 -Marcenat,15114,510,51.207,2.278,2.063,682,6468 -Lavergne,46165,448,8.819,0.945,0.856,604,6415 -Montgreleix,15132,44,17.596,1.335,1.209,694,6472 -Valuéjols,15248,560,38.487,1.975,1.788,688,6439 -Belrain,55044,37,8.260,0.915,0.828,868,6865 -Thoste,21635,110,11.142,1.063,0.962,790,6704 -Dienne,15061,273,46.406,2.168,1.963,681,6453 -Cézens,15033,221,32.051,1.802,1.632,692,6430 -Brimont,51088,432,12.642,1.132,1.025,774,6918 -Brienne-sur-Aisne,8084,240,12.179,1.111,1.006,776,6926 -Saint-Saturnin,15213,206,38.902,1.985,1.797,683,6456 -Chenay,51145,233,3.920,0.630,0.570,767,6913 -Livilliers,95341,387,6.567,0.816,0.739,635,6891 -Loivre,51329,1283,10.243,1.019,0.923,770,6919 -Hermonville,51291,1447,13.327,1.162,1.052,768,6914 -Ségur-les-Villas,15225,202,27.072,1.656,1.499,689,6456 -Auménancourt,51025,1028,12.823,1.140,1.032,776,6918 -Chuignes,80194,135,4.615,0.684,0.619,681,6980 -Coltines,15053,462,19.179,1.394,1.262,700,6441 -Rai,61342,1435,16.150,1.279,1.158,519,6852 -Saint-Martin-sous-Vigouroux,15201,240,19.568,1.408,1.275,682,6433 -Saint-Fargeol,3231,191,10.437,1.028,0.931,674,6560 -Saint-Étienne-Vallée-Française,48148,512,50.632,2.265,2.051,763,6344 -Audun-le-Roman,54029,2462,7.578,0.876,0.793,909,6921 -Brullioles,69030,818,12.530,1.127,1.020,819,6519 -Montanay,69284,3087,7.266,0.858,0.777,845,6534 -Le Pescher,19163,285,11.223,1.066,0.965,605,6445 -Gimel-les-Cascades,19085,787,20.944,1.457,1.319,612,6466 -This,8450,232,4.449,0.671,0.608,817,6964 -Vaulx-en-Velin,69256,48497,21.045,1.460,1.322,852,6525 -Béganne,56011,1399,35.479,1.896,1.717,303,6733 -Villeurbanne,69266,149019,14.899,1.229,1.113,849,6518 -Durfort-et-Saint-Martin-de-Sossenac,30106,685,16.310,1.286,1.164,777,6324 -Poleymieux-au-Mont-d'Or,69153,1297,6.347,0.802,0.726,839,6529 -Chissey-lès-Mâcon,71130,240,15.463,1.252,1.134,836,6601 -Collonges-au-Mont-d'Or,69063,4054,3.779,0.619,0.560,843,6528 -Alix,69004,758,3.614,0.605,0.548,828,6538 -Lanas,7131,407,10.176,1.015,0.919,808,6383 -Bessenay,69021,2266,13.990,1.191,1.078,819,6522 -Reyrieux,1322,4670,15.697,1.261,1.142,839,6540 -Rumersheim-le-Haut,68291,1089,16.710,1.301,1.178,1035,6761 -La Godivelle,63169,13,15.463,1.252,1.134,694,6474 -Fontaines-Saint-Martin,69087,3070,2.726,0.526,0.476,845,6528 -Marsanne,26176,1333,34.691,1.875,1.698,851,6399 -Pradiers,15155,89,23.753,1.551,1.404,692,6467 -Silvarouvres,52474,38,19.321,1.399,1.267,836,6774 -Chevinay,69057,545,8.778,0.943,0.854,826,6519 -Pommiers,69156,2605,7.843,0.891,0.807,829,6540 -Ormes,51418,441,6.334,0.801,0.725,769,6903 -Lacapelle-Barrès,15086,59,6.325,0.801,0.725,678,6431 -Landeyrat,15091,92,21.395,1.472,1.333,691,6462 -Malbo,15112,100,29.386,1.726,1.563,679,6427 -Saint-Germain-au-Mont-d'Or,69207,3135,5.445,0.743,0.673,840,6532 -Domjulien,88146,180,11.913,1.099,0.995,922,6802 -Juvincourt-et-Damary,2399,591,30.119,1.747,1.582,767,6925 -Mouzeil,44107,1874,18.947,1.386,1.255,374,6716 -Concoret,56043,729,15.835,1.267,1.147,309,6787 -Grateloup-Saint-Gayrand,47112,430,20.720,1.449,1.312,490,6371 -Gy,70282,1076,24.780,1.585,1.435,916,6701 -Sarcey,69173,995,10.054,1.009,0.914,819,6532 -Garennes-sur-Eure,27278,1889,10.550,1.034,0.936,587,6869 -Mas-Saint-Chély,48141,116,57.612,2.416,2.187,737,6355 -Salles-Arbuissonnas-en-Beaujolais,69172,809,4.369,0.665,0.602,825,6550 -Omey,51415,216,3.960,0.633,0.573,813,6864 -Pignicourt,2601,197,7.443,0.868,0.786,774,6926 -Fontaines-sur-Marne,52203,149,6.450,0.808,0.732,858,6831 -Thil,51568,297,2.130,0.465,0.421,770,6914 -Châtillon,69050,2158,10.784,1.045,0.946,830,6530 -Arnas,69013,3686,17.853,1.345,1.218,835,6546 -Domfessel,67099,290,6.235,0.795,0.720,1004,6879 -Champigny,51118,1436,4.477,0.674,0.610,771,6907 -Les Mesneux,51365,852,4.240,0.655,0.593,771,6905 -Allanche,15001,776,50.901,2.271,2.056,692,6461 -Saint-Hilaire-du-Bois,17345,330,7.546,0.874,0.791,428,6485 -Cheylade,15049,229,32.718,1.821,1.649,679,6461 -Saint-Martial-d'Artenset,24449,974,32.422,1.812,1.641,482,6434 -Bagnols,69017,705,7.456,0.869,0.787,828,6535 -Guérin,47115,251,10.497,1.031,0.933,467,6375 -Ménil,53150,963,28.532,1.700,1.539,426,6743 -Lozanne,69121,2639,5.529,0.748,0.677,830,6531 -Sainte-Consorce,69190,1923,5.898,0.773,0.700,833,6519 -Lucenay,69122,1820,6.467,0.809,0.732,834,6536 -Hilbesheim,57324,611,7.542,0.874,0.791,1001,6863 -Sainte-Olive,1382,284,7.428,0.868,0.786,848,6548 -Saint-Amandin,15170,227,32.065,1.802,1.632,679,6472 -Courcy,51183,975,15.381,1.248,1.130,775,6911 -Neung-sur-Beuvron,41159,1218,65.642,2.579,2.335,617,6719 -Neuvéglise-sur-Truyère,15142,1753,125.708,3.569,3.231,695,6428 -La Tour-de-Salvagny,69250,4061,8.403,0.923,0.836,835,6522 -Bully,69032,2021,12.780,1.138,1.030,823,6532 -Saint-Pierre-d'Albigny,73270,3958,19.202,1.395,1.263,947,6505 -Prouvais,2626,311,18.188,1.358,1.230,773,6929 -Janvry,51305,134,1.959,0.446,0.404,763,6905 -Avaux,8039,463,13.283,1.160,1.050,779,6931 -Saint-Just-Ibarre,64487,232,30.196,1.749,1.584,373,6242 -Ussel,15244,478,10.221,1.018,0.922,698,6442 -Nizy-le-Comte,2553,248,31.635,1.790,1.621,777,6945 -Monthieux,1261,648,10.766,1.044,0.945,853,6543 -Laveissenet,15100,129,10.894,1.051,0.952,693,6442 -Saint-Brice-Courcelles,51474,3453,4.114,0.646,0.585,770,6909 -Thillois,51569,426,6.351,0.802,0.726,767,6908 -Gourdièges,15077,57,8.394,0.922,0.835,689,6428 -Proviseux-et-Plesnoy,2627,120,11.335,1.072,0.971,773,6929 -Mont-de-Vougney,25392,181,7.111,0.849,0.769,985,6689 -Évergnicourt,2299,575,9.176,0.964,0.873,777,6928 -Trois-Puits,51584,155,2.160,0.468,0.424,777,6900 -Puynormand,33347,302,7.717,0.884,0.800,462,6436 -Sahune,26288,315,16.764,1.303,1.180,879,6367 -Saint-Thierry,51518,636,7.611,0.878,0.795,772,6910 -Villeroy,80796,193,6.040,0.782,0.708,609,6982 -Chamboulive,19037,1204,47.214,2.187,1.980,596,6487 -Jouy-lès-Reims,51310,215,1.883,0.437,0.396,766,6901 -Ambérieux-en-Dombes,1005,1671,16.042,1.275,1.154,850,6544 -Saint-André-de-Cubzac,33366,11127,23.299,1.536,1.391,432,6436 -Seilhac,19255,1719,25.504,1.608,1.456,604,6473 -Bouilly,51072,195,5.704,0.760,0.688,764,6900 -Le Lonzac,19118,802,36.646,1.927,1.745,599,6490 -Sacy,51471,375,5.510,0.747,0.676,771,6902 -Coulommes-la-Montagne,51177,211,2.735,0.526,0.476,768,6904 -Houilles,78311,31689,4.479,0.674,0.610,641,6871 -Flaujac-Gare,46104,103,8.152,0.909,0.823,603,6403 -Pradines,19168,97,19.836,1.418,1.284,614,6487 -Bétheny,51055,6817,20.019,1.424,1.289,775,6913 -Villers-Franqueux,51633,298,3.254,0.574,0.520,770,6914 -Bertricourt,2076,167,4.526,0.677,0.613,772,6923 -Merfy,51362,607,6.650,0.821,0.743,771,6909 -Provenchère,70426,264,5.923,0.775,0.702,933,6739 -Morigny-Champigny,91433,4366,31.015,1.773,1.605,643,6811 -Tassin-la-Demi-Lune,69244,22356,7.997,0.900,0.815,836,6518 -Blacé,69023,1583,11.001,1.056,0.956,829,6551 -Belmont-d'Azergues,69020,635,1.560,0.398,0.360,829,6531 -Champagne-au-Mont-d'Or,69040,5603,2.568,0.510,0.462,838,6525 -Boyaval,62171,134,5.461,0.744,0.674,653,7042 -Aguilcourt,2005,391,10.622,1.037,0.939,770,6924 -Auzouville-sur-Ry,76046,730,7.933,0.897,0.812,579,6928 -Villy-le-Maréchal,10435,189,3.308,0.579,0.524,780,6787 -Chaleins,1075,1296,17.097,1.316,1.192,840,6547 -Vaudéville,88495,166,3.274,0.576,0.522,963,6799 -Alzon,30009,181,27.646,1.674,1.516,733,6319 -La Moncelle,8294,140,1.360,0.371,0.336,843,6957 -Mornant,69141,5725,15.790,1.265,1.145,829,6506 -Saint-Martial-Entraygues,19221,82,7.574,0.876,0.793,620,6447 -Dommartin-lès-Vallois,88149,57,5.001,0.712,0.645,929,6790 -Champillon,51119,502,1.462,0.385,0.349,771,6889 -Les Lèves-et-Thoumeyragues,33242,565,17.405,1.328,1.202,476,6416 -Naves,19146,2325,36.468,1.922,1.740,605,6467 -Montcony,71311,276,10.718,1.042,0.943,874,6626 -Berry-au-Bac,2073,655,8.156,0.909,0.823,764,6924 -Les Forges,88178,1885,7.102,0.848,0.768,952,6790 -Chevanceaux,17104,1015,22.184,1.499,1.357,453,6472 -Rilhac-Xaintrie,19173,304,25.680,1.613,1.460,637,6459 -Velving,57705,205,4.700,0.690,0.625,959,6911 -Soursac,19264,502,42.815,2.083,1.886,638,6468 -Lantabat,64313,290,29.137,1.718,1.556,364,6245 -Ry,76548,711,5.754,0.764,0.692,578,6932 -Lacapelle-Viescamp,15088,513,17.193,1.320,1.195,645,6424 -Gourdon-Murat,19087,109,15.838,1.267,1.147,613,6497 -Espagnac,19075,373,23.889,1.556,1.409,616,6458 -Parthenay,79202,10388,11.432,1.076,0.974,454,6623 -Montaignac-Saint-Hippolyte,19143,576,20.413,1.438,1.302,624,6474 -Saint-Pantaléon-de-Lapleau,19228,67,8.543,0.930,0.842,640,6471 -Valaire,41266,86,6.634,0.820,0.742,567,6710 -Latronche,19110,135,19.781,1.416,1.282,638,6468 -Chalvignac,15036,457,36.516,1.923,1.741,646,6464 -Maninghem,62545,151,3.991,0.636,0.576,626,7052 -Lamazière-Basse,19102,300,44.043,2.112,1.912,632,6477 -Marignane,13054,33658,23.566,1.545,1.399,880,6264 -Conques-en-Rouergue,12076,1671,106.393,3.283,2.972,656,6382 -Bar,19016,311,20.887,1.455,1.317,605,6474 -Cortambert,71146,234,16.053,1.275,1.154,832,6597 -Macau,33262,4133,20.601,1.445,1.308,413,6440 -Gorcy,54234,2710,4.146,0.648,0.587,894,6939 -Saint-Denis-en-Margeride,48145,179,37.894,1.959,1.774,739,6402 -Fleurieu-sur-Saône,69085,1435,2.951,0.547,0.495,843,6530 -La Roque-sur-Pernes,84101,414,11.076,1.059,0.959,867,6320 -Légny,69111,664,4.081,0.643,0.582,821,6535 -Béthencourt,59075,749,5.152,0.723,0.655,729,7005 -Jassans-Riottier,1194,6391,5.022,0.713,0.646,835,6542 -Saint-Vallier,88437,100,4.419,0.669,0.606,947,6804 -Saint-Martial-de-Gimel,19220,488,24.009,1.560,1.412,617,6467 -Gien-sur-Cure,58125,95,11.028,1.057,0.957,784,6669 -Gumond,19090,96,10.039,1.009,0.914,617,6457 -Saint-Sylvain,19245,136,7.517,0.873,0.790,614,6456 -Gondreville,45158,343,8.082,0.905,0.819,675,6771 -Piégros-la-Clastre,26234,825,24.832,1.586,1.436,863,6398 -Maligny,21374,211,16.832,1.306,1.182,817,6665 -Cormicy,51171,1467,31.778,1.794,1.624,763,6923 -Trégarantec,29288,584,5.113,0.720,0.652,163,6854 -Gonneville-la-Mallet,76307,1333,7.286,0.859,0.778,499,6950 -Muizon,51391,2187,7.131,0.850,0.770,767,6909 -Châtenoy,45084,484,25.810,1.617,1.464,654,6756 -Lor,2440,145,8.932,0.951,0.861,778,6936 -Breuil-le-Sec,60106,2615,8.922,0.951,0.861,661,6922 -Apt,84003,11710,45.160,2.139,1.937,890,6308 -Saint-Cyr-le-Chatoux,69192,141,6.237,0.795,0.720,819,6548 -Vuillecin,25634,647,14.250,1.202,1.088,951,6655 -Paulhenc,15149,249,23.730,1.551,1.404,683,6418 -Montmelas-Saint-Sorlin,69137,491,4.197,0.652,0.590,822,6549 -Cargèse,2A065,1319,46.391,2.168,1.963,1170,6136 -Les Chères,69055,1451,5.568,0.751,0.680,834,6533 -Pournoy-la-Chétive,57553,642,2.621,0.515,0.466,930,6883 -Saint-Cyr-au-Mont-d'Or,69191,5545,7.265,0.858,0.777,840,6529 -Savigneux,1398,1333,14.883,1.228,1.112,842,6543 -Marcillac-la-Croisille,19125,796,40.188,2.018,1.827,627,6463 -Trigny,51582,541,12.286,1.116,1.010,766,6911 -Chessy,69056,2056,4.548,0.679,0.615,826,6532 -Bonnefond,19027,112,45.382,2.144,1.941,622,6487 -Bibost,69022,574,5.349,0.736,0.666,822,6522 -Sourcieux-les-Mines,69177,2013,9.950,1.004,0.909,827,6525 -La Freissinouse,5059,821,7.891,0.894,0.809,937,6385 -Mazan,84072,5944,37.954,1.961,1.776,875,6329 -Cauroy-lès-Hermonville,51102,503,10.250,1.019,0.923,769,6920 -Méry-Prémecy,51364,61,5.122,0.720,0.652,765,6905 -La Bonneville-sur-Iton,27082,2182,3.965,0.634,0.574,557,6878 -La Selve,2705,221,4.793,0.697,0.631,773,6943 -Chivres-Val,2190,538,5.585,0.752,0.681,733,6922 -Couzon-au-Mont-d'Or,69068,2559,3.137,0.564,0.511,840,6529 -Lenax,3142,260,28.460,1.698,1.537,767,6577 -Gattières,6064,4115,10.185,1.016,0.920,1033,6307 -Neufchâtel-sur-Aisne,2541,418,2.899,0.542,0.491,773,6929 -Ceton,61079,1792,59.926,2.464,2.231,531,6791 -Saint-Romain-de-Popey,69234,1558,17.095,1.316,1.192,816,6529 -Caluire-et-Cuire,69034,42915,10.443,1.029,0.932,845,6526 -Sandrans,1393,526,29.355,1.725,1.562,854,6558 -La Roche-Canillac,19174,146,3.113,0.562,0.509,619,6455 -Pargny-lès-Reims,51422,456,3.624,0.606,0.549,768,6903 -Saint-Didier-au-Mont-d'Or,69194,6650,8.350,0.920,0.833,839,6529 -La Malmaison,2454,413,25.781,1.616,1.463,769,6936 -Reims,51454,183113,46.861,2.179,1.973,779,6909 -Saint-Yrieix-le-Déjalat,19249,345,40.241,2.019,1.828,620,6480 -Saint-Salvadour,19240,310,19.829,1.417,1.283,606,6478 -Cormontreuil,51172,6528,4.682,0.689,0.624,777,6901 -Saint-Georges,82162,259,9.194,0.965,0.874,589,6348 -Dragey-Ronthon,50167,816,15.520,1.254,1.135,372,6855 -Amifontaine,2013,413,28.063,1.686,1.527,769,6936 -Reumont,59498,368,2.771,0.530,0.480,734,6998 -Maurois,59394,391,2.109,0.462,0.418,732,6996 -Saint-Hilaire-Foissac,19208,194,37.224,1.942,1.758,627,6473 -Ercuis,60212,1610,4.403,0.668,0.605,650,6904 -Kergloff,29089,900,24.999,1.592,1.441,210,6816 -Villiers,86292,889,11.135,1.062,0.962,486,6621 -Alleyrat,19006,95,15.024,1.234,1.117,638,6494 -Vichères,28407,312,12.362,1.119,1.013,545,6796 -Saint-Julien-aux-Bois,19214,466,44.302,2.119,1.919,635,6449 -La Groise,59274,489,9.384,0.975,0.883,751,6997 -Catillon-sur-Sambre,59137,834,13.421,1.166,1.056,744,6996 -Boustroff,57105,149,3.489,0.595,0.539,967,6884 -Honnechy,59311,545,6.545,0.814,0.737,736,6997 -Venasque,84143,1017,35.060,1.885,1.707,875,6325 -Mars,7151,264,19.431,1.403,1.270,802,6436 -Maretz,59382,1462,11.250,1.068,0.967,731,6992 -Chasselay,69049,2775,12.897,1.143,1.035,837,6529 -Hem-Monacu,80428,125,3.664,0.609,0.551,688,6983 -Saint-Chamant,19192,491,14.060,1.194,1.081,611,6448 -Barriac-les-Bosquets,15018,127,12.929,1.145,1.037,640,6452 -Thil-Manneville,76690,607,6.792,0.830,0.751,557,6974 -Beaumont,19020,116,11.130,1.062,0.962,606,6484 -Saint-Lunaire,35287,2316,10.396,1.026,0.929,326,6846 -Saint-Julien-sur-Bibost,69216,562,13.329,1.162,1.052,818,6526 -Chapelle-Spinasse,19046,116,5.947,0.776,0.703,627,6472 -Charbonnières-les-Bains,69044,5016,4.110,0.645,0.584,835,6522 -Val-de-Roulans,25579,192,2.964,0.548,0.496,946,6702 -Limonest,69116,3675,9.101,0.960,0.869,837,6529 -Crevant,36060,725,36.980,1.936,1.753,618,6593 -Combressol,19058,348,25.423,1.605,1.453,633,6484 -Orliac-de-Bar,19155,292,14.973,1.232,1.115,608,6474 -Boisset-les-Prévanches,27076,460,7.442,0.868,0.786,576,6875 -Les Angles-sur-Corrèze,19009,109,4.781,0.696,0.630,606,6469 -Saint-Priest-la-Roche,42277,348,13.593,1.174,1.063,786,6533 -Péret-Bel-Air,19159,92,15.627,1.258,1.139,626,6486 -Ouilly-le-Tesson,14486,601,12.003,1.103,0.999,468,6881 -Cailloux-sur-Fontaines,69033,2642,8.462,0.926,0.838,848,6532 -Bergues-sur-Sambre,2067,213,4.471,0.673,0.609,749,6992 -Saussenac,81277,585,17.670,1.338,1.211,637,6320 -Voulgézac,16420,251,13.415,1.166,1.056,478,6498 -Saint-Léger-lès-Authie,80705,93,4.335,0.663,0.600,664,7005 -Culey-le-Patry,14211,354,7.717,0.884,0.800,439,6879 -Prémont,2618,706,12.246,1.114,1.009,729,6993 -Civrieux,1105,1606,20.172,1.430,1.295,846,6535 -Saint-Marcet,31502,357,14.348,1.206,1.092,514,6236 -Meymac,19136,2411,87.303,2.974,2.693,626,6498 -Auriac,19014,231,34.797,1.878,1.700,635,6458 -Rocbaron,83106,4925,20.505,1.441,1.305,950,6247 -Marcilly-d'Azergues,69125,870,4.238,0.655,0.593,833,6532 -Marnaves,81154,77,10.322,1.023,0.926,612,6335 -Morancé,69140,1975,9.295,0.970,0.878,830,6535 -La Vallée-Mulâtre,2760,154,5.363,0.737,0.667,741,6993 -Sain-Bel,69171,2299,3.818,0.622,0.563,824,6526 -Saint-Jean-de-Thurigneux,1362,773,16.213,1.282,1.161,845,6539 -Chaussenac,15046,220,16.348,1.287,1.165,640,6456 -Sainte-Fortunade,19203,1789,38.416,1.973,1.786,606,6458 -Le Nouvion-en-Thiérache,2558,2611,48.621,2.220,2.010,756,6994 -Ladignac-sur-Rondelles,19096,412,10.249,1.019,0.923,606,6458 -Champagnac-la-Noaille,19039,239,26.004,1.623,1.469,622,6471 -Saint-Augustin,19181,424,30.309,1.752,1.586,606,6479 -Sainte-Euphémie,1353,1657,4.642,0.686,0.621,838,6543 -Marcy-l'Étoile,69127,3736,5.364,0.737,0.667,835,6522 -Connaux,30092,1662,9.462,0.979,0.886,830,6334 -Saint-Martin-de-Mieux,14627,440,10.252,1.019,0.923,461,6870 -Oisy,2569,467,10.858,1.049,0.950,749,6992 -Lestiac-sur-Garonne,33241,581,2.859,0.538,0.487,433,6404 -Chazay-d'Azergues,69052,4130,5.976,0.778,0.704,834,6533 -Rocourt-Saint-Martin,2649,273,5.698,0.760,0.688,729,6895 -Anse,69009,7094,15.280,1.244,1.126,835,6542 -Le Caule-Sainte-Beuve,76166,490,16.778,1.304,1.181,600,6962 -Ambérieux,69005,571,4.614,0.684,0.619,836,6539 -Mazinghien,59395,306,8.999,0.955,0.865,744,6996 -Fesmy-le-Sart,2308,488,16.200,1.281,1.160,748,6996 -Chalindrey,52093,2436,20.226,1.432,1.297,883,6748 -Arras,62041,40883,11.890,1.098,0.994,682,7023 -Puechredon,30208,36,7.916,0.896,0.811,784,6316 -Rozières-en-Beauce,45264,199,9.169,0.964,0.873,602,6760 -Beaudéan,65078,392,16.500,1.293,1.171,468,6213 -Étreux,2298,1481,10.342,1.024,0.927,745,6991 -Ancy,69008,628,11.837,1.095,0.991,816,6529 -Pandrignes,19158,164,8.448,0.925,0.838,609,6459 -Vénérolles,2779,227,8.998,0.955,0.865,747,6987 -Beaurepaire-sur-Sambre,59061,257,7.911,0.895,0.810,759,6994 -Limas,69115,4754,5.569,0.751,0.680,831,6543 -Moustier-Ventadour,19145,472,30.235,1.750,1.584,633,6472 -Beaurevoir,2057,1433,21.779,1.485,1.345,727,6989 -Moisson,78410,964,10.102,1.012,0.916,604,6884 -Wassigny,2830,965,6.771,0.828,0.750,744,6993 -Massieux,1238,2519,3.157,0.566,0.512,843,6537 -Landersheim,67258,203,2.119,0.463,0.419,1030,6853 -Malincourt,59372,512,10.286,1.021,0.924,722,6994 -Mennevret,2476,641,11.913,1.099,0.995,741,6991 -Escaudes,33155,153,25.731,1.615,1.462,444,6366 -Forgès,19084,303,10.465,1.030,0.933,609,6452 -Maizières,52302,196,11.695,1.089,0.986,854,6825 -Albussac,19004,722,36.352,1.919,1.737,611,6448 -Saint-Germain-Nuelles,69208,2267,8.651,0.936,0.847,826,6528 -Nassandres sur Risle,27425,2389,25.634,1.612,1.460,529,6897 -Gros-Chastang,19089,179,13.338,1.163,1.053,625,6457 -Andel,22002,1114,12.407,1.121,1.015,289,6835 -Dehéries,59171,40,1.894,0.438,0.397,725,6993 -Rennes-en-Grenouilles,53189,109,8.049,0.903,0.818,439,6827 -Lapleau,19106,388,17.761,1.341,1.214,634,6464 -Saint-Romain-au-Mont-d'Or,69233,1200,2.612,0.514,0.465,842,6528 -Miribel,1249,9742,24.464,1.574,1.425,854,6525 -Vaux-Andigny,2769,931,15.903,1.269,1.149,738,6988 -Courrières,62250,10579,8.729,0.940,0.851,695,7041 -Saint-André-de-Corcy,1333,3241,20.981,1.458,1.320,852,6541 -Ars-sur-Formans,1021,1389,5.524,0.748,0.677,839,6547 -Gleizé,69092,7473,10.529,1.033,0.935,831,6544 -Dardilly,69072,8617,14.075,1.194,1.081,835,6522 -Genay,69278,5446,8.658,0.937,0.848,845,6534 -Quincieux,69163,3453,17.974,1.349,1.221,834,6536 -Perrouse,70407,265,4.388,0.667,0.604,931,6699 -Fédry,70230,96,8.805,0.945,0.856,916,6730 -Pargny-sur-Saulx,51423,1896,12.358,1.119,1.013,834,6854 -Boué,2103,1316,10.704,1.041,0.943,749,6991 -Pérols-sur-Vézère,19160,181,47.256,2.188,1.981,627,6497 -Sommevoire,52479,707,32.983,1.828,1.655,838,6811 -La Neuville-lès-Dorengt,2548,382,10.930,1.052,0.952,748,6985 -Saint-Paul,19235,212,14.265,1.202,1.088,613,6458 -Raffetot,76518,502,6.862,0.834,0.755,521,6949 -Haplincourt,62410,186,5.089,0.718,0.650,697,7000 -Élincourt,59191,627,8.364,0.921,0.834,725,6996 -Golancourt,60278,387,4.140,0.648,0.587,704,6957 -Valiergues,19277,145,13.193,1.156,1.047,641,6484 -Mionnay,1248,2132,20.028,1.425,1.290,852,6536 -Aisey-sur-Seine,21006,179,12.834,1.140,1.032,821,6739 -L'Arbresle,69010,6421,3.358,0.583,0.528,826,6528 -Barzy-en-Thiérache,2050,325,7.701,0.883,0.799,756,6995 -Le Breuil,69026,524,5.653,0.757,0.685,825,6532 -Montclar,4126,414,23.375,1.539,1.393,970,6374 -Torchamp,61487,293,14.748,1.222,1.106,430,6835 -Castéra-Lou,65133,225,4.889,0.704,0.637,471,6252 -Rosiers-d'Égletons,19176,1067,38.257,1.969,1.783,619,6478 -Matignon,22143,1652,14.722,1.221,1.106,310,6844 -Corrèze,19062,1126,34.679,1.874,1.697,613,6478 -Meyrignac-l'Église,19137,62,10.099,1.012,0.916,612,6481 -Darnets,19070,360,25.806,1.617,1.464,633,6480 -Sermange,39513,257,7.081,0.847,0.767,900,6682 -Bohain-en-Vermandois,2095,5652,31.825,1.796,1.626,737,6986 -Sainte-Gemme-la-Plaine,85216,2049,35.608,1.899,1.719,387,6605 -Benais,37024,931,20.153,1.429,1.294,493,6696 -Sochaux,25547,4015,2.170,0.469,0.425,987,6720 -Le Ham,53112,398,25.131,1.596,1.445,450,6817 -Sauveterre-de-Guyenne,33506,1755,31.872,1.797,1.627,453,6405 -Frangy-en-Bresse,71205,624,23.858,1.555,1.408,877,6624 -Bassignac-le-Haut,19018,189,19.454,1.404,1.271,624,6456 -Dommartin,69076,2580,7.237,0.856,0.775,834,6529 -Montvert,15135,118,11.294,1.070,0.969,632,6432 -Montmirey-la-Ville,39360,179,3.988,0.636,0.576,891,6682 -Brageac,15024,73,12.195,1.112,1.007,645,6455 -Charmes-Saint-Valbert,70135,42,5.181,0.725,0.656,902,6740 -Neuvic,19148,1668,75.211,2.761,2.500,643,6466 -Manneville-la-Pipard,14399,290,6.331,0.801,0.725,497,6912 -Treignac,19269,1356,38.153,1.966,1.780,603,6494 -Laval-de-Cère,46163,309,8.012,0.901,0.816,616,6431 -Maurines,15121,109,14.564,1.215,1.100,708,6419 -Nieudan,15143,108,12.413,1.121,1.015,638,6433 -Cartignies,59134,1262,26.439,1.637,1.482,763,6997 -Saint-Paul-des-Landes,15204,1536,19.183,1.394,1.262,643,6431 -Prudhomat,46228,716,12.342,1.118,1.012,607,6421 -Saint-Hilaire-sous-Romilly,10341,342,20.163,1.429,1.294,749,6826 -Esparros,65165,179,32.780,1.822,1.650,478,6213 -Saint-Bonnet-les-Tours-de-Merle,19189,50,5.916,0.774,0.701,624,6438 -Saint-Santin-Cantalès,15211,306,34.573,1.872,1.695,642,6440 -Créquy,62257,489,20.455,1.440,1.304,632,7048 -Écully,69081,18097,8.480,0.927,0.839,836,6523 -Chalandry,2156,250,7.752,0.886,0.802,745,6951 -Saint-Julien,69215,842,6.917,0.837,0.758,830,6550 -Bord-Saint-Georges,23026,354,32.452,1.813,1.642,641,6573 -Saint-Hilaire-Taurieux,19212,99,8.555,0.931,0.843,610,6440 -Rejet-de-Beaulieu,59496,270,6.363,0.803,0.727,747,6995 -Serain,2709,408,6.713,0.825,0.747,728,6993 -Yvias,22390,762,11.766,1.092,0.989,255,6866 -Chenailler-Mascheix,19054,205,15.501,1.253,1.134,606,6444 -Acy,2003,1008,11.558,1.082,0.980,731,6914 -Clamecy,2198,226,3.455,0.592,0.536,726,6926 -Saint-Martin-Cantalès,15200,148,19.710,1.413,1.279,648,6443 -Lacenas,69105,948,3.333,0.581,0.526,828,6543 -Glanes,46124,304,2.712,0.524,0.474,611,6424 -Montgenost,51376,157,8.405,0.923,0.836,745,6831 -Bucy-le-Long,2131,1888,12.900,1.143,1.035,726,6922 -Cuiry-Housse,2249,104,8.569,0.932,0.844,737,6911 -Duerne,69078,823,11.337,1.072,0.971,817,6511 -Saint-Maurice-Colombier,25524,907,13.424,1.166,1.056,977,6708 -Simandres,69295,1769,9.456,0.979,0.886,847,6502 -Missy-sur-Aisne,2487,640,3.318,0.580,0.525,733,6921 -Errouville,54181,743,5.181,0.725,0.656,912,6928 -Couvrelles,2230,188,7.493,0.871,0.789,734,6913 -Vourles,69268,3375,5.603,0.753,0.682,838,6507 -Laffaux,2400,149,6.828,0.832,0.753,734,6928 -Saint-Julien-le-Pèlerin,19215,132,15.626,1.258,1.139,628,6432 -La Chapelle-sur-Coise,69042,578,6.605,0.818,0.741,815,6506 -Bretenoux,46038,1371,5.715,0.761,0.689,610,6423 -Bassignac-le-Bas,19017,92,12.411,1.121,1.015,613,6439 -Taluyers,69241,2530,8.118,0.907,0.821,833,6506 -La Chapelle-Saint-Géraud,19045,201,17.564,1.334,1.208,620,6441 -Saint-Martin-en-Haut,69227,3886,38.958,1.987,1.799,823,6504 -Droizy,2272,74,5.392,0.739,0.669,730,6909 -Mions,69283,13244,11.656,1.087,0.984,853,6508 -Cornac,46076,352,13.582,1.173,1.062,610,6423 -La Ségalassière,15224,124,6.680,0.823,0.745,637,6421 -Saint-Michel-Loubéjou,46284,401,5.319,0.734,0.665,610,6421 -Grainville-sur-Ry,76316,445,5.447,0.743,0.673,578,6932 -Courmelles,2226,1813,6.751,0.827,0.749,720,6916 -Vregny,2828,91,4.589,0.682,0.617,729,6924 -Ambrief,2012,69,4.490,0.674,0.610,729,6915 -Saint-Pierre-en-Val,76638,1108,7.696,0.883,0.799,586,6991 -La Croix-aux-Bois,8135,148,5.875,0.772,0.699,828,6925 -Soucieu-en-Jarrest,69176,4473,14.322,1.205,1.091,835,6512 -Celles-sur-Aisne,2148,259,6.079,0.785,0.711,736,6924 -Biars-sur-Cère,46029,2108,3.664,0.609,0.551,608,6426 -Grigny,69096,9615,5.898,0.773,0.700,837,6503 -Saint-André-la-Côe,69180,284,4.883,0.703,0.637,825,6506 -Romagne-sous-Montfaucon,55438,187,15.621,1.258,1.139,852,6914 -Arcy-Sainte-Restitue,2022,403,26.402,1.636,1.481,737,6909 -Estal,46097,109,5.978,0.778,0.704,615,6426 -Saint-Victor,15217,109,13.685,1.178,1.067,643,6431 -Villemontoire,2804,188,7.665,0.881,0.798,723,6912 -Grand-Rozoy,2665,307,12.494,1.125,1.019,727,6904 -Siran,15228,483,50.638,2.265,2.051,628,6432 -Drosay,76221,198,6.452,0.809,0.732,537,6971 -Glénat,15076,177,24.163,1.565,1.417,633,6419 -Thurins,69249,3032,19.347,1.400,1.268,830,6510 -Rontalon,69170,1176,12.638,1.132,1.025,824,6507 -Reygade,19171,192,14.117,1.196,1.083,612,6435 -Astaillac,19012,232,7.299,0.860,0.779,609,6427 -Marcilly-le-Châtel,42134,1390,16.480,1.292,1.170,781,6509 -Monceaux-sur-Dordogne,19140,639,36.874,1.933,1.750,611,6439 -Savignies,60609,828,9.881,1.001,0.906,627,6929 -Besse,15269,124,3.778,0.619,0.560,650,6446 -Mont-l'Étroit,54379,89,6.462,0.809,0.732,905,6824 -Frayssinhes,46115,169,11.878,1.097,0.993,616,6418 -Sexcles,19259,234,25.591,1.610,1.458,624,6438 -Saint-Cirgues-la-Loutre,19193,177,18.500,1.369,1.240,629,6441 -Camps-Saint-Mathurin-Léobazel,19034,240,34.092,1.859,1.683,617,6429 -Sanzey,54492,137,3.585,0.603,0.546,909,6855 -Teyssieu,46315,176,13.708,1.179,1.067,619,6422 -Saint-Laurent-les-Tours,46273,912,10.903,1.051,0.952,611,6419 -Hauteroche,21314,78,13.351,1.163,1.053,817,6709 -Cros-de-Montvert,15057,198,29.405,1.726,1.563,635,6443 -Monieux,84079,344,47.537,2.195,1.987,884,6335 -Inor,55250,186,6.386,0.804,0.728,858,6942 -Ytrac,15267,4246,38.364,1.972,1.785,645,6424 -Saint-Jacut-les-Pins,56221,1736,22.801,1.520,1.376,307,6746 -Soissons,2722,28466,12.338,1.118,1.012,723,6918 -Muret-et-Crouttes,2533,123,5.204,0.726,0.657,730,6909 -Nampteuil-sous-Muret,2536,100,3.365,0.584,0.529,732,6913 -Beugneux,2082,110,7.684,0.882,0.799,732,6902 -Saint-Rémy-Blanzy,2693,215,14.039,1.193,1.080,719,6904 -Belleu,2064,3740,4.498,0.675,0.611,725,6917 -Saint-Silvain-sous-Toulx,23243,163,14.832,1.226,1.110,636,6577 -Auberville,14024,539,2.671,0.520,0.471,481,6918 -Belmont-Bretenoux,46024,398,6.589,0.817,0.740,611,6419 -Marennes,69281,1649,12.412,1.121,1.015,850,6503 -Manteyer,5075,426,25.296,1.601,1.450,938,6387 -Cuffies,2245,1796,5.026,0.714,0.646,724,6923 -Vailly,74287,904,18.838,1.382,1.251,976,6581 -Crots,5045,1052,56.565,2.394,2.168,972,6388 -Maast-et-Violaine,2447,147,11.061,1.059,0.959,734,6913 -Steenwerck,59581,3624,27.520,1.670,1.512,687,7064 -Vernaison,69260,4872,4.214,0.653,0.591,840,6506 -Montagny,69136,2892,8.222,0.913,0.827,838,6503 -Noyant-et-Aconin,2564,503,4.576,0.681,0.617,724,6912 -Lanildut,29112,951,5.841,0.769,0.696,127,6847 -Billy-sur-Aisne,2089,1162,7.544,0.874,0.791,727,6919 -Marigny-les-Usages,45197,1494,9.647,0.989,0.895,629,6763 -Argentat-sur-Dordogne,19010,3083,29.348,1.724,1.561,615,6449 -Braye,2118,120,1.354,0.370,0.335,728,6925 -Sansac-de-Marmiesse,15221,1358,14.325,1.205,1.091,650,6420 -Liourdres,19116,250,5.838,0.769,0.696,608,6427 -Méligny-le-Grand,55330,100,11.536,1.081,0.979,885,6845 -Conthil,57151,170,9.271,0.969,0.877,969,6874 -Saint-Paul-de-Salers,15205,105,36.543,1.924,1.742,663,6451 -Saint-Illide,15191,656,39.727,2.006,1.816,646,6436 -Tourmignies,59600,891,2.069,0.458,0.415,707,7044 -Goulles,19086,327,33.213,1.834,1.661,629,6440 -Mandailles-Saint-Julien,15113,187,35.419,1.894,1.715,670,6442 -Millery,69133,4341,8.718,0.940,0.851,838,6503 -Mercœur,19133,248,30.141,1.748,1.583,615,6432 -Saint-Étienne-Cantalès,15182,134,11.244,1.067,0.966,639,6430 -Rozières-sur-Crise,2663,229,7.328,0.862,0.780,728,6916 -Margaux-Cantenac,33268,2953,21.535,1.477,1.337,408,6444 -Eymet,24167,2646,31.350,1.782,1.613,495,6397 -Combrand,79096,1168,24.659,1.581,1.431,415,6646 -Écurey-en-Verdunois,55170,127,6.945,0.839,0.760,868,6920 -Marmanhac,15118,721,24.190,1.566,1.418,657,6433 -Chacrise,2154,359,12.761,1.137,1.029,731,6914 -Leury,2424,107,3.678,0.610,0.552,724,6925 -Latour-Bas-Elne,66094,2614,3.327,0.581,0.526,702,6167 -Saint-Simon,15215,1154,27.070,1.656,1.499,660,6427 -Yolet,15266,555,9.945,1.004,0.909,661,6424 -Ciry-Salsogne,2195,924,8.963,0.953,0.863,734,6916 -Cramaille,2233,138,8.174,0.910,0.824,733,6901 -Launoy,2412,98,9.184,0.965,0.874,731,6905 -Vauxbuin,2770,788,5.012,0.713,0.646,723,6917 -Montagne,38245,266,8.774,0.943,0.854,872,6449 -Cazaux-Debat,65140,31,1.591,0.401,0.363,485,6203 -Satillieu,7309,1568,33.380,1.839,1.665,823,6446 -Parcy-et-Tigny,2585,256,10.644,1.038,0.940,722,6908 -Billy-sur-Ourcq,2090,216,10.238,1.018,0.922,723,6901 -Flaxieu,1162,69,2.922,0.544,0.493,914,6527 -Terny-Sorny,2739,328,7.073,0.847,0.767,728,6926 -Pasly,2593,998,3.009,0.552,0.500,721,6924 -Buzancy,2138,189,4.851,0.701,0.635,726,6911 -Bay,70057,134,4.925,0.706,0.639,903,6692 -Sentenac-de-Sérou,9292,47,13.639,1.176,1.065,569,6210 -Bretagne-d'Armagnac,32064,433,12.298,1.116,1.010,471,6317 -Crouy,2243,2900,10.379,1.025,0.928,728,6925 -Venizel,2780,1376,3.731,0.615,0.557,729,6918 -Saint-Laurent-d'Agny,69219,2134,10.648,1.039,0.941,833,6504 -Nanteuil-la-Fosse,2537,190,7.438,0.868,0.786,731,6926 -Chadenet,48037,100,13.298,1.161,1.051,750,6376 -Lavigerie,15102,105,24.189,1.566,1.418,680,6451 -Aurillac,15014,25954,29.229,1.721,1.558,660,6427 -Reilhac,15160,1100,8.980,0.954,0.864,657,6432 -Berzy-le-Sec,2077,390,11.732,1.090,0.987,720,6914 -Coise,69062,765,9.098,0.960,0.869,815,6501 -Velzic,15252,420,11.239,1.067,0.966,663,6434 -Idaux-Mendy,64268,266,9.644,0.989,0.895,379,6238 -Serches,2711,312,9.130,0.962,0.871,732,6917 -Hartennes-et-Taux,2372,383,6.217,0.794,0.719,725,6911 -Saint-Chamant,15176,237,13.918,1.188,1.076,659,6444 -Vic-sur-Cère,15258,1830,29.371,1.725,1.562,670,6426 -Saint-Projet-de-Salers,15208,138,35.995,1.910,1.729,668,6441 -Saint-Symphorien-d'Ozon,69291,5706,13.419,1.166,1.056,844,6503 -Lascelle,15096,299,19.103,1.391,1.259,667,6441 -Saint-Clément,15180,75,17.286,1.323,1.198,679,6436 -Esmery-Hallon,80284,776,18.919,1.385,1.254,702,6954 -Fréniches,60255,349,5.951,0.777,0.704,701,6955 -Larajasse,69110,1857,33.552,1.844,1.670,821,6503 -Noyon,60471,13666,18.078,1.353,1.225,701,6945 -Tournemire,15238,125,9.762,0.995,0.901,660,6442 -Charly,69046,4529,5.170,0.724,0.656,839,6509 -Hondschoote,59309,4097,23.651,1.548,1.402,668,7098 -Monthiers,2509,161,7.539,0.874,0.791,722,6892 -Feyzin,69276,9879,10.472,1.030,0.933,847,6510 -Husseren-les-Châteaux,68150,505,1.248,0.356,0.322,1019,6779 -Saint-Cernin,15175,1073,46.686,2.175,1.969,654,6435 -Crisolles,60181,957,10.662,1.039,0.941,702,6945 -Saint-Quay-Portrieux,22325,2918,4.026,0.639,0.579,271,6855 -Toulenne,33533,2549,6.585,0.817,0.740,439,6393 -Bourgneuf,73053,683,6.497,0.811,0.734,957,6500 -Baizieux,80052,201,5.102,0.719,0.651,664,6988 -Orliénas,69148,2408,10.404,1.027,0.930,833,6506 -Muirancourt,60443,566,5.672,0.758,0.686,700,6948 -Chaussan,69051,1117,7.969,0.899,0.814,826,6504 -Sommelans,2724,61,4.238,0.655,0.593,720,6893 -Solaize,69296,2916,8.129,0.908,0.822,842,6508 -Avezé,72020,737,21.052,1.460,1.322,531,6792 -Irigny,69100,8609,8.909,0.950,0.860,842,6508 -Servais,2716,288,5.606,0.754,0.683,725,6945 -Offoy,80605,221,7.128,0.850,0.770,700,6965 -Chaulieu,50514,299,10.668,1.040,0.942,418,6857 -Jou-sous-Monjou,15081,106,6.271,0.797,0.722,675,6426 -Soyers,52483,59,5.982,0.779,0.705,901,6754 -Erbrée,35105,1689,35.867,1.906,1.726,394,6783 -Jussac,15083,2016,18.628,1.374,1.244,655,6435 -Septème,38480,2064,21.831,1.487,1.346,856,6499 -Roudouallec,56199,719,24.990,1.591,1.441,200,6802 -Gandrange,57242,2846,4.105,0.645,0.584,929,6912 -Subligny,18256,343,17.595,1.335,1.209,684,6700 -Verdigny,18274,312,4.989,0.711,0.644,684,6693 -Darazac,19069,136,14.691,1.220,1.105,632,6452 -Le Noyer,18168,220,20.285,1.434,1.298,672,6694 -Aubussargues,30021,330,8.245,0.914,0.828,808,6322 -Buoux,84023,70,17.597,1.335,1.209,893,6304 -Coulonges-Cohan,2220,436,28.753,1.707,1.546,747,6903 -Lachapelle-aux-Pots,60333,1619,9.958,1.004,0.909,624,6926 -Menetou-Râtel,18144,492,28.023,1.685,1.526,678,6696 -Brignais,69027,11265,10.311,1.022,0.925,834,6510 -Labergement-Sainte-Marie,25320,1176,22.081,1.496,1.355,948,6634 -Le Bourget-du-Lac,73051,4714,21.852,1.488,1.347,924,6512 -Cornillé-les-Caves,49107,472,10.439,1.028,0.931,451,6717 -Arandas,1013,148,14.061,1.194,1.081,891,6538 -Semuy,8411,90,3.955,0.633,0.573,822,6933 -Lagery,51314,210,9.396,0.976,0.884,751,6900 -Sarcy,51523,249,6.885,0.835,0.756,759,6900 -Presly,18185,263,74.544,2.748,2.488,642,6701 -Ivoy-le-Pré,18115,809,99.458,3.174,2.874,670,6697 -Tancon,71533,548,9.498,0.981,0.888,797,6566 -Sainte-Gemme-en-Sancerrois,18208,435,15.014,1.233,1.116,684,6700 -Boisbreteau,16048,140,15.250,1.243,1.125,451,6477 -Couvertpuis,55133,88,8.831,0.946,0.857,868,6833 -Poilly,51437,95,4.408,0.668,0.605,760,6904 -Lhéry,51321,84,6.022,0.781,0.707,755,6903 -Chalais,24095,398,19.139,1.393,1.261,538,6494 -Leyritz-Moncassin,47148,208,20.357,1.436,1.300,472,6363 -Prévelles,72246,219,4.851,0.701,0.635,512,6785 -Magny-lès-Jussey,70320,104,9.419,0.977,0.885,924,6754 -La Chapelle-d'Angillon,18047,636,10.315,1.022,0.925,659,6699 -Hengwiller,67190,188,2.144,0.466,0.422,1017,6849 -Champlin,8100,72,5.971,0.778,0.704,794,6970 -Ambérieu-en-Bugey,1004,14081,24.554,1.577,1.428,887,6541 -Bannay,18020,931,25.528,1.608,1.456,694,6701 -Saint-Philbert-du-Peuple,49311,1297,16.702,1.301,1.178,473,6701 -Ménétréol-sous-Sancerre,18146,314,5.431,0.742,0.672,690,6692 -Thauvenay,18262,335,9.975,1.005,0.910,688,6689 -Ugine,73303,7065,57.390,2.411,2.183,966,6528 -Aujac,30022,179,16.464,1.292,1.170,784,6363 -Sens-Beaujeu,18249,398,21.730,1.484,1.344,673,6692 -Morogues,18156,443,31.014,1.773,1.605,668,6682 -Saint-Jean-de-la-Ruelle,45285,16298,6.097,0.786,0.712,615,6759 -Crézancy-en-Sancerre,18079,483,18.866,1.383,1.252,678,6689 -Saint-Denis-en-Bugey,1345,2293,2.614,0.515,0.466,881,6541 -Champagne,17083,608,19.529,1.407,1.274,395,6534 -Vigoulant,36238,104,9.842,0.999,0.905,630,6597 -Cleyzieu,1107,135,7.724,0.885,0.801,890,6534 -Libourne,33243,24880,20.683,1.448,1.311,444,6426 -Balignicourt,10027,62,13.039,1.149,1.040,805,6829 -Humbligny,18111,194,21.086,1.462,1.324,669,6688 -Château-Gaillard,1089,2080,16.073,1.276,1.155,877,6545 -Planzolles,7176,127,5.347,0.736,0.666,794,6377 -Saint-Rambert-en-Bugey,1384,2310,28.787,1.708,1.546,887,6545 -Martigny,2470,431,16.939,1.310,1.186,782,6972 -Méry-ès-Bois,18149,576,91.509,3.045,2.757,652,6683 -Saint-Éloy-de-Gy,18206,1544,31.522,1.787,1.618,645,6674 -Jeantes,2391,204,15.647,1.259,1.140,775,6969 -Torcieu,1421,725,10.958,1.054,0.954,887,6536 -Pigny,18179,946,8.256,0.915,0.828,659,6673 -Hannappes,8208,144,8.444,0.925,0.838,788,6967 -Allogny,18004,1020,50.600,2.264,2.050,646,6687 -Prez,8344,139,12.290,1.116,1.010,798,6965 -Vaux-en-Bugey,1431,1228,8.300,0.917,0.830,883,6540 -Coingt,2204,68,7.396,0.866,0.784,780,6965 -Rians,18194,980,32.840,1.824,1.651,674,6679 -Seiches-sur-le-Loir,49333,2980,28.998,1.714,1.552,444,6730 -Neuvy-sur-Barangeon,18165,1197,67.236,2.610,2.363,648,6686 -Girondelle,8189,150,11.522,1.080,0.978,800,6976 -Antheny,8015,102,10.147,1.014,0.918,794,6974 -Chaley,1076,137,4.637,0.685,0.620,895,6544 -Gerland,21294,421,20.740,1.450,1.313,851,6670 -Aouste,8016,209,12.712,1.135,1.028,793,6965 -Saint-Romain-de-Lerps,7293,856,14.269,1.202,1.088,839,6431 -Quantilly,18189,466,12.815,1.139,1.031,656,6680 -Hinacourt,2380,26,3.092,0.560,0.507,720,6962 -Estrebay,8154,70,9.369,0.974,0.882,799,6970 -Logny-lès-Aubenton,2435,74,8.241,0.914,0.828,789,6975 -Rumigny,8373,346,17.436,1.329,1.203,793,6970 -La Chapelle-du-Châtelard,1085,387,13.698,1.178,1.067,857,6551 -Leuze,2425,171,10.197,1.016,0.920,785,6976 -Villez-sur-le-Neubourg,27695,284,4.805,0.698,0.632,545,6896 -Besmont,2079,156,15.856,1.267,1.147,781,6967 -Aubenton,2031,654,23.721,1.550,1.403,786,6974 -Foissy-lès-Vézelay,89170,130,5.690,0.759,0.687,755,6704 -Missillac,44098,5271,59.809,2.462,2.229,309,6725 -Jalognes,18116,299,28.362,1.695,1.535,682,6677 -Vasselay,18271,1420,20.151,1.429,1.294,653,6677 -Vinon,18287,302,18.300,1.362,1.233,685,6685 -Bussières,63060,93,13.965,1.190,1.077,673,6554 -Beaumé,2055,95,9.212,0.966,0.875,782,6972 -Chazey-sur-Ain,1099,1513,22.086,1.496,1.355,878,6537 -Argis,1017,438,7.820,0.890,0.806,891,6542 -Jarny,54273,8295,15.634,1.259,1.140,911,6896 -Meximieux,1244,7669,13.575,1.173,1.062,874,6535 -Bruère-Allichamps,18038,565,14.110,1.196,1.083,658,6632 -Bettant,1041,750,3.436,0.590,0.534,881,6541 -Houldizy,8230,366,4.614,0.684,0.619,819,6968 -Douvres,1149,1053,5.200,0.726,0.657,886,6545 -Belmont,32043,151,15.177,1.240,1.123,475,6293 -Leyment,1213,1285,14.302,1.204,1.090,879,6542 -Dignonville,88133,186,5.949,0.776,0.703,958,6800 -Saint-Maurice-de-Rémens,1379,752,10.342,1.024,0.927,876,6544 -Viella,65463,88,3.266,0.575,0.521,457,6200 -Plonévez-Porzay,29176,1769,29.133,1.718,1.556,160,6808 -Lagnieu,1202,7090,27.372,1.665,1.508,885,6536 -Conand,1111,120,15.340,1.247,1.129,895,6531 -La Regrippière,44140,1525,18.093,1.354,1.226,385,6684 -Tenay,1416,1044,13.202,1.157,1.048,897,6540 -Saint-Ciergues,52447,189,12.469,1.124,1.018,867,6758 -Bucilly,2130,189,12.916,1.144,1.036,780,6973 -Lugny-Champagne,18132,144,29.518,1.729,1.565,691,6675 -Graveson,13045,4874,23.828,1.554,1.407,839,6304 -Herry,18110,1002,50.006,2.251,2.038,695,6685 -Courcelles-le-Roi,45110,303,6.299,0.799,0.723,650,6779 -Saint-Bernard,21542,450,3.694,0.612,0.554,854,6677 -Auvillers-les-Forges,8037,875,8.143,0.908,0.822,800,6976 -Any-Martin-Rieux,2020,456,17.802,1.343,1.216,789,6980 -Achères,18001,379,13.015,1.148,1.039,658,6687 -Saint-Laurent-l'Abbaye,58248,216,1.408,0.378,0.342,700,6693 -Bué,18039,310,6.311,0.800,0.724,686,6690 -Serres-sur-Arget,9293,718,17.785,1.342,1.215,581,6209 -Châtillon-la-Palud,1092,1574,14.099,1.195,1.082,876,6544 -Aiguillon,47004,4367,28.388,1.696,1.536,487,6356 -Feux,18094,341,27.631,1.673,1.515,691,6677 -Labry,54286,1550,6.177,0.791,0.716,907,6903 -Chaux-lès-Port,70146,153,4.186,0.651,0.589,927,6740 -Servas,1405,1241,13.035,1.149,1.040,867,6559 -Chaveyriat,1096,1006,16.791,1.304,1.181,861,6568 -Rivière-Saas-et-Gourby,40244,1228,27.458,1.668,1.510,366,6293 -Montcet,1259,675,6.568,0.816,0.739,864,6570 -Vonnas,1457,2929,18.177,1.357,1.229,854,6567 -Henrichemont,18109,1778,25.949,1.621,1.468,661,6688 -Éparcy,2278,31,7.556,0.875,0.792,776,6978 -Clastres,2199,652,8.306,0.917,0.830,715,6959 -Maisoncelle-et-Villers,8268,69,11.199,1.065,0.964,838,6947 -Autreville,2041,815,3.634,0.607,0.550,716,6945 -Groises,18104,135,17.851,1.345,1.218,682,6677 -Dompierre-sur-Mont,39200,237,7.317,0.861,0.780,901,6609 -Parassy,18176,419,26.681,1.644,1.489,665,6677 -Saint-Bonnet-le-Troncy,69183,310,15.508,1.254,1.135,808,6551 -Laon,2408,25193,44.531,2.124,1.923,744,6937 -Montescourt-Lizerolles,2504,1664,6.256,0.796,0.721,720,6959 -Béthancourt-en-Vaux,2081,463,4.307,0.661,0.598,711,6946 -Vignoux-sous-les-Aix,18280,712,15.119,1.238,1.121,661,6674 -Saint-Paul-de-Varax,1383,1502,25.909,1.620,1.467,867,6559 -Neuville-les-Dames,1272,1505,26.275,1.632,1.478,853,6567 -Saint-Pierre-d'Irube,64496,4835,7.820,0.890,0.806,339,6274 -Bure-les-Templiers,21116,136,35.291,1.891,1.712,842,6735 -Malafretaz,1229,1188,9.264,0.969,0.877,864,6586 -La Chapelotte,18051,158,28.899,1.711,1.549,670,6689 -Condren,2212,707,5.621,0.755,0.684,721,6948 -Dury,2273,222,7.739,0.886,0.802,708,6962 -Lucenay-lès-Aix,58146,985,55.955,2.381,2.156,734,6618 -Bénodet,29006,3534,10.428,1.028,0.931,170,6777 -Montigny,18151,384,29.147,1.718,1.556,675,6678 -Vibeuf,76737,614,8.675,0.938,0.849,548,6957 -Montracol,1264,1052,14.681,1.220,1.105,863,6564 -Saint-Denis-lès-Bourg,1344,5667,12.639,1.132,1.025,869,6568 -Aubinges,18016,375,10.915,1.052,0.952,671,6680 -Espinasses,5050,762,13.575,1.173,1.062,957,6379 -Buellas,1065,1767,10.251,1.019,0.923,867,6569 -Remaugies,80667,132,4.161,0.649,0.588,678,6947 -Brametot,76140,203,3.233,0.572,0.518,545,6966 -Aizier,27006,136,2.352,0.488,0.442,527,6928 -Sancerre,18241,1409,16.329,1.286,1.164,688,6690 -Sinceny,2719,2040,13.169,1.155,1.046,722,6941 -Chaumercenne,70142,181,4.961,0.709,0.642,898,6694 -Saint-Palais,18229,623,26.472,1.638,1.483,656,6680 -Havelu,28193,142,3.769,0.618,0.560,593,6856 -Viry-Noureuil,2820,1690,17.811,1.343,1.216,719,6952 -Marsonnas,1236,981,18.359,1.364,1.235,858,6582 -Villequier-Aumont,2807,622,12.350,1.119,1.013,715,6954 -Saint-Georges-sur-Renon,1356,219,5.647,0.756,0.684,858,6558 -Condeissiat,1113,825,21.762,1.485,1.345,858,6562 -Mézériat,1246,2134,19.252,1.397,1.265,861,6573 -Soulières,51558,141,6.069,0.784,0.710,770,6867 -Chalivoy-Milon,18045,438,19.879,1.419,1.285,676,6643 -Chanoz-Châtenay,1084,833,13.362,1.164,1.054,855,6570 -Saint-Rémy,1385,999,7.391,0.865,0.783,868,6566 -Piazzali,2B216,17,0.828,0.290,0.263,1229,6157 -Menetou-Salon,18145,1622,38.188,1.967,1.781,660,6679 -Neuilly-en-Sancerre,18162,256,26.243,1.631,1.477,678,6690 -Saint-Andelain,58228,488,20.487,1.441,1.305,701,6688 -Azy,18019,445,28.010,1.685,1.526,680,6680 -Don,59670,1307,2.311,0.484,0.438,695,7050 -Saint-Sulpice,1387,247,5.173,0.724,0.656,857,6583 -La Rochelle,70450,39,4.273,0.658,0.596,904,6744 -Saint-Martin-le-Châtel,1375,790,12.666,1.133,1.026,866,6577 -Curtafond,1140,770,12.751,1.137,1.029,862,6575 -Saint-Nizier-le-Désert,1381,914,25.004,1.592,1.441,869,6553 -Babœuf,60037,526,7.251,0.857,0.776,705,6942 -Neuvy-Deux-Clochers,18163,289,16.760,1.303,1.180,678,6689 -Venteuges,43256,351,39.574,2.002,1.813,739,6434 -Bréville-les-Monts,14106,652,4.810,0.698,0.632,464,6908 -Confrançon,1115,1331,18.183,1.357,1.229,856,6576 -Étréchy,18090,456,32.495,1.815,1.643,683,6676 -Maucourt,60389,251,3.116,0.562,0.509,707,6947 -Jussy,2397,1246,13.465,1.168,1.058,719,6957 -Ugny-le-Gay,2754,180,6.003,0.780,0.706,710,6950 -Saint-Germain-sur-Renon,1359,235,16.456,1.291,1.169,858,6552 -Tracy-sur-Loire,58295,958,22.696,1.516,1.373,694,6689 -Vouzeron,18290,560,52.844,2.314,2.095,634,6687 -Marlieux,1235,1068,17.221,1.321,1.196,859,6550 -Benay,2066,208,6.802,0.830,0.751,724,6962 -Saint-Jean-de-Buèges,34264,191,16.914,1.309,1.185,747,6305 -Selles-Saint-Denis,41241,1340,51.205,2.278,2.063,614,6695 -Prey,27478,951,8.038,0.902,0.817,569,6876 -Romorantin-Lanthenay,41194,17946,45.118,2.138,1.936,608,6693 -Saint-Pierre-de-Chérennes,38443,468,11.847,1.096,0.992,892,6449 -Veaugues,18272,654,27.969,1.683,1.524,680,6682 -Saint-Martin-d'Auxigny,18223,2369,24.324,1.570,1.422,652,6683 -Nançay,18159,853,106.197,3.280,2.970,633,6693 -Les Granges,10168,75,1.643,0.408,0.369,778,6773 -Presle,73207,411,11.590,1.084,0.981,946,6490 -Vandeins,1429,685,9.339,0.973,0.881,859,6571 -Puybrun,46229,981,4.401,0.668,0.605,604,6427 -Ognes,2566,1140,6.185,0.792,0.717,713,6946 -Villeherviers,41282,475,38.937,1.986,1.798,614,6698 -Seraucourt-le-Grand,2710,774,10.458,1.029,0.932,714,6967 -Artagnan,65035,513,5.008,0.712,0.645,465,6260 -Folembray,2318,1395,8.939,0.952,0.862,721,6942 -Auvillars,14033,235,11.790,1.093,0.990,490,6902 -Hibarette,65220,239,1.559,0.397,0.359,459,6235 -Besmé,2078,157,2.704,0.523,0.474,712,6937 -Maidières,54332,1535,1.812,0.428,0.388,922,6870 -Propières,69161,450,16.282,1.284,1.163,810,6568 -Fressenneville,80360,2219,8.718,0.940,0.851,596,6998 -Coussan,65153,119,3.181,0.568,0.514,474,6243 -Cuts,60189,969,10.829,1.047,0.948,707,6935 -Neuflieux,2542,96,1.924,0.442,0.400,712,6947 -Marest-Dampcourt,2461,361,8.321,0.918,0.831,709,6944 -La Celle-Condé,18043,205,28.826,1.709,1.547,640,6635 -Senneçay,18248,467,14.604,1.216,1.101,658,6647 -Aignan,32001,732,32.143,1.805,1.634,470,6293 -Saint-Simon,2694,633,6.368,0.803,0.727,715,6961 -Essigny-le-Grand,2287,1039,13.334,1.162,1.052,720,6967 -Annoix,18006,231,12.187,1.111,1.006,666,6654 -Clermont,9097,114,7.416,0.867,0.785,561,6216 -Tergnier,2738,13541,18.328,1.363,1.234,719,6952 -Bichancourt,2086,1074,7.790,0.888,0.804,715,6944 -Frières-Faillouël,2336,1006,15.379,1.248,1.130,720,6953 -Muille-Villette,80579,823,6.606,0.818,0.741,706,6957 -Savigny-en-Septaine,18247,704,22.861,1.522,1.378,665,6658 -Caillouël-Crépigny,2139,436,6.720,0.825,0.747,709,6945 -Lantan,18121,90,13.659,1.176,1.065,677,6646 -Tanlay,89407,1030,38.662,1.979,1.792,786,6748 -Tugny-et-Pont,2752,276,5.926,0.775,0.702,711,6965 -Bédouès-Cocurès,48050,481,29.386,1.726,1.563,756,6358 -Saint-Martin-des-Champs,29254,4606,15.710,1.262,1.143,196,6856 -Cassagnoles,30071,401,5.195,0.726,0.657,789,6324 -Theneuille,3282,366,39.915,2.011,1.821,695,6610 -Saint-Igny-de-Vers,69209,588,27.219,1.661,1.504,811,6568 -Mondescourt,60410,248,3.233,0.572,0.518,707,6946 -Saint-André-le-Bouchoux,1335,384,9.301,0.971,0.879,862,6561 -Ranchal,69164,317,15.154,1.239,1.122,807,6557 -Saint-Nizier-d'Azergues,69229,792,24.192,1.566,1.418,811,6559 -Varennes-sous-Dun,71559,590,17.637,1.337,1.211,803,6579 -Bray-Saint-Christophe,2117,68,2.922,0.544,0.493,709,6965 -Chauny,2173,11975,13.321,1.162,1.052,716,6944 -Saint-Étienne-aux-Clos,19199,227,35.274,1.891,1.712,658,6500 -Wavrechain-sous-Denain,59651,1654,2.371,0.490,0.444,731,7027 -La Charmée,71102,698,14.040,1.193,1.080,839,6624 -Dirol,58098,117,9.628,0.988,0.895,748,6689 -Sorcy-Saint-Martin,55496,1101,21.695,1.483,1.343,896,6847 -Saint-Clément-de-Vers,69186,227,8.947,0.952,0.862,807,6573 -Saint-Germain-la-Montagne,42229,241,12.577,1.129,1.022,806,6566 -Saint-Georges-le-Gaultier,72282,532,23.436,1.541,1.395,467,6806 -Saint-Vincent-de-Reins,69240,644,13.803,1.183,1.071,810,6557 -Morteaux-Coulibœuf,14452,638,11.893,1.098,0.994,476,6876 -Monnetay,39343,14,2.532,0.507,0.459,893,6600 -Ternant-les-Eaux,63429,39,3.553,0.600,0.543,709,6486 -Pithon,2604,83,2.446,0.498,0.451,707,6963 -Anglure-sous-Dun,71008,158,7.107,0.849,0.769,807,6573 -Le Cergne,42033,652,5.916,0.774,0.701,802,6560 -Cinqueux,60154,1541,6.763,0.828,0.750,665,6912 -Saint-Denis-de-Palin,18204,315,30.969,1.771,1.603,666,6650 -Champagny-sous-Uxelles,71080,97,5.037,0.714,0.646,834,6609 -Grandham,8197,41,6.084,0.785,0.711,833,6913 -Saint-Brevin-les-Pins,44154,13778,27.203,1.660,1.503,313,6701 -Obermorschwiller,68245,404,6.084,0.785,0.711,1026,6736 -Aiguèze,30005,214,20.099,1.427,1.292,823,6354 -Belleroche,42014,312,14.008,1.191,1.078,808,6566 -Assevent,59021,1837,1.870,0.435,0.394,773,7021 -Le Compas,23066,221,16.870,1.307,1.183,657,6543 -Le Pondy,18183,141,6.616,0.819,0.742,671,6634 -Aigueperse,69002,251,12.941,1.145,1.037,810,6575 -Manicamp,2456,312,10.307,1.022,0.925,713,6943 -Fussy,18097,1981,11.235,1.067,0.966,658,6672 -Chavannes,18063,175,24.105,1.563,1.415,655,6644 -Vallecalle,2B333,138,6.969,0.840,0.761,1218,6189 -Saint-Racho,71473,182,10.588,1.036,0.938,805,6577 -Pierremande,2599,285,7.595,0.877,0.794,716,6940 -Flavy-le-Meldeux,60236,210,3.197,0.569,0.515,704,6955 -Beaugies-sous-Bois,60052,102,3.863,0.626,0.567,708,6948 -Sancourt,80726,264,7.234,0.856,0.775,704,6965 -Castelnau-de-Médoc,33104,4623,23.941,1.557,1.410,397,6443 -Guiscard,60291,1800,20.542,1.443,1.307,702,6953 -Vieux-Berquin,59615,2512,26.018,1.624,1.470,677,7067 -Contres,18071,33,16.000,1.273,1.153,661,6643 -Manigod,74160,1004,44.002,2.111,1.911,967,6532 -Saint-Caprais,18201,770,14.583,1.216,1.101,648,6649 -Ladoix-Serrigny,21606,1835,24.879,1.588,1.438,842,6666 -Chezal-Benoît,18065,835,46.542,2.172,1.967,627,6637 -Saint-Aoustrille,36179,220,19.878,1.419,1.285,619,6651 -Primelles,18188,248,26.924,1.652,1.496,643,6643 -Flines-lès-Mortagne,59238,1655,14.521,1.213,1.098,735,7043 -Saint-Germain-du-Puy,18213,5081,22.046,1.495,1.354,659,6669 -Gerville,76300,411,3.056,0.556,0.503,508,6958 -Nérac,47195,6898,62.746,2.521,2.283,485,6337 -Callian,83029,3165,25.514,1.608,1.456,1002,6280 -Cugny,2246,601,9.386,0.975,0.883,712,6954 -Saint-Étienne-de-Puycorbier,24399,109,13.531,1.171,1.060,492,6446 -Moulins-sur-Yèvre,18158,849,15.370,1.248,1.130,664,6669 -Rochetaillée-sur-Saône,69168,1518,1.383,0.374,0.339,843,6528 -Bœrsch,67052,2432,23.710,1.550,1.403,1019,6827 -Barjols,83012,3015,30.331,1.753,1.587,941,6274 -Pasques,21478,292,20.475,1.440,1.304,837,6698 -Vidauban,83148,11545,76.493,2.784,2.521,987,6263 -Contescourt,2214,61,3.463,0.592,0.536,718,6965 -Néoules,83088,2692,25.173,1.597,1.446,949,6248 -Villemandeur,45338,6864,11.406,1.075,0.973,676,6765 -Tigy,45324,2321,47.090,2.184,1.977,642,6747 -Meillant,18142,686,41.573,2.052,1.858,665,6637 -Chambon,18046,173,14.096,1.195,1.082,648,6629 -Sainte-Solange,18235,1145,31.827,1.796,1.626,663,6673 -Farges-en-Septaine,18092,1026,24.997,1.591,1.441,672,6666 -Coquainvilliers,14177,859,11.986,1.102,0.998,497,6903 -Crézançay-sur-Cher,18078,55,7.867,0.893,0.809,649,6634 -Vorly,18288,235,18.686,1.376,1.246,660,6646 -Bourges,18033,65555,68.682,2.638,2.388,658,6659 -Morthomiers,18157,760,14.746,1.222,1.106,643,6662 -Raymond,18191,209,9.339,0.973,0.881,676,6651 -Péas,51426,67,7.723,0.885,0.801,757,6847 -Provin,59477,4242,3.389,0.586,0.531,694,7045 -Villeneuve-sur-Cher,18285,464,26.558,1.640,1.485,638,6661 -Saint-Julien-en-Beauchêne,5146,123,59.416,2.454,2.222,910,6399 -Mareuil-sur-Arnon,18137,546,26.369,1.635,1.480,633,6643 -Poule-les-Écharmeaux,69160,1099,31.299,1.781,1.613,809,6561 -Azolette,69016,121,4.259,0.657,0.595,809,6565 -Combeaufontaine,70165,539,12.271,1.115,1.010,918,6740 -Saint-Igny-de-Roche,71428,757,7.981,0.899,0.814,800,6568 -Châtenay,71116,163,8.285,0.916,0.829,808,6576 -Landogne,63186,237,17.584,1.335,1.209,676,6532 -Abbécourt,2001,496,5.989,0.779,0.705,714,6943 -Annois,2019,365,5.962,0.777,0.704,712,6954 -Liginiac,19113,583,28.710,1.706,1.545,650,6480 -Saint-Michel-de-Volangis,18226,476,17.483,1.331,1.205,659,6673 -Varesnes,60655,371,9.122,0.961,0.870,705,6938 -Montlouis,18152,110,19.251,1.397,1.265,645,6635 -Bassoles-Aulers,2052,143,7.094,0.848,0.768,727,6936 -Lantic,22117,1656,15.923,1.270,1.150,268,6849 -Cerbois,18044,433,18.561,1.371,1.241,630,6666 -Morlincourt,60431,525,3.301,0.578,0.523,704,6940 -Locmélar,29131,466,15.953,1.271,1.151,178,6843 -Limeux,18128,160,13.359,1.163,1.053,636,6664 -Villate,31580,915,1.804,0.428,0.388,569,6263 -Ségry,36215,515,33.878,1.853,1.678,636,6646 -Vallenay,18270,740,26.019,1.624,1.470,652,6626 -La Celle,18042,350,12.786,1.138,1.030,660,6627 -Montfort-en-Chalosse,40194,1183,11.577,1.083,0.981,391,6295 -Appilly,60021,537,4.492,0.675,0.611,708,6943 -Frontignan-Savès,31201,68,2.833,0.536,0.485,530,6258 -Villabon,18282,570,18.443,1.367,1.238,673,6666 -Thaumiers,18261,416,27.699,1.675,1.517,671,6637 -Trouy,18267,3966,23.495,1.543,1.397,649,6656 -Escoville,14246,801,5.182,0.725,0.656,462,6905 -Saint-Paul-aux-Bois,2686,396,11.088,1.060,0.960,716,6940 -Belmont-de-la-Loire,42015,1522,23.846,1.554,1.407,801,6564 -Magny-Jobert,70319,109,3.732,0.615,0.557,971,6735 -Flavy-le-Martel,2315,1684,12.836,1.140,1.032,713,6953 -Rouge-Perriers,27498,368,4.156,0.649,0.588,541,6895 -Quincy,18190,866,18.320,1.362,1.233,637,6668 -Saint-Florent-sur-Cher,18207,6618,22.492,1.510,1.367,646,6655 -Eppeville,80274,1825,4.938,0.707,0.640,702,6960 -Guivry,2362,246,7.198,0.854,0.773,707,6950 -Mussy-sous-Dun,71327,348,8.775,0.943,0.854,801,6573 -Saint-Bonnet-des-Bruyères,69182,356,21.265,1.468,1.329,811,6578 -Remigny,2639,357,10.056,1.009,0.914,721,6956 -Lafraye,60339,368,5.556,0.750,0.679,642,6935 -Bellefond,21059,861,2.467,0.500,0.453,857,6701 -Ham,80410,4640,9.719,0.992,0.898,707,6960 -Liez,2431,400,5.504,0.747,0.676,723,6956 -Venesmes,18273,823,31.900,1.798,1.628,643,6638 -Écoche,42086,548,11.118,1.061,0.961,799,6561 -Unchair,51586,165,3.700,0.612,0.554,753,6909 -Le Subdray,18255,942,20.535,1.442,1.306,649,6656 -Tribehou,50606,540,10.017,1.007,0.912,388,6909 -Happencourt,2367,135,5.200,0.726,0.657,712,6965 -Osmoy,18174,275,23.004,1.527,1.383,663,6660 -Commenchon,2207,210,3.361,0.584,0.529,710,6950 -Villeselve,60693,416,6.925,0.838,0.759,707,6954 -Tanneron,83133,1619,54.278,2.345,2.123,1016,6286 -Grandrû,60287,342,7.570,0.876,0.793,707,6947 -Villers-Saint-Christophe,2815,439,8.937,0.952,0.862,706,6966 -Quesmy,60519,183,4.847,0.701,0.635,704,6947 -La Compôe,73090,253,7.521,0.873,0.790,946,6514 -Saint-Pierre-d'Alvey,73271,283,7.710,0.884,0.800,915,6507 -Brouchy,80144,519,8.119,0.907,0.821,707,6956 -Bannegon,18021,266,21.513,1.476,1.336,681,6632 -Porcaro,56180,722,15.607,1.258,1.139,310,6769 -Pontoise-lès-Noyon,60507,463,6.645,0.821,0.743,705,6938 -La Clayette,71133,1677,3.129,0.563,0.510,800,6576 -Chauffailles,71120,3717,22.766,1.519,1.375,802,6566 -Bourguignon-sous-Coucy,2107,101,2.813,0.534,0.483,710,6938 -Aghione,2B002,238,33.847,1.852,1.677,1235,6130 -Lamorville,55274,286,35.079,1.885,1.707,892,6881 -Jussy-Champagne,18119,190,27.767,1.677,1.518,675,6651 -Pleumeleuc,35227,3270,19.706,1.413,1.279,338,6797 -Caumont,2145,552,5.770,0.765,0.693,712,6947 -Béhéricourt,60059,211,5.208,0.726,0.657,703,6945 -Salency,60603,887,7.824,0.890,0.806,705,6941 -Mortagne-sur-Gironde,17248,911,34.574,1.872,1.695,406,6494 -Quierzy,2631,425,8.275,0.916,0.829,709,6942 -Fouquenies,60250,426,6.350,0.802,0.726,629,6931 -Vénissieux,69259,65405,15.446,1.251,1.133,847,6516 -Sainte-Foy-l'Argentière,69201,1286,1.565,0.398,0.360,815,6513 -Messimy,69131,3371,11.102,1.061,0.961,833,6513 -Grézieu-la-Varenne,69094,5629,7.497,0.872,0.790,828,6518 -Lunery,18133,1541,32.884,1.825,1.652,640,6649 -Saint-Forgeot,71414,481,16.079,1.276,1.155,800,6656 -Lissay-Lochy,18129,224,22.553,1.512,1.369,654,6656 -Hambers,53113,608,26.147,1.628,1.474,445,6804 -Villecelin,18283,99,9.487,0.980,0.887,642,6638 -Sainte-Vaubourg,8398,86,6.898,0.836,0.757,815,6929 -Champs,2159,281,9.237,0.967,0.876,721,6939 -Beuvron-en-Auge,14070,191,9.762,0.995,0.901,480,6903 -Saint-Fons,69199,18566,6.033,0.782,0.708,843,6511 -Chaponost,69043,8577,16.260,1.284,1.163,835,6512 -Châteauneuf-sur-Cher,18058,1456,21.900,1.490,1.349,650,6644 -Mons-en-Barœul,59410,20855,2.888,0.541,0.490,708,7061 -Cornusse,18072,270,19.875,1.419,1.285,678,6653 -Sainte-Cérotte,72272,317,14.392,1.208,1.094,527,6760 -Saint-Ambroix,18198,369,31.840,1.796,1.626,629,6651 -Saint-Bonnet,16303,402,17.796,1.343,1.216,456,6493 -Ollezy,2570,187,5.362,0.737,0.667,711,6960 -Brétigny,60105,408,5.226,0.728,0.659,710,6938 -Avord,18018,2606,28.255,1.692,1.532,670,6660 -Templemars,59585,3356,4.602,0.683,0.618,705,7052 -Saint-Julien-les-Rosiers,30274,3330,14.105,1.195,1.082,787,6344 -Le Vézier,51618,193,12.372,1.120,1.014,735,6858 -Bruyères-sur-Fère,2127,185,9.020,0.956,0.866,731,6900 -Barville,27042,64,2.684,0.521,0.472,516,6898 -Oulchy-la-Ville,2579,120,7.269,0.858,0.777,724,6903 -Fouligny,57230,195,6.031,0.782,0.708,958,6895 -La Champenoise,36037,272,44.689,2.128,1.927,610,6645 -Nogent-sur-Vernisson,45229,2539,33.433,1.841,1.667,676,6748 -Courzieu,69067,1094,26.862,1.650,1.494,822,6521 -Montromant,69138,457,11.141,1.062,0.962,822,6513 -Plaimpied-Givaudins,18180,1979,41.095,2.041,1.848,660,6653 -Bron,69029,41060,10.304,1.022,0.925,849,6515 -Saint-Préjet-d'Allier,43220,159,24.329,1.570,1.422,753,6426 -Fouesnant,29058,9520,32.517,1.815,1.643,177,6757 -Saint-Baudel,18199,248,30.303,1.752,1.586,635,6636 -Chahaignes,72052,701,22.633,1.514,1.371,516,6745 -Sainte-Thorette,18237,477,26.424,1.636,1.481,644,6662 -Pleumeur-Gautier,22199,1233,19.274,1.397,1.265,253,6876 -Quédillac,35234,1184,26.852,1.649,1.493,316,6803 -Tocqueville,27645,155,2.504,0.504,0.456,526,6925 -Francheville,69089,14278,8.251,0.914,0.828,834,6517 -Xaintray,79357,223,11.200,1.065,0.964,434,6603 -Ineuil,18114,244,27.496,1.669,1.511,647,6633 -Mialet,30168,622,30.930,1.770,1.603,773,6341 -Fressies,59255,566,4.736,0.693,0.627,713,7018 -Poisieux,18182,222,10.480,1.030,0.933,631,6657 -Champagnac,17082,525,12.935,1.145,1.037,439,6487 -Saint-Germain-des-Bois,18212,626,29.109,1.717,1.555,657,6647 -Longuyon,54322,5386,30.042,1.745,1.580,889,6927 -Montreuil-sur-Thonnance,52337,63,8.032,0.902,0.817,865,6819 -Maclas,42129,1808,10.259,1.020,0.924,833,6474 -Laveline-du-Houx,88263,223,8.334,0.919,0.832,977,6790 -Roches-sur-Marne,52429,554,7.898,0.895,0.810,845,6834 -Oulchy-le-Château,2580,826,15.106,1.237,1.120,731,6900 -Channay-sur-Lathan,37055,836,29.203,1.720,1.557,491,6715 -Saponay,2699,289,10.069,1.010,0.914,735,6904 -Mont-lès-Neufchâteau,88308,300,11.491,1.079,0.977,895,6811 -Souligny,10373,413,10.614,1.037,0.939,770,6788 -Génolhac,30130,844,17.299,1.324,1.199,776,6359 -Parnay,18177,65,17.429,1.329,1.203,665,6637 -Cogny,18068,37,16.974,1.311,1.187,671,6640 -Brussieu,69031,1373,6.818,0.831,0.752,816,6517 -Étréchy,51239,107,6.695,0.824,0.746,770,6863 -Cornillon,30096,922,15.558,1.256,1.137,819,6345 -Bengy-sur-Craon,18027,666,35.917,1.908,1.728,683,6657 -Oullins,69149,26512,4.380,0.666,0.603,838,6515 -Mecé,35170,605,16.215,1.282,1.161,381,6799 -Montazeau,24288,301,13.992,1.191,1.078,473,6429 -La Mulatière,69142,6320,1.842,0.432,0.391,840,6515 -Le Cannet-des-Maures,83031,4328,73.913,2.737,2.478,968,6264 -Évigny,8160,191,4.382,0.666,0.603,821,6959 -Preuilly,18186,446,15.191,1.241,1.124,637,6664 -Argenton,47013,311,12.175,1.111,1.006,463,6371 -Saint-Genis-Laval,69204,21545,12.917,1.144,1.036,840,6509 -Sainte-Foy-lès-Lyon,69202,21995,6.841,0.833,0.754,838,6515 -Charmois-devant-Bruyères,88091,395,6.675,0.822,0.744,966,6794 -Ballots,53018,1275,36.084,1.912,1.731,394,6766 -Brécy,18035,982,40.152,2.017,1.826,673,6666 -Saint-Martin-de-Fugères,43210,218,20.970,1.458,1.320,777,6424 -Lugarde,15110,147,13.432,1.167,1.057,682,6467 -Cailly,76152,780,5.517,0.748,0.677,572,6943 -Les Charmontois,51132,119,14.740,1.222,1.106,844,6876 -Braye-en-Laonnois,2115,211,8.202,0.912,0.826,745,6925 -Craponne,69069,11158,4.708,0.691,0.626,836,6519 -Levet,18126,1397,26.001,1.623,1.469,657,6647 -Jumigny,2396,64,2.507,0.504,0.456,752,6924 -Farges-Allichamps,18091,241,8.314,0.918,0.831,653,6627 -Cerny-en-Laonnois,2150,65,7.307,0.860,0.779,751,6927 -Rozet-Saint-Albin,2662,308,8.022,0.902,0.817,724,6899 -Chapdes-Beaufort,63085,1079,31.934,1.799,1.629,688,6535 -Saint-Cirgues-de-Jordanne,15178,133,16.222,1.282,1.161,668,6441 -Seringes-et-Nesles,2713,280,13.680,1.177,1.066,739,6903 -Leuilly-sous-Coucy,2423,411,12.715,1.135,1.028,725,6929 -Chamouille,2158,289,3.309,0.579,0.524,748,6932 -Lanmeur,29113,2195,26.522,1.639,1.484,203,6856 -Wœlfling-lès-Sarreguemines,57750,750,6.248,0.796,0.721,1006,6893 -Soye-en-Septaine,18254,581,18.948,1.386,1.255,665,6658 -Pancy-Courtecon,2583,58,6.232,0.795,0.720,746,6927 -Monceau-lès-Leups,2492,476,13.407,1.166,1.056,734,6953 -Auxange,39031,201,5.162,0.723,0.655,903,6678 -Barisis-aux-Bois,2049,743,14.930,1.230,1.114,721,6943 -Chaillevois,2155,178,2.222,0.474,0.429,738,6934 -Athies-sous-Laon,2028,2600,15.495,1.253,1.134,748,6943 -Lierval,2429,115,3.868,0.626,0.567,744,6933 -Sainte-Croix,2675,126,3.375,0.585,0.530,756,6932 -Colligis-Crandelain,2205,241,6.756,0.827,0.749,746,6933 -Saint-Vitte,18238,132,16.698,1.301,1.178,660,6604 -Laniscourt,2407,177,3.002,0.552,0.500,740,6939 -Chivy-lès-Étouvelles,2191,512,3.529,0.598,0.541,741,6936 -Bourguignon-sous-Montbavin,2108,155,1.947,0.444,0.402,739,6936 -Verneuil-sous-Coucy,2786,127,4.639,0.686,0.621,723,6937 -Courtrizy-et-Fussigny,2229,65,4.247,0.656,0.594,756,6935 -Allemant,2010,175,5.161,0.723,0.655,732,6930 -Arçay,18008,515,18.435,1.367,1.238,648,6655 -Saint-Loup-des-Chaumes,18221,301,18.848,1.382,1.251,655,6635 -Ardenais,18010,204,17.590,1.335,1.209,652,6620 -Gron,18105,475,26.801,1.648,1.492,678,6667 -Rolbing,57590,247,6.008,0.780,0.706,1025,6905 -Salavre,1391,279,7.789,0.888,0.804,882,6589 -Lageon,79145,351,14.064,1.194,1.081,450,6629 -Crosses,18081,385,26.864,1.650,1.494,664,6657 -Saint-Maur,18225,289,26.107,1.626,1.472,644,6612 -Cornod,39166,221,14.067,1.194,1.081,894,6580 -Trayes,79332,128,7.183,0.853,0.772,434,6622 -Montagna-le-Reconduit,39346,118,5.447,0.743,0.673,885,6597 -Vesdun,18278,575,49.960,2.250,2.037,661,6605 -Bouzais,18034,318,3.342,0.582,0.527,661,6624 -Festieux,2309,677,6.690,0.823,0.745,756,6938 -Marboz,1232,2226,40.332,2.022,1.831,870,6586 -Filain,2311,130,4.674,0.688,0.623,739,6926 -Quincy-Basse,2632,61,3.945,0.632,0.572,729,6934 -Secenans,70484,179,2.878,0.540,0.489,967,6722 -Villemotier,1445,677,13.870,1.185,1.073,878,6582 -Montrevel,39363,94,6.433,0.807,0.731,893,6595 -Nozières,18169,217,10.398,1.026,0.929,659,6627 -Sivry-Ante,51537,180,21.682,1.482,1.342,844,6878 -Le Châtelet,18059,1031,32.690,1.820,1.648,647,6612 -Condal,71143,432,16.593,1.297,1.174,873,6601 -Lételon,3143,113,6.317,0.800,0.724,669,6616 -Piano,2B214,28,3.426,0.589,0.533,1226,6172 -Orcenais,18171,253,18.867,1.383,1.252,658,6622 -Beaupont,1029,685,14.161,1.198,1.085,872,6593 -Coust,18076,448,22.189,1.499,1.357,671,6617 -Braize,3037,267,21.029,1.460,1.322,672,6615 -Beddes,18024,90,13.099,1.152,1.043,638,6613 -Fresnes-sous-Coucy,2333,160,7.224,0.856,0.775,729,6940 -Montfleur,39353,190,7.993,0.900,0.815,888,6582 -Vaudesson,2766,241,8.535,0.930,0.842,736,6933 -Possesse,51442,168,36.172,1.914,1.733,842,6871 -Néret,36138,195,19.203,1.395,1.263,632,6607 -Aubigny-en-Laonnois,2033,106,4.447,0.671,0.608,758,6932 -Courmangoux,1127,505,15.042,1.235,1.118,878,6580 -Sommerance,8425,38,5.140,0.722,0.654,844,6917 -Hallering,57284,109,3.566,0.601,0.544,960,6899 -Gigny,39253,284,16.046,1.275,1.154,890,6600 -Aromas,39018,650,26.092,1.626,1.472,891,6588 -Montlainsia,39273,247,21.384,1.472,1.333,892,6594 -Bény,1038,762,18.287,1.361,1.232,875,6586 -Saint-Pierre-les-Bois,18230,292,20.719,1.449,1.312,648,6621 -Graye-et-Charnay,39261,138,6.317,0.800,0.724,886,6600 -Longessaigne,69120,597,11.969,1.101,0.997,813,6519 -Coligny,1108,1187,16.888,1.308,1.184,877,6593 -Le Brethon,3041,327,44.075,2.113,1.913,679,6615 -Saint-Bonnet-Tronçais,3221,722,28.237,1.691,1.531,679,6615 -Arrancy-sur-Crusne,55013,491,20.117,1.428,1.293,891,6930 -Monampteuil,2490,131,6.082,0.785,0.711,742,6928 -Royaucourt-et-Chailvet,2661,245,3.011,0.552,0.500,739,6934 -Eppes,2282,416,7.751,0.886,0.802,755,6941 -Cormoz,1124,662,19.680,1.412,1.278,872,6598 -Urcel,2755,578,7.313,0.861,0.780,740,6931 -Wissignicourt,2834,160,4.518,0.677,0.613,730,6937 -Champillet,36038,161,6.963,0.840,0.761,632,6604 -Jetterswiller,67229,191,3.516,0.597,0.541,1026,6851 -Vauxaillon,2768,532,14.111,1.196,1.083,731,6933 -Besny-et-Loizy,2080,359,9.648,0.989,0.895,740,6945 -Saulzais-le-Potier,18245,499,33.008,1.829,1.656,661,6608 -Guengat,29066,1759,22.886,1.523,1.379,165,6793 -Les Essards-Taignevaux,39211,262,5.465,0.744,0.674,885,6647 -Mauregny-en-Haye,2472,423,10.576,1.035,0.937,756,6938 -Lussat,23114,436,48.558,2.218,2.008,647,6562 -Villez-sous-Bailleul,27694,312,4.443,0.671,0.608,580,6889 -Coucy-la-Ville,2219,218,6.133,0.788,0.713,726,6937 -Bayonvillers,80058,346,7.969,0.899,0.814,672,6973 -Saint-Hilaire-en-Lignières,18216,503,54.579,2.352,2.130,630,6624 -Marçais,18136,285,29.303,1.723,1.560,651,6627 -Vosbles-Valfin,39583,188,21.647,1.481,1.341,895,6586 -Saint-Christophe-le-Chaudry,18203,105,17.563,1.334,1.208,652,6613 -Pinon,2602,1768,9.702,0.991,0.897,732,6931 -Brancourt-en-Laonnois,2111,707,6.710,0.825,0.747,729,6937 -Épineuil-le-Fleuriel,18089,449,42.602,2.078,1.881,667,6612 -Grosbois-lès-Tichey,21311,78,4.905,0.705,0.638,872,6658 -Fressain,59254,884,6.415,0.806,0.730,712,7020 -Vaucelles-et-Beffecourt,2765,261,4.023,0.638,0.578,741,6937 -Ponthévrard,78499,622,2.648,0.518,0.469,619,6829 -Val-d'Épy,39209,352,25.568,1.610,1.458,883,6587 -Roussillon,84102,1317,30.253,1.751,1.585,884,6310 -Pirajoux,1296,389,13.045,1.150,1.041,875,6588 -Merlieux-et-Fouquerolles,2478,264,5.845,0.770,0.697,735,6937 -Montlevicq,36130,115,18.947,1.386,1.255,632,6610 -Mestes,19135,356,11.506,1.080,0.978,645,6489 -Coucy-le-Château-Auffrique,2217,1025,11.395,1.075,0.973,722,6937 -Trucy,2751,148,3.024,0.554,0.502,744,6932 -Le Clerjus,88108,562,32.733,1.821,1.649,951,6768 -Morlac,18153,330,33.273,1.836,1.662,645,6622 -Maisonnais,18135,239,26.946,1.652,1.496,642,6615 -La Perche,18178,209,10.432,1.028,0.931,667,6617 -Chérêt,2177,144,3.691,0.612,0.554,750,6935 -Prémontré,2619,662,8.315,0.918,0.831,728,6939 -Saint-Georges-de-Poisieux,18209,457,15.948,1.271,1.151,662,6623 -Loye-sur-Arnon,18130,308,34.651,1.874,1.697,657,6617 -Urçay,3293,266,12.593,1.130,1.023,671,6617 -Dramelay,39204,29,6.662,0.822,0.744,892,6593 -Véria,39551,118,10.107,1.012,0.916,886,6601 -Brie,2122,52,2.863,0.539,0.488,735,6946 -Domsure,1147,483,15.290,1.245,1.127,876,6591 -Pontivy,56178,14491,25.107,1.595,1.444,254,6790 -Drevant,18086,558,4.829,0.699,0.633,662,6623 -Saint-Étienne-des-Champs,63339,140,23.700,1.550,1.403,663,6524 -Colombiers,18069,407,9.674,0.990,0.896,668,6623 -La Planée,25459,279,13.021,1.149,1.040,947,6643 -Fellering,68089,1620,21.130,1.463,1.325,1002,6767 -Marigna-sur-Valouse,39312,118,8.538,0.930,0.842,895,6596 -Charnod,39111,40,5.124,0.721,0.653,893,6587 -Arcomps,18009,317,20.607,1.445,1.308,652,6620 -Villechenève,69263,889,14.112,1.196,1.083,808,6524 -Val Suran,39485,797,37.516,1.950,1.766,888,6594 -La Boissière,39062,66,5.358,0.737,0.667,893,6595 -Verjon,1432,278,5.107,0.719,0.651,880,6587 -Saint-Amour,39475,2369,11.609,1.085,0.982,878,6593 -Arlanc,63010,1922,32.178,1.806,1.635,758,6483 -Joux,69102,683,25.055,1.593,1.442,803,6535 -Orgeval,2573,66,2.414,0.495,0.448,750,6935 -Parfondru,2587,355,9.081,0.959,0.868,751,6939 -Faverdines,18093,144,18.857,1.382,1.251,656,6611 -Saint-Jeanvrin,18217,154,17.920,1.347,1.220,643,6615 -Bouconville-Vauclair,2102,185,13.090,1.152,1.043,753,6931 -Ployart-et-Vaurseine,2609,21,4.928,0.707,0.640,754,6932 -Ainay-le-Château,3003,1006,24.293,1.569,1.421,675,6623 -Urciers,36227,246,19.005,1.388,1.257,636,6607 -Les Éparges,55172,69,9.592,0.986,0.893,890,6887 -Martigny-Courpierre,2471,119,4.458,0.672,0.608,751,6932 -Chavignon,2174,817,11.615,1.085,0.982,737,6933 -Saint-Cyr-de-Valorges,42213,301,9.960,1.005,0.910,803,6535 -Vennes,25600,169,7.288,0.859,0.778,969,6678 -Septvaux,2707,172,8.471,0.926,0.838,730,6941 -Landricourt,2406,140,5.797,0.766,0.694,726,6937 -Villard,74301,765,7.406,0.866,0.784,968,6574 -Saint-Forgeux,69200,1493,22.302,1.503,1.361,816,6530 -Flavigny,18095,203,13.391,1.165,1.055,683,6652 -Tarare,69243,10532,14.100,1.195,1.082,813,6533 -Ronno,69169,631,22.977,1.526,1.382,810,6544 -Meaux-la-Montagne,69130,239,9.182,0.965,0.874,808,6551 -Neuville-sur-Ailette,2550,107,4.509,0.676,0.612,751,6929 -Chevregny,2183,190,8.773,0.943,0.854,744,6933 -Neuville-sur-Margival,2551,120,3.674,0.610,0.552,727,6929 -Crécy-au-Mont,2236,354,11.821,1.094,0.991,723,6929 -Étouvelles,2294,213,2.406,0.494,0.447,743,6935 -Saint-Hilaire-de-Gondilly,18215,176,18.777,1.379,1.249,691,6658 -Courbes,2222,30,3.176,0.567,0.513,734,6955 -Coucy-lès-Eppes,2218,623,6.092,0.786,0.712,756,6939 -Jumencourt,2395,150,6.181,0.791,0.716,725,6937 -Pargny-Filain,2589,255,5.029,0.714,0.646,739,6931 -Juvigny,2398,274,13.925,1.188,1.076,724,6926 -Molinchart,2489,331,4.452,0.672,0.608,738,6942 -Presles-et-Thierny,2621,385,8.345,0.920,0.833,746,6933 -Saint-Gobain,2680,2267,29.783,1.737,1.573,726,6946 -Valsonne,69254,932,18.371,1.364,1.235,811,6542 -Dième,69075,194,8.955,0.953,0.863,815,6541 -Aubilly,51020,51,3.209,0.570,0.516,763,6901 -Menetou-Couture,18143,361,29.899,1.741,1.576,697,6663 -Chermizy-Ailles,2178,108,10.923,1.052,0.952,750,6932 -Clacy-et-Thierret,2196,317,4.232,0.655,0.593,741,6941 -Givardon,18102,298,22.204,1.500,1.358,681,6639 -Château-sur-Allier,3064,177,27.933,1.682,1.523,695,6633 -Neuilly-en-Dun,18161,232,30.216,1.750,1.584,687,6634 -Valigny,3296,376,21.000,1.459,1.321,687,6626 -Bertaucourt-Epourdon,2074,609,7.567,0.876,0.793,727,6947 -Danizy,2260,629,4.548,0.679,0.615,731,6952 -Couleuvre,3087,563,54.128,2.342,2.120,698,6619 -Marle,2468,2281,13.815,1.183,1.071,753,6964 -Vereaux,18275,139,23.205,1.533,1.388,686,6642 -Saint-Appolinaire,69181,207,5.727,0.762,0.690,809,6542 -Cublize,69070,1268,15.674,1.260,1.141,805,6548 -Précy,18184,344,14.708,1.221,1.106,694,6663 -Amplepuis,69006,5024,38.780,1.982,1.795,796,6545 -Montrottier,69139,1392,23.063,1.529,1.384,815,6521 -Nouvion-et-Catillon,2559,479,16.706,1.301,1.178,736,6960 -Mornay-Berry,18154,186,9.427,0.977,0.885,688,6664 -Saint-Marcel-l'Éclairé,69225,509,11.862,1.096,0.992,810,6533 -Affoux,69001,358,10.641,1.038,0.940,808,6527 -Thizy-les-Bourgs,69248,6036,44.550,2.125,1.924,805,6549 -Haute-Rivoire,69099,1450,20.638,1.446,1.309,806,6512 -Torteron,18265,800,13.799,1.182,1.070,700,6659 -Marseilles-lès-Aubigny,18139,656,9.881,1.001,0.906,698,6662 -Tendron,18260,95,10.581,1.035,0.937,684,6654 -Saint-Marcouf,50507,342,13.665,1.177,1.066,386,6939 -Brissy-Hamégicourt,2124,654,12.255,1.114,1.009,727,6960 -Le Chautay,18062,305,14.602,1.216,1.101,700,6654 -Montreuil-Bellay,49215,3903,49.398,2.237,2.025,462,6672 -Saint-Laurent-de-Chamousset,69220,1857,17.341,1.326,1.201,812,6516 -Remies,2638,234,9.025,0.956,0.866,739,6952 -Saint-Clément-les-Places,69187,638,12.412,1.121,1.015,809,6517 -Les Sauvages,69174,628,12.523,1.126,1.019,804,6538 -Samoussy,2697,388,25.374,1.603,1.451,758,6944 -Jas,42113,223,6.328,0.801,0.725,804,6516 -Bessais-le-Fromental,18029,323,26.368,1.635,1.480,683,6624 -Renansart,2640,169,8.793,0.944,0.855,732,6957 -Dercy,2261,391,11.457,1.077,0.975,751,6955 -Alaincourt,2009,546,5.992,0.779,0.705,728,6963 -Saint-Jean-la-Bussière,69214,1220,15.638,1.259,1.140,801,6544 -Ourouer-les-Bourdelins,18175,615,25.120,1.595,1.444,687,6642 -La Chapelle-Hugon,18048,391,16.459,1.291,1.169,698,6641 -Sauret-Besserve,63408,168,10.435,1.028,0.931,683,6544 -Mézières-sur-Oise,2483,517,9.659,0.989,0.895,729,6968 -Sainte-Agathe-en-Donzy,42196,127,3.396,0.587,0.531,800,6527 -Monceau-le-Neuf-et-Faucouzy,2491,316,19.883,1.419,1.285,743,6965 -La Neuville-Housset,2547,66,5.163,0.723,0.655,753,6964 -Isle-et-Bardais,3130,266,45.065,2.137,1.935,682,6624 -Argenvières,18012,471,14.870,1.227,1.111,701,6673 -Cérilly,3048,1313,71.156,2.685,2.431,683,6611 -Verneuil-sur-Serre,2787,249,7.949,0.897,0.812,750,6948 -La Barre,39039,229,3.308,0.579,0.524,904,6678 -Villequiers,18286,483,30.025,1.744,1.579,688,6664 -Croisy,18080,161,13.386,1.165,1.055,684,6650 -Garigny,18099,248,19.899,1.420,1.286,692,6663 -Moÿ-de-l'Aisne,2532,968,6.230,0.795,0.720,727,6962 -Machézal,42128,388,14.075,1.194,1.081,800,6540 -Couy,18077,351,18.518,1.370,1.240,685,6669 -Nouvion-le-Comte,2560,253,8.058,0.904,0.818,732,6957 -Urvillers,2756,648,13.811,1.183,1.071,722,6968 -Mortiers,2529,188,6.477,0.810,0.733,747,6958 -Ostreville,62641,254,3.931,0.631,0.571,656,7033 -Saint-Clément-sur-Valsonne,69188,903,14.590,1.216,1.101,813,6539 -Chaumoux-Marcilly,18061,97,16.962,1.311,1.187,686,6672 -Madecourt,88279,55,4.481,0.674,0.610,932,6797 -Montchal,42148,497,8.881,0.949,0.859,802,6526 -Mougins,6085,19047,26.080,1.626,1.472,1021,6282 -Grandris,69093,1163,15.152,1.239,1.122,811,6548 -Chevillard,1101,153,6.635,0.820,0.742,901,6559 -Jussy-le-Chaudrier,18120,617,25.622,1.611,1.459,698,6669 -Amigny-Rouy,2014,741,13.133,1.154,1.045,724,6946 -Missy-lès-Pierrepont,2486,110,6.737,0.826,0.748,758,6946 -Barenton-sur-Serre,2048,130,7.999,0.900,0.815,748,6951 -Saint-Gérand-de-Vaux,3234,386,40.470,2.025,1.833,730,6591 -Saint-Aignan-des-Noyers,18196,99,11.118,1.061,0.961,688,6627 -Lazenay,18124,344,31.168,1.777,1.609,630,6668 -Essertines-en-Donzy,42090,489,7.090,0.848,0.768,805,6520 -Tossiat,1422,1366,10.191,1.016,0.920,879,6564 -Vierzon,18279,26365,74.774,2.752,2.492,635,6683 -Neure,3198,184,12.136,1.109,1.004,697,6629 -Sermur,23171,133,19.797,1.416,1.282,655,6544 -Barenton-Cel,2047,117,6.703,0.824,0.746,747,6949 -Berlancourt,2068,113,5.229,0.728,0.659,756,6966 -Ygrande,3320,775,53.317,2.324,2.104,691,6606 -Serrières-sur-Ain,1404,131,8.358,0.920,0.833,890,6567 -Charentonnay,18053,287,21.930,1.491,1.350,688,6672 -Travecy,2746,677,14.519,1.213,1.098,722,6954 -Voharies,2823,73,3.380,0.585,0.530,758,6967 -Grossouvre,18106,278,15.912,1.270,1.150,693,6643 -Villers-sur-le-Roule,27691,841,4.327,0.662,0.599,579,6901 -Germigny-l'Exempt,18101,309,28.549,1.701,1.540,694,6644 -Saint-Nicolas-aux-Bois,2685,120,6.605,0.818,0.741,733,6943 -Pargny-les-Bois,2591,129,6.937,0.838,0.759,746,6958 -Berthenicourt,2075,202,3.134,0.564,0.511,725,6966 -Izernore,1192,2257,21.333,1.470,1.331,895,6571 -Saint-Aubin-sur-Mer,14562,2405,3.031,0.554,0.502,453,6918 -Ceyzériat,1072,3138,9.231,0.967,0.876,880,6569 -Béruges,86024,1424,32.920,1.826,1.653,483,6609 -Sagonne,18195,186,18.973,1.386,1.255,684,6640 -Sons-et-Ronchères,2727,238,9.273,0.969,0.877,748,6961 -Saint-Éloy-d'Allier,3228,45,12.871,1.142,1.034,649,6598 -Châtillon-en-Bazois,58065,904,19.334,1.400,1.268,753,6660 -Anguilcourt-le-Sart,2017,313,9.189,0.965,0.874,731,6958 -Feusines,36073,208,12.561,1.128,1.021,630,6604 -Cubnezais,33142,1457,10.348,1.024,0.927,432,6446 -Sidiailles,18252,304,32.057,1.802,1.632,648,6597 -Nassigny,3193,179,18.038,1.352,1.224,671,6598 -Beautor,2059,2697,7.536,0.874,0.791,726,6950 -Saint-Saturnin,18234,420,39.694,2.005,1.815,639,6598 -Lizeray,36098,84,35.770,1.904,1.724,619,6652 -Joucas,84057,337,8.436,0.925,0.838,879,6317 -Vesles-et-Caumont,2790,227,10.308,1.022,0.925,755,6954 -Saint-Bonnet-du-Gard,30235,844,6.760,0.828,0.750,823,6317 -Grandlup-et-Fay,2353,308,20.605,1.445,1.308,752,6952 -Chevresis-Monceau,2184,360,17.162,1.319,1.194,743,6965 -Montbéliardot,25389,114,3.889,0.628,0.569,976,6681 -Brissay-Choigny,2123,300,8.806,0.945,0.856,726,6959 -Fressancourt,2335,195,2.534,0.507,0.459,730,6948 -Thénioux,18263,667,18.704,1.377,1.247,617,6683 -Truinas,26356,122,8.592,0.933,0.845,867,6388 -Diou,36065,250,16.682,1.300,1.177,626,6661 -Bohas-Meyriat-Rignat,1245,895,23.429,1.541,1.395,886,6561 -Thizay,36222,233,16.788,1.304,1.181,618,6646 -Lury-sur-Arnon,18134,673,13.872,1.186,1.074,627,6671 -Montigny-sur-Crécy,2517,328,8.503,0.928,0.840,743,6960 -Gizy,2346,677,10.363,1.025,0.928,753,6946 -Assis-sur-Serre,2027,226,8.061,0.904,0.818,741,6951 -Saint-Martin-du-Frêne,1373,1063,19.511,1.406,1.273,895,6564 -Versigny,2788,472,12.916,1.144,1.036,734,6949 -Charmes,2165,1642,3.668,0.610,0.552,728,6949 -Froidmont-Cohartille,2338,266,8.839,0.946,0.857,754,6954 -Hourges,51294,82,4.309,0.661,0.598,757,6908 -Sembleçay,36217,102,8.169,0.910,0.824,600,6682 -Drom,1150,217,7.838,0.891,0.807,884,6572 -Ribeauville,2647,66,3.622,0.606,0.549,742,6992 -Aisy-sur-Armançon,89004,248,18.121,1.355,1.227,792,6732 -Achery,2002,602,6.954,0.839,0.760,730,6956 -La Ferté-Chevresis,2306,558,24.144,1.564,1.416,736,6959 -Maray,41122,232,28.531,1.700,1.539,616,6684 -Bolozon,1051,89,4.973,0.710,0.643,890,6567 -Saint-Alban,1331,179,8.229,0.913,0.827,891,6560 -Saint-Georges-sur-Arnon,36195,576,24.284,1.569,1.421,630,6658 -Plévin,22202,761,27.797,1.678,1.519,216,6809 -Nurieux-Volognat,1267,1030,19.519,1.406,1.273,896,6568 -Neuvy-Saint-Sépulchre,36141,1656,35.531,1.897,1.718,611,6607 -Nivigne et Suran,1095,805,31.222,1.779,1.611,889,6580 -Neuvy-Pailloux,36140,1209,42.082,2.065,1.870,611,6641 -Saint-Lormel,22311,876,9.821,0.998,0.904,313,6838 -Crécy-sur-Serre,2237,1496,18.096,1.354,1.226,745,6952 -Chavenon,3070,135,17.563,1.334,1.208,699,6593 -Orville,36147,138,9.305,0.971,0.879,610,6675 -Andelain,2016,234,2.866,0.539,0.488,725,6949 -Mesbrecourt-Richecourt,2480,305,9.031,0.957,0.866,739,6955 -Saint-Martin-du-Mont,1374,1807,28.134,1.688,1.528,880,6557 -Saint-Laurent,18219,498,38.828,1.983,1.795,644,6679 -Samognat,1392,657,14.258,1.202,1.088,901,6576 -Pomeys,69155,1145,13.212,1.157,1.048,810,6505 -Barenton-Bugny,2046,550,11.503,1.080,0.978,751,6948 -Montagnat,1254,1960,13.870,1.185,1.073,877,6564 -Sainte-Fauste,36190,276,23.287,1.536,1.391,615,6637 -Baslieux-lès-Fismes,51037,318,5.609,0.754,0.683,754,6915 -Outriaz,1282,261,5.904,0.773,0.700,898,6553 -Vouillon,36248,236,15.096,1.237,1.120,618,6634 -Dun-le-Poëlier,36068,436,22.594,1.513,1.370,605,6684 -Saint-Point,71470,319,14.305,1.204,1.090,826,6581 -Maillat,1228,623,11.520,1.080,0.978,894,6558 -Cerseuil,2152,89,4.602,0.683,0.618,739,6913 -Villefranche-sur-Cher,41280,2699,27.227,1.661,1.504,608,6693 -Dhuizel,2263,115,6.884,0.835,0.756,746,6917 -Pierrepont,2600,386,10.667,1.040,0.942,759,6952 -Saint-Cyr-les-Vignes,42214,1015,19.511,1.406,1.273,799,6507 -Villereversure,1447,1275,17.521,1.332,1.206,887,6571 -Mascaras,65303,345,4.809,0.698,0.632,469,6237 -Surfontaine,2732,100,6.384,0.804,0.728,736,6962 -Pont-d'Ain,1304,2914,11.237,1.067,0.966,880,6552 -Méreau,18148,2633,18.793,1.380,1.249,627,6677 -Saint-Loup,41222,376,15.008,1.233,1.116,610,6682 -Bogny-sur-Meuse,8081,5169,23.242,1.535,1.390,825,6970 -Vendeuil,2775,953,14.590,1.216,1.101,727,6957 -Genouilly,18100,686,34.619,1.873,1.696,612,6676 -La Fère,2304,2869,6.814,0.831,0.752,728,6953 -La Chapelle-Saint-Laurian,36041,147,9.931,1.003,0.908,606,6663 -Mérignat,1242,126,3.169,0.567,0.513,888,6554 -Migny,36125,127,13.514,1.170,1.059,627,6660 -Vieu-d'Izenave,1441,699,20.104,1.427,1.292,900,6558 -Fay-le-Clos,26133,166,4.546,0.679,0.615,851,6462 -Crépy,2238,1869,27.807,1.679,1.520,740,6943 -Thiernu,2742,100,6.230,0.795,0.720,756,6965 -Autremencourt,2039,169,9.283,0.970,0.878,756,6957 -Livet-sur-Authou,27371,146,3.945,0.632,0.572,529,6905 -Erlon,2283,282,8.848,0.947,0.857,749,6961 -Vieux-Rouen-sur-Bresle,76739,570,14.959,1.231,1.115,608,6974 -Anjouin,36004,334,28.849,1.710,1.548,609,6683 -Montautour,35185,262,6.919,0.837,0.758,397,6797 -Saint-Pierre-de-Jards,36205,121,18.205,1.358,1.230,620,6669 -Beaumont-sur-Lèze,31052,1557,26.445,1.637,1.482,564,6256 -Montigny-sous-Marle,2516,61,7.375,0.864,0.782,758,6963 -Chéry-lès-Pouilly,2180,702,17.449,1.330,1.204,744,6953 -Châtenay,1090,333,15.223,1.242,1.125,869,6552 -Lacapelle-Biron,47123,433,13.925,1.188,1.076,535,6389 -Voyenne,2827,318,13.854,1.185,1.073,756,6958 -Saint-Georges-sur-la-Prée,18210,625,22.813,1.520,1.376,617,6681 -Aulnois-sous-Laon,2037,1440,9.744,0.994,0.900,743,6947 -Condamine,1112,414,4.539,0.678,0.614,896,6559 -Saint-Hilaire-de-Court,18214,605,12.123,1.108,1.003,626,6679 -Neuville-sur-Ain,1273,1741,19.904,1.420,1.286,884,6554 -Fourdrain,2329,420,9.510,0.982,0.889,734,6949 -Druillat,1151,1157,20.878,1.454,1.316,877,6558 -Grand-Corent,1177,174,7.042,0.845,0.765,888,6569 -Villers-le-Sec,2813,278,10.624,1.038,0.940,736,6962 -Saint-Jean-le-Vieux,1363,1699,15.316,1.246,1.128,888,6551 -Poncin,1303,1696,19.917,1.421,1.287,886,6560 -Peyriat,1293,164,6.108,0.787,0.713,895,6565 -Sonthonnax-la-Montagne,1410,318,14.264,1.202,1.088,895,6573 -Cize,1106,170,4.545,0.679,0.615,889,6571 -Meurival,2482,51,2.942,0.546,0.494,755,6917 -Brion,1063,515,4.489,0.674,0.610,897,6567 -Saint-Christophe-en-Bazelle,36185,389,13.947,1.189,1.077,603,6674 -Combiers,16103,124,24.088,1.562,1.414,499,6490 -Séry-lès-Mézières,2717,586,11.711,1.089,0.986,728,6963 -Dohis,2265,97,8.210,0.912,0.826,780,6965 -Varambon,1430,531,8.006,0.901,0.816,879,6552 -La Boissière-du-Doré,44016,1040,9.499,0.981,0.888,384,6691 -Craonnelle,2235,117,5.963,0.777,0.704,755,6925 -Diors,36064,786,25.608,1.611,1.459,610,6641 -Matafelon-Granges,1240,645,21.771,1.485,1.345,890,6571 -Dompierre-sur-Veyle,1145,1164,29.150,1.719,1.556,874,6554 -Bagneux,36011,175,25.307,1.601,1.450,605,6672 -Cernay-lès-Reims,51105,1393,16.400,1.289,1.167,782,6909 -Cuiserey,21215,179,6.361,0.803,0.727,877,6698 -Nivollet-Montgriffon,1277,118,8.467,0.926,0.838,892,6550 -Chantepie,35055,10379,11.970,1.101,0.997,360,6787 -Saint-Amand-Longpré,41199,1228,21.472,1.475,1.335,552,6731 -Prunay,51449,1039,18.438,1.367,1.238,786,6899 -Méry-sur-Cher,18150,670,21.237,1.467,1.328,623,6687 -Dalstein,57167,354,3.968,0.634,0.574,946,6916 -Sillery,51536,1736,9.249,0.968,0.876,783,6902 -Beine-Nauroy,51046,1016,42.755,2.081,1.884,792,6903 -Ardelu,28009,74,4.085,0.643,0.582,620,6805 -Prosnes,51447,495,32.771,1.822,1.650,798,6901 -Taissy,51562,2208,11.505,1.080,0.978,779,6899 -Saint-Léonard,51493,108,3.044,0.555,0.503,781,6902 -Certines,1069,1532,16.029,1.274,1.153,873,6559 -Montgivray,36127,1613,25.748,1.615,1.462,617,6609 -Saint-Valentin,36209,281,25.201,1.598,1.447,616,6649 -Courville,51194,460,12.052,1.105,1.000,751,6910 -Simandre-sur-Suran,1408,677,16.360,1.287,1.165,884,6573 -Reboursin,36170,109,12.890,1.143,1.035,610,6670 -Brinay,18036,526,29.706,1.735,1.571,633,6678 -Fontenay,36075,89,12.456,1.123,1.017,602,6663 -Journans,1197,355,2.443,0.498,0.451,881,6564 -Labastide-sur-Bésorgues,7112,261,17.353,1.326,1.201,802,6404 -Les Bordes,36021,895,16.159,1.280,1.159,619,6652 -Denier,62266,83,3.105,0.561,0.508,660,7023 -Mennetou-sur-Cher,41135,893,16.285,1.285,1.163,614,6685 -Chéry,18064,211,13.600,1.174,1.063,628,6667 -Revonnas,1321,921,7.784,0.888,0.804,881,6566 -Issoudun,36088,11888,37.164,1.940,1.757,630,6651 -Coings,36057,851,29.570,1.731,1.567,605,6646 -Massay,18140,1396,48.061,2.207,1.998,624,6670 -Meillonnas,1241,1332,17.862,1.345,1.218,879,6577 -Saint-Florentin,36191,539,16.343,1.287,1.165,605,6670 -Maizy,2453,416,7.254,0.857,0.776,752,6921 -Bretagne,36024,155,18.398,1.365,1.236,601,6654 -Montierchaume,36128,1628,37.812,1.957,1.772,606,6645 -Échay,25209,128,5.516,0.748,0.677,925,6665 -Saint-Étienne-de-Gourgas,34251,472,19.631,1.410,1.277,731,6302 -Mont-Notre-Dame,2520,738,9.974,1.005,0.910,741,6910 -Grèges,76324,838,3.198,0.569,0.515,566,6983 -Sassierges-Saint-Germain,36211,487,31.915,1.798,1.628,616,6623 -Écordal,8151,325,12.979,1.147,1.039,813,6940 -Val-Revermont,1426,2581,45.804,2.154,1.950,882,6573 -Saint-Aubin,36181,183,28.615,1.703,1.542,629,6638 -Cys-la-Commune,2255,138,4.397,0.667,0.604,741,6923 -Vatan,36230,2019,29.995,1.743,1.578,609,6658 -Mareuil-en-Dôle,2462,244,9.150,0.963,0.872,742,6905 -Bouleuse,51073,206,4.036,0.639,0.579,762,6905 -Boyeux-Saint-Jérôme,1056,354,16.718,1.301,1.178,892,6553 -Mâron,36112,772,28.198,1.690,1.530,610,6632 -La Ville-aux-Bois-lès-Pontavert,2803,140,8.464,0.926,0.838,760,6927 -Moulins,2530,75,1.609,0.404,0.366,748,6924 -Villette-sur-Ain,1449,751,19.771,1.415,1.281,877,6546 -Étrechet,36071,997,18.252,1.360,1.231,609,6633 -Jouaignes,2393,145,7.991,0.900,0.815,739,6913 -Crugny,51198,636,12.628,1.131,1.024,752,6903 -Fouchécourt,88179,44,4.683,0.689,0.624,912,6769 -Romain,51464,322,8.454,0.926,0.838,754,6915 -Treslon,51581,239,3.988,0.636,0.576,761,6905 -Faverolles-et-Coëmy,51245,563,5.509,0.747,0.676,759,6906 -Izenave,1191,162,13.147,1.154,1.045,897,6552 -Réville-aux-Bois,55428,118,11.127,1.062,0.962,869,6916 -Bouvancourt,51077,194,13.004,1.148,1.039,760,6914 -Chavonne,2176,204,3.652,0.608,0.550,742,6923 -Sainte-Lizaigne,36199,1190,26.787,1.647,1.491,624,6654 -Nohant-en-Graçay,18167,304,23.780,1.552,1.405,619,6668 -Blanzy-lès-Fismes,2091,112,5.277,0.731,0.662,750,6914 -Ambrault,36003,899,25.571,1.610,1.458,623,6630 -Condé,36059,244,24.076,1.562,1.414,622,6647 -La Grange,25290,93,6.323,0.800,0.724,977,6695 -Lhuys,2427,144,4.924,0.706,0.639,739,6907 -Delouze-Rosières,55148,117,15.059,1.235,1.118,885,6833 -Bourg-et-Comin,2106,827,5.133,0.721,0.653,749,6924 -Pont-Arcy,2612,128,3.236,0.573,0.519,745,6922 -Limé,2432,186,5.669,0.758,0.686,739,6913 -Paars,2581,306,5.158,0.723,0.655,745,6917 -Brives,36027,262,19.820,1.417,1.283,617,6642 -Laprugne,3139,318,34.662,1.874,1.697,755,6546 -Les Clérimois,89111,295,12.444,1.123,1.017,732,6791 -Meunet-Planches,36121,175,26.925,1.652,1.496,620,6643 -Chassemy,2167,876,10.973,1.054,0.954,735,6922 -Ardentes,36005,3866,62.701,2.521,2.283,612,6622 -Prouilly,51448,563,10.396,1.026,0.929,759,6911 -Berg-sur-Moselle,57062,430,2.890,0.541,0.490,941,6932 -Orçay,41168,240,18.789,1.380,1.249,636,6689 -Labalme,1200,212,8.932,0.951,0.861,894,6559 -Corveissiat,1125,625,23.061,1.529,1.384,889,6571 -Gemeaux,21290,882,19.332,1.400,1.268,865,6710 -Leyssard,1214,153,9.337,0.973,0.881,892,6564 -Hertzing,57320,193,1.626,0.406,0.368,992,6850 -Beaurieux,2058,829,9.697,0.991,0.897,754,6924 -Oulches-la-Vallée-Foulon,2578,89,4.354,0.664,0.601,755,6926 -Augy,2036,87,2.642,0.517,0.468,738,6915 -Presles-et-Boves,2620,366,9.631,0.988,0.895,741,6919 -Bazoches-sur-Vesles,2054,462,9.563,0.984,0.891,747,6913 -Paudy,36152,464,30.677,1.763,1.596,620,6663 -Saint-Gravé,56218,743,15.940,1.271,1.151,306,6747 -Pargnan,2588,76,2.403,0.493,0.446,751,6921 -Aizy-Jouy,2008,289,14.732,1.222,1.106,739,6928 -Dravegny,2271,137,15.935,1.271,1.151,748,6907 -Châteauroux,36044,44088,25.577,1.610,1.458,604,6635 -Viel-Arcy,2797,183,6.629,0.820,0.742,747,6921 -Guilly,36085,243,20.887,1.455,1.317,607,6664 -Ambronay,1007,2684,33.711,1.848,1.673,888,6546 -Saint-Outrille,18228,215,12.616,1.131,1.024,610,6674 -Val-d'Auzon,10019,387,27.676,1.675,1.517,801,6815 -Giroux,36083,117,23.642,1.548,1.402,620,6665 -Courcelles-lès-Montbéliard,25170,1222,2.413,0.494,0.447,986,6716 -Clion,17111,813,15.980,1.272,1.152,428,6492 -Saint-Thibaut,2695,72,4.094,0.644,0.583,745,6909 -Courcelles-sur-Vesle,2224,355,8.990,0.954,0.864,742,6914 -Vauxtin,2773,40,2.285,0.481,0.436,743,6916 -Montigny-sur-Vesle,51379,521,9.575,0.985,0.892,760,6914 -Le Magny,36109,1081,17.967,1.349,1.221,623,6606 -Gournay,36084,298,20.532,1.442,1.306,601,6611 -Flachères,38167,520,4.936,0.707,0.640,881,6487 -Fesches-le-Châtel,25237,2199,3.458,0.592,0.536,994,6721 -Cerdon,1068,785,12.101,1.107,1.002,893,6553 -Beaumont,32037,140,7.590,0.877,0.794,483,6321 -Ventelay,51604,258,14.749,1.222,1.106,755,6917 -Perruel,27454,472,5.367,0.737,0.667,579,6927 -Arcis-le-Ponsart,51014,314,15.499,1.253,1.134,748,6901 -Chazelles-sur-Lyon,42059,5288,21.079,1.461,1.323,810,6505 -Lourouer-Saint-Laurent,36100,275,11.279,1.069,0.968,623,6614 -Buxières-d'Aillac,36030,262,26.124,1.627,1.473,603,6619 -Priay,1314,1707,15.737,1.263,1.144,879,6550 -Serval,2715,50,2.202,0.472,0.427,749,6917 -Jasseron,1195,1762,18.949,1.386,1.255,876,6571 -Quincy-sous-le-Mont,2633,61,4.994,0.711,0.644,742,6914 -Bulligny,54105,516,10.549,1.034,0.936,910,6832 -Béard-Géovreissiat,1170,1039,4.693,0.690,0.625,895,6570 -Donnement,10128,79,11.297,1.070,0.969,803,6827 -Nohant-Vic,36143,456,21.497,1.476,1.336,619,6621 -Ramasse,1317,321,9.588,0.986,0.893,881,6566 -Maringes,42138,670,9.158,0.963,0.872,808,6508 -Thoirette-Coisia,39530,870,16.150,1.279,1.158,898,6583 -Lacs,36091,657,13.538,1.171,1.060,627,6614 -Verneuil-sur-Igneraie,36234,313,9.946,1.004,0.909,623,6615 -Fougerolles,36078,345,17.470,1.330,1.204,613,6612 -Chemilly,3073,634,16.953,1.311,1.187,723,6594 -Tranzault,36226,353,18.169,1.357,1.229,614,6615 -Viricelles,42335,464,2.014,0.452,0.409,808,6508 -Saint-Médard-en-Forez,42264,1070,10.416,1.027,0.930,805,6498 -Les Septvallons,2439,1181,38.112,1.965,1.779,754,6917 -Sarzay,36210,313,18.670,1.375,1.245,618,6615 -Cazeaux-de-Larboust,31133,94,21.618,1.480,1.340,497,6193 -Cuissy-et-Geny,2252,71,4.951,0.708,0.641,749,6923 -Coupru,2221,154,7.825,0.890,0.806,718,6881 -Mouhers,36133,231,18.136,1.356,1.228,607,6605 -Souzy,69178,808,5.107,0.719,0.651,814,6512 -Courlandon,51187,293,3.496,0.595,0.539,753,6914 -Guyencourt,2364,251,4.237,0.655,0.593,761,6919 -Saint-Symphorien-sur-Coise,69238,3654,4.074,0.642,0.581,812,6504 -Mont-Saint-Martin,2523,75,5.680,0.759,0.687,748,6910 -Paissy,2582,72,7.104,0.848,0.768,751,6927 -Châtelus,42055,135,2.509,0.504,0.456,813,6500 -Meys,69132,852,14.767,1.223,1.107,808,6508 -Jonchery-sur-Vesle,51308,1861,3.226,0.572,0.518,759,6911 -Pruniers-en-Sologne,41185,2419,44.109,2.114,1.914,603,6691 -Montipouret,36129,558,27.865,1.680,1.521,619,6623 -Virigneux,42336,629,11.913,1.099,0.995,806,6512 -Soupir,2730,276,10.284,1.021,0.924,742,6924 -Arthon,36009,1251,47.612,2.196,1.988,601,6618 -La Châtre,36046,4178,6.080,0.785,0.711,623,6608 -Grézieu-le-Marché,69095,809,11.526,1.081,0.979,808,6508 -Loupeigne,2442,91,7.309,0.861,0.780,739,6907 -Saint-Quentin-la-Poterie,30295,3046,24.057,1.561,1.413,816,6332 -Saint-Jean-de-Niost,1361,1427,14.069,1.194,1.081,873,6527 -Sévérac d'Aveyron,12270,4100,209.628,4.609,4.173,698,6367 -Creys-Mépieu,38139,1523,29.438,1.727,1.564,894,6519 -Chavanoz,38097,4608,8.286,0.916,0.829,868,6519 -Lachalade,55266,61,19.112,1.392,1.260,842,6900 -Pont-de-Chéruy,38316,5703,2.508,0.504,0.456,868,6519 -Fontcouverte-la-Toussuire,73116,526,21.530,1.477,1.337,952,6466 -Sainte-Julie,1366,999,11.447,1.077,0.975,877,6531 -Moussy-Verneuil,2531,124,6.448,0.808,0.732,746,6922 -Lompnas,1219,169,12.647,1.132,1.025,898,6525 -Loyettes,1224,3145,21.280,1.468,1.329,875,6523 -Charnoz-sur-Ain,1088,923,6.601,0.818,0.741,873,6531 -Cuiry-lès-Chaudardes,2250,74,5.215,0.727,0.658,756,6922 -La Bastide-des-Jourdans,84009,1507,27.669,1.674,1.516,914,6300 -Pévy,51429,211,7.304,0.860,0.779,760,6912 -Lhuis,1216,890,24.657,1.581,1.431,901,6519 -Brenelle,2120,196,4.385,0.667,0.604,741,6919 -Briord,1064,991,12.317,1.117,1.011,891,6523 -Mers-sur-Indre,36120,650,25.832,1.618,1.465,615,6623 -Saint-Chartier,36184,517,28.040,1.686,1.527,623,6615 -La Motte-Feuilly,36132,51,5.718,0.761,0.689,627,6605 -Saint-Denis-de-Jouhet,36189,972,44.083,2.113,1.913,609,6607 -Saint-Romain-de-Jalionas,38451,3252,13.658,1.176,1.065,874,6517 -Saint-Aignan-sur-Roë,53197,893,18.242,1.360,1.231,386,6759 -Renazé,53188,2529,16.772,1.304,1.181,395,6749 -Tignieu-Jameyzieu,38507,7145,13.409,1.166,1.056,868,6514 -Courtenay,38135,1276,32.217,1.807,1.636,883,6517 -Laubrières,53128,350,8.548,0.931,0.843,395,6770 -Concevreux,2208,280,13.240,1.158,1.048,755,6919 -Méneslies,80527,314,4.028,0.639,0.579,591,6997 -Saint-Gilles,51484,288,6.473,0.810,0.733,748,6908 -Guéron,14322,245,5.260,0.730,0.661,431,6914 -Saint-Martin-du-Limet,53240,443,12.311,1.117,1.011,399,6751 -La Croixille,53086,692,20.182,1.430,1.295,397,6794 -Bonneville-Aptot,27083,256,7.532,0.874,0.791,538,6908 -Fismes,51250,5493,16.737,1.302,1.179,749,6914 -Vandeuil,51591,210,5.405,0.740,0.670,759,6909 -Saint-Vulbas,1390,1306,21.579,1.479,1.339,879,6530 -Charrin,58060,606,26.217,1.630,1.476,743,6631 -Wattrelos,59650,41341,13.677,1.177,1.066,718,7066 -Magneux,51337,283,3.235,0.573,0.519,753,6911 -Solignac-sous-Roche,43240,233,8.773,0.943,0.854,777,6460 -Leyrieu,38210,818,6.527,0.813,0.736,877,6521 -Fontaine-Couverte,53098,439,21.684,1.482,1.342,392,6768 -Senonnes,53259,349,13.243,1.158,1.048,383,6754 -Souclin,1411,268,13.311,1.161,1.051,886,6537 -Crémieu,38138,3297,6.229,0.794,0.719,874,6517 -La Roë,53191,244,8.782,0.943,0.854,394,6761 -Vielle-Tursan,40325,259,12.820,1.140,1.032,419,6290 -La Selle-Craonnaise,53258,956,29.400,1.726,1.563,400,6759 -Saint-Marcelin-de-Cray,71446,184,13.663,1.177,1.066,815,6611 -Gastines,53102,162,8.986,0.954,0.864,394,6768 -Seyresse,40300,897,2.228,0.475,0.430,373,6296 -Breuil-sur-Vesle,51086,346,6.549,0.815,0.738,756,6913 -Lagardelle,46147,122,3.139,0.564,0.511,555,6376 -Pontavert,2613,605,13.640,1.176,1.065,758,6924 -Portes,30203,354,14.575,1.215,1.100,783,6355 -Saint-Sorlin-en-Bugey,1386,1150,9.175,0.964,0.873,882,6534 -Ordonnaz,1280,146,14.789,1.224,1.108,895,6532 -Blyes,1047,993,9.428,0.977,0.885,877,6531 -Mondevert,35183,819,5.084,0.718,0.650,397,6784 -Ansacq,60016,274,8.359,0.920,0.833,655,6919 -Saint-Michel-de-la-Roë,53242,263,13.220,1.157,1.048,390,6762 -Vitré,35360,17884,38.682,1.980,1.793,390,6784 -Å’uilly,2565,290,2.865,0.539,0.488,748,6922 -Saint-Poix,53250,404,7.497,0.872,0.790,397,6772 -Vongnes,1456,70,2.103,0.462,0.418,913,6528 -Serzy-et-Prin,51534,196,7.430,0.868,0.786,755,6903 -Tannières,2735,16,2.543,0.508,0.460,741,6911 -Gennes-sur-Seiche,35119,952,18.601,1.373,1.243,395,6773 -Availles-sur-Seiche,35008,685,11.096,1.060,0.960,391,6771 -Chaponnay,69270,4212,18.913,1.384,1.253,855,6504 -Braine,2110,2231,11.598,1.084,0.981,737,6917 -Chéry-Chartreuve,2179,390,13.820,1.183,1.071,743,6904 -Chauvency-Saint-Hubert,55110,249,10.787,1.045,0.946,865,6940 -Rosnay,51468,346,5.560,0.751,0.680,765,6907 -Saint-Baudille-de-la-Tour,38365,806,21.891,1.489,1.348,885,6520 -Villiers-en-Lieu,52534,1537,12.726,1.136,1.029,841,6845 -Rorschwihr,68285,377,2.463,0.500,0.453,1025,6800 -Hières-sur-Amby,38190,1219,8.688,0.938,0.849,880,6527 -Saint-Maurice-de-Gourdans,1378,2537,25.556,1.609,1.457,869,6524 -Champ-sur-Drac,38071,3020,8.872,0.948,0.858,913,6444 -Villebois,1444,1160,14.110,1.196,1.083,889,6529 -Cuillé,53088,890,21.742,1.484,1.344,396,6771 -Sausseuzemare-en-Caux,76669,437,3.769,0.618,0.560,509,6958 -Domqueur,80249,309,8.465,0.926,0.838,634,7001 -Tramery,51577,151,3.594,0.603,0.546,757,6901 -Le Pertre,35217,1394,43.634,2.103,1.904,397,6784 -Plourhan,22232,1989,17.285,1.323,1.198,268,6850 -Saint-Loup-en-Champagne,8386,315,15.780,1.264,1.144,789,6927 -Chamborigaud,30080,841,17.998,1.350,1.222,778,6357 -Sembouès,32427,60,2.616,0.515,0.466,470,6266 -Saint-Yzans-de-Médoc,33493,388,25.141,1.596,1.445,406,6475 -La Burbanche,1066,71,11.017,1.057,0.957,900,6531 -Optevoz,38282,840,12.048,1.105,1.000,880,6521 -Bénonces,1037,294,15.362,1.248,1.130,892,6533 -Vœlfling-lès-Bouzonville,57749,154,2.919,0.544,0.493,961,6917 -Montmeillant,8307,83,7.004,0.842,0.762,797,6958 -Vincy-Reuil-et-Magny,2819,117,12.063,1.106,1.001,778,6957 -Brunehamel,2126,472,8.888,0.949,0.859,784,6965 -Saint-Saturnin-du-Limet,53253,508,10.720,1.042,0.943,391,6756 -La Rouaudière,53192,333,19.282,1.398,1.266,385,6759 -Saint-André-le-Désert,71387,251,17.928,1.348,1.220,821,6602 -L'Abergement-de-Cuisery,71001,784,8.149,0.909,0.823,850,6608 -Plombières-lès-Dijon,21485,2605,14.970,1.232,1.115,846,6694 -Chaspinhac,43061,833,16.450,1.291,1.169,773,6446 -Rouperroux,61357,182,9.813,0.997,0.903,471,6833 -Écouves,61341,1697,36.350,1.919,1.737,483,6831 -Ciral,61107,394,18.106,1.354,1.226,466,6827 -Villar-Loubière,5182,40,21.969,1.492,1.351,948,6417 -Arcenant,21017,510,10.067,1.010,0.914,840,6671 -Villedieu-lès-Bailleul,61505,214,4.727,0.692,0.627,480,6859 -Carrouges,61074,671,8.528,0.930,0.842,464,6833 -Saint-Laurent-en-Caux,76597,770,6.541,0.814,0.737,547,6964 -Champhol,28070,3622,5.437,0.742,0.672,589,6820 -Villers-les-Bois,39570,210,10.537,1.033,0.935,894,6652 -Samadet,40286,1149,26.204,1.629,1.475,414,6289 -Lamenay-sur-Loire,58137,57,12.033,1.104,1.000,746,6630 -La Chailleuse,39021,604,24.915,1.589,1.439,894,6608 -Devay,58096,501,12.601,1.130,1.023,743,6635 -Coat-Méal,29035,1091,10.750,1.044,0.945,144,6846 -Chahains,61080,89,7.595,0.877,0.794,472,6834 -Cuissai,61141,420,8.932,0.951,0.861,477,6823 -Sai,61358,217,5.105,0.719,0.651,480,6852 -Montambert,58172,129,26.325,1.633,1.479,752,6633 -La Motte-Fouquet,61295,159,9.484,0.980,0.887,458,6836 -Sully,14680,140,4.092,0.644,0.583,427,6917 -La Peyratte,79208,1170,47.730,2.199,1.991,455,6622 -Vitry-la-Ville,51648,367,9.212,0.966,0.875,807,6863 -Semussac,17425,2335,24.936,1.590,1.440,391,6507 -Charnay-lès-Mâcon,71105,7303,12.355,1.119,1.013,837,6582 -Tournai-sur-Dive,61490,306,12.536,1.127,1.020,481,6858 -Saint-Clément-sur-Guye,71400,131,7.381,0.865,0.783,823,6612 -Augea,39025,283,7.615,0.878,0.795,885,6608 -Arnay-le-Duc,21023,1454,12.026,1.104,1.000,809,6671 -Piacé,72235,381,10.146,1.014,0.918,488,6801 -René,72251,377,12.647,1.132,1.025,492,6803 -Villenave-près-Marsac,65477,85,1.129,0.338,0.306,464,6253 -Les Fougerêts,56060,937,20.036,1.425,1.290,310,6755 -Sainte-Marguerite-d'Elle,14614,769,20.861,1.454,1.316,414,6909 -Cossaye,58087,725,51.793,2.291,2.074,743,6631 -Garnat-sur-Engièvre,3120,699,18.732,1.378,1.248,749,6617 -Tallans,25556,49,4.067,0.642,0.581,948,6704 -Saint-Gilles,35275,4716,20.979,1.458,1.320,342,6793 -La Nouaye,35203,361,2.730,0.526,0.476,330,6796 -Moutiers,35200,935,17.889,1.346,1.219,382,6771 -Saint-Ennemond,3229,638,38.775,1.982,1.795,733,6624 -Gannay-sur-Loire,3119,406,32.194,1.806,1.635,743,6620 -Saint-Maugan,35295,552,8.555,0.931,0.843,319,6795 -Saint-Martin-des-Lais,3245,124,18.250,1.360,1.231,754,6617 -Le Verger,35351,1445,7.111,0.849,0.769,331,6784 -Saint-Hilaire-Fontaine,58245,178,23.580,1.546,1.400,748,6636 -Lusigny,3156,1698,44.756,2.129,1.928,731,6609 -Bédée,35023,4250,39.501,2.001,1.812,333,6793 -Boisgervilly,35027,1643,20.112,1.428,1.293,325,6799 -Bais,53016,1244,26.387,1.635,1.480,452,6802 -Saint-Léry,56225,190,1.627,0.406,0.368,309,6790 -Savilly,21593,81,8.331,0.919,0.832,798,6669 -Levaré,53132,303,11.754,1.091,0.988,409,6823 -Baubigny,21050,202,10.387,1.026,0.929,829,6655 -Audelange,39024,272,4.675,0.688,0.623,895,6675 -Lux,71269,1996,6.205,0.793,0.718,843,6630 -Villargoix,21687,145,17.876,1.346,1.219,796,6686 -Mordelles,35196,7321,30.172,1.748,1.583,335,6789 -Lechâtelet,21344,229,3.785,0.619,0.560,862,6665 -Gevingey,39251,453,5.770,0.765,0.693,893,6616 -Vers-en-Montagne,39554,239,8.469,0.926,0.838,923,6641 -Montagny-lès-Seurre,21424,101,7.124,0.850,0.770,870,6662 -Commenailles,39160,869,21.834,1.487,1.346,887,6634 -Diconne,71175,347,16.105,1.277,1.156,859,6632 -Labruyère,21333,226,7.447,0.869,0.787,864,6664 -Brumath,67067,9913,31.364,1.783,1.614,1044,6856 -Savennes,63416,94,16.598,1.297,1.174,661,6495 -Reclesne,71368,330,20.957,1.457,1.319,796,6659 -Sainte-Suzanne-sur-Vire,50556,680,5.070,0.717,0.649,402,6894 -Blancey,21082,73,6.752,0.827,0.749,809,6690 -Villiers-en-Morvan,21703,46,6.712,0.825,0.747,797,6673 -Cognières,70159,91,4.003,0.637,0.577,949,6715 -Iffendic,35133,4454,74.867,2.754,2.494,331,6788 -Bléruais,35026,110,3.349,0.583,0.528,320,6793 -Hayange,57306,15776,12.186,1.111,1.006,921,6919 -Lucenay-l'Évêque,71266,329,25.375,1.603,1.451,798,6669 -Bard-le-Régulier,21046,72,9.102,0.960,0.869,797,6672 -Châteaubriant,44036,11854,33.715,1.848,1.673,370,6742 -Brazey-en-Morvan,21102,138,17.230,1.321,1.196,798,6675 -Dammartin-Marpain,39188,333,11.332,1.072,0.971,893,6689 -Fuveau,13040,9971,30.060,1.745,1.580,905,6268 -Rosay,39466,125,10.102,1.012,0.916,888,6604 -Serriera,2A279,124,36.899,1.934,1.751,1172,6155 -Saint-Maurice-lès-Couches,71464,190,4.846,0.701,0.635,820,6643 -Maux,58161,140,22.801,1.520,1.376,758,6664 -Veynes,5179,3161,43.680,2.104,1.905,923,6394 -Saint-Uniac,35320,534,6.952,0.839,0.760,325,6795 -Talensac,35331,2496,21.712,1.483,1.343,335,6789 -Saint-Malon-sur-Mel,35290,582,16.264,1.284,1.163,320,6791 -Préveranges,18187,530,38.082,1.964,1.778,643,6592 -Gevry,39252,685,5.616,0.754,0.683,884,6662 -Illifaut,22083,700,27.009,1.654,1.498,301,6793 -Mauron,56127,3092,67.173,2.609,2.362,302,6792 -Le Houga,32155,1188,31.871,1.797,1.627,443,6298 -Saulon-la-Rue,21586,696,4.562,0.680,0.616,857,6682 -Tréhorenteuc,56256,119,5.407,0.740,0.670,307,6782 -Monteneuf,56136,764,29.668,1.734,1.570,309,6767 -Montret,71319,804,14.785,1.224,1.108,860,6620 -Barizey,71019,138,5.634,0.756,0.684,828,6635 -Vaubecourt,55532,316,22.673,1.516,1.373,855,6876 -Saint-Laurent-sur-Oust,56224,366,3.863,0.626,0.567,304,6755 -Aiguilles,5003,428,40.611,2.028,1.836,1003,6420 -Gourhel,56065,692,2.829,0.535,0.484,301,6774 -Tréal,56253,646,19.220,1.395,1.263,308,6758 -Réminiac,56191,385,12.162,1.110,1.005,305,6763 -Saint-Senoux,35312,1838,18.281,1.361,1.232,342,6771 -Beaumont-sur-Grosne,71026,344,7.401,0.866,0.784,844,6620 -Foce,2A115,150,20.693,1.448,1.311,1205,6076 -Liernais,21349,520,28.502,1.699,1.538,796,6684 -Pouilly-sur-Loire,58215,1672,19.908,1.420,1.286,698,6686 -Fry,76292,155,8.036,0.902,0.817,594,6939 -Trans-sur-Erdre,44207,1065,22.869,1.522,1.378,374,6716 -Nort-sur-Erdre,44110,8651,67.249,2.610,2.363,355,6716 -Pabu,22161,2767,7.983,0.899,0.814,247,6851 -Chouzé-sur-Loire,37074,2080,28.395,1.696,1.536,485,6686 -Ercé-en-Lamée,35106,1497,39.328,1.996,1.807,360,6759 -Rebréchien,45261,1337,19.378,1.401,1.268,625,6767 -Candé,49054,2845,5.185,0.725,0.656,397,6727 -Chailly-sur-Armançon,21128,245,18.726,1.377,1.247,810,6684 -Saint-Boil,71392,490,11.782,1.093,0.990,828,6618 -Champdeniers,79066,1632,21.758,1.485,1.345,438,6604 -Couternon,21209,1887,6.874,0.835,0.756,863,6696 -Rehaincourt,88379,355,15.570,1.256,1.137,959,6814 -Saint-Quentin-sur-Nohain,58265,105,16.141,1.279,1.158,702,6695 -Halsou,64255,585,5.395,0.739,0.669,341,6264 -Mesves-sur-Loire,58164,707,18.953,1.386,1.255,703,6680 -Saint-Aubin-des-Châteaux,44153,1777,47.677,2.198,1.990,360,6742 -Boncourt-sur-Meuse,55058,329,10.910,1.051,0.952,889,6861 -Saint-Hilaire-en-Morvan,58244,217,21.338,1.470,1.331,765,6660 -Premeaux-Prissey,21506,403,8.949,0.952,0.862,845,6670 -Villers-la-Chèvre,54574,577,4.013,0.638,0.578,894,6938 -Martigné-Ferchaud,35167,2610,74.936,2.755,2.494,380,6758 -Petit-Mars,44122,3605,26.247,1.631,1.477,361,6708 -Loireauxence,44213,7540,118.517,3.465,3.137,402,6718 -Issé,44075,1853,39.106,1.991,1.803,362,6731 -Berbérust-Lias,65082,50,5.783,0.765,0.693,454,6218 -Remicourt,88382,64,4.251,0.656,0.594,929,6801 -Orée d'Anjou,49069,16324,157.910,4.000,3.622,380,6691 -La Meilleraye-de-Bretagne,44095,1512,28.071,1.686,1.527,367,6725 -Carbay,49056,252,7.739,0.886,0.802,382,6747 -Lusanger,44086,1035,35.604,1.899,1.719,354,6738 -La Roche-Blanche,44222,1187,14.936,1.230,1.114,390,6712 -Conteville,80208,207,6.460,0.809,0.732,632,7008 -Annoire,39011,379,15.651,1.259,1.140,871,6652 -Boyer,71052,709,17.027,1.313,1.189,849,6615 -Tressignaux,22375,677,7.411,0.867,0.785,260,6849 -Aiserey,21005,1386,10.468,1.030,0.933,866,6677 -Couffé,44048,2543,39.871,2.010,1.820,381,6705 -La Petite-Verrière,71349,52,9.833,0.998,0.904,790,6660 -Châtenois,39121,382,8.010,0.901,0.816,895,6674 -Nozay,44113,4130,58.047,2.425,2.196,351,6733 -Planchez,58210,301,43.974,2.111,1.911,783,6670 -Eancé,35103,406,16.702,1.301,1.178,383,6753 -Sion-les-Mines,44197,1598,55.149,2.364,2.140,361,6748 -Abbaretz,44001,2068,62.135,2.509,2.272,367,6730 -Rougé,44146,2237,56.844,2.400,2.173,374,6749 -Dun-les-Places,58106,350,45.204,2.140,1.938,774,6692 -Cussy-en-Morvan,71165,409,35.011,1.883,1.705,785,6670 -Collonges-lès-Premières,21183,881,9.378,0.975,0.883,876,6684 -Villepot,44218,662,20.625,1.446,1.309,381,6747 -Saint-Martin-de-la-Mer,21560,298,23.440,1.541,1.395,793,6679 -Pannecé,44118,1342,30.693,1.763,1.596,378,6719 -Ligné,44082,5143,45.706,2.152,1.948,372,6705 -Écuisses,71187,1586,13.430,1.167,1.057,816,6632 -Aubigny-en-Plaine,21031,494,6.357,0.803,0.727,862,6672 -Blismes,58034,179,26.942,1.652,1.496,759,6668 -Gouloux,58129,183,21.936,1.491,1.350,779,6686 -Saint-Péreuse,58262,227,16.468,1.292,1.170,762,6660 -Vair-sur-Loire,44163,4624,49.510,2.240,2.028,390,6712 -Juigné-des-Moutiers,44078,351,24.630,1.580,1.431,386,6737 -Louisfert,44085,1020,18.418,1.366,1.237,370,6742 -Sommant,71527,211,20.588,1.444,1.307,795,6662 -Allègre-les-Fumades,30008,877,25.115,1.595,1.444,805,6345 -Brassy,58037,621,56.666,2.396,2.169,768,6689 -Soulvache,44200,351,11.387,1.074,0.972,366,6755 -Éblange,57187,375,3.278,0.576,0.522,954,6909 -Vouzon,41296,1493,78.001,2.811,2.545,624,6730 -Oudon,44115,3763,22.485,1.509,1.366,383,6703 -Mésanger,44096,4686,50.580,2.264,2.050,377,6713 -Saint-Quentin-la-Chabanne,23238,403,30.018,1.744,1.579,634,6536 -Ménessaire,21403,84,15.074,1.236,1.119,789,6669 -Vauclaix,58305,132,14.565,1.215,1.100,763,6681 -Guindrecourt-aux-Ormes,52231,95,9.037,0.957,0.866,851,6817 -Moux-en-Morvan,58185,545,44.623,2.126,1.925,783,6678 -Saulieu,21584,2441,32.646,1.819,1.647,796,6684 -Marcy,69126,709,3.338,0.582,0.527,831,6535 -Mauves-sur-Loire,44094,3208,14.550,1.214,1.099,371,6698 -Viviers,7346,3720,33.859,1.852,1.677,829,6375 -Censerey,21124,174,12.089,1.107,1.002,800,6677 -Simard,71523,1226,22.215,1.500,1.358,865,6629 -Livron,64344,414,7.596,0.877,0.794,446,6244 -Morville-en-Beauce,45217,171,11.032,1.057,0.957,635,6795 -L'Hôpital-Saint-Lieffroy,25306,113,3.474,0.593,0.537,960,6705 -Treffieux,44208,862,19.082,1.390,1.259,362,6736 -Vallons-de-l'Erdre,44180,6589,190.123,4.389,3.974,381,6730 -Châtin,58066,91,13.016,1.148,1.039,770,6668 -Arleuf,58010,751,60.142,2.469,2.235,775,6655 -Gâcogne,58120,256,25.618,1.611,1.459,770,6680 -Sainte-Marie-sur-Ouche,21559,689,8.316,0.918,0.831,835,6690 -Asnans-Beauvoisin,39022,726,16.391,1.289,1.167,884,6649 -Haucourt,76343,218,10.267,1.020,0.924,606,6950 -Vignoux-sur-Barangeon,18281,2130,24.890,1.588,1.438,634,6679 -Neublans-Abergement,39385,529,11.123,1.062,0.962,876,6648 -Venas,3303,241,32.131,1.804,1.633,679,6599 -Val d'Anast,35168,3944,76.578,2.785,2.522,321,6769 -Aldudes,64016,317,23.189,1.533,1.388,340,6235 -Osnes,8336,228,5.847,0.770,0.697,855,6954 -Mhère,58166,230,25.208,1.598,1.447,766,6675 -Burnand,71067,128,6.519,0.813,0.736,826,6612 -Mernel,35175,1049,16.783,1.304,1.181,334,6767 -Champeau-en-Morvan,21139,233,34.715,1.875,1.698,784,6689 -Bovel,35035,608,14.695,1.220,1.105,328,6774 -Chorey-les-Beaune,21173,632,5.557,0.750,0.679,844,6662 -Saint-Séglin,35311,557,9.482,0.980,0.887,325,6761 -Plélan-le-Grand,35223,3892,50.116,2.253,2.040,318,6775 -Morgny,27417,650,17.369,1.327,1.201,594,6923 -Dun-sur-Grandry,58107,169,11.900,1.098,0.994,759,6664 -Alligny-en-Morvan,58003,615,48.938,2.227,2.016,792,6675 -Verrières-en-Anjou,49323,7060,25.712,1.614,1.461,441,6718 -Les Brulais,35046,544,12.030,1.104,1.000,320,6768 -Lohéac,35155,656,5.259,0.730,0.661,334,6762 -Beignon,56012,1839,24.998,1.591,1.441,317,6777 -Le Villey,39575,88,3.608,0.605,0.548,891,6643 -Germagny,71216,205,3.484,0.594,0.538,821,6620 -Labergement-Foigney,21330,372,7.646,0.880,0.797,871,6686 -Saint-Victor-des-Oules,30301,308,4.777,0.696,0.630,817,6327 -Quintigny,39447,241,3.696,0.612,0.554,894,6630 -Montsauche-les-Settons,58180,531,46.369,2.168,1.963,779,6685 -Carentoir,56033,3229,73.216,2.724,2.466,322,6764 -Treffendel,35340,1257,19.046,1.389,1.258,325,6784 -Goven,35123,4402,40.103,2.016,1.825,341,6783 -Saint-Brisson,58235,266,29.910,1.741,1.576,784,6689 -Saisy,71493,329,17.206,1.320,1.195,819,6655 -Lieuron,35151,792,16.903,1.309,1.185,334,6764 -Blanot,21083,130,18.327,1.363,1.234,792,6673 -Paimpont,35211,1689,110.427,3.345,3.029,309,6785 -Gerstheim,67154,3434,17.881,1.346,1.219,1051,6817 -Chaumard,58068,207,19.884,1.419,1.285,766,6675 -Ouroux-en-Morvan,58205,632,60.693,2.480,2.245,767,6676 -Brazey-en-Plaine,21103,2391,26.108,1.626,1.472,870,6677 -Flavignerot,21270,175,6.379,0.804,0.728,843,6688 -Trugny,21647,130,6.935,0.838,0.759,861,6654 -La Chapelle-Bouëxic,35057,1440,20.724,1.449,1.312,335,6775 -Saint-Malo-de-Beignon,56226,514,3.511,0.596,0.540,318,6775 -Lavault-de-Frétoy,58141,63,15.278,1.244,1.126,780,6669 -Guer,56075,6259,52.276,2.301,2.083,319,6774 -Chissey-en-Morvan,71129,279,29.967,1.742,1.577,793,6666 -Maxent,35169,1469,40.141,2.017,1.826,330,6780 -Chougny,58076,76,14.907,1.229,1.113,758,6664 -Saint-Péran,35305,407,9.447,0.978,0.885,322,6783 -Guenrouet,44068,3335,69.904,2.661,2.409,335,6721 -Épertully,71188,62,3.370,0.584,0.529,822,6650 -Etzling,57202,1195,4.950,0.708,0.641,986,6906 -Lignières-sur-Aire,55290,53,9.317,0.972,0.880,878,6860 -Grandchamps-des-Fontaines,44066,5841,34.074,1.858,1.682,353,6703 -Fragnes-La Loyère,71204,1486,9.740,0.993,0.899,838,6640 -Binges,21076,773,17.791,1.343,1.216,874,6696 -Romenay,71373,1678,49.139,2.231,2.020,864,6602 -Saint-Jean-de-Vaux,71430,405,2.288,0.481,0.436,829,6634 -Écutigny,21243,82,5.688,0.759,0.687,825,6667 -Montigny-en-Morvan,58177,304,21.366,1.471,1.332,764,6675 -Ozenay,71338,225,13.420,1.166,1.056,840,6603 -Noreuil,62619,158,4.895,0.704,0.637,697,7009 -Rieux,56194,2831,27.683,1.675,1.517,318,6738 -Dommartin,58099,172,13.549,1.172,1.061,765,6666 -Maulan,55326,116,4.204,0.653,0.591,866,6841 -Malville,44089,3429,31.139,1.776,1.608,338,6703 -Anost,71009,735,51.934,2.294,2.077,783,6670 -Saint-Aubin-le-Monial,3218,263,21.949,1.491,1.350,700,6606 -La Chevallerais,44221,1556,10.751,1.044,0.945,347,6718 -Château-Chinon (Campagne),58063,555,28.549,1.701,1.540,772,6658 -Vendenesse-lès-Charolles,71564,743,27.490,1.669,1.511,800,6595 -Donges,44052,7852,59.135,2.448,2.216,322,6705 -Sévérac,44196,1628,22.450,1.508,1.365,317,6732 -Saugues,43234,1772,79.048,2.830,2.562,742,6432 -Saint-Angel,19180,707,47.991,2.205,1.996,644,6490 -Prinquiau,44137,3476,23.016,1.527,1.383,318,6707 -Château-Chinon (Ville),58062,2001,4.178,0.651,0.589,769,6662 -Saint-Mitre-les-Remparts,13098,5875,21.164,1.464,1.326,864,6261 -Chevagny-sur-Guye,71127,74,6.328,0.801,0.725,813,6606 -Port-Saint-Louis-du-Rhône,13078,8519,82.182,2.886,2.613,850,6258 -Damerey,71167,561,11.754,1.091,0.988,852,6638 -Gabrias,48068,148,20.306,1.434,1.298,729,6382 -Saint-Usage,21577,1359,9.430,0.977,0.885,869,6669 -Magny,68196,309,4.285,0.659,0.597,1006,6730 -Vitrolles,13117,33880,36.748,1.930,1.747,886,6263 -Fay-de-Bretagne,44056,3601,65.030,2.567,2.324,343,6711 -La Chapelle-Launay,44033,2983,24.803,1.585,1.435,323,6711 -Berre-l'Étang,13014,13483,43.788,2.106,1.907,875,6265 -Arandon-Passins,38297,1797,26.354,1.634,1.479,886,6513 -Vernantois,39552,340,6.885,0.835,0.756,899,6617 -Riaville,55429,43,3.401,0.587,0.531,896,6893 -Serres-Castet,64519,4244,13.820,1.183,1.071,426,6257 -La Noë-Blanche,35202,992,23.110,1.530,1.385,342,6752 -Massérac,44092,691,18.879,1.383,1.252,334,6744 -La Fare-les-Oliviers,13037,8287,14.245,1.201,1.087,878,6273 -Cesancey,39088,394,5.209,0.726,0.657,891,6618 -Les Repôs,39457,54,4.053,0.641,0.580,886,6624 -Saint-Victoret,13102,6587,4.690,0.689,0.624,884,6258 -Gordes,84050,1873,48.906,2.226,2.015,873,6318 -Ensuès-la-Redonne,13033,5483,26.041,1.624,1.470,879,6250 -Langolen,29110,876,17.115,1.317,1.192,184,6800 -L'Étoile,39217,559,6.006,0.780,0.706,892,6627 -Royer,71377,132,5.958,0.777,0.704,839,6609 -Guémené-Penfao,44067,5215,105.987,3.277,2.967,340,6730 -Savenay,44195,8448,25.936,1.621,1.468,328,6704 -Drefféac,44053,2188,14.226,1.201,1.087,319,6722 -Pierric,44123,983,27.768,1.677,1.518,341,6744 -Corcelles-les-Arts,21190,472,5.504,0.747,0.676,835,6652 -Châteauneuf-le-Rouge,13025,2162,13.208,1.157,1.048,907,6271 -Vielverge,21680,489,14.719,1.221,1.106,883,6689 -Redon,35236,8889,15.309,1.245,1.127,322,6742 -Le Gâvre,44062,1781,54.002,2.339,2.118,344,6730 -Héric,44073,5930,74.472,2.747,2.487,348,6707 -Neuville-Ferrières,76465,584,13.027,1.149,1.040,586,6956 -La Gacilly,56061,3976,38.062,1.964,1.778,321,6756 -Langon,35145,1442,36.566,1.925,1.743,339,6751 -Joudes,71243,384,11.347,1.072,0.971,878,6601 -Saint-Just,35285,1072,28.010,1.685,1.526,331,6753 -Saint-Vincent-sur-Oust,56239,1479,15.954,1.271,1.151,316,6748 -Oussières,39401,230,7.648,0.880,0.797,898,6652 -Campbon,44025,4018,50.296,2.257,2.044,327,6709 -Fos-sur-Mer,13039,15608,87.667,2.980,2.698,850,6257 -Éguilles,13032,7764,34.135,1.860,1.684,890,6274 -Théhillac,56250,583,14.535,1.214,1.099,316,6732 -La Dominelais,35098,1367,32.553,1.816,1.644,352,6746 -Le Pout,33335,596,3.909,0.629,0.570,434,6418 -Palleau,71341,237,10.797,1.046,0.947,856,6656 -Coudoux,13118,3698,12.658,1.132,1.025,882,6278 -Saint-Jean-la-Poterie,56223,1503,8.383,0.922,0.835,317,6741 -Vay,44214,2060,36.362,1.919,1.737,342,6722 -Thoisy-le-Désert,21630,208,13.055,1.150,1.041,815,6687 -Saint-Jean-Saint-Nicolas,5145,1019,37.726,1.955,1.770,960,6400 -Rognac,13081,12016,17.619,1.336,1.210,884,6269 -Le Rozier,48131,136,1.993,0.449,0.407,718,6345 -Port-de-Bouc,13077,16682,11.766,1.092,0.989,860,6263 -Miramas,13063,25756,25.769,1.616,1.463,867,6275 -Saint-Gilles,71425,264,3.511,0.596,0.540,828,6644 -Colonne,39159,268,11.195,1.065,0.964,894,6646 -Velaux,13112,8783,25.148,1.596,1.445,883,6274 -Lavau-sur-Loire,44080,766,19.278,1.398,1.266,325,6706 -Saint-Ganton,35268,422,14.170,1.198,1.085,332,6751 -Andelu,78013,474,3.996,0.636,0.576,611,6866 -Cornillon-Confoux,13029,1372,14.863,1.227,1.111,870,6275 -Carry-le-Rouet,13021,5892,9.938,1.003,0.908,877,6250 -Châteauneuf-les-Martigues,13026,16349,32.190,1.806,1.635,878,6257 -Ventabren,13114,5357,26.330,1.633,1.479,890,6274 -Lons-le-Saunier,39300,17364,7.705,0.884,0.800,894,6621 -Sainte-Anne-sur-Brivet,44152,2984,26.416,1.636,1.481,325,6718 -Bouée,44019,956,24.623,1.580,1.431,330,6698 -Ahuy,21003,1216,6.486,0.811,0.734,852,6698 -Laperrière-sur-Saône,21342,431,11.049,1.058,0.958,875,6670 -Étevaux,21256,315,8.728,0.940,0.851,874,6696 -Saint-Nazaire-le-Désert,26321,190,46.411,2.169,1.964,877,6388 -La Chapelle-de-Brain,35064,957,17.827,1.344,1.217,328,6742 -Besné,44013,2999,17.738,1.341,1.214,320,6710 -Lançon-Provence,13051,8885,69.088,2.646,2.396,872,6272 -Fontainebrux,39229,201,6.720,0.825,0.747,889,6625 -Le Poët-Célard,26241,126,8.361,0.920,0.833,865,6390 -Courtemont-Varennes,2228,329,5.980,0.778,0.704,741,6886 -Vesly,50629,720,22.482,1.509,1.366,375,6911 -Bans,39037,190,4.127,0.647,0.586,897,6658 -Plan-de-Cuques,13075,10363,8.496,0.928,0.840,901,6258 -Staffelfelden,68321,3958,7.413,0.867,0.785,1019,6757 -Les Halles,69098,493,3.096,0.560,0.507,812,6514 -Saint-Chamas,13092,8418,26.800,1.648,1.492,863,6275 -Tellecey,21624,143,5.104,0.719,0.651,876,6689 -Pérignac,16258,464,25.506,1.608,1.456,470,6492 -Brette,26062,41,15.550,1.255,1.136,881,6391 -Puy-Saint-Martin,26258,881,11.813,1.094,0.991,858,6392 -Aubigny-la-Ronce,21032,166,11.853,1.096,0.992,819,6656 -Pagny-la-Ville,21474,408,6.739,0.826,0.748,865,6662 -Gespunsart,8188,1069,21.080,1.461,1.323,831,6969 -Gignac-la-Nerthe,13043,9045,8.573,0.932,0.844,878,6256 -Mas-de-Londres,34152,658,19.185,1.394,1.262,760,6296 -Burzy,71068,64,5.353,0.736,0.666,820,6611 -Cuisery,71158,1546,11.415,1.075,0.973,852,6606 -Krautergersheim,67248,1662,6.390,0.805,0.729,1036,6829 -Le Rove,13088,5121,23.097,1.530,1.385,884,6252 -Arraute-Charritte,64051,385,22.828,1.521,1.377,369,6266 -Volvent,26378,34,16.653,1.299,1.176,888,6390 -Bouc-Bel-Air,13015,14477,21.883,1.489,1.348,894,6260 -Rochebaudin,26268,121,7.585,0.877,0.794,863,6386 -Barnave,26025,193,12.475,1.124,1.018,886,6397 -Manas,26171,195,1.919,0.441,0.399,856,6390 -La Laupie,26157,774,9.540,0.983,0.890,848,6391 -Augerans,39026,174,8.048,0.903,0.818,896,6665 -Félines-sur-Rimandoule,26134,76,8.511,0.929,0.841,862,6391 -Guagno,2A131,157,42.757,2.081,1.884,1192,6135 -Digna,39197,354,3.406,0.587,0.531,881,6605 -La Vaivre,70512,213,3.076,0.558,0.505,952,6761 -Tronchy,71548,257,7.799,0.889,0.805,855,6628 -Esquerchin,59211,897,5.398,0.740,0.670,700,7034 -Saint-Loup-sur-Semouse,70467,3249,16.785,1.304,1.181,945,6756 -La Roche-sur-Grane,26277,174,12.045,1.105,1.000,856,6397 -Aix-en-Provence,13001,143006,187.436,4.358,3.946,903,6274 -Les Pennes-Mirabeau,13071,21361,33.666,1.847,1.672,885,6256 -Esclainvillers,80283,168,5.645,0.756,0.684,655,6954 -Joux-la-Ville,89208,1210,43.731,2.105,1.906,769,6725 -Créot,71151,82,2.183,0.470,0.426,824,6648 -La Chaudière,26090,24,12.380,1.120,1.014,879,6395 -Obermodern-Zutzendorf,67347,1676,14.319,1.204,1.090,1034,6868 -Charols,26078,903,7.304,0.860,0.779,854,6390 -Cabriès,13019,9708,36.656,1.927,1.745,887,6262 -Beaurepaire-en-Bresse,71027,674,10.475,1.030,0.933,885,6621 -Chastel-Arnaud,26080,38,13.122,1.153,1.044,874,6396 -Bosjean,71044,313,18.662,1.375,1.245,879,6630 -La Bégude-de-Mazenc,26045,1670,23.878,1.555,1.408,853,6390 -Mareugheol,63209,192,7.615,0.878,0.795,716,6487 -Bonlieu-sur-Roubion,26052,467,6.114,0.787,0.713,847,6389 -Dracy-Saint-Loup,71184,573,21.418,1.473,1.334,801,6655 -Plumaugat,22240,1083,43.797,2.107,1.908,314,6810 -Passy-en-Valois,2594,156,3.550,0.600,0.543,713,6897 -Chamilly,71078,157,4.731,0.692,0.627,827,6642 -Bernières,76082,652,6.680,0.823,0.745,516,6949 -Cadenet,84026,4172,25.790,1.617,1.464,891,6293 -Saint-Cannat,13091,5590,36.817,1.931,1.748,891,6284 -Savasse,26339,1446,22.123,1.497,1.355,838,6389 -Boncourt-le-Bois,21088,287,7.624,0.879,0.796,853,6674 -Frazé,28161,507,27.802,1.678,1.519,562,6796 -Saint-Estève-Janson,13093,380,6.824,0.832,0.753,893,6292 -La Chapelle-d'Aurec,43058,1003,11.680,1.088,0.985,790,6471 -Sabran,30225,1676,35.701,1.902,1.722,821,6341 -La Trinité-de-Thouberville,27661,438,3.389,0.586,0.531,545,6919 -Sorbo-Ocagnano,2B286,829,10.754,1.044,0.945,1230,6175 -Salettes,26334,148,7.051,0.845,0.765,856,6385 -Charny,21147,34,7.878,0.893,0.809,807,6691 -Saint-Benoit-en-Diois,26296,26,11.246,1.067,0.966,879,6395 -Sens-sur-Seille,71514,404,11.787,1.093,0.990,875,6632 -Mornans,26214,70,11.766,1.092,0.989,866,6394 -Le Puy-Sainte-Réparade,13080,5637,44.877,2.132,1.930,895,6291 -Soussey-sur-Brionne,21613,150,14.768,1.223,1.107,819,6693 -Les Baux-de-Provence,13011,361,18.060,1.353,1.225,843,6297 -Francillon-sur-Roubion,26137,192,10.928,1.052,0.952,865,6391 -Autichamp,26021,119,6.315,0.800,0.724,858,6400 -Berentzwiller,68027,322,6.148,0.789,0.714,1031,6730 -Meillon,64376,909,7.087,0.847,0.767,430,6246 -Rochefourchat,26274,1,12.732,1.136,1.029,880,6392 -Champrepus,50118,336,9.158,0.963,0.872,381,6869 -Aucelon,26017,15,26.831,1.649,1.493,889,6390 -Pradelle,26254,18,12.988,1.147,1.039,883,6392 -Villelaure,84147,3437,18.099,1.354,1.226,895,6291 -Mollans-sur-Ouvèze,26188,1060,20.422,1.438,1.302,879,6349 -Autruche,8035,67,8.347,0.920,0.833,840,6931 -Saint-Cirgues-de-Malbert,15179,250,16.372,1.288,1.166,653,6445 -La Bâtie-Rolland,26031,1001,8.358,0.920,0.833,850,6385 -Saou,26336,556,41.438,2.049,1.855,869,6398 -Clomot,21181,134,8.577,0.932,0.844,813,6676 -Mancey,71274,386,9.985,1.006,0.911,841,6608 -Comps,26101,164,11.982,1.102,0.998,865,6387 -Puyvert,84095,817,10.054,1.009,0.914,889,6294 -Occhiatana,2B182,225,12.542,1.127,1.020,1195,6180 -Foulenay,39234,85,4.153,0.649,0.588,888,6644 -Lampaul-Ploudalmézeau,29099,847,6.261,0.796,0.721,138,6855 -Pennes-le-Sec,26228,34,9.090,0.960,0.869,885,6397 -Esbarres,21249,704,15.882,1.269,1.149,865,6668 -Ansouis,84002,1040,17.582,1.335,1.209,895,6296 -Les Tonils,26351,21,13.039,1.149,1.040,877,6389 -Bricy,45055,557,12.703,1.134,1.027,608,6771 -Collongues,6045,87,10.861,1.049,0.950,1008,6320 -Cléon-d'Andran,26095,845,10.303,1.022,0.925,854,6390 -Tauriac-de-Camarès,12275,45,24.557,1.577,1.428,705,6298 -Fourques,30117,2896,38.278,1.969,1.783,818,6291 -Garons,30125,4840,12.459,1.124,1.018,816,6295 -Magnien,21363,315,24.467,1.574,1.425,806,6672 -Flavigny-sur-Ozerain,21271,301,27.848,1.680,1.521,817,6709 -Châtenoy-en-Bresse,71117,1124,6.706,0.824,0.746,844,6634 -Charmes,21146,139,6.580,0.817,0.740,876,6700 -Saligney,39499,186,7.859,0.892,0.808,901,6683 -Rimon-et-Savel,26266,28,12.201,1.112,1.007,882,6396 -Saint-Gervais-sur-Roubion,26305,1000,14.725,1.221,1.106,853,6390 -Sainte-Hélène,71426,519,14.307,1.204,1.090,824,6632 -Authume,39030,821,7.598,0.877,0.794,892,6672 -Eschau,67131,5102,11.812,1.094,0.991,1047,6827 -Terrehault,72352,133,5.829,0.769,0.696,506,6791 -Frapelle,88182,193,4.551,0.679,0.615,999,6809 -Charleval,13024,2715,14.355,1.206,1.092,881,6297 -Mouriès,13065,3419,38.353,1.971,1.785,855,6289 -Puget,84093,761,19.559,1.408,1.275,881,6297 -Chaniers,17086,3589,26.529,1.639,1.484,427,6523 -Maxilly-sur-Saône,21398,341,7.917,0.896,0.811,881,6695 -Buisson,84022,297,9.471,0.980,0.887,857,6355 -Saint-Martin-de-Crau,13097,13097,214.910,4.666,4.225,847,6288 -La Penne-sur-l'Ouvèze,26229,99,7.480,0.871,0.789,880,6351 -Mallemort,13053,5948,28.602,1.702,1.541,880,6297 -Souvigny-en-Sologne,41251,519,41.441,2.049,1.855,640,6731 -Beauvoisin,26043,147,9.517,0.982,0.889,876,6357 -Suze-la-Rousse,26345,2089,30.473,1.757,1.591,848,6359 -Saint-Julien-Molin-Molette,42246,1159,9.521,0.982,0.889,828,6470 -La Barben,13009,853,22.904,1.523,1.379,876,6285 -Mirville,76439,332,5.405,0.740,0.670,515,6950 -Eyguières,13035,7112,68.824,2.641,2.391,863,6297 -Alleins,13003,2519,16.848,1.307,1.183,871,6290 -Saint-Loup-Lamairé,79268,978,22.425,1.507,1.364,463,6634 -Saint-Marcellin-lès-Vaison,84111,312,3.553,0.600,0.543,867,6352 -Bournand,86036,874,32.742,1.821,1.649,480,6665 -Saint-Maurice-sur-Eygues,26317,771,9.035,0.957,0.866,862,6358 -Eygaliers,26127,103,8.206,0.912,0.826,882,6349 -Eygalières,13034,1889,33.950,1.855,1.680,858,6301 -Champdôre,21138,600,10.528,1.033,0.935,873,6676 -Entrechaux,84044,1130,14.899,1.229,1.113,872,6351 -Thoisy-la-Berchère,21629,316,35.031,1.884,1.706,805,6686 -Saint-Gengoux-le-National,71417,1044,9.503,0.981,0.888,829,6611 -Givry,71221,3692,26.143,1.628,1.474,833,6630 -Seurre,21607,2381,8.947,0.952,0.862,862,6661 -Lauris,84065,3817,22.495,1.510,1.367,887,6295 -Romange,39465,198,5.477,0.745,0.675,896,6677 -Tulette,26357,1976,23.081,1.529,1.384,853,6358 -Val-Sonnette,39576,912,15.590,1.257,1.138,891,6612 -Saint-Jean-d'Ormont,88419,124,5.327,0.735,0.665,997,6809 -Jugy,71245,325,7.784,0.888,0.804,841,6612 -Tréauville,50604,726,13.024,1.149,1.040,349,6951 -Puligny-Montrachet,21512,387,7.322,0.861,0.780,833,6650 -Châtelain,53063,479,13.875,1.186,1.074,428,6752 -Rasteau,84096,870,19.028,1.389,1.258,859,6353 -Donnezac,33151,897,36.507,1.923,1.741,427,6462 -Cairanne,84028,1064,22.746,1.518,1.374,857,6353 -Pernes-les-Fontaines,84088,9286,51.045,2.274,2.059,857,6323 -Saint-Préjet-Armandon,43219,103,8.547,0.931,0.843,746,6461 -Champagnac-le-Vieux,43052,212,20.807,1.452,1.315,742,6472 -Roaix,84098,649,5.879,0.772,0.699,861,6351 -Propiac,26256,124,11.259,1.068,0.967,879,6355 -Pierrelongue,26236,220,5.339,0.735,0.665,878,6350 -Muel,35201,902,29.291,1.723,1.560,315,6788 -Aureille,13006,1537,21.631,1.480,1.340,858,6293 -Maussane-les-Alpilles,13058,2253,31.634,1.790,1.621,852,6295 -Villers-Rotin,21701,129,3.109,0.561,0.508,881,6675 -Meursault,21412,1442,16.171,1.280,1.159,838,6652 -La Chapelle-Naude,71092,551,19.101,1.391,1.259,865,6611 -Biarne,39051,406,6.244,0.795,0.720,886,6674 -Lambesc,13050,9657,65.177,2.570,2.327,882,6282 -Saint-Jean-de-Nay,43197,356,28.969,1.713,1.551,751,6439 -Le Val-Saint-Éloi,70518,100,7.086,0.847,0.767,939,6740 -Saint-Romain-en-Viennois,84116,812,9.087,0.960,0.869,866,6355 -Mantry,39310,449,10.818,1.047,0.948,893,6637 -Saint-Sernin-du-Bois,71479,1848,14.765,1.223,1.107,810,6637 -Croix,90030,164,5.508,0.747,0.676,996,6713 -Audeville,45012,186,12.707,1.135,1.028,643,6796 -Saint-Maurice-des-Champs,71461,63,5.840,0.769,0.696,825,6617 -Baguer-Pican,35010,1661,16.131,1.278,1.157,354,6841 -Le Puley,71363,97,5.313,0.734,0.665,821,6621 -Saint-Gervais-en-Vallière,71423,442,16.490,1.293,1.171,849,6653 -Bouze-lès-Beaune,21099,317,6.946,0.839,0.760,833,6662 -Choloy-Ménillot,54128,726,12.059,1.105,1.000,903,6839 -Propriano,2A249,3789,18.936,1.385,1.254,1193,6083 -Rochegude,26275,1586,18.478,1.368,1.239,844,6354 -Villedieu,84146,517,11.561,1.082,0.980,861,6357 -Bouchet,26054,1499,11.900,1.098,0.994,851,6355 -Sainte-Cécile-les-Vignes,84106,2460,19.974,1.423,1.288,851,6347 -Vaas,72364,1518,30.361,1.754,1.588,499,6730 -Mérindol-les-Oliviers,26180,229,9.580,0.985,0.892,873,6358 -Puyméras,84094,605,14.727,1.222,1.106,866,6355 -Anères,65009,179,2.628,0.516,0.467,493,6222 -Auzouville-sur-Saâne,76047,153,3.113,0.562,0.509,551,6963 -Saint-Léger-du-Ventoux,84110,36,19.502,1.406,1.273,879,6349 -Laval-Saint-Roman,30143,220,10.482,1.031,0.933,820,6355 -Barges,21048,606,3.851,0.625,0.566,854,6680 -Faucon,84045,432,8.745,0.941,0.852,873,6352 -Mondragon,84078,3830,40.521,2.026,1.834,834,6348 -Drambon,21233,180,4.912,0.705,0.638,880,6696 -Sainte-Florence,33401,148,3.223,0.571,0.517,456,6417 -Saint-Satur,18233,1432,7.861,0.892,0.808,690,6692 -Mutigney,39377,169,7.970,0.899,0.814,890,6692 -Saint-André-d'Olérargues,30232,429,9.794,0.996,0.902,817,6341 -Francescas,47102,752,21.408,1.473,1.334,496,6336 -Bessey-lès-Cîteaux,21067,698,10.302,1.022,0.925,861,6673 -Aurons,13008,542,12.531,1.127,1.020,873,6290 -Saint-Alexandre,30226,1218,12.952,1.146,1.038,834,6348 -Champvans,39101,1397,14.399,1.208,1.094,882,6670 -Malay,71272,215,12.342,1.118,1.012,831,6610 -Desnes,39194,475,9.308,0.971,0.879,887,6634 -Betting,57073,862,4.455,0.672,0.608,979,6900 -Saint-Paulet-de-Caisson,30290,1800,16.794,1.304,1.181,828,6356 -Saint-Laurent-de-Carnols,30277,485,10.131,1.013,0.917,824,6350 -Montot,21440,201,7.533,0.874,0.791,870,6677 -Saint-Christol-de-Rodières,30242,164,7.969,0.899,0.814,822,6355 -Le Rheu,35240,8571,19.161,1.393,1.261,346,6785 -Dompierre-aux-Bois,55160,40,8.090,0.905,0.819,889,6879 -Paradou,13068,1979,15.892,1.269,1.149,843,6289 -Orgon,13067,3037,34.818,1.878,1.700,864,6303 -Dennevy,71171,305,4.644,0.686,0.621,823,6640 -Pélissanne,13069,10217,19.130,1.392,1.260,876,6287 -Montclus,30175,212,21.991,1.493,1.352,811,6356 -Saint-Didier,21546,209,21.548,1.478,1.338,786,6690 -Thorey-en-Plaine,21632,1079,5.768,0.764,0.692,860,6682 -Vicq-Exemplet,36236,319,38.932,1.986,1.798,635,6618 -Saint-Symphorien-sur-Saône,21575,351,7.916,0.896,0.811,877,6668 -Chambolle-Musigny,21133,296,7.596,0.877,0.794,845,6678 -Saint-André-de-Roquepertuis,30230,602,12.208,1.112,1.007,812,6349 -Omps,15144,349,12.784,1.138,1.030,643,6422 -Écretteville-sur-Mer,76226,159,1.903,0.439,0.397,519,6968 -Saint-Julien-de-Peyrolas,30273,1382,12.566,1.128,1.021,825,6357 -La Charme,39110,69,3.758,0.617,0.559,892,6641 -Saint-Restitut,26326,1373,14.479,1.211,1.096,844,6358 -Lamotte-du-Rhône,84063,399,12.065,1.106,1.001,832,6354 -Lussan,30151,491,46.803,2.178,1.972,808,6346 -Lapalud,84064,3795,17.579,1.335,1.209,832,6356 -Saint-Marcel-d'Ardèche,7264,2390,36.073,1.912,1.731,832,6356 -Augisey,39027,209,9.321,0.972,0.880,893,6607 -Saint-Prix-lès-Arnay,21567,231,11.324,1.071,0.970,816,6668 -Saint-Michel-d'Euzet,30287,629,10.362,1.025,0.928,826,6347 -Hauteville-lès-Dijon,21315,1220,8.947,0.952,0.862,849,6701 -Contz-les-Bains,57152,509,3.188,0.568,0.514,943,6933 -Villeneuve-sous-Pymont,39567,286,2.705,0.524,0.474,895,6626 -Vieux-Mesnil,59617,637,5.944,0.776,0.703,764,7019 -Fercé,44058,483,22.066,1.495,1.354,370,6757 -La Chaux,71121,306,11.019,1.057,0.957,871,6638 -Mun,65326,102,4.808,0.698,0.632,479,6248 -Boussicourt,80125,86,3.294,0.578,0.523,669,6957 -Sirod,39517,533,16.088,1.277,1.156,927,6628 -Vernègues,13115,1754,15.958,1.272,1.152,879,6292 -Tresques,30331,1803,17.775,1.342,1.215,829,6335 -Saint-Pierre-Bellevue,23232,214,32.910,1.826,1.653,613,6532 -Mérindol,84074,2058,27.101,1.657,1.500,880,6297 -Vénéjan,30342,1227,18.580,1.372,1.242,834,6343 -Bernis,30036,3359,12.818,1.140,1.032,801,6299 -Piolenc,84091,5151,24.683,1.581,1.431,837,6342 -Saint-Séverin,16350,753,15.034,1.234,1.117,485,6469 -Gevresin,25270,118,7.065,0.846,0.766,930,6655 -Codolet,30084,681,5.422,0.741,0.671,837,6340 -Verfeuil,30343,608,26.118,1.627,1.473,820,6343 -Sausset-les-Pins,13104,7608,12.172,1.111,1.006,871,6254 -Caderousse,84027,2703,32.437,1.813,1.642,837,6340 -Saint-Cyr,71402,731,13.216,1.157,1.048,843,6622 -Noyers-Saint-Martin,60470,834,13.265,1.159,1.049,648,6938 -La Roque-sur-Cèze,30222,183,8.383,0.922,0.835,822,6343 -Lamanon,13049,2020,19.400,1.402,1.269,871,6292 -Cavillargues,30076,827,11.169,1.064,0.963,822,6335 -Uchaud,30333,4285,8.721,0.940,0.851,800,6298 -Saint-Just-d'Ardèche,7259,1691,10.370,1.025,0.928,829,6355 -Saint-Broingt-le-Bois,52445,83,4.516,0.676,0.612,882,6738 -Foucherans,39233,2159,7.708,0.884,0.800,886,6670 -Mornas,84083,2406,26.056,1.625,1.471,842,6347 -Montjay,71314,200,11.086,1.060,0.960,873,6637 -Saint-Martin-d'Ardèche,7268,996,5.653,0.757,0.685,828,6356 -Bollène,84019,13673,54.380,2.347,2.125,844,6355 -Salazac,30304,184,10.031,1.008,0.913,822,6354 -Le Cailar,30059,2418,30.174,1.749,1.584,799,6281 -Bettancourt-la-Ferrée,52045,1698,5.099,0.719,0.651,844,6843 -Barrême,4022,439,37.344,1.945,1.761,969,6325 -Carsan,30070,647,11.785,1.093,0.990,825,6350 -Montboyer,16222,369,26.747,1.646,1.490,470,6471 -Pont-Saint-Esprit,30202,10405,18.731,1.378,1.248,829,6355 -Montchâlons,2501,76,6.746,0.827,0.749,752,6934 -Nolay,21461,1481,14.407,1.208,1.094,821,6651 -Vestric-et-Candiac,30347,1420,10.911,1.051,0.952,800,6296 -Le Garn,30124,223,11.100,1.061,0.961,816,6361 -Saint-Gervais,30256,707,11.826,1.095,0.991,824,6344 -Générac,30128,4078,24.459,1.574,1.425,808,6288 -Trémont-sur-Saulx,55514,612,11.860,1.096,0.992,854,6850 -Oriocourt,57525,58,4.493,0.675,0.611,951,6869 -Saint-Marcel-de-Careiret,30282,843,10.225,1.018,0.922,820,6338 -Uchaux,84135,1615,18.763,1.379,1.249,846,6349 -Saint-Laurent-d'Aigouze,30276,3466,89.681,3.014,2.729,807,6274 -La Loye,39305,549,19.142,1.393,1.261,891,6660 -Vauvert,30341,11442,110.522,3.346,3.030,809,6273 -Montpont-en-Bresse,71318,1088,38.065,1.964,1.778,871,6606 -Montjoux,26202,339,18.420,1.366,1.237,867,6382 -Bésignan,26050,76,9.052,0.958,0.867,884,6359 -Vinsobres,26377,1165,35.170,1.888,1.709,860,6361 -Bouhans,71045,173,10.194,1.016,0.920,873,6632 -Nyons,26220,6742,23.494,1.543,1.397,866,6364 -Bénivay-Ollon,26048,62,8.833,0.946,0.857,874,6357 -Saint-May,26318,41,10.408,1.027,0.930,885,6370 -Domezain-Berraute,64202,516,21.604,1.480,1.340,381,6258 -Puygiron,26257,421,6.723,0.825,0.747,849,6383 -Messanges,21407,238,3.006,0.552,0.500,841,6674 -La Baume-de-Transit,26033,859,12.187,1.111,1.006,851,6358 -Venterol,26367,705,31.540,1.788,1.619,864,6369 -Arbouet-Sussaute,64036,312,14.580,1.215,1.100,375,6262 -Bergouey-Viellenave,64113,117,11.316,1.071,0.970,373,6267 -Vézac,15255,1191,15.007,1.233,1.116,665,6424 -Verne,25604,129,7.726,0.885,0.801,951,6704 -Quetigny,21515,9597,8.310,0.918,0.831,860,6695 -Saint-Pantaléon-les-Vignes,26322,445,8.604,0.934,0.846,865,6367 -Belleville-et-Châtillon-sur-Bar,8057,268,21.446,1.474,1.335,830,6935 -Maisoncelle,62541,127,4.388,0.667,0.604,640,7040 -Orsanco,64429,109,9.466,0.979,0.886,371,6251 -Le Poët-Sigillat,26244,119,15.776,1.264,1.144,884,6362 -Le Poët-Laval,26243,923,31.464,1.785,1.616,855,6383 -Étrigny,71193,471,19.253,1.397,1.265,834,6612 -Grignan,26146,1545,44.276,2.118,1.918,855,6371 -Les Deux-Fays,39196,101,6.840,0.832,0.753,889,6648 -Narrosse,40202,3191,10.545,1.034,0.936,379,6296 -Saint-Ferréol-Trente-Pas,26304,248,21.535,1.477,1.337,874,6373 -Le Pègue,26226,362,11.315,1.071,0.970,866,6376 -Chanac-les-Mines,19041,509,13.147,1.154,1.045,609,6464 -Saint-Pierre-de-Nogaret,48175,180,16.391,1.289,1.167,711,6372 -Laives,71249,1041,12.659,1.133,1.026,838,6619 -Dieulefit,26114,3121,27.603,1.672,1.514,862,6387 -Sassenay,71502,1592,19.087,1.391,1.259,848,6638 -Manlay,21375,175,19.153,1.393,1.261,802,6667 -Thil,1418,1072,5.163,0.723,0.655,858,6525 -Larrau,64316,197,126.765,3.584,3.245,381,6224 -Saulxures-lès-Bulgnéville,88446,246,9.596,0.986,0.893,907,6794 -Rochefort-en-Valdaine,26272,352,12.973,1.146,1.038,849,6379 -Vaire,25575,801,14.096,1.195,1.082,939,6693 -Ilharre,64272,156,10.532,1.033,0.935,375,6266 -Vic-des-Prés,21677,117,8.992,0.955,0.865,825,6672 -Pouillon,40233,3068,49.665,2.243,2.031,375,6292 -Serre-les-Moulières,39514,189,5.635,0.756,0.684,896,6682 -Béhasque-Lapiste,64106,502,5.657,0.757,0.685,375,6257 -Valouse,26363,34,6.295,0.799,0.723,874,6377 -Cousance,39173,1301,6.522,0.813,0.736,884,6605 -Le Quillio,22260,553,16.412,1.290,1.168,265,6812 -Billey,21074,257,3.876,0.627,0.568,882,6675 -Montbrison-sur-Lez,26192,286,13.260,1.159,1.049,861,6371 -Castagnède,64170,211,8.382,0.922,0.835,376,6270 -Montaulieu,26190,83,13.113,1.153,1.044,878,6366 -Saint-Macaire,33435,2088,2.106,0.462,0.418,444,6390 -Saint-Maurice-en-Rivière,71462,570,18.750,1.378,1.248,855,6638 -Itxassou,64279,2082,39.344,1.997,1.808,346,6258 -Ormes,71332,492,9.914,1.002,0.907,849,6615 -Darbonnay,39191,93,4.417,0.669,0.606,898,6640 -Tart-le-Bas,21622,244,4.704,0.690,0.625,869,6682 -Vosne-Romanée,21714,350,3.654,0.608,0.550,849,6674 -Saint-Étienne-au-Mont,62746,5085,13.810,1.183,1.071,604,7065 -Yzosse,40334,360,5.429,0.742,0.672,376,6301 -Coutras,33138,8576,33.789,1.850,1.675,460,6440 -Grillon,84053,1758,15.033,1.234,1.117,855,6371 -Chaudebonne,26089,53,20.790,1.451,1.314,875,6376 -Prendeignes,46226,230,15.753,1.263,1.144,624,6402 -Remilly-sur-Tille,21521,881,9.700,0.991,0.897,871,6691 -Bonvillaret,73049,141,8.891,0.949,0.859,957,6500 -Mirabel-aux-Baronnies,26182,1590,22.640,1.515,1.372,864,6359 -Fleurville,71591,512,3.916,0.630,0.570,845,6595 -Vesc,26373,272,40.448,2.024,1.833,874,6377 -Curnier,26112,172,8.135,0.908,0.822,878,6369 -Beaumes-de-Venise,84012,2404,18.967,1.386,1.255,866,6339 -Souspierre,26343,97,5.275,0.731,0.662,857,6385 -Montjoyer,26203,279,18.276,1.361,1.232,853,6378 -Richerenches,84097,665,11.070,1.059,0.959,849,6362 -Saint-Priest-en-Murat,3256,222,25.866,1.619,1.466,694,6582 -Arbérats-Sillègue,64034,264,5.295,0.732,0.663,376,6256 -Saint-Pandelon,40277,714,9.172,0.964,0.873,373,6295 -Bellenot-sous-Pouilly,21062,231,14.741,1.222,1.106,820,6690 -Aubres,26016,415,20.199,1.431,1.296,870,6372 -Bresson,38057,684,2.778,0.531,0.481,917,6453 -Xermaménil,54595,551,10.841,1.048,0.949,956,6830 -Lacarry-Arhan-Charritte-de-Haut,64298,129,23.534,1.544,1.398,380,6226 -Guiche,64250,961,24.864,1.587,1.437,363,6277 -Saint-Usuge,71484,1335,32.116,1.804,1.633,876,6622 -Laneuvelle,52264,69,11.171,1.064,0.963,897,6762 -Varennes-Saint-Sauveur,71558,1127,30.493,1.758,1.592,875,6605 -Sauvigney-lès-Pesmes,70480,145,6.321,0.800,0.724,895,6694 -Pelves,62650,729,6.709,0.824,0.746,692,7020 -Aleyrac,26003,46,6.613,0.819,0.742,853,6378 -Léren,64334,219,4.579,0.681,0.617,371,6276 -Roche-Saint-Secret-Béconne,26276,446,33.389,1.839,1.665,860,6374 -Arpavon,26013,77,13.512,1.170,1.059,883,6366 -Le Deschaux,39193,1022,8.699,0.939,0.850,890,6655 -Lagney,54288,504,14.316,1.204,1.090,906,6853 -Chantemerle-lès-Grignan,26073,261,10.038,1.008,0.913,846,6367 -Escos,64205,237,5.608,0.754,0.683,375,6270 -Réauville,26261,383,18.639,1.374,1.244,844,6373 -Montréal-les-Sources,26209,24,10.438,1.028,0.931,884,6368 -Saint-Dos,64474,159,1.863,0.434,0.393,374,6273 -Les Bizots,71038,464,21.776,1.485,1.345,807,6631 -Montgaillard,65320,847,9.631,0.988,0.895,465,6231 -Angerville-Bailleul,76012,194,4.568,0.680,0.616,515,6955 -Lauzun,47142,743,24.256,1.568,1.420,502,6400 -Seissan,32426,1096,18.864,1.383,1.252,501,6272 -Pernand-Vergelesses,21480,248,5.559,0.750,0.679,842,6666 -Deuillet,2262,219,3.781,0.619,0.560,727,6947 -Fontaine-Henry,14275,469,5.812,0.767,0.694,449,6913 -Saint-Didier-de-Formans,1347,1944,6.604,0.818,0.741,839,6540 -Guinzeling,57278,69,4.831,0.700,0.634,980,6871 -Beffu-et-le-Morthomme,8056,49,5.555,0.750,0.679,839,6920 -Villers-Hélon,2812,222,8.188,0.911,0.825,720,6905 -Sainte-Jalle,26306,304,18.389,1.365,1.236,880,6364 -Condorcet,26103,480,22.511,1.510,1.367,870,6372 -Échevronne,21241,283,8.671,0.937,0.848,840,6670 -Guerfand,71228,205,6.469,0.810,0.733,853,6633 -Abitain,64004,97,6.637,0.820,0.742,378,6265 -Colonzelle,26099,552,6.320,0.800,0.724,850,6365 -Chamaret,26070,561,8.025,0.902,0.817,851,6368 -Rochebrune,26269,63,16.633,1.298,1.175,876,6361 -Chambeire,21130,391,6.208,0.793,0.718,876,6689 -Auterrive,64082,129,3.094,0.560,0.507,375,6270 -Musculdy,64411,237,24.392,1.572,1.423,373,6234 -Les Pilles,26238,246,6.354,0.802,0.726,875,6364 -Garris,64235,286,3.200,0.569,0.515,371,6259 -L'Étang-Vergy,21254,213,2.621,0.515,0.466,842,6676 -Rémuzat,26264,352,16.793,1.304,1.181,887,6373 -Sainte-Croix,71401,636,21.283,1.468,1.329,874,6606 -Heugas,40125,1336,19.000,1.387,1.256,370,6290 -Les Essarts,41079,111,4.517,0.677,0.613,528,6739 -Colombier,21184,62,3.913,0.630,0.570,826,6675 -Dracy-lès-Couches,71183,150,8.302,0.917,0.830,817,6646 -Pimprez,60492,875,9.462,0.979,0.886,696,6937 -Boudrac,31078,143,11.555,1.082,0.980,493,6231 -Saint-Antonin-sur-Bayon,13090,124,17.552,1.334,1.208,910,6270 -Cirey-lès-Pontailler,21175,201,8.686,0.938,0.849,873,6694 -Messia-sur-Sorne,39327,842,2.705,0.524,0.474,892,6622 -Marnay,71283,557,5.069,0.717,0.649,849,6623 -Eyroles,26130,30,8.744,0.941,0.852,878,6369 -Bou,45043,936,6.315,0.800,0.724,631,6753 -Larribar-Sorhapuru,64319,190,10.621,1.037,0.939,373,6253 -Pommard,21492,523,10.092,1.011,0.915,836,6662 -La Chassagne,39112,123,5.749,0.763,0.691,888,6645 -Carresse-Cassaber,64168,673,13.745,1.180,1.068,375,6275 -Teyssières,26350,86,28.107,1.688,1.528,870,6372 -Juxue,64285,211,15.318,1.246,1.128,372,6242 -Dricourt,8147,84,7.283,0.859,0.778,812,6925 -Montmain,21436,150,9.036,0.957,0.866,855,6660 -Saint-Pierre-les-Étieux,18231,695,27.907,1.682,1.523,667,6624 -Bouvières,26060,147,24.952,1.590,1.440,876,6387 -Saint-Martin-la-Patrouille,71458,63,7.013,0.843,0.763,817,6611 -Labatut,40132,1432,21.239,1.467,1.328,374,6280 -Lohitzun-Oyhercq,64345,204,17.570,1.334,1.208,381,6250 -Estang,32127,639,22.811,1.520,1.376,448,6312 -Gercourt-et-Drillancourt,55206,110,13.572,1.173,1.062,865,6913 -Ostabat-Asme,64437,194,15.430,1.250,1.132,368,6250 -La Touche,26352,250,8.335,0.919,0.832,851,6380 -Bunus,64150,131,6.650,0.821,0.743,370,6244 -Labets-Biscay,64294,158,8.783,0.943,0.854,369,6261 -Oeyreluy,40207,1540,5.670,0.758,0.686,370,6295 -Arhansus,64045,73,5.328,0.735,0.665,375,6248 -Tournans,25567,132,9.145,0.963,0.872,947,6704 -Plougras,22217,413,27.052,1.656,1.499,213,6839 -Châteauneuf-de-Bordette,26082,95,15.389,1.249,1.131,873,6360 -Saugnac-et-Cambran,40294,1552,13.375,1.164,1.054,378,6292 -Loudervielle,65283,54,5.477,0.745,0.675,492,6193 -Marsannay-la-Côe,21390,5366,12.784,1.138,1.030,854,6688 -Longvic,21355,8793,10.537,1.033,0.935,855,6687 -Montagny-près-Louhans,71303,440,9.523,0.982,0.889,873,6619 -Bey,71033,830,8.863,0.948,0.858,850,6640 -Montceaux-Ragny,71308,32,2.576,0.511,0.463,842,6615 -Les Tourrettes,26353,1035,7.268,0.858,0.777,843,6399 -Villepinte,11434,1316,15.444,1.251,1.133,629,6242 -Gaas,40101,505,9.198,0.965,0.874,372,6289 -Mayenne,53147,12893,20.186,1.430,1.295,433,6804 -Verrey-sous-Drée,21669,74,3.436,0.590,0.534,826,6699 -Le Tartre,71534,115,3.824,0.622,0.563,879,6629 -Moroges,71324,571,8.733,0.941,0.852,830,6629 -Agencourt,21001,455,4.274,0.658,0.596,852,6671 -Bénesse-lès-Dax,40035,527,6.006,0.780,0.706,375,6292 -Fluy,80319,321,6.410,0.806,0.730,633,6974 -Lahontan,64305,504,14.734,1.222,1.106,377,6279 -Les Granges-Gontardes,26145,632,7.393,0.865,0.783,837,6370 -Colmen,57149,200,4.838,0.700,0.634,955,6921 -Fussey,21289,119,7.717,0.884,0.800,837,6674 -Saint-Pé-de-Léren,64494,257,5.321,0.734,0.665,374,6276 -Pagolle,64441,269,16.072,1.276,1.155,374,6247 -Nevy-lès-Dole,39387,274,7.066,0.846,0.766,891,6657 -Buxy,71070,2066,11.975,1.102,0.998,827,6626 -Saint-Victor-sur-Ouche,21578,288,12.748,1.137,1.029,836,6683 -Plourivo,22233,2281,28.166,1.689,1.529,252,6869 -Haudivillers,60302,823,9.867,1.000,0.905,644,6934 -Donzère,26116,5739,32.515,1.815,1.643,833,6368 -Arcizac-ez-Angles,65020,258,1.934,0.443,0.401,457,6227 -Saint-Paul-Trois-Châteaux,26324,9026,22.146,1.498,1.356,837,6360 -La Vieille-Loye,39559,408,9.280,0.970,0.878,899,6664 -Rouy-le-Petit,80684,114,3.349,0.583,0.528,696,6962 -Corgoloin,21194,896,12.606,1.130,1.023,844,6668 -Pavant,2596,790,5.400,0.740,0.670,722,6872 -Alçay-Alçabéhéty-Sunharette,64015,226,34.607,1.873,1.696,370,6226 -Châteauneuf-du-Rhône,26085,2732,27.549,1.671,1.513,835,6376 -Candresse,40063,811,8.526,0.929,0.841,380,6300 -Villargondran,73320,868,6.135,0.788,0.713,965,6469 -Cruas,7076,2992,15.488,1.253,1.134,841,6399 -Pollieu,1302,161,3.649,0.608,0.550,912,6526 -Espeluche,26121,1039,11.414,1.075,0.973,843,6384 -Grazay,53109,623,16.832,1.306,1.182,439,6803 -Clansayes,26093,522,14.733,1.222,1.106,843,6368 -Charigny,21145,35,3.115,0.562,0.509,806,6706 -Culètre,21216,96,5.621,0.755,0.684,821,6673 -Chambœuf,21132,374,11.244,1.067,0.966,846,6682 -Saint-Cricq-du-Gave,40254,418,8.582,0.932,0.844,377,6279 -Ance Féas,64225,619,23.904,1.556,1.409,402,6236 -Montélimar,26198,38692,46.410,2.168,1.963,835,6383 -Broin,21112,435,14.567,1.215,1.100,859,6666 -Saint-Valery-en-Caux,76655,4105,10.645,1.039,0.941,538,6977 -Louresse-Rochemenier,49182,844,26.038,1.624,1.470,453,6692 -Guéthary,64249,1311,1.472,0.386,0.349,327,6268 -L'Épine,85083,1649,8.644,0.936,0.847,303,6666 -Bourbonne-les-Bains,52060,2133,65.223,2.571,2.328,909,6764 -Saint-Apollinaire,21540,7340,10.220,1.018,0.922,857,6696 -La Coucourde,26106,1055,10.053,1.009,0.914,839,6393 -Vitrac-sur-Montane,19287,261,27.621,1.673,1.515,614,6472 -Valaurie,26360,593,12.438,1.123,1.017,843,6368 -Montboucher-sur-Jabron,26191,2273,9.973,1.005,0.910,845,6384 -Condillac,26102,141,10.002,1.007,0.912,847,6397 -Broye-Aubigney-Montseugny,70101,477,25.560,1.609,1.457,891,6693 -Savoillan,84125,70,8.787,0.944,0.855,891,6342 -Orcival,63264,239,27.813,1.679,1.520,686,6502 -Santec,29273,2367,8.146,0.908,0.822,180,6869 -Rully,71378,1556,15.693,1.261,1.142,833,6641 -Bassussarry,64100,3074,6.604,0.818,0.741,337,6272 -Sigy-le-Châtel,71521,100,7.010,0.843,0.763,822,6607 -Paris-l'Hôpital,71343,298,2.754,0.528,0.478,824,6647 -Simandre,71522,1716,23.014,1.527,1.383,848,6612 -Noiron-sous-Gevrey,21458,1083,6.601,0.818,0.741,857,6678 -Argilly,21022,508,33.966,1.855,1.680,859,6666 -Cornillac,26104,81,19.181,1.394,1.262,894,6374 -Bellême,61038,1515,1.723,0.418,0.378,520,6810 -Verdun-sur-le-Doubs,71566,1115,7.433,0.868,0.786,854,6646 -Biriatou,64130,1221,11.159,1.063,0.962,314,6261 -Devise,80239,50,2.782,0.531,0.481,701,6973 -Saint-Maur,39492,233,6.407,0.806,0.730,898,6614 -La Ferté-Bernard,72132,8848,15.593,1.257,1.138,526,6790 -Coupelle-Neuve,62246,163,4.556,0.679,0.615,638,7044 -La Charce,26075,35,9.414,0.977,0.885,896,6380 -Busy,25103,628,5.300,0.733,0.664,925,6677 -Brienne,71061,471,5.704,0.760,0.688,855,6609 -Châteauneuf-d'Ille-et-Vilaine,35070,1675,1.399,0.376,0.340,336,6840 -Louhossoa,64350,904,7.438,0.868,0.786,346,6258 -La Rochette-du-Buis,26279,78,10.580,1.035,0.937,892,6356 -Irouléguy,64274,367,9.411,0.976,0.884,352,6243 -Chaudefontaine,51139,324,13.040,1.149,1.040,834,6891 -Velleclaire,70531,107,4.161,0.649,0.588,918,6705 -Viger,65470,135,3.139,0.564,0.511,452,6223 -Chaumergy,39124,487,6.234,0.795,0.720,888,6639 -Granges,71225,536,10.873,1.050,0.951,835,6625 -Montferrand-la-Fare,26199,30,11.367,1.073,0.972,894,6361 -Urepel,64543,288,26.329,1.633,1.479,337,6228 -Lercoul,9162,25,19.423,1.403,1.270,580,6186 -Aigremont,52002,18,4.890,0.704,0.637,905,6773 -Lesches-en-Diois,26164,50,19.912,1.420,1.286,901,6394 -Vitteaux,21710,1075,20.842,1.453,1.316,814,6699 -Fley,71201,222,8.564,0.932,0.844,824,6621 -Bussy-la-Pesle,21121,76,11.491,1.079,0.977,832,6695 -Chilly-le-Vignoble,39146,671,3.094,0.560,0.507,890,6621 -Betchat,9054,321,22.296,1.503,1.361,538,6226 -Vonges,21713,344,4.648,0.686,0.621,882,6690 -Montceau-les-Mines,71306,18722,16.739,1.302,1.179,801,6618 -Pommerol,26245,15,10.042,1.009,0.914,898,6373 -Rioms,26267,26,9.516,0.982,0.889,897,6357 -Saint-Marcel,71445,6002,10.139,1.014,0.918,845,6631 -Bournainville-Faverolles,27106,485,7.015,0.843,0.763,519,6896 -Saint-Trinit,84120,123,16.896,1.308,1.184,896,6339 -Ainhice-Mongelos,64013,171,10.180,1.016,0.920,361,6246 -Échourgnac,24159,398,34.797,1.878,1.700,480,6456 -Mornay,71323,128,20.179,1.430,1.295,807,6599 -Le Poët-en-Percip,26242,17,6.118,0.787,0.713,891,6352 -Aurel,84005,212,29.297,1.723,1.560,896,6341 -Montchanin,71310,5098,8.068,0.904,0.818,813,6627 -Recoubeau-Jansac,26262,271,12.586,1.129,1.022,892,6400 -Saint-Martin-de-Seignanx,40273,5349,45.753,2.153,1.949,342,6281 -Montmirey-le-Château,39361,194,8.089,0.905,0.819,889,6684 -Lavigny,39288,375,5.413,0.741,0.671,897,6627 -Saint-Barthélemy,40251,423,5.694,0.760,0.688,350,6277 -Saint-Loup,39490,284,9.599,0.986,0.893,879,6658 -Ferrassières,26135,129,29.529,1.730,1.566,896,6339 -Ossès,64436,845,42.562,2.077,1.881,352,6253 -Curtil-sous-Burnand,71164,135,8.369,0.921,0.834,823,6612 -Saint-Sauveur,21571,252,9.408,0.976,0.884,881,6700 -Roussieux,26286,23,9.538,0.983,0.890,896,6361 -Bellignat,1031,3618,7.821,0.890,0.806,901,6575 -Saint-Étienne-du-Vauvray,27537,889,1.657,0.410,0.371,569,6907 -Sainte-Euphémie-sur-Ouvèze,26303,71,11.304,1.070,0.969,892,6356 -Montguers,26201,43,11.050,1.058,0.958,899,6360 -Plottes,71353,538,10.108,1.012,0.916,844,6607 -Bertry,59074,2181,8.559,0.931,0.843,731,7000 -Chivres,21172,299,8.276,0.916,0.829,860,6652 -Vallerois-le-Bois,70516,257,12.605,1.130,1.023,950,6724 -Toulouse-le-Château,39533,221,4.155,0.649,0.588,896,6638 -Bersaillin,39049,402,14.069,1.194,1.081,900,6642 -Saint-Jean-de-Trézy,71431,363,11.217,1.066,0.965,823,6641 -Saint-Sauveur-Gouvernet,26329,183,19.604,1.409,1.276,894,6361 -Bletterans,39056,1440,7.877,0.893,0.809,889,6630 -Montbrun-les-Bains,26193,444,33.549,1.844,1.670,891,6348 -Baleyssagues,47020,174,8.215,0.912,0.826,475,6401 -Orthevielle,40212,911,13.966,1.190,1.077,364,6280 -Dommartin-la-Montagne,55157,51,6.759,0.828,0.750,889,6883 -Camiran,33087,415,5.785,0.766,0.694,456,6399 -Raulhac,15159,276,17.115,1.317,1.192,675,6423 -Charens,26076,29,13.017,1.148,1.039,899,6389 -Saint-Martin-du-Tartre,71455,159,8.094,0.906,0.820,823,6619 -Rottier,26283,21,8.398,0.922,0.835,891,6377 -Vercoiran,26370,142,20.202,1.431,1.296,889,6360 -Vaux-en-Pré,71563,83,4.433,0.670,0.607,823,6616 -La Motte-Chalancon,26215,427,22.716,1.517,1.374,892,6381 -Le Chateley,39119,88,4.703,0.690,0.625,892,6647 -Bernolsheim,67033,602,3.566,0.601,0.544,1045,6861 -Montlaur-en-Diois,26204,149,9.452,0.979,0.886,893,6395 -Beaumont-en-Diois,26036,101,17.616,1.336,1.210,898,6385 -Bragny-sur-Saône,71054,626,14.868,1.227,1.111,854,6651 -Le Pin,39421,242,2.886,0.541,0.490,895,6626 -Biefmorin,39054,94,11.340,1.072,0.971,890,6647 -Comps,33132,535,1.721,0.418,0.378,418,6448 -Valdoule,5024,212,58.872,2.442,2.211,896,6381 -Sault,84123,1372,112.159,3.371,3.052,896,6327 -Saint-Auban-sur-l'Ouvèze,26292,215,16.516,1.294,1.172,896,6361 -Reilhanette,26263,144,15.022,1.234,1.117,890,6347 -Cornillon-sur-l'Oule,26105,69,14.478,1.211,1.096,891,6377 -Julvécourt,55260,60,8.713,0.940,0.851,858,6887 -Huest,27347,787,6.535,0.814,0.737,569,6881 -Jonchères,26152,29,16.351,1.287,1.165,890,6385 -Aulan,26018,11,10.762,1.044,0.945,892,6351 -Wacquemoulin,60698,310,6.688,0.823,0.745,672,6932 -Le Bô,14080,112,3.913,0.630,0.570,447,6873 -Change,71085,221,6.579,0.816,0.739,825,6650 -Latresne,33234,3425,10.258,1.019,0.923,421,6417 -Saint-Privé,71471,74,5.213,0.727,0.658,821,6622 -Beaune,21054,21644,31.205,1.778,1.610,839,6657 -Saint-Germain-lès-Buxy,71422,269,13.441,1.167,1.057,836,6621 -Menglon,26178,501,36.565,1.925,1.743,892,6397 -Caro,64166,199,4.053,0.641,0.580,357,6235 -Saint-Alban-Auriolles,7207,1094,17.399,1.328,1.202,805,6371 -Poyols,26253,69,12.920,1.144,1.036,894,6389 -Frontenard,71208,230,12.377,1.120,1.014,864,6647 -Fontenay-sur-Conie,28157,132,13.415,1.166,1.056,600,6784 -Herbéviller,54259,235,8.206,0.912,0.826,978,6833 -Espiute,64215,108,4.061,0.641,0.580,383,6257 -Normier,21463,43,5.137,0.721,0.653,807,6697 -Veilly,21660,43,5.459,0.744,0.674,822,6669 -Espeyroux,46096,97,7.730,0.885,0.801,617,6408 -Saint-Désert,71404,868,5.018,0.713,0.646,831,6631 -Ouvrouer-les-Champs,45241,570,10.551,1.034,0.936,637,6751 -Champignolles,21140,75,6.389,0.805,0.729,819,6660 -Savolles,21595,162,3.110,0.561,0.508,872,6701 -Perrigny-lès-Dijon,21481,1871,6.689,0.823,0.745,854,6687 -Sivergues,84128,42,9.432,0.978,0.885,897,6305 -Amondans,25017,89,5.697,0.760,0.688,929,6667 -Saint-Saturnin-lès-Apt,84118,2766,76.802,2.790,2.526,896,6327 -Geudertheim,67156,2491,11.458,1.077,0.975,1052,6859 -Auribeau,84006,72,7.527,0.873,0.790,898,6305 -Prisches,59474,1081,23.134,1.531,1.386,757,6999 -Sevrey,71520,1231,8.582,0.932,0.844,838,6628 -Castellet-en-Luberon,84033,129,9.548,0.984,0.891,898,6308 -Saint-Esteben,64476,416,13.734,1.180,1.068,359,6253 -Pouilloux,71356,1003,18.677,1.376,1.246,802,6609 -Ménetreuil,71293,410,15.201,1.241,1.124,864,6610 -Daix,21223,1439,11.778,1.092,0.989,852,6696 -Savigny-sur-Seille,71508,431,14.586,1.216,1.101,863,6617 -Noyers-sur-Jabron,4139,516,56.724,2.397,2.170,920,6349 -Ham-sur-Meuse,8207,241,6.125,0.788,0.713,829,6997 -Gargas,84047,3033,14.876,1.228,1.112,888,6316 -Parcey,39405,961,9.318,0.972,0.880,891,6661 -Huilly-sur-Seille,71234,328,12.292,1.116,1.010,856,6611 -Bénesse-Maremne,40036,3010,18.702,1.377,1.247,349,6290 -Arcangues,64038,3147,17.633,1.337,1.211,334,6265 -Tournus,71543,5562,14.672,1.219,1.104,847,6607 -Armendarits,64046,408,17.431,1.329,1.203,364,6254 -Cambo-les-Bains,64160,6629,22.682,1.516,1.373,345,6265 -Saint-Étienne-de-Baïgorry,64477,1487,70.001,2.663,2.411,346,6247 -Ondres,40209,5214,15.240,1.243,1.125,343,6285 -Jacou,34120,6785,3.346,0.582,0.527,774,6286 -Rustrel,84103,702,28.784,1.708,1.546,899,6321 -Lagarde-d'Apt,84060,37,22.271,1.502,1.360,902,6323 -Lourmarin,84068,1109,20.205,1.431,1.296,889,6302 -Le Mesnil-Villeman,50326,237,10.912,1.051,0.952,380,6872 -Saint-Jean-le-Vieux,64484,852,11.623,1.085,0.982,356,6242 -Jouhe,39270,557,6.007,0.780,0.706,888,6672 -Masparraute,64368,226,8.182,0.910,0.824,368,6263 -Clux-Villeneuve,71578,336,15.453,1.251,1.133,867,6656 -Sergenaux,39511,69,3.275,0.576,0.522,886,6647 -Saint-Pierre-de-Chartreuse,38442,1041,79.804,2.844,2.575,925,6476 -Tharaux,30327,55,9.609,0.987,0.894,804,6350 -Passy,71344,63,4.424,0.670,0.607,819,6607 -Dieupentale,82048,1682,6.186,0.792,0.717,561,6307 -Fons-sur-Lussan,30113,237,10.609,1.037,0.939,805,6345 -Neuvilley,39386,86,4.169,0.650,0.589,899,6648 -Saint-Jean-Pied-de-Port,64485,1586,2.750,0.528,0.478,355,6236 -Montapas,58171,287,23.798,1.553,1.406,745,6668 -Saint-Nazaire,30288,1210,6.766,0.828,0.750,828,6346 -Bourdon,80123,396,6.942,0.839,0.760,637,6989 -Ibarrolle,64267,85,8.952,0.952,0.862,366,6239 -Sainte-Marie-de-Gosse,40271,1166,26.550,1.640,1.485,361,6284 -Saint-Privat-de-Champclos,30293,340,11.753,1.091,0.988,810,6355 -Champagney,39096,485,15.533,1.255,1.136,888,6690 -Montoillot,21439,76,7.691,0.883,0.799,827,6686 -Villers-les-Pots,21699,1115,10.434,1.028,0.931,875,6682 -Thoard,4217,710,44.190,2.116,1.916,945,6343 -Rivières,30215,347,9.684,0.991,0.897,805,6345 -Bouquet,30048,173,30.296,1.752,1.586,801,6339 -Saint-Étienne-d'Orthe,40256,703,11.175,1.064,0.963,361,6284 -Bourg-Saint-Andéol,7042,7158,42.886,2.085,1.888,832,6369 -Pougnadoresse,30205,246,7.717,0.884,0.800,820,6335 -Cosges,39167,366,13.578,1.173,1.062,883,6628 -Saint-Eusèbe,71412,1185,21.278,1.468,1.329,811,6628 -Vallery,89428,555,12.432,1.122,1.016,706,6792 -Martrois,21392,62,7.560,0.875,0.792,814,6691 -Échalas,69080,1771,20.995,1.459,1.321,834,6494 -Lachapelle-sous-Aubenas,7122,1582,10.233,1.018,0.922,810,6386 -Rocher,7193,273,3.141,0.564,0.511,802,6387 -Saint-Julien-du-Serre,7254,875,9.725,0.993,0.899,812,6394 -Lalevade-d'Ardèche,7127,1100,2.279,0.481,0.436,803,6395 -Grospierres,7101,887,27.198,1.660,1.503,806,6367 -Aouste-sur-Sye,26011,2495,17.936,1.348,1.220,864,6404 -Fons,7091,331,4.080,0.643,0.582,809,6388 -Villeneuve,4242,4136,25.513,1.608,1.456,930,6309 -Les Loges,14374,124,4.507,0.676,0.612,424,6889 -Gabriac,48067,99,8.473,0.927,0.839,758,6341 -Montaigu,39348,451,7.147,0.851,0.771,895,6619 -Saint-Maurice-d'Ardèche,7272,304,5.260,0.730,0.661,812,6379 -Vaudrey,39546,388,18.042,1.352,1.224,898,6652 -Ruoms,7201,2260,12.406,1.121,1.015,809,6374 -Pradons,7183,467,8.057,0.904,0.818,809,6374 -Chassiers,7058,1022,12.414,1.122,1.016,802,6388 -Rochessauve,7194,442,17.442,1.329,1.203,825,6400 -Annonville,52012,33,6.220,0.794,0.719,867,6811 -Suzoy,60625,557,5.151,0.722,0.654,694,6942 -Les Hautes-Rivières,8218,1507,31.225,1.779,1.611,834,6974 -Anneyron,26010,3962,36.591,1.925,1.743,851,6461 -Montcey,70358,278,8.138,0.908,0.822,944,6735 -Bessan,34031,4975,27.870,1.680,1.521,730,6252 -Lavangeot,39284,135,2.352,0.488,0.442,897,6675 -Villers-Robert,39571,231,10.004,1.007,0.912,892,6652 -Grayan-et-l'Hôpital,33193,1351,45.238,2.141,1.938,384,6492 -Ruvigny,10332,493,4.172,0.650,0.589,787,6798 -Maconge,21362,132,6.348,0.802,0.726,818,6683 -Mavilly-Mandelot,21397,177,9.727,0.993,0.899,833,6665 -Lavilledieu,7138,2103,14.893,1.228,1.112,813,6390 -Trouhans,21645,611,10.796,1.046,0.947,871,6677 -Berzème,7032,179,18.235,1.359,1.230,827,6395 -Baulme-la-Roche,21051,93,6.713,0.825,0.747,836,6697 -Montcenis,71309,2180,12.375,1.120,1.014,806,6635 -Santilly,71498,136,7.243,0.857,0.776,831,6614 -Agey,21002,287,8.411,0.923,0.836,833,6691 -Prenois,21508,406,19.214,1.395,1.263,843,6702 -Saint-Germain,7241,709,9.728,0.993,0.899,817,6386 -Ucel,7325,2056,5.590,0.753,0.682,809,6396 -Saint-Antoine,15172,112,7.246,0.857,0.776,646,6406 -Chérancé,72078,368,10.326,1.023,0.926,492,6803 -Saint-Jean-d'Angle,17348,690,21.877,1.489,1.348,395,6531 -Aron,53008,1788,32.830,1.824,1.651,440,6805 -Le Beaucet,84011,347,9.035,0.957,0.866,870,6324 -La Bazoge-Montpinçon,53021,999,8.518,0.929,0.841,432,6804 -Saint-Fraimbault-de-Prières,53216,1001,16.951,1.311,1.187,435,6809 -Vincelles,71580,423,5.668,0.758,0.686,872,6620 -Lacrost,71248,726,10.501,1.031,0.933,848,6612 -Saint-Loup-du-Gast,53234,362,10.017,1.007,0.912,434,6814 -Chevreaux,39142,121,6.139,0.789,0.714,886,6600 -Essertenne,71191,476,12.919,1.144,1.036,818,6639 -Gamarthe,64229,122,9.858,0.999,0.905,364,6244 -Terrou,46314,171,10.147,1.014,0.918,617,6408 -Erny-Saint-Julien,62304,328,5.408,0.740,0.670,645,7056 -Anhaux,64026,393,12.377,1.120,1.014,352,6238 -Oeyregave,40206,350,7.990,0.900,0.815,370,6278 -La Chapelle-en-Lafaye,42050,112,9.165,0.964,0.873,778,6484 -Chelles,60145,524,9.034,0.957,0.866,703,6914 -La Chapelle-Montligeon,61097,536,8.452,0.925,0.838,529,6823 -Saint-Jean-de-Marsacq,40264,1567,26.243,1.631,1.477,359,6286 -Soliers,14675,2087,5.065,0.716,0.648,458,6898 -Lacarre,64297,177,4.467,0.673,0.609,361,6240 -Sailly,71381,90,9.054,0.958,0.867,821,6604 -Champagne-en-Valromey,1079,825,18.336,1.363,1.234,907,6538 -Chantrigné,53055,612,18.687,1.376,1.246,433,6818 -Champéon,53051,580,21.000,1.459,1.321,441,6815 -Moulay,53162,959,8.731,0.941,0.852,429,6801 -Brantes,84021,84,28.232,1.691,1.531,891,6348 -La Frette,71206,243,11.317,1.071,0.970,855,6619 -Soissons-sur-Nacey,21610,361,7.738,0.885,0.801,888,6685 -Séligney,39507,76,4.165,0.650,0.589,893,6654 -Chaudenay-le-Château,21156,47,5.158,0.723,0.655,826,6678 -Méharin,64375,271,12.783,1.138,1.030,365,6257 -Boussois,59104,3245,6.284,0.798,0.723,776,7021 -Marcillé-la-Ville,53144,816,27.183,1.660,1.503,445,6811 -Lassay-les-Châteaux,53127,2293,58.409,2.433,2.203,435,6821 -Tauriers,7318,188,4.497,0.675,0.611,801,6386 -Vérissey,71568,54,8.378,0.921,0.834,860,6626 -Vagnas,7328,544,23.914,1.557,1.410,804,6364 -La Haie-Traversaine,53111,479,11.790,1.093,0.990,433,6815 -Montbazin,34165,2975,21.483,1.475,1.335,753,6275 -Villeneuve-en-Perseigne,72137,2220,87.326,2.975,2.694,493,6822 -Lussas,7145,1150,16.521,1.294,1.172,816,6394 -Larnas,7133,231,13.910,1.187,1.075,829,6376 -Pont-de-Labeaume,7178,571,4.814,0.698,0.632,804,6397 -Saint-Martin-sur-Lavezon,7270,434,23.623,1.547,1.401,830,6398 -Blot-l'Église,63043,403,25.250,1.599,1.448,698,6546 -Villebichot,21691,390,10.466,1.030,0.933,855,6675 -Vals-les-Bains,7331,3541,19.480,1.405,1.272,808,6399 -Bonnat,23025,1302,45.643,2.150,1.947,619,6577 -Meyras,7156,953,12.438,1.123,1.017,799,6401 -Saubusse,40293,1101,10.387,1.026,0.929,362,6293 -Angoumé,40003,283,7.860,0.892,0.808,367,6296 -Suhescun,64528,173,11.895,1.098,0.994,360,6244 -Dezize-lès-Maranges,71174,174,5.139,0.722,0.654,826,6650 -Ailhon,7002,560,7.912,0.895,0.810,805,6389 -Saffres,21537,115,12.490,1.125,1.019,818,6698 -La Guiche,71231,621,27.667,1.674,1.516,813,6606 -Sceautres,7311,143,14.582,1.216,1.101,830,6392 -Curciat-Dongalon,1139,443,23.981,1.559,1.412,864,6602 -Semarey,21600,122,7.364,0.864,0.782,823,6685 -Rosières,7199,1188,16.455,1.291,1.169,798,6381 -Mérillac,22148,235,14.023,1.192,1.079,298,6809 -Rochecolombe,7190,210,21.560,1.478,1.338,817,6383 -Cressia,39180,260,15.020,1.234,1.117,889,6609 -Saint-Paul-de-Vern,46286,183,10.791,1.046,0.947,618,6417 -Le Vernois,39553,316,1.067,0.329,0.298,899,6628 -Saint-Pierre-la-Roche,7283,59,9.985,1.006,0.911,830,6398 -Archelange,39014,223,4.957,0.709,0.642,892,6673 -Orgelet,39397,1583,25.545,1.609,1.457,904,6602 -Saint-Laurent-sous-Coiron,7263,100,15.588,1.257,1.138,819,6395 -Laurac-en-Vivarais,7134,985,9.053,0.958,0.867,800,6382 -Tuffé Val de la Chéronne,72363,1662,29.386,1.726,1.563,517,6780 -Crissey,39182,640,4.731,0.692,0.627,888,6664 -Voiteur,39582,748,9.464,0.979,0.886,898,6630 -Mariac,7150,581,16.420,1.290,1.168,805,6420 -Saint-Sernin-du-Plain,71480,573,14.583,1.216,1.101,824,6647 -Izeure,21319,857,16.800,1.305,1.182,863,6676 -Vernas,38535,262,5.889,0.772,0.699,875,6523 -Surcamps,80742,65,2.996,0.551,0.499,633,6998 -Saint-Privat,7289,1720,6.236,0.795,0.720,812,6394 -Moëlan-sur-Mer,29150,6800,47.459,2.193,1.986,199,6764 -Mars-sous-Bourcq,8279,54,4.746,0.693,0.627,818,6924 -Belmont,39048,266,16.037,1.275,1.154,897,6658 -Pouilly-sur-Saône,21502,626,5.199,0.726,0.657,860,6661 -Varmonzey,88493,30,2.607,0.514,0.465,942,6807 -Saint-Émiland,71409,360,24.257,1.568,1.420,813,6647 -Beauvernois,71028,122,8.914,0.950,0.860,885,6643 -Lagorce,7126,1158,69.272,2.649,2.398,809,6372 -Jujurieux,1199,2181,15.517,1.254,1.135,889,6550 -Gras,7099,625,57.628,2.416,2.187,817,6372 -Villefranque,64558,2596,17.165,1.319,1.194,338,6270 -Chesnois-Auboncourt,8117,173,4.797,0.697,0.631,815,6940 -La Bastide-Clairence,64289,985,23.464,1.542,1.396,356,6269 -Uzer,7327,416,3.474,0.593,0.537,806,6380 -Béhorléguy,64107,74,20.529,1.442,1.306,371,6232 -Gy-les-Nonains,45165,635,20.194,1.430,1.295,690,6756 -Ternant,21625,87,16.369,1.288,1.166,836,6681 -Alba-la-Romaine,7005,1428,30.935,1.770,1.603,830,6386 -Saint-Remèze,7291,875,43.627,2.102,1.903,821,6361 -Sampzon,7306,226,8.431,0.924,0.837,804,6370 -Anglet,64024,38663,26.888,1.651,1.495,336,6272 -Saint-Martin-d'Arrossa,64490,537,18.425,1.366,1.237,353,6243 -Beyrie-sur-Joyeuse,64120,514,24.752,1.584,1.434,364,6254 -La Ville-aux-Bois,10411,27,5.597,0.753,0.682,826,6813 -Sourans,25552,119,4.201,0.652,0.590,976,6707 -Hastingues,40120,571,14.534,1.214,1.099,363,6277 -Godewaersvelde,59262,2055,11.955,1.101,0.997,677,7077 -Mendionde,64377,844,21.469,1.475,1.335,349,6259 -Tréclun,21643,464,5.741,0.763,0.691,871,6677 -Montluçon,3185,36147,20.687,1.448,1.311,668,6586 -Chauzon,7061,369,10.816,1.047,0.948,809,6377 -Châtenoy-le-Royal,71118,6201,12.533,1.127,1.020,836,6633 -Saint-Cirgues-de-Prades,7223,140,3.474,0.593,0.537,800,6391 -Longecourt-en-Plaine,21353,1223,10.000,1.007,0.912,865,6679 -Ranspach-le-Haut,68264,626,4.408,0.668,0.605,1031,6729 -Valvignères,7332,485,30.325,1.753,1.587,821,6377 -Montagny-lès-Buxy,71302,218,5.303,0.733,0.664,826,6625 -Saint-Louis-en-l'Isle,24444,302,2.828,0.535,0.484,494,6443 -Fabras,7087,409,7.585,0.877,0.794,803,6396 -Poncey-lès-Athée,21493,587,6.580,0.817,0.740,878,6685 -Vallon-Pont-d'Arc,7330,2359,29.108,1.717,1.555,816,6366 -Saint-Sernin,7296,1655,5.825,0.768,0.695,811,6387 -Saint-Martin-d'Auxy,71449,104,7.310,0.861,0.780,820,6625 -Brans,39074,221,8.735,0.941,0.852,896,6682 -Montpellier,34172,281613,57.073,2.405,2.178,775,6282 -Crugey,21214,179,6.423,0.807,0.731,826,6676 -Chille,39145,292,1.982,0.448,0.406,896,6625 -Thury,21636,286,13.355,1.163,1.053,814,6658 -Tressin,59602,1407,1.899,0.439,0.397,713,7057 -Saint-Germain-de-Livet,14582,769,16.503,1.293,1.171,492,6889 -Pranles,7184,474,29.134,1.718,1.556,823,6407 -Is-en-Bassigny,52248,550,19.468,1.404,1.271,882,6771 -Antheuil,21014,59,10.270,1.020,0.924,832,6679 -Vinezac,7343,1365,11.057,1.058,0.958,808,6383 -Franxault,21285,469,12.509,1.126,1.019,875,6665 -Sainte-Marie-la-Blanche,21558,873,6.844,0.833,0.754,846,6654 -Juif,71246,258,11.916,1.099,0.995,863,6622 -Prades,7182,1241,9.989,1.006,0.911,805,6393 -Ascarat,64066,318,5.831,0.769,0.696,352,6243 -Vesseaux,7339,1895,18.941,1.385,1.254,817,6399 -Rimbez-et-Baudiets,40242,104,32.908,1.826,1.653,460,6331 -Montcoy,71312,251,9.143,0.962,0.871,853,6636 -Aubenas,7019,12189,14.652,1.218,1.103,809,6394 -Saint-Seurin-de-Cadourne,33476,713,22.969,1.526,1.382,400,6471 -Thevet-Saint-Julien,36221,391,31.274,1.780,1.612,629,6612 -Bidon,7034,235,29.476,1.728,1.565,824,6360 -Ailly,27005,1152,15.688,1.261,1.142,569,6896 -Painblanc,21476,159,9.281,0.970,0.878,824,6672 -Dounoux,88157,856,9.317,0.972,0.880,955,6786 -Noves,13066,5849,26.511,1.639,1.484,854,6312 -Saint-Bauzile,7219,305,7.091,0.848,0.768,832,6397 -Salavas,7304,660,17.167,1.319,1.194,812,6366 -Ménerbes,84073,991,30.436,1.756,1.590,877,6302 -Iholdy,64271,555,22.020,1.494,1.353,360,6248 -Malans,70327,132,6.740,0.826,0.748,898,6688 -Bonloc,64134,366,0.999,0.318,0.288,354,6262 -Rouans,44145,2913,37.945,1.961,1.776,334,6681 -Chenôve,21166,13802,7.474,0.870,0.788,849,6690 -Marmagne,71282,1242,31.163,1.777,1.609,803,6643 -Mendive,64379,164,41.919,2.061,1.866,371,6230 -Amorots-Succos,64019,235,15.193,1.241,1.124,363,6260 -Saint-Pierre-de-Varennes,71468,847,23.556,1.545,1.399,818,6639 -Crestet,84040,410,11.444,1.077,0.975,868,6348 -Courbouzon,39169,587,3.251,0.574,0.520,894,6622 -Francheville,39236,51,1.477,0.387,0.350,892,6640 -Collonges-lès-Bévy,21182,94,5.427,0.742,0.672,837,6677 -Corcelles-les-Monts,21192,647,14.493,1.212,1.097,849,6691 -Gergueil,21293,120,9.914,1.002,0.907,836,6682 -Willeroncourt,55581,107,8.043,0.903,0.818,872,6848 -Louzes,72171,101,8.249,0.914,0.828,500,6816 -Saint-Laurent-d'Andenay,71436,1019,11.393,1.074,0.972,818,6627 -Vadans,70510,136,12.930,1.145,1.037,894,6699 -Trévé,22376,1645,26.711,1.645,1.489,273,6807 -Saint-Mard-de-Vaux,71447,277,6.688,0.823,0.745,826,6635 -Le Gua,38187,1796,28.687,1.705,1.544,908,6436 -Longwy-sur-le-Doubs,39299,513,17.190,1.320,1.195,878,6658 -Mesmont,21406,249,6.370,0.803,0.727,831,6693 -La Broque,67066,2681,23.106,1.530,1.385,1004,6823 -Cheval-Blanc,84038,4215,58.513,2.435,2.205,877,6302 -Cry,89132,172,11.240,1.067,0.966,792,6736 -Valleret,52502,57,4.845,0.701,0.635,850,6823 -Ville-Savoye,2817,82,2.687,0.522,0.473,746,6911 -Magny-sur-Tille,21370,869,10.547,1.034,0.936,866,6685 -Bédarrides,84016,5086,24.960,1.590,1.440,855,6327 -Niderviller,57505,1222,10.898,1.051,0.952,1005,6853 -Saint-Remy-le-Petit,8397,43,7.467,0.870,0.788,790,6921 -Navilly,71329,430,9.829,0.998,0.904,865,6651 -Sare,64504,2642,51.595,2.286,2.070,327,6260 -Morières-lès-Avignon,84081,8295,10.396,1.026,0.929,854,6319 -Saint-Laurent-de-Gosse,40268,603,17.601,1.335,1.209,354,6281 -Geruge,39250,170,4.379,0.666,0.603,893,6618 -Marey-lès-Fussey,21384,57,3.949,0.633,0.573,840,6670 -Chevannes,21169,151,6.327,0.801,0.725,840,6675 -La Chapelle-de-Bragny,71089,253,15.918,1.270,1.150,831,6614 -Loriol-du-Comtat,84067,2600,11.275,1.069,0.968,861,6331 -Corvol-l'Orgueilleux,58085,803,30.356,1.754,1.588,733,6704 -Flagey-Echézeaux,21267,464,8.066,0.904,0.818,853,6674 -Saint-Saturnin-lès-Avignon,84119,4808,6.215,0.794,0.719,854,6319 -Musigny,21447,84,6.170,0.791,0.716,817,6676 -Saint-André-de-Seignanx,40248,1720,19.696,1.413,1.279,350,6285 -Marcillé-Robert,35165,968,20.514,1.442,1.306,377,6770 -Torcy,71540,3025,19.683,1.412,1.278,809,6628 -Épinac,71190,2227,25.954,1.622,1.469,813,6652 -Châtellenot,21153,148,11.540,1.081,0.979,813,6680 -Aigues-Mortes,30003,8316,57.644,2.417,2.188,801,6268 -Bussunarits-Sarrasquette,64154,203,11.999,1.103,0.999,366,6239 -Saint-Nicolas-lès-Cîteaux,21564,427,28.942,1.712,1.550,861,6673 -Chambéria,39092,169,14.749,1.222,1.106,896,6601 -Plougourvest,29193,1400,14.185,1.199,1.086,176,6850 -Orgeux,21469,469,4.765,0.695,0.629,863,6696 -Moisville,27411,231,7.026,0.844,0.764,566,6864 -Saunières,71504,81,7.583,0.877,0.794,857,6646 -Plan-d'Orgon,13076,3429,14.989,1.232,1.115,861,6307 -Bréal-sous-Vitré,35038,654,5.794,0.766,0.694,400,6782 -Saint-Martin-d'Arberoue,64489,317,14.814,1.225,1.109,359,6259 -Mirande,32256,3483,23.655,1.548,1.402,487,6274 -Hélette,64259,717,23.753,1.551,1.404,356,6258 -Eyragues,13036,4436,20.788,1.451,1.314,850,6305 -Authumes,71013,254,12.914,1.144,1.036,876,6642 -Roche-la-Molière,42189,9708,17.482,1.331,1.205,806,6481 -Brain,21100,35,4.132,0.647,0.586,812,6709 -Sampans,39501,1154,7.489,0.871,0.789,883,6672 -Isturits,64277,519,13.715,1.179,1.067,362,6262 -Saint-Jean-de-Luz,64483,14057,19.092,1.391,1.259,327,6268 -Saint-Andiol,13089,3204,16.106,1.277,1.156,854,6303 -Les Aspres,61422,655,23.367,1.539,1.393,521,6848 -Angresse,40004,1994,7.717,0.884,0.800,347,6296 -Mollkirch,67299,928,12.718,1.135,1.028,1024,6831 -Tercis-les-Bains,40314,1184,10.238,1.018,0.922,369,6296 -Le Thor,84132,8972,35.492,1.896,1.717,863,6311 -Montfaucon,30178,1478,4.054,0.641,0.580,837,6333 -Bez-et-Esparon,30038,341,8.373,0.921,0.834,744,6322 -Le Pontet,84092,17556,10.746,1.043,0.944,849,6323 -Chavanac,19052,52,9.750,0.994,0.900,628,6502 -Pujaut,30209,4243,23.665,1.548,1.402,839,6325 -Oppède,84086,1361,24.383,1.572,1.423,873,6303 -Chazilly,21164,138,8.774,0.943,0.854,818,6676 -Boscamnant,17055,385,14.078,1.194,1.081,462,6459 -Commarin,21187,119,6.482,0.810,0.733,824,6686 -Sablet,84104,1264,11.114,1.061,0.961,857,6347 -Relans,39456,341,4.682,0.689,0.624,885,6634 -Challes,72053,1220,25.987,1.623,1.469,508,6758 -Aubignan,84004,5602,15.714,1.262,1.143,866,6336 -Antigny-la-Ville,21015,109,8.424,0.924,0.837,817,6668 -Vignolles,16405,179,8.800,0.944,0.855,460,6493 -Modène,84077,453,4.765,0.695,0.629,871,6334 -Hautot-sur-Seine,76350,420,2.146,0.466,0.422,554,6920 -Broindon,21113,199,4.676,0.688,0.623,854,6680 -Le Breuil,3042,534,34.639,1.873,1.696,755,6565 -Bettembos,80098,99,4.165,0.650,0.589,619,6966 -Athée,21028,781,9.591,0.986,0.893,880,6680 -Ahaxe-Alciette-Bascassan,64008,274,14.543,1.214,1.099,365,6238 -Chamoux,89071,99,6.999,0.842,0.762,751,6705 -Le Pradet,83098,10027,10.340,1.024,0.927,948,6228 -Larceveau-Arros-Cibits,64314,403,18.310,1.362,1.233,364,6244 -Caromb,84030,3298,17.882,1.346,1.219,871,6340 -Vindey,51645,121,8.016,0.901,0.816,750,6846 -Lépron-les-Vallées,8251,85,6.571,0.816,0.739,807,6961 -Tagolsheim,68332,918,3.208,0.570,0.516,1019,6736 -Saint-Geniès-de-Comolas,30254,1924,8.338,0.919,0.832,838,6330 -Orange,84087,29212,74.399,2.746,2.486,847,6333 -Malemort-du-Comtat,84070,1749,11.980,1.102,0.998,876,6325 -Panossas,38294,679,8.054,0.903,0.818,871,6513 -Maillane,13052,2540,16.917,1.309,1.185,842,6302 -Rognonas,13083,4073,8.398,0.922,0.835,842,6315 -Rosey,71374,164,4.291,0.659,0.597,829,6628 -Vedène,84141,11433,11.366,1.073,0.972,855,6321 -Sorgues,84129,18301,33.553,1.844,1.670,848,6324 -Barbentane,13010,4127,27.358,1.665,1.508,837,6312 -Camaret-sur-Aigues,84029,4556,18.375,1.364,1.235,855,6344 -Reuilly-Sauvigny,2645,209,6.678,0.823,0.745,743,6885 -Fontaine-de-Vaucluse,84139,624,7.173,0.853,0.772,869,6315 -Évrange,57203,239,2.242,0.477,0.432,930,6938 -Lacoste,84058,409,10.693,1.041,0.943,883,6302 -Aramits,64029,673,29.721,1.735,1.571,393,6234 -Malaucène,84069,2896,45.337,2.143,1.940,873,6350 -Saint-Germain-Chassenay,58241,328,24.227,1.567,1.419,730,6629 -Lafare,84059,121,4.527,0.677,0.613,864,6340 -Petit-Croix,90077,298,3.832,0.623,0.564,997,6733 -Banca,64092,341,49.590,2.242,2.030,347,6234 -Seignosse,40296,3870,36.515,1.923,1.741,348,6295 -Saint-André-en-Bresse,71386,98,4.870,0.702,0.636,858,6619 -Saint-Genest-d'Ambière,86221,1288,32.155,1.805,1.634,498,6636 -Copponex,74088,1134,9.213,0.966,0.875,935,6553 -Auxonne,21038,7683,40.556,2.027,1.835,881,6676 -Siest,40301,139,2.945,0.546,0.494,366,6293 -Roquemaure,30221,5472,26.179,1.629,1.475,841,6326 -Cabannes,13018,4439,15.468,1.252,1.134,860,6308 -Bazinval,76059,416,7.156,0.852,0.771,596,6982 -Saubion,40291,1381,7.722,0.885,0.801,348,6295 -Saint-Pantaléon,84114,211,0.792,0.283,0.256,878,6312 -Sérignan-du-Comtat,84127,2587,20.220,1.431,1.296,849,6348 -Velleron,84142,2955,16.428,1.290,1.168,859,6321 -Jallanges,21322,329,7.456,0.869,0.787,862,6656 -Boucau,64140,8200,5.784,0.766,0.694,337,6278 -Flassan,84046,455,20.861,1.454,1.316,884,6336 -Vacqueyras,84136,1292,8.994,0.955,0.865,856,6341 -Murs,84085,419,31.390,1.783,1.614,883,6318 -Pierrevillers,57543,1513,5.879,0.772,0.699,924,6907 -Ayherre,64086,1035,27.857,1.680,1.521,355,6261 -Mormoiron,84082,1883,25.224,1.599,1.448,873,6334 -Bidart,64125,6597,12.195,1.112,1.007,329,6269 -Labenne,40133,6353,24.589,1.578,1.429,345,6286 -Port-de-Lanne,40231,1042,12.745,1.136,1.029,361,6281 -La Capelle-et-Masmolène,30067,453,24.922,1.589,1.439,823,6332 -Daubeuf-la-Campagne,27201,232,6.461,0.809,0.732,557,6902 -Orègue,64425,484,36.509,1.923,1.741,365,6262 -Saint-Étienne-du-Grès,13094,2469,29.209,1.720,1.557,842,6302 -Serrigny-en-Bresse,71519,201,12.434,1.122,1.016,860,6638 -Josse,40129,843,9.389,0.975,0.883,360,6291 -Uhart-Cize,64538,808,11.659,1.087,0.984,352,6234 -Pey,40222,666,14.049,1.193,1.080,359,6290 -Cléry,21180,136,3.445,0.591,0.535,890,6693 -Mollégès,13064,2581,14.262,1.202,1.088,855,6302 -Malaunay,76402,6093,9.293,0.970,0.878,562,6938 -La Faurie,5055,322,31.427,1.784,1.615,916,6386 -Goès,64245,620,4.779,0.696,0.630,410,6241 -Brouillet,51089,80,4.517,0.677,0.613,752,6902 -Les Angles,30011,8388,16.977,1.312,1.188,840,6315 -Magny-lès-Aubigny,21366,206,7.060,0.846,0.766,867,6671 -Fransèches,23086,242,18.334,1.363,1.234,628,6551 -Villeneuve-lès-Avignon,30351,11901,18.183,1.357,1.229,848,6324 -Violès,84149,1664,14.623,1.217,1.102,855,6344 -Bersillies,59072,254,2.851,0.537,0.486,772,7026 -Ispoure,64275,673,7.886,0.894,0.809,355,6239 -Saint-Simon-de-Bordes,17403,728,14.063,1.194,1.081,428,6484 -Jonquerettes,84055,1484,2.578,0.511,0.463,855,6319 -Aubigny,14025,300,4.984,0.711,0.644,466,6875 -Aincille,64011,111,6.248,0.796,0.721,360,6233 -Rye,39472,217,11.930,1.099,0.995,885,6643 -Vesvres,21672,27,4.131,0.647,0.586,815,6697 -La Chapelle-Thémer,85056,382,15.189,1.241,1.124,395,6612 -Châteauneuf-du-Pape,84037,2171,24.820,1.586,1.436,843,6331 -Jonquières,84056,5331,24.297,1.569,1.421,850,6337 -Orist,40211,708,14.988,1.232,1.115,363,6288 -Souraïde,64527,1396,16.954,1.311,1.187,335,6258 -Anisy,14015,718,4.148,0.648,0.587,451,6911 -Aressy,64041,686,2.208,0.473,0.428,429,6247 -Althen-des-Paluds,84001,2786,6.527,0.813,0.736,855,6327 -Palantine,25443,67,4.367,0.665,0.602,924,6669 -Saint-Didier,84108,2146,3.660,0.609,0.551,869,6324 -Roppentzwiller,68284,699,4.068,0.642,0.581,1024,6723 -Longepierre,71262,172,12.246,1.114,1.009,865,6650 -Saint-Pierre-de-Vassols,84115,521,4.994,0.711,0.644,873,6335 -Vieillevigne,31576,328,3.169,0.567,0.513,590,6257 -Le Fay,71196,640,20.833,1.453,1.316,879,6618 -Mœuvres,59405,459,7.402,0.866,0.784,704,7008 -Fatines,72129,841,5.465,0.744,0.674,500,6774 -Autry-le-Châtel,45016,958,50.990,2.273,2.058,670,6717 -Allerey,21009,171,19.108,1.391,1.259,808,6680 -Peyrehorade,40224,3673,16.205,1.281,1.160,370,6285 -Caumont-sur-Durance,84034,4855,18.279,1.361,1.232,855,6311 -Vers-sous-Sellières,39555,237,8.554,0.931,0.843,893,6638 -Chevigny,39141,281,7.876,0.893,0.809,889,6679 -Roppeviller,57594,109,13.804,1.183,1.071,1033,6894 -Bayon-sur-Gironde,33035,696,11.150,1.063,0.962,417,6444 -Saint-Symphorien,18236,134,9.675,0.990,0.896,645,6634 -Saint-Julien-sur-Dheune,71435,241,5.429,0.742,0.672,819,6633 -Cersot,71072,139,6.018,0.781,0.707,824,6623 -Mellecey,71292,1288,14.222,1.200,1.086,831,6633 -Comblanchien,21186,649,3.563,0.601,0.544,844,6669 -Mittainvilliers-Vérigny,28254,797,24.815,1.586,1.436,577,6829 -Arcizans-Dessus,65022,126,5.215,0.727,0.658,442,6218 -La Roque-Alric,84100,51,4.899,0.705,0.638,867,6339 -Cabrières-d'Avignon,84025,1788,14.559,1.215,1.100,871,6311 -Bélus,40034,605,11.871,1.097,0.993,365,6286 -La Chapelle-en-Vexin,95139,341,3.680,0.611,0.553,607,6900 -Saumane-de-Vaucluse,84124,940,20.949,1.457,1.319,873,6319 -Robion,84099,4514,17.842,1.345,1.218,866,6310 -Villes-sur-Auzon,84148,1304,27.188,1.660,1.503,878,6334 -Courthézon,84039,5555,32.776,1.822,1.650,853,6336 -Gigny-sur-Saône,71219,537,14.495,1.212,1.097,848,6622 -Mimbaste,40183,1018,20.648,1.446,1.309,381,6294 -Ozourt,40216,206,3.975,0.635,0.575,387,6292 -Calavanté,65120,327,2.102,0.461,0.417,471,6239 -Saint-Hippolyte-le-Graveyron,84109,183,4.943,0.708,0.641,866,6336 -Burbach,67070,271,6.360,0.803,0.727,1001,6876 -Baron,30030,359,10.093,1.011,0.915,801,6330 -Targon,33523,2063,26.028,1.624,1.470,445,6409 -Foissac,30111,403,3.897,0.628,0.569,804,6329 -Donzacq,40090,490,11.741,1.091,0.988,392,6293 -Seynes,30320,162,14.284,1.203,1.089,806,6336 -Marandeuil,21376,118,4.541,0.678,0.614,876,6698 -Poyartin,40236,859,13.055,1.150,1.041,391,6293 -Sort-en-Chalosse,40308,944,15.555,1.255,1.136,382,6294 -Thonnelle,55511,146,6.095,0.786,0.712,871,6944 -Bourdic,30049,383,7.301,0.860,0.779,808,6319 -Dions,30102,605,11.621,1.085,0.982,806,6312 -Corberon,21189,448,11.781,1.093,0.990,850,6657 -Gourdon,71222,912,25.630,1.611,1.459,812,6619 -Saint-Martin-aux-Champs,51502,100,7.249,0.857,0.776,810,6858 -Mâlain,21373,729,11.234,1.067,0.966,834,6693 -Talmay,21618,576,22.080,1.496,1.355,885,6701 -Messey-sur-Grosne,71296,745,15.274,1.244,1.126,835,6621 -Parves et Nattages,1286,937,15.861,1.268,1.148,912,6520 -Revigny,39458,249,6.415,0.806,0.730,898,6619 -Charrecey,71107,315,5.534,0.749,0.678,828,6638 -Longevelle-sur-Doubs,25345,690,8.357,0.920,0.833,977,6712 -Bainville-sur-Madon,54043,1400,5.938,0.776,0.703,929,6837 -Saint-Cézaire-sur-Siagne,6118,3913,29.942,1.742,1.577,1005,6296 -Saint-Chaptes,30241,1858,12.997,1.148,1.039,801,6321 -Châteauneuf-de-Galaure,26083,1792,18.322,1.363,1.234,852,6464 -Le Planois,71352,96,5.094,0.718,0.650,879,6635 -Saint-Hilaire-lez-Cambrai,59533,1630,6.527,0.813,0.736,732,7010 -Pimorin,39420,193,10.339,1.024,0.927,891,6604 -Grenant-lès-Sombernon,21306,213,7.149,0.851,0.771,829,6686 -Éourres,5047,132,26.649,1.643,1.488,920,6349 -Mervans,71295,1488,28.676,1.705,1.544,870,6638 -Ris,63301,781,15.790,1.265,1.145,737,6545 -Vallérargues,30338,136,12.829,1.140,1.032,812,6337 -Saint-Bonnet-en-Bresse,71396,477,17.663,1.338,1.211,869,6640 -Frichemesnil,76290,419,8.148,0.909,0.823,563,6949 -Sainte-Gauburge-Sainte-Colombe,61389,1057,21.235,1.467,1.328,508,6847 -Westrehem,62885,239,2.974,0.549,0.497,654,7049 -Argiésans,90004,454,2.798,0.532,0.482,985,6729 -Blarians,25065,59,0.890,0.300,0.272,940,6706 -Gaujacq,40109,438,16.145,1.279,1.158,395,6289 -Abergement-la-Ronce,39001,845,7.115,0.849,0.769,879,6667 -Varois-et-Chaignot,21657,1931,10.151,1.014,0.918,861,6699 -Saint-Micaud,71465,274,21.035,1.460,1.322,819,6624 -La Genête,71213,571,11.754,1.091,0.988,855,6606 -Brouzet-lès-Alès,30055,637,13.071,1.151,1.042,798,6340 -Les Maillys,21371,838,30.061,1.745,1.580,880,6674 -Uncey-le-Franc,21649,50,9.555,0.984,0.891,821,6697 -Uttwiller,67503,161,2.965,0.548,0.496,1031,6869 -Beaumotte-lès-Pin,70060,302,8.271,0.915,0.828,912,6696 -Rancennes,8353,715,6.605,0.818,0.741,832,7005 -La Calmette,30061,2120,11.309,1.070,0.969,803,6313 -Blauzac,30041,1190,15.879,1.268,1.148,811,6322 -Pipriac,35219,3734,49.344,2.236,2.025,325,6761 -Hinx,40126,1887,14.679,1.220,1.105,380,6300 -Chevigny-en-Valière,21170,348,5.449,0.743,0.673,852,6653 -Saint-Pierre-des-Ifs,27594,278,6.176,0.791,0.716,527,6911 -Artzenheim,68009,838,9.674,0.990,0.896,1036,6788 -Ancey,21013,438,8.458,0.926,0.838,837,6697 -Mont-de-Marsan,40192,29885,36.587,1.925,1.743,416,6319 -Le Bouscat,33069,23869,5.289,0.732,0.663,413,6426 -Longecourt-lès-Culêtre,21354,49,4.449,0.671,0.608,817,6676 -Chartres-de-Bretagne,35066,7578,9.975,1.005,0.910,349,6780 -Montmorot,39362,3025,11.411,1.075,0.973,893,6621 -Mauges-sur-Loire,49244,18366,194.420,4.438,4.018,405,6697 -Boissey-le-Châtel,27077,897,4.394,0.667,0.604,537,6910 -Saint-Aulais-la-Chapelle,16301,235,14.810,1.225,1.109,459,6487 -Garrigues-Sainte-Eulalie,30126,739,9.930,1.003,0.908,807,6322 -Asson,64068,2045,83.475,2.908,2.633,437,6231 -Sousceyrac-en-Quercy,46311,1360,140.811,3.777,3.420,624,6415 -Bastennes,40028,257,7.318,0.861,0.780,397,6291 -Virieu-le-Grand,1452,1056,12.653,1.132,1.025,903,6533 -Arpaillargues-et-Aureillac,30014,1009,13.718,1.179,1.067,811,6324 -Dossenheim-Kochersberg,67102,285,1.823,0.430,0.389,1038,6847 -Baigts,40023,371,11.662,1.087,0.984,396,6296 -Saint-Dézéry,30248,440,6.001,0.780,0.706,802,6322 -Saulzet-le-Froid,63407,267,28.055,1.686,1.527,688,6501 -Jambles,71241,492,8.307,0.917,0.830,828,6632 -Collorgues,30086,593,9.271,0.969,0.877,802,6325 -Herqueville,27330,139,3.760,0.617,0.559,574,6905 -Chapelle-Voland,39104,608,30.488,1.758,1.592,881,6639 -Le Bosc,34036,1337,28.071,1.686,1.527,735,6285 -Castelnau-Chalosse,40071,599,10.647,1.039,0.941,388,6294 -Gibret,40112,102,2.579,0.511,0.463,393,6294 -Vanlay,10395,308,25.951,1.622,1.469,777,6765 -Belvézet,30035,254,22.449,1.508,1.365,812,6332 -Serez,27621,145,6.316,0.800,0.724,578,6871 -Arcey,21018,52,3.461,0.592,0.536,837,6686 -Irissarry,64273,878,26.544,1.640,1.485,357,6245 -Lahosse,40141,327,8.061,0.904,0.818,393,6297 -Sers,65424,110,30.632,1.762,1.595,464,6208 -Saint-Franc,73233,167,7.270,0.858,0.777,914,6490 -Tarascon,13108,15020,74.219,2.742,2.483,839,6308 -Aramon,30012,4258,31.118,1.776,1.608,839,6315 -Comps,30089,1756,8.415,0.923,0.836,825,6307 -Montblanc,34166,2832,27.181,1.660,1.503,731,6257 -Estibeaux,40095,694,16.808,1.305,1.182,382,6288 -Ciel,71131,773,17.280,1.323,1.198,858,6640 -Gaujac,30127,1106,10.268,1.020,0.924,827,6330 -Clermont,40084,774,14.903,1.229,1.113,387,6290 -Frébuans,39241,376,2.749,0.528,0.478,888,6620 -Caupenne,40078,413,15.215,1.242,1.125,399,6291 -Les Epesses,85082,2832,31.669,1.791,1.622,400,6654 -Saint-Siffret,30299,1050,11.343,1.072,0.971,820,6323 -Garrey,40106,200,4.970,0.710,0.643,387,6294 -Uzès,30334,8491,25.409,1.605,1.453,811,6324 -Boulbon,13017,1495,19.333,1.400,1.268,837,6312 -Nousse,40205,242,3.861,0.625,0.566,393,6299 -Bezouce,30039,2301,12.493,1.125,1.019,823,6310 -Condéon,16105,599,31.137,1.776,1.608,457,6480 -Pomarez,40228,1541,30.786,1.766,1.599,386,6288 -Chevigney,70151,36,5.250,0.729,0.660,895,6694 -Leffard,14360,199,6.935,0.838,0.759,460,6873 -Larbey,40144,247,6.014,0.781,0.707,401,6296 -Pouzilhac,30207,709,16.065,1.276,1.155,825,6330 -Saint-Pons-la-Calm,30292,433,6.329,0.801,0.725,825,6337 -Castel-Sarrazin,40074,537,12.154,1.110,1.005,393,6284 -Belleneuve,21060,1621,14.512,1.213,1.098,873,6700 -Vallabrègues,30336,1386,14.290,1.203,1.089,832,6309 -Saint-Maximin,30286,734,10.042,1.009,0.914,819,6323 -Courgains,72104,582,14.758,1.223,1.107,500,6801 -Manduel,30155,6758,26.484,1.638,1.483,823,6300 -Momères,65313,758,2.368,0.490,0.444,464,6235 -Semezanges,21601,89,8.156,0.909,0.823,838,6682 -Saint-Vigor-des-Monts,50563,286,15.959,1.272,1.152,406,6877 -Le Miroir,71300,599,18.424,1.366,1.237,879,6611 -Les Mées,72192,103,6.826,0.832,0.753,495,6804 -Thoigné,72354,165,7.378,0.865,0.783,495,6803 -Rahon,39448,509,19.663,1.411,1.278,883,6659 -Urcy,21650,151,7.976,0.899,0.814,841,6687 -Saint-Rémy-du-Val,72317,518,16.624,1.298,1.175,498,6812 -Champdivers,39099,433,7.720,0.884,0.800,884,6658 -Richarville,91519,399,10.495,1.031,0.933,624,6820 -Sailly,52443,33,12.466,1.124,1.018,865,6818 -Moutiers-sur-le-Lay,85157,745,18.442,1.367,1.238,377,6615 -Bergouey,40038,95,4.422,0.669,0.606,401,6293 -Saint-Victor-la-Coste,30302,2053,26.697,1.645,1.489,831,6326 -Doignies,59176,337,7.344,0.863,0.781,701,7006 -Mirabel,7159,624,20.057,1.426,1.291,816,6390 -Jonquières-Saint-Vincent,30135,3743,21.357,1.471,1.332,825,6307 -Esquiule,64217,534,28.860,1.710,1.548,393,6236 -Plumaudan,22239,1266,19.157,1.393,1.261,321,6816 -Jasses,64281,132,5.478,0.745,0.675,396,6252 -Noirémont,60465,178,6.412,0.806,0.730,644,6940 -Marigny-lès-Reullée,21387,213,10.024,1.008,0.913,850,6656 -Préhy,89315,148,14.315,1.204,1.090,762,6739 -Saint-Michel-de-Chavaignes,72303,740,18.549,1.371,1.241,517,6773 -Ossas-Suhare,64432,89,7.176,0.853,0.772,381,6236 -Châtonnay,38094,2098,31.620,1.790,1.621,876,6487 -Bouillargues,30047,6338,15.957,1.272,1.152,812,6303 -Barcus,64093,648,47.645,2.197,1.989,393,6234 -Vailly,10391,291,11.282,1.069,0.968,782,6806 -Gouraincourt,55216,56,5.457,0.744,0.674,895,6913 -Saint-Paul-en-Pareds,85259,1345,12.315,1.117,1.011,399,6643 -Haux,64258,80,17.101,1.316,1.192,389,6225 -Chéraute,64188,1099,36.730,1.929,1.747,387,6246 -Mortefontaine-en-Thelle,60433,898,6.011,0.780,0.706,642,6906 -Sauguis-Saint-Étienne,64509,161,8.811,0.945,0.856,387,6237 -Puget-sur-Argens,83099,7839,26.988,1.654,1.498,998,6266 -Pouillat,1309,90,6.414,0.806,0.730,886,6586 -Charmois-l'Orgueilleux,88092,588,36.465,1.922,1.740,945,6785 -Marest,62553,288,3.168,0.567,0.513,659,7043 -Saint-Germain-des-Essourts,76581,405,9.278,0.970,0.878,578,6936 -Châtel-Moron,71115,99,6.588,0.817,0.740,824,6632 -Riaillé,44144,2319,50.613,2.265,2.051,372,6722 -La Bâtie-des-Fonds,26030,5,11.571,1.083,0.981,910,6384 -Pagny-le-Château,21475,511,24.339,1.570,1.422,869,6668 -Varanges,21656,725,9.404,0.976,0.884,867,6682 -Chassey-le-Camp,71109,345,8.642,0.936,0.847,828,6646 -Saint-Léger-Triey,21556,260,10.516,1.032,0.934,876,6692 -Estézargues,30107,556,11.636,1.086,0.983,831,6323 -Jouvençon,71244,424,6.419,0.806,0.730,856,6611 -Ruffey-sur-Seille,39471,722,18.130,1.355,1.227,889,6625 -Saint-Cyr-en-Val,45272,3291,44.420,2.121,1.920,621,6752 -Pouilly-en-Auxois,21501,1446,10.182,1.016,0.920,818,6683 -Lixheim,57407,593,4.163,0.649,0.588,1005,6861 -Bresilley,70092,199,3.659,0.609,0.551,897,6688 -Marguerittes,30156,8592,25.343,1.602,1.450,816,6312 -Premières,21507,141,3.144,0.564,0.511,872,6684 -Le Theil-de-Bretagne,35333,1751,24.464,1.574,1.425,369,6764 -Meynes,30166,2444,16.620,1.298,1.175,822,6308 -La Chaulme,63104,117,13.545,1.171,1.060,777,6488 -Rivehaute,64466,260,8.412,0.923,0.836,387,6259 -Cenves,69035,399,26.427,1.636,1.481,826,6579 -Barraute-Camu,64096,173,3.911,0.629,0.570,386,6261 -Demigny,71170,1788,29.750,1.736,1.572,838,6650 -Neuilly-en-Vexin,95447,196,2.998,0.551,0.499,627,6898 -Béraut,32044,341,12.474,1.124,1.018,495,6318 -Beauvois-en-Cambrésis,59063,2079,3.540,0.599,0.542,729,7005 -Bellocq,64108,890,12.719,1.135,1.028,384,6277 -Lichans-Sunhar,64340,81,3.511,0.596,0.540,385,6230 -Argentan,61006,13866,18.430,1.367,1.238,480,6852 -Ancône,26008,1329,1.706,0.416,0.377,835,6388 -Gomené,22062,546,25.630,1.611,1.459,295,6800 -Champagnat,71079,452,13.291,1.160,1.050,882,6599 -Morey-Saint-Denis,21442,674,7.799,0.889,0.805,846,6680 -Vernot,21666,80,12.795,1.139,1.031,846,6712 -Grandsaigne,19088,50,20.014,1.424,1.289,616,6485 -Vimarcé,53274,240,20.840,1.453,1.316,464,6793 -Orthez,64430,10627,46.379,2.168,1.963,393,6270 -Féternes,74127,1406,14.251,1.202,1.088,976,6587 -Flaux,30110,374,11.029,1.057,0.957,823,6323 -Vallabrix,30337,421,7.953,0.898,0.813,818,6329 -Pietracorbara,2B224,651,26.180,1.629,1.475,1230,6214 -Le Leuy,40153,243,9.515,0.982,0.889,408,6309 -Plouaret,22207,2145,30.663,1.763,1.596,222,6851 -La Chapelle-Saint-Fray,72066,454,6.418,0.806,0.730,484,6784 -Araux,64033,146,5.430,0.742,0.672,392,6259 -Barnas,7025,207,24.796,1.585,1.435,790,6394 -Collias,30085,1106,21.123,1.463,1.325,819,6314 -Théziers,30328,1059,11.329,1.071,0.970,829,6313 -Aroue-Ithorots-Olhaïby,64049,244,17.897,1.347,1.220,383,6257 -Saint-Julien-du-Gua,7253,190,16.950,1.310,1.186,818,6410 -Nogna,39390,294,6.347,0.802,0.726,901,6616 -Narcastet,64413,733,4.602,0.683,0.618,429,6243 -Tardets-Sorholus,64533,551,14.910,1.229,1.113,384,6233 -Les Deux-Villes,8138,254,8.190,0.911,0.825,860,6951 -Lemps,7140,795,12.323,1.117,1.011,844,6446 -Saint-Gervasy,30257,1874,7.095,0.848,0.768,819,6307 -Ancelle,5004,910,51.077,2.275,2.060,951,6394 -Redessan,30211,4120,15.660,1.260,1.141,822,6308 -Voivres-lès-le-Mans,72381,1378,11.612,1.085,0.982,479,6761 -Saint-Pierre-de-Mézoargues,13061,207,4.321,0.662,0.599,834,6307 -Domazan,30103,926,11.369,1.073,0.972,833,6320 -Saint-Martial,7267,243,36.384,1.920,1.738,798,6414 -Saint-Martial-de-Mirambeau,17362,257,9.226,0.967,0.876,417,6481 -Saussay,28371,1083,4.704,0.690,0.625,582,6862 -Château-la-Vallière,37062,1777,19.584,1.409,1.276,501,6717 -Courcelles-de-Touraine,37086,494,26.037,1.624,1.470,495,6715 -Pontvallain,72243,1697,35.347,1.892,1.713,494,6748 -Servon-sur-Vilaine,35327,3611,15.376,1.248,1.130,370,6791 -Bétignicourt,10044,32,3.248,0.574,0.520,807,6816 -Lédenon,30145,1531,19.361,1.401,1.268,824,6312 -Renac,35237,993,26.217,1.630,1.476,324,6748 -Motreff,29152,704,21.481,1.475,1.335,216,6809 -Montbray,50338,330,14.251,1.202,1.088,399,6875 -Mulsanne,72213,5279,15.325,1.246,1.128,492,6762 -Yvré-le-Pôlin,72385,1763,21.829,1.487,1.346,489,6756 -Baigts-de-Béarn,64087,881,13.464,1.168,1.058,391,6279 -Mansigné,72182,1574,36.518,1.924,1.742,488,6738 -Roézé-sur-Sarthe,72253,2615,26.830,1.649,1.493,482,6755 -Tilh,40316,803,23.031,1.528,1.383,392,6284 -Asnières-sur-Vègre,72010,405,12.594,1.130,1.023,456,6759 -Saint-Gladie-Arrive-Munein,64480,202,6.591,0.817,0.740,381,6258 -Etchebar,64222,72,8.234,0.913,0.827,383,6229 -Parcé-sur-Sarthe,72228,2118,40.730,2.031,1.839,465,6748 -Arthezé,72009,407,8.721,0.940,0.851,465,6748 -Chantenay-Villedieu,72059,859,27.901,1.681,1.522,461,6763 -Marconnelle,62550,1147,5.579,0.752,0.681,628,7029 -Saint-Samson-la-Poterie,60596,253,4.312,0.661,0.598,607,6944 -Valliguières,30340,579,19.365,1.401,1.268,831,6323 -Bérenx,64112,435,13.642,1.176,1.065,388,6271 -Lirac,30149,894,9.801,0.997,0.903,837,6328 -Montfrin,30179,3212,15.437,1.251,1.133,827,6313 -Marquéglise,60386,504,6.783,0.829,0.751,684,6935 -Le Pin,30196,421,6.006,0.780,0.706,823,6332 -Saint-Avit-de-Tardes,23182,174,14.470,1.211,1.096,647,6534 -Mauléon-Licharre,64371,2974,12.647,1.132,1.025,387,6241 -Cortevaix,71147,252,10.439,1.028,0.931,824,6602 -Neuviller-lès-Badonviller,54398,92,5.829,0.769,0.696,985,6833 -Argilliers,30013,495,6.739,0.826,0.748,819,6323 -Chenôves,71124,206,10.598,1.036,0.938,833,6620 -Mouscardès,40199,261,9.098,0.960,0.869,388,6286 -Arrast-Larrebieu,64050,94,7.631,0.879,0.796,389,6253 -Saint-Saviol,86247,529,10.870,1.049,0.950,486,6568 -Thorey-sur-Ouche,21634,149,12.064,1.106,1.001,829,6676 -Perreuil,71347,547,7.624,0.879,0.796,821,6638 -Saze,30315,2022,12.631,1.131,1.024,835,6316 -Saint-Paul-les-Fonts,30355,1033,5.434,0.742,0.672,829,6329 -Tavel,30326,1962,20.091,1.427,1.292,838,6323 -Guinarthe-Parenties,64251,229,2.465,0.500,0.453,379,6262 -Chaudenay,71119,1109,8.212,0.912,0.826,835,6648 -Nîmes,30189,151001,161.127,4.040,3.658,806,6312 -Taillades,84131,1927,6.893,0.836,0.757,868,6308 -Castétis,64177,617,9.029,0.956,0.866,401,6270 -La Roque-Esclapon,83109,276,27.002,1.654,1.498,994,6301 -Caissargues,30060,3970,8.595,0.933,0.845,814,6298 -Saint-Ouen-des-Alleux,35304,1297,15.444,1.251,1.133,374,6814 -Sussey,21615,256,21.089,1.462,1.324,801,6682 -Fourches,14283,228,4.754,0.694,0.628,476,6866 -Comps-sur-Artuby,83044,382,63.899,2.544,2.303,983,6302 -Trans-en-Provence,83141,5770,17.023,1.313,1.189,985,6275 -Saint-Girons-en-Béarn,64479,161,5.222,0.727,0.658,389,6279 -Connelles,27168,192,4.152,0.649,0.588,574,6909 -La Croix-Valmer,83048,3798,22.606,1.513,1.370,996,6237 -Méritein,64381,291,6.839,0.832,0.753,397,6258 -Ogenne-Camptort,64420,245,11.783,1.093,0.990,399,6256 -Auxey-Duresses,21037,307,11.006,1.056,0.956,830,6654 -Sennecey-lès-Dijon,21605,2076,3.522,0.597,0.541,858,6689 -Nabas,64412,109,6.436,0.808,0.732,384,6254 -Savigny-sur-Grosne,71507,173,6.560,0.815,0.738,826,6612 -Roquiague,64468,117,10.018,1.007,0.912,386,6240 -La Frasnée,39239,38,3.372,0.585,0.530,916,6610 -Combles-en-Barrois,55120,814,10.349,1.024,0.927,857,6850 -Saint-Seine-en-Bâche,21572,397,8.413,0.923,0.836,878,6672 -Garindein,64231,503,7.038,0.844,0.764,383,6242 -Roquebrune-sur-Argens,83107,14048,106.795,3.289,2.978,1002,6258 -Le Muy,83086,9248,66.859,2.603,2.357,985,6271 -Saint-Palais-du-Né,16342,285,13.674,1.177,1.066,443,6501 -Seillans,83124,2626,88.937,3.002,2.718,990,6287 -Culmont,52155,552,8.392,0.922,0.835,882,6752 -Cintheaux,14160,192,7.538,0.874,0.791,458,6891 -Araujuzon,64032,203,6.958,0.840,0.761,389,6260 -Callas,83028,1880,49.430,2.238,2.026,993,6280 -Isolaccio-di-Fiumorbo,2B135,316,41.290,2.045,1.852,1216,6123 -Ramous,64462,506,7.643,0.880,0.797,385,6276 -Chérencé-le-Héron,50130,398,9.642,0.988,0.895,391,6862 -Savigny-sous-Mâlain,21592,222,6.334,0.801,0.725,833,6695 -Vaulx,74292,956,11.196,1.065,0.964,934,6541 -Souvans,39520,483,19.950,1.422,1.287,896,6658 -Samonac,33500,429,4.039,0.640,0.579,418,6448 -Alos-Sibas-Abense,64017,315,5.859,0.770,0.697,386,6230 -Le Ménil-de-Briouze,61260,574,21.529,1.477,1.337,447,6844 -Le Lavandou,83070,5759,30.268,1.751,1.585,975,6232 -Cenon,33119,24369,5.700,0.760,0.688,420,6422 -La Chapelle-sous-Brancion,71094,130,10.072,1.010,0.914,839,6609 -Thiberville,27629,1807,7.963,0.898,0.813,516,6896 -Balaiseaux,39034,303,6.044,0.783,0.709,885,6655 -Grambois,84052,1264,31.242,1.779,1.611,909,6302 -Drée,21234,59,5.157,0.723,0.655,828,6694 -Gassin,83065,2557,24.870,1.587,1.437,995,6246 -Viodos-Abense-de-Bas,64559,718,12.778,1.138,1.030,386,6248 -Menditte,64378,196,6.525,0.813,0.736,383,6236 -Thervay,39528,385,15.861,1.268,1.148,895,6687 -Vernoux,1433,324,10.256,1.019,0.923,859,6601 -Susmiou,64530,365,3.551,0.600,0.543,394,6254 -Ozenx-Montestrucq,64440,382,16.520,1.294,1.172,390,6265 -Laguinge-Restoue,64303,166,6.061,0.784,0.710,385,6228 -Saint-Thurial,35319,2069,18.137,1.356,1.228,335,6781 -Ribeaucourt,55430,76,12.493,1.125,1.019,875,6829 -Louvroil,59365,6558,5.969,0.778,0.704,769,7018 -Charritte-de-Bas,64187,275,7.526,0.873,0.790,382,6250 -Loubieng,64349,512,23.407,1.540,1.394,397,6262 -Cavalaire-sur-Mer,83036,7270,16.909,1.309,1.185,988,6236 -Chatte,38095,2493,22.858,1.522,1.378,879,6454 -Uchizy,71550,852,12.592,1.130,1.023,842,6601 -Joncherey,90056,1329,5.327,0.735,0.665,1002,6724 -Sainte-Maxime,83115,14263,82.241,2.887,2.614,999,6253 -Parfondeval,61322,113,3.098,0.560,0.507,515,6823 -Barbirey-sur-Ouche,21045,223,10.654,1.039,0.941,831,6687 -La Rochepot,21527,289,13.982,1.190,1.077,826,6650 -Lombard,39296,209,5.265,0.730,0.661,890,6637 -Sollacaro,2A284,358,23.976,1.559,1.412,1186,6086 -La Môle,83079,1418,46.186,2.163,1.958,981,6236 -Andrein,64022,131,7.800,0.889,0.805,385,6266 -Angous,64025,105,6.251,0.796,0.721,389,6251 -Faugères,34096,500,26.089,1.626,1.472,715,6271 -Parcoul-Chenaud,24316,746,26.809,1.648,1.492,465,6459 -Caligny,61070,834,15.171,1.240,1.123,435,6865 -Orriule,64428,135,6.482,0.810,0.733,390,6263 -Heuilley-sur-Saône,21316,337,9.784,0.996,0.902,888,6698 -Toussieux,1423,1002,4.789,0.697,0.631,843,6541 -Lessard-le-National,71257,621,10.603,1.036,0.938,839,6642 -Montory,64404,301,20.689,1.448,1.311,392,6232 -Sallespisse,64501,586,15.233,1.242,1.125,399,6279 -Sarraguzan,32415,84,8.749,0.942,0.853,484,6253 -Tabaille-Usquain,64531,43,4.412,0.669,0.606,385,6260 -Habas,40118,1521,18.785,1.380,1.249,382,6279 -Roucy,2656,388,7.076,0.847,0.767,761,6919 -Lays-sur-le-Doubs,71254,144,10.494,1.031,0.933,872,6648 -Mont-lès-Seurre,71315,177,6.485,0.811,0.734,861,6654 -Saint-Prix,3257,789,21.792,1.486,1.345,747,6570 -Grimaud,83068,4421,44.327,2.119,1.919,990,6248 -Bévy,21070,139,5.212,0.727,0.658,837,6677 -Orion,64427,145,9.804,0.997,0.903,389,6267 -Saint-Tropez,83119,4299,11.483,1.079,0.977,1001,6247 -Vacqueriette-Erquières,62834,257,5.984,0.779,0.705,632,7024 -Gissey-sur-Ouche,21300,357,14.493,1.212,1.097,837,6687 -Foissy,21274,165,15.210,1.241,1.124,820,6669 -Cormot-Vauchignon,21195,207,10.198,1.017,0.921,824,6656 -Chêne-Bernard,39139,66,3.649,0.608,0.550,886,6648 -Taradeau,83134,1807,17.373,1.327,1.201,978,6272 -Arc-sur-Tille,21021,2648,23.008,1.527,1.383,863,6697 -Méounes-lès-Montrieux,83077,2165,40.732,2.032,1.840,946,6245 -Saint-Jean-de-Duras,47247,248,16.654,1.299,1.176,485,6405 -Bonnut,64135,767,22.082,1.496,1.355,393,6280 -Montarlot-lès-Rioz,70355,284,9.663,0.989,0.895,925,6708 -Bornay,39066,174,6.725,0.825,0.747,897,6615 -Morlet,71322,69,6.670,0.822,0.744,813,6652 -Ramatuelle,83101,2077,34.964,1.882,1.704,1000,6240 -Espès-Undurein,64214,506,9.783,0.996,0.902,382,6250 -Loubaresse,7144,38,9.125,0.962,0.871,782,6387 -Sus,64529,374,11.537,1.081,0.979,393,6248 -La Neuville-au-Pont,51399,549,15.188,1.241,1.124,833,6894 -Lanneplaà,64312,305,7.246,0.857,0.776,390,6268 -Mérignac,16216,760,18.716,1.377,1.247,459,6517 -Cogolin,83042,12032,27.803,1.678,1.519,982,6247 -Six-Fours-les-Plages,83129,33250,26.717,1.645,1.489,925,6224 -La Cadière-d'Azur,83027,5537,37.543,1.950,1.766,918,6241 -Le Castellet,83035,3875,45.268,2.142,1.939,919,6242 -La Londe-les-Maures,83071,10235,79.919,2.846,2.577,963,6240 -Chamblanc,21131,459,10.224,1.018,0.922,867,6660 -Toulon,83137,169634,44.014,2.112,1.912,941,6228 -Navarrenx,64416,1044,6.508,0.812,0.735,398,6257 -Ruffey-lès-Echirey,21535,1299,11.255,1.068,0.967,857,6696 -Saint-Mandrier-sur-Mer,83153,5766,5.264,0.730,0.661,937,6224 -Berrogain-Laruns,64115,164,2.755,0.528,0.478,386,6248 -Narp,64414,116,6.395,0.805,0.729,389,6263 -Sassangy,71501,150,6.260,0.796,0.721,827,6626 -Solliès-Toucas,83131,5741,30.040,1.745,1.580,941,6242 -Saint-Barthélemy-Grozon,7216,509,19.780,1.416,1.282,834,6429 -Viellenave-de-Navarrenx,64555,162,5.688,0.759,0.687,389,6254 -Berville-en-Caux,76087,640,6.790,0.829,0.751,542,6959 -Saint-Cyr-sur-Mer,83112,11752,21.418,1.473,1.334,917,6235 -Saint-Gilles-les-Bois,22293,428,9.600,0.986,0.893,253,6856 -Bandol,83009,8366,9.028,0.956,0.866,924,6229 -Ainharp,64012,144,14.303,1.204,1.090,378,6247 -La Valette-du-Var,83144,23775,15.425,1.250,1.132,945,6234 -Lans,71253,923,8.172,0.910,0.824,846,6633 -Solliès-Pont,83130,11056,17.817,1.344,1.217,952,6238 -Les Vallées de la Vanne,89411,1092,33.872,1.853,1.678,731,6782 -La Seyne-sur-Mer,83126,64620,23.449,1.541,1.395,934,6221 -Gayan,65189,277,2.785,0.531,0.481,461,6250 -Tilloloy,80759,351,6.445,0.808,0.732,680,6947 -Préchacq-Josbaig,64458,292,8.367,0.921,0.834,398,6249 -Ollioules,83090,13563,20.293,1.434,1.298,935,6229 -Le Revest-les-Eaux,83103,3812,24.307,1.569,1.421,936,6235 -Garéoult,83064,5349,15.876,1.268,1.148,946,6257 -Meursanges,21411,552,14.306,1.204,1.090,847,6657 -Riboux,83105,44,13.542,1.171,1.060,921,6250 -Magny-Montarlot,21367,263,6.017,0.781,0.707,879,6686 -Belgentier,83017,2432,13.408,1.166,1.056,945,6242 -Jonage,69279,5838,12.094,1.107,1.002,857,6525 -Saint-Andéol-de-Berg,7208,124,15.797,1.265,1.145,823,6385 -Pignans,83092,4008,34.399,1.867,1.690,969,6247 -Buxières-lès-Clefmont,52085,26,5.976,0.778,0.704,885,6778 -Cuers,83049,11192,51.039,2.274,2.059,945,6244 -Collobrières,83043,1921,113.172,3.386,3.066,976,6247 -Carnoules,83033,3462,25.785,1.616,1.463,964,6246 -Betton,35024,11222,26.808,1.648,1.492,359,6799 -Sainte-Anastasie-sur-Issole,83111,1922,10.727,1.043,0.944,954,6256 -Beaumont-de-Pertuis,84014,1139,53.828,2.335,2.114,922,6296 -Jouques,13048,4403,80.217,2.851,2.581,912,6289 -La Tour-d'Aigues,84133,4241,41.273,2.045,1.852,902,6297 -Aren,64039,247,7.399,0.866,0.784,394,6245 -Amou,40002,1541,27.476,1.669,1.511,398,6280 -Sarpourenx,64505,336,3.306,0.579,0.524,399,6268 -Meyrargues,13059,3751,41.748,2.057,1.862,906,6288 -Castetner,64179,134,6.577,0.816,0.739,398,6268 -Mercurey,71294,1177,15.551,1.255,1.136,830,6641 -Sannes,84121,230,4.571,0.681,0.617,899,6298 -Berry-Bouy,18028,1187,32.012,1.801,1.631,648,6666 -Loisy,71261,644,14.734,1.222,1.106,855,6609 -La Bastidonne,84010,780,5.909,0.774,0.701,906,6292 -Saint-Raphaël,83118,35222,90.779,3.033,2.746,1006,6264 -Quincey,21517,507,5.618,0.754,0.683,849,6671 -Antully,71010,845,37.456,1.948,1.764,809,6648 -Villevoques,45343,212,5.052,0.715,0.647,672,6768 -Saint-Martin-de-la-Brasque,84113,848,5.608,0.754,0.683,906,6299 -Martailly-lès-Brancion,71284,142,8.865,0.948,0.858,839,6606 -Coise-Saint-Jean-Pied-Gauthier,73089,1233,10.434,1.028,0.931,942,6493 -Saint-Martin-en-Gâtinois,71457,123,7.369,0.864,0.782,852,6653 -Ossages,40214,501,14.330,1.205,1.091,387,6279 -Venelles,13113,8354,20.524,1.442,1.306,905,6279 -Saint-Salvy,47275,191,9.346,0.973,0.881,494,6361 -Lichos,64341,136,3.484,0.594,0.538,384,6254 -Sault-de-Navailles,64510,877,22.255,1.502,1.360,406,6282 -L'Hôpital-d'Orion,64263,142,8.494,0.928,0.840,390,6268 -Auvillars-sur-Saône,21035,335,6.879,0.835,0.756,859,6666 -Nancuise,39380,45,5.164,0.723,0.655,893,6599 -Baccarat,54039,4435,13.673,1.177,1.066,975,6825 -Montagny-lès-Beaune,21423,676,6.084,0.785,0.711,839,6657 -Montfort,64403,184,8.655,0.936,0.847,384,6260 -Dracy-le-Fort,71182,1270,6.393,0.805,0.729,837,6635 -Charre,64186,211,11.456,1.077,0.975,389,6254 -Avosnes,21040,86,11.443,1.077,0.975,822,6697 -Ginasservis,83066,1782,38.171,1.967,1.781,926,6289 -Mirabeau,84076,1253,31.586,1.789,1.620,916,6292 -Saint-Bérain-sur-Dheune,71391,556,12.790,1.138,1.030,826,6636 -Frontenaud,71209,736,15.376,1.248,1.130,875,6610 -Saliceto,2B267,55,12.542,1.127,1.020,1210,6167 -Corbières-en-Provence,4063,1173,18.787,1.380,1.249,922,6296 -Sombernon,21611,935,13.184,1.156,1.047,827,6693 -Esparron,83052,349,30.083,1.746,1.581,932,6284 -Entraigues-sur-la-Sorgue,84043,8396,16.851,1.307,1.183,854,6326 -Oisy,59446,596,2.555,0.509,0.461,730,7027 -Pontevès,83095,767,41.079,2.040,1.847,944,6280 -Taillecourt,25555,1108,1.879,0.436,0.395,990,6718 -Bricqueville,14107,180,6.855,0.833,0.754,411,6917 -Tourtour,83139,587,28.791,1.708,1.546,969,6279 -Tavernes,83135,1396,31.276,1.780,1.612,948,6281 -Baudinard-sur-Verdon,83014,223,22.260,1.502,1.360,949,6297 -Germigny,51267,184,2.410,0.494,0.447,762,6905 -Rocles,7196,243,16.700,1.301,1.178,793,6386 -Chaux-la-Lotière,70145,442,8.940,0.952,0.862,924,6704 -Saint-Onen-la-Chapelle,35302,1167,24.919,1.589,1.439,319,6795 -Chamesey,25113,134,6.489,0.811,0.734,972,6688 -Labastide-du-Haut-Mont,46135,48,9.767,0.995,0.901,628,6414 -Esparron-de-Verdon,4081,406,36.384,1.920,1.738,947,6298 -Saint-Laurent-du-Verdon,4186,97,9.539,0.983,0.890,947,6298 -Saint-Paul-lès-Durance,13099,855,45.844,2.155,1.951,927,6292 -Saint-Didier-en-Bresse,71405,184,11.380,1.074,0.972,864,6641 -Damparis,39189,2727,8.913,0.950,0.860,879,6667 -Éveux,69083,1186,3.385,0.586,0.531,827,6525 -Saint-Loup-Géanges,71443,1627,25.829,1.618,1.465,846,6654 -Sillans-la-Cascade,83128,752,20.274,1.433,1.297,958,6276 -Molinot,21420,152,12.734,1.136,1.029,823,6657 -Arc-lès-Gray,70026,2537,11.920,1.099,0.995,892,6708 -Farges-lès-Mâcon,71195,216,5.771,0.765,0.693,848,6602 -Étaples,62318,11034,12.515,1.126,1.019,607,7049 -Azat-Châtenet,23014,110,9.420,0.977,0.885,606,6557 -Villecroze,83149,1442,20.891,1.455,1.317,967,6276 -Meyrieux-Trouet,73156,313,11.036,1.057,0.957,920,6510 -Saint-Aubin,39476,1798,33.803,1.851,1.676,874,6665 -Le Rousset-Marizy,71279,671,55.474,2.371,2.147,806,6612 -Affieux,19001,364,30.674,1.763,1.596,605,6488 -Fréchou,47103,222,12.002,1.103,0.999,489,6336 -Vérignon,83147,10,36.647,1.927,1.745,966,6286 -Aiguines,83002,274,116.460,3.435,3.110,973,6299 -Saint-Martin-de-Pallières,83114,246,26.703,1.645,1.489,931,6276 -Lavans-lès-Dole,39285,322,10.276,1.020,0.924,903,6678 -Hautevelle,70284,264,7.806,0.889,0.805,947,6753 -Bugnicourt,59117,993,6.320,0.800,0.724,711,7020 -Le Breuil,71059,3591,28.964,1.713,1.551,816,6632 -Puyoô,64461,1136,9.390,0.975,0.883,384,6280 -Rouves,54464,104,3.694,0.612,0.554,934,6872 -Puymiclan,47216,640,25.913,1.620,1.467,483,6384 -Salernes,83121,3879,39.495,2.000,1.811,965,6276 -Diancey,21229,85,10.018,1.007,0.912,805,6674 -Flayosc,83058,4318,46.235,2.164,1.959,976,6274 -Laàs,64287,134,6.518,0.813,0.736,388,6260 -Vielleségure,64556,369,14.319,1.204,1.090,398,6257 -Moissac-Bellevue,83078,292,20.692,1.448,1.311,959,6291 -Meloisey,21401,332,12.220,1.113,1.008,828,6661 -Laà-Mondrans,64286,426,6.152,0.790,0.715,396,6268 -Thelonne,8445,402,3.832,0.623,0.564,841,6951 -Bessey-la-Cour,21066,61,4.617,0.684,0.619,821,6669 -Entrange,57194,1247,3.978,0.635,0.575,927,6928 -Gotein-Libarrenx,64247,478,11.961,1.101,0.997,387,6240 -Verjux,71570,532,12.281,1.115,1.010,850,6641 -Saint-Rémy,71475,6612,10.401,1.027,0.930,839,6630 -Saint-Vincent-en-Bresse,71489,574,15.933,1.271,1.151,856,6623 -Fox-Amphoux,83060,463,41.134,2.042,1.849,952,6279 -Castetnau-Camblong,64178,454,11.363,1.073,0.972,389,6252 -Champrougier,39100,96,8.894,0.949,0.859,891,6643 -Saint-Denis-de-Vaux,71403,264,3.745,0.616,0.558,831,6634 -Mont-sur-Courville,51382,130,6.060,0.784,0.710,749,6905 -Audaux,64075,163,7.353,0.863,0.781,392,6258 -Chaumeil,19051,155,31.646,1.791,1.622,614,6482 -Blosville,50059,309,4.213,0.653,0.591,387,6927 -Fénay,21263,1593,10.515,1.032,0.934,854,6688 -Mary,71286,235,14.651,1.218,1.103,816,6615 -Artignosc-sur-Verdon,83005,328,18.912,1.384,1.253,949,6297 -La Neuville-lès-Wasigny,8323,161,5.267,0.731,0.662,797,6950 -Saint-Julien,83113,2413,76.192,2.778,2.515,941,6293 -Ocqueville,76480,448,9.047,0.957,0.866,533,6971 -Collonge-la-Madeleine,71140,45,5.333,0.735,0.665,815,6649 -Flammerans,21269,419,16.724,1.302,1.179,885,6681 -Larnaud,39279,599,10.654,1.039,0.941,890,6624 -Sellières,39508,756,9.915,1.002,0.907,893,6638 -Bauduen,83015,316,52.053,2.297,2.080,957,6292 -Fays,52198,75,6.015,0.781,0.707,853,6821 -Loreux,41118,217,32.191,1.806,1.635,616,6702 -Alièze,39007,153,5.824,0.768,0.695,899,6613 -Régusse,83102,2615,35.620,1.900,1.720,946,6294 -Bousselange,21095,54,7.334,0.862,0.780,869,6657 -Flacey-en-Bresse,71198,393,13.744,1.180,1.068,881,6615 -Bonneville,80113,330,10.236,1.018,0.922,645,6997 -Floing,8174,2396,7.410,0.866,0.784,842,6960 -Bouvesse-Quirieu,38054,1516,17.786,1.342,1.215,888,6526 -Beurey-Bauguay,21068,123,7.367,0.864,0.782,810,6684 -Landudal,29107,874,17.055,1.315,1.191,181,6794 -Charencey,61429,814,45.770,2.153,1.949,536,6838 -Échenon,21239,775,10.724,1.042,0.943,874,6673 -La Monnerie-le-Montel,63231,1740,4.696,0.690,0.625,750,6531 -Cheilly-lès-Maranges,71122,543,7.004,0.842,0.762,827,6647 -Cabasse,83026,1932,45.572,2.149,1.946,956,6262 -Montmeyan,83084,561,39.501,2.001,1.812,944,6290 -Saint-Huruge,71427,54,4.037,0.640,0.579,820,6609 -Rosheim,67411,5083,29.953,1.742,1.577,1024,6831 -Gurs,64253,425,10.956,1.054,0.954,396,6248 -Fleurey-lès-Saint-Loup,70238,132,3.611,0.605,0.548,947,6763 -Trémont,61492,122,6.440,0.808,0.732,498,6838 -Vins-sur-Caramy,83151,1003,16.337,1.287,1.165,957,6263 -L'Hôpital-Saint-Blaise,64264,74,2.140,0.466,0.422,393,6248 -Saint-Vallier,71486,8692,24.367,1.571,1.422,806,6620 -Essey,21251,276,12.656,1.132,1.025,816,6676 -Sauvelade,64512,274,11.833,1.095,0.991,399,6264 -Saint-Boès,64471,358,9.598,0.986,0.893,391,6276 -Barnay,71020,108,15.510,1.254,1.135,802,6667 -Maynal,39320,342,8.253,0.914,0.828,887,6609 -Carcès,83032,3485,35.729,1.903,1.723,959,6273 -Tavaux,39526,3908,14.001,1.191,1.078,883,6665 -Moncayolle-Larrory-Mendibieu,64391,317,16.451,1.291,1.169,393,6247 -Gevrey-Chambertin,21295,3086,25.045,1.593,1.442,846,6681 -Puycasquier,32335,457,20.249,1.432,1.297,518,6300 -Perrou,61326,283,4.426,0.670,0.607,440,6837 -La Racineuse,71364,173,7.164,0.852,0.771,864,6641 -Barbachen,65061,54,3.067,0.557,0.504,468,6264 -Champigny-la-Futelaye,27144,285,16.034,1.275,1.154,577,6865 -Saint-Ouen-le-Brisoult,61439,124,9.732,0.993,0.899,452,6826 -Lorgues,83072,8968,64.580,2.558,2.316,969,6274 -Ollières,83089,638,39.837,2.009,1.819,929,6276 -Le Thoronet,83136,2449,36.411,1.921,1.739,964,6270 -Crenans,39179,239,8.792,0.944,0.855,912,6601 -La Celle,83037,1457,21.493,1.476,1.336,945,6257 -Saint-Oradoux-de-Chirouze,23224,66,28.563,1.701,1.540,651,6513 -Saint-Martial-le-Mont,23214,256,10.267,1.020,0.924,628,6553 -Geüs-d'Oloron,64244,250,6.741,0.826,0.748,394,6243 -Salies-de-Béarn,64499,4688,52.381,2.304,2.086,382,6268 -Urville,88482,57,3.957,0.633,0.573,903,6791 -Étrœungt,59218,1321,25.183,1.597,1.446,764,6996 -Ordiarp,64424,521,30.881,1.769,1.602,382,6241 -Bugnein,64149,230,11.292,1.070,0.969,393,6258 -Vianges,21675,42,8.832,0.946,0.857,801,6673 -Misson,40186,767,14.557,1.214,1.099,378,6282 -Gillaumé,52222,38,5.161,0.723,0.655,874,6823 -Surtauville,27623,487,4.429,0.670,0.607,559,6899 -Préchacq-Navarrenx,64459,161,5.288,0.732,0.663,399,6248 -Chinon,37072,8214,39.132,1.991,1.803,491,6674 -Trois-Villes,64537,135,6.445,0.808,0.732,387,6235 -Castetbon,64176,179,14.198,1.199,1.086,393,6264 -Montfort-sur-Argens,83083,1331,11.964,1.101,0.997,952,6272 -Salles-Mongiscard,64500,316,5.829,0.769,0.696,388,6271 -Blaymont,47030,209,13.636,1.175,1.064,530,6359 -Burgaronne,64151,98,5.345,0.736,0.666,383,6264 -Licq-Athérey,64342,209,17.911,1.347,1.220,385,6229 -Pourcieux,83096,1566,21.120,1.463,1.325,926,6262 -Villers-sur-Port,70566,213,10.257,1.019,0.923,933,6741 -Pourrières,83097,5123,57.120,2.406,2.178,926,6262 -Brignoles,83023,17498,70.788,2.678,2.425,942,6264 -Fontangy,21280,143,17.824,1.344,1.217,806,6692 -Camou-Cihigue,64162,99,10.092,1.011,0.915,377,6232 -Lay-Lamidou,64326,122,5.463,0.744,0.674,400,6251 -Saint-Gildas-des-Bois,44161,3776,33.603,1.845,1.670,315,6722 -Frénouville,14287,1964,6.566,0.816,0.739,464,6899 -Saint-Antonin-du-Var,83154,744,17.667,1.338,1.211,966,6270 -Entrecasteaux,83051,1117,32.199,1.806,1.635,960,6271 -Seillons-Source-d'Argens,83125,2490,25.080,1.594,1.443,936,6270 -Roquevaire,13086,8962,23.964,1.558,1.411,915,6251 -Freycenet-la-Cuche,43097,106,16.261,1.284,1.163,788,6421 -Saint-Marc-Jaumegarde,13095,1226,23.262,1.535,1.390,907,6274 -Wolschheim,67553,318,3.642,0.607,0.550,1027,6854 -Poligné,35231,1203,9.526,0.982,0.889,348,6766 -Éclans-Nenon,39205,386,26.107,1.626,1.472,896,6671 -Bessey-en-Chaume,21065,154,10.560,1.034,0.936,834,6669 -La Chapelle-Felcourt,51126,51,9.846,0.999,0.905,830,6884 -Corgengoux,21193,379,12.558,1.128,1.021,856,6656 -Carrépuis,80176,274,5.575,0.752,0.681,686,6958 -Belcodène,13013,1902,13.101,1.152,1.043,911,6260 -Paroy,25445,124,4.404,0.668,0.605,918,6665 -Mimet,13062,4617,18.857,1.382,1.251,905,6261 -Gémenos,13042,6452,32.924,1.826,1.653,917,6250 -Bazuel,59055,533,11.845,1.096,0.992,741,6997 -La Ciotat,13028,35366,32.068,1.803,1.632,911,6233 -Coron,49109,1598,31.983,1.800,1.630,427,6672 -La Bouilladisse,13016,6135,12.713,1.135,1.028,909,6260 -Ceyreste,13023,4539,23.150,1.532,1.387,911,6239 -Cadolive,13020,2159,4.190,0.652,0.590,907,6260 -Voudenay,21715,190,21.560,1.478,1.338,804,6670 -Trévillers,25571,483,10.812,1.047,0.948,993,6693 -Sainte-Marie-en-Chaux,70470,165,2.445,0.498,0.451,948,6748 -Saint-Zacharie,83120,5539,27.184,1.660,1.503,919,6254 -Neuvy-Sautour,89276,918,19.156,1.393,1.261,761,6772 -Peypin,13073,5441,13.262,1.159,1.049,906,6258 -Landelles-et-Coupigny,14352,877,24.574,1.578,1.429,403,6874 -Rochepaule,7192,268,33.527,1.843,1.669,811,6443 -La Penne-sur-Huveaune,13070,6433,3.642,0.607,0.550,904,6246 -Crosey-le-Petit,25178,141,9.630,0.988,0.895,962,6698 -Vauvenargues,13111,1015,54.355,2.347,2.125,916,6278 -Levernois,21347,322,3.778,0.619,0.560,841,6657 -Monclar,47173,865,24.217,1.566,1.418,502,6372 -Aubagne,13005,45290,54.751,2.355,2.132,904,6244 -Sornay,71528,2049,18.155,1.356,1.228,869,6617 -La Destrousse,13031,3442,2.992,0.551,0.499,911,6257 -Auriol,13007,11417,44.596,2.126,1.925,919,6254 -Gréasque,13046,4217,6.229,0.794,0.719,905,6263 -Puyloubier,13079,1780,40.913,2.036,1.843,920,6276 -Saint-Hippolyte,15190,116,14.044,1.193,1.080,679,6460 -Quemperven,22257,382,7.984,0.899,0.814,235,6865 -Saint-Savournin,13101,3338,5.911,0.774,0.701,903,6258 -Neuville-sur-Escaut,59429,2701,4.771,0.695,0.629,726,7021 -Pacé,35210,11764,34.973,1.882,1.704,342,6793 -Nomain,59435,2497,19.090,1.391,1.259,718,7043 -La Barre-de-Semilly,50032,988,7.761,0.887,0.803,405,6898 -Cahagnes,14120,1398,24.682,1.581,1.431,429,6892 -Saint-Jean-d'Elle,50492,2440,33.801,1.851,1.676,417,6895 -Saint-Sébastien-de-Morsent,27602,5750,10.038,1.008,0.913,559,6883 -Bouliac,33065,3552,7.795,0.889,0.805,423,6418 -Val de Drôme,14672,847,28.301,1.693,1.533,424,6889 -Brémoy,14096,226,12.701,1.134,1.027,421,6884 -Ajaccio,2A004,69075,82.321,2.888,2.615,1166,6104 -Bathelémont,54050,64,6.603,0.818,0.741,962,6849 -Villevieux,39574,713,10.130,1.013,0.917,885,6626 -Bérigny,50046,423,12.172,1.111,1.006,415,6900 -Larroque-Saint-Sernin,32196,168,17.929,1.348,1.220,499,6305 -Le Perron,50398,211,4.735,0.693,0.627,417,6892 -Wolfgantzen,68379,1051,9.368,0.974,0.882,1033,6780 -Pont-Bellanger,14511,65,3.628,0.606,0.549,410,6878 -Chailly-en-Gâtinais,45066,693,18.357,1.364,1.235,661,6759 -Brochon,21110,664,7.418,0.867,0.785,853,6684 -Caumont-sur-Aure,14143,2358,40.542,2.027,1.835,423,6894 -L'Isle-sur-la-Sorgue,84054,19398,44.609,2.126,1.925,867,6311 -Saint-Amand-Villages,50444,2557,38.454,1.974,1.787,414,6891 -Sainte-Maure-de-Peyriac,47258,342,23.221,1.534,1.389,472,6324 -Santigny,89375,103,9.450,0.979,0.886,786,6724 -Viry,71586,253,20.325,1.435,1.299,800,6600 -Fourneaux,50192,153,3.404,0.587,0.531,403,6882 -Domjean,50164,1062,16.771,1.304,1.181,406,6882 -Biéville,50054,189,5.569,0.751,0.680,416,6895 -Torigny-les-Villes,50601,4352,39.418,1.998,1.809,411,6881 -Saint-Clément,7226,85,19.838,1.418,1.284,797,6430 -Saint-Front,43186,401,52.009,2.296,2.079,786,6431 -Montrésor,37157,351,0.997,0.318,0.288,564,6674 -Saint-Lô,50502,18961,23.250,1.535,1.390,399,6896 -Martigny-le-Comte,71285,421,37.331,1.945,1.761,803,6600 -Montusclat,43143,144,10.533,1.033,0.935,788,6436 -Lamberville,50261,174,7.117,0.849,0.769,416,6895 -Chaudeyrolles,43066,101,18.901,1.384,1.253,794,6425 -Amayé-sur-Seulles,14007,227,5.667,0.758,0.686,430,6893 -Rothonay,39468,133,12.969,1.146,1.038,894,6608 -Saint-Illiers-le-Bois,78559,426,4.426,0.670,0.607,592,6876 -Saint-Victor-l'Abbaye,76656,774,8.502,0.928,0.840,564,6951 -Arancou,64031,156,5.196,0.726,0.657,371,6271 -Évricourt,60227,220,3.055,0.556,0.503,694,6942 -Allériot,71004,1139,13.502,1.170,1.059,846,6636 -Tassenières,39525,394,6.727,0.826,0.748,892,6649 -Thurey,71538,451,18.463,1.368,1.239,859,6631 -Le Bouchet-Saint-Nicolas,43037,277,19.362,1.401,1.268,764,6418 -Montrabot,50351,79,3.887,0.628,0.569,413,6896 -Champclause,43053,199,22.110,1.497,1.355,794,6438 -Brélidy,22018,299,8.297,0.917,0.830,241,6857 -Tessy-Bocage,50592,2356,34.600,1.872,1.695,402,6879 -Betbezer-d'Armagnac,40039,145,7.984,0.899,0.814,447,6323 -Baudre,50034,542,3.808,0.621,0.562,401,6895 -Chailly-en-Brie,77070,1388,17.945,1.348,1.220,712,6854 -Saint-Germain-d'Elle,50476,221,8.951,0.952,0.862,413,6896 -Supt,39522,103,14.081,1.194,1.081,931,6644 -Dialan sur Chaîne,14347,1069,22.118,1.497,1.355,424,6887 -Coubon,43078,3187,22.645,1.515,1.372,776,6435 -Foulognes,14282,198,6.563,0.815,0.738,423,6902 -Saint-Pierre-de-Semilly,50538,442,4.574,0.681,0.617,409,6898 -Sarp,65407,110,1.841,0.432,0.391,502,6215 -Sainte-Honorine-de-Ducy,14590,128,5.048,0.715,0.647,423,6898 -Sallen,14664,297,11.483,1.079,0.977,421,6900 -Cuisia,39185,393,10.304,1.022,0.925,881,6610 -Beuvrigny,50050,138,6.899,0.836,0.757,407,6883 -Saint-Léger-du-Bois,71438,538,21.361,1.471,1.332,806,6660 -Trochères,21644,167,5.122,0.720,0.652,876,6696 -Condé-sur-Vire,50139,4058,36.738,1.929,1.747,405,6896 -Curgy,71162,1142,31.814,1.795,1.625,801,6655 -Cuse-et-Adrisans,25184,283,5.504,0.747,0.676,954,6714 -Moutier-Rozeille,23140,431,19.537,1.407,1.274,639,6539 -Chadrac,43046,2549,2.476,0.501,0.454,772,6440 -Saint-Pierre-du-Fresne,14650,197,3.501,0.596,0.540,423,6887 -Cheminas,7063,404,9.443,0.978,0.885,838,6448 -Thoras,43245,234,45.207,2.140,1.938,751,6421 -Cucuron,84042,1774,32.487,1.814,1.642,896,6297 -Lantriac,43113,1931,23.170,1.532,1.387,777,6435 -Ligugé,86133,3335,22.898,1.523,1.379,495,6604 -Villars-sous-Écot,25618,354,11.464,1.078,0.976,977,6710 -Laval-Morency,8249,241,4.361,0.665,0.602,808,6970 -Ouides,43145,57,10.799,1.046,0.947,761,6425 -Pierreval,76502,541,3.923,0.630,0.570,573,6940 -Laussonne,43115,1009,25.050,1.593,1.442,783,6428 -Costaros,43077,545,3.869,0.626,0.567,766,6423 -Le Monastier-sur-Gazeille,43135,1790,39.294,1.995,1.806,779,6430 -Saint-Pierre-d'Entremont,61445,700,6.238,0.795,0.720,430,6864 -Saillenard,71380,781,17.764,1.342,1.215,883,6623 -Saint-Pierre-du-Regard,61447,1437,9.439,0.978,0.885,438,6865 -Berjou,61044,471,8.948,0.952,0.862,442,6866 -La Pommeraye,14510,60,2.844,0.537,0.486,449,6874 -La Lande-Saint-Siméon,61219,148,5.421,0.741,0.671,447,6863 -La Valette,38521,72,7.902,0.895,0.810,924,6434 -Le Monteil,43140,665,2.185,0.471,0.426,772,6440 -Cauville,14146,161,5.946,0.776,0.703,439,6877 -Sainte-Honorine-la-Chardonne,61407,739,14.611,1.217,1.102,447,6866 -Vincent-Froideville,39577,391,12.009,1.103,0.999,888,6638 -Cresseveuille,14198,261,5.614,0.754,0.683,482,6908 -Valay,70514,691,17.385,1.327,1.201,899,6699 -Courbette,39168,53,2.651,0.518,0.469,896,6614 -Montilly-sur-Noireau,61287,726,11.212,1.066,0.965,438,6860 -Bligny-lès-Beaune,21086,1241,7.256,0.857,0.776,839,6657 -Montagnol,12147,129,34.692,1.875,1.698,701,6307 -Viévy,21683,357,33.127,1.832,1.659,807,6662 -Saint-Julien-Chapteuil,43200,1881,28.611,1.703,1.542,782,6434 -Pont,21495,129,3.565,0.601,0.544,877,6679 -Domblain,52169,82,5.361,0.737,0.667,849,6821 -Saint-Lamain,39486,116,4.209,0.653,0.591,899,6636 -Ouges,21473,1432,12.191,1.111,1.006,859,6687 -Vandelans,70519,115,3.100,0.560,0.507,939,6705 -Cossesseville,14183,96,4.739,0.693,0.627,450,6871 -Chadron,43047,272,13.682,1.177,1.066,773,6427 -Esson,14251,511,8.863,0.948,0.858,447,6878 -Vauconcourt-Nervezain,70525,218,18.399,1.365,1.236,910,6734 -Meslay,14411,284,5.763,0.764,0.692,453,6878 -Cahan,61069,180,5.920,0.774,0.701,446,6869 -Saint-Étienne-du-Vigan,43180,101,9.475,0.980,0.887,766,6412 -Mazet-Saint-Voy,43130,1114,45.596,2.149,1.946,800,6437 -Présailles,43156,126,22.311,1.504,1.362,780,6421 -Zilling,57761,277,3.583,0.603,0.546,1010,6864 -Le Puy-en-Velay,43157,19115,16.842,1.306,1.182,769,6439 -Le Hom,14689,3695,47.123,2.185,1.978,446,6885 -Les Sorinières,44198,8216,13.169,1.155,1.046,357,6678 -Desges,43085,59,16.861,1.307,1.183,735,6438 -Mayres,63218,195,12.466,1.124,1.018,756,6474 -Sembadel,43237,230,18.666,1.375,1.245,755,6467 -Chazelles,43068,37,4.919,0.706,0.639,738,6437 -Saint-Pal-de-Senouire,43214,110,18.217,1.359,1.230,748,6463 -Le Vey,14741,115,3.551,0.600,0.543,446,6875 -Thorée-les-Pins,72357,721,28.140,1.689,1.529,477,6737 -Saint-Rémy,14656,1008,7.576,0.876,0.793,446,6876 -Sainte-Anne-Saint-Priest,87134,163,16.817,1.305,1.182,595,6510 -Bonnœil,14087,135,7.217,0.855,0.774,454,6876 -Maresville,62554,101,2.462,0.499,0.452,609,7049 -Saint-Éman,28336,109,4.634,0.685,0.620,566,6803 -Grèzes,43104,197,35.737,1.903,1.723,734,6420 -Pontpierre,57549,719,8.503,0.928,0.840,965,6892 -Blavozy,43032,1650,6.283,0.798,0.723,777,6442 -Esplantas-Vazeilles,43090,128,17.220,1.321,1.196,740,6422 -Longchamp,21351,1182,16.260,1.284,1.163,876,6689 -Saint-Didier-de-Bizonnes,38380,299,7.220,0.855,0.774,884,6486 -Remigny,71369,435,2.462,0.499,0.452,831,6648 -Panges,21477,93,6.128,0.788,0.713,837,6698 -Fay-lès-Marcilly,10146,86,5.751,0.763,0.691,746,6811 -Fontaine-lès-Dijon,21278,8938,4.523,0.677,0.613,852,6698 -Achain,57004,83,4.753,0.694,0.628,964,6874 -Alleyras,43005,164,25.052,1.593,1.442,752,6420 -Saint-Hostien,43194,745,13.530,1.171,1.060,781,6445 -Saint-Philbert-sur-Orne,61444,112,5.875,0.772,0.699,452,6866 -Brives-Charensac,43041,4118,4.728,0.692,0.627,771,6440 -La Haye-Pesnel,50237,1366,6.353,0.802,0.726,378,6866 -Vic-sur-Aisne,2795,1666,5.290,0.732,0.663,709,6922 -Bruc-sur-Aff,35045,862,21.242,1.467,1.328,323,6760 -Saint-Omer,14635,180,8.118,0.907,0.821,450,6874 -Essay,61156,526,16.044,1.275,1.154,495,6832 -Goudet,43101,59,4.455,0.672,0.608,771,6422 -Combray,14171,150,4.558,0.680,0.616,446,6878 -Benqué-Molère,65081,121,3.797,0.620,0.561,479,6227 -Saint-Léger-sur-Dheune,71442,1567,12.242,1.114,1.009,823,6639 -Le Mesnil-Villement,14427,301,3.616,0.605,0.548,453,6866 -Arsac-en-Velay,43010,1216,11.994,1.102,0.998,776,6431 -Chaulhac,48046,71,9.650,0.989,0.895,720,6427 -Vers,71572,232,4.162,0.649,0.588,840,6612 -Cayres,43042,727,29.171,1.719,1.556,765,6421 -Notre-Dame-d'Oé,37172,4085,7.725,0.885,0.801,526,6707 -Fressac,30119,177,5.965,0.777,0.704,776,6323 -Collonge-en-Charollais,71139,138,12.178,1.111,1.006,818,6620 -Queyrières,43158,304,14.071,1.194,1.081,786,6445 -Les Estables,43091,330,33.828,1.851,1.676,793,6425 -Saint-Germain-Laprade,43190,3611,28.021,1.685,1.526,777,6435 -Cheylard-l'Évêque,48048,64,29.836,1.739,1.575,764,6389 -Araules,43007,597,31.749,1.794,1.624,794,6438 -Vergezac,43257,497,20.778,1.451,1.314,760,6440 -Freycenet-la-Tour,43098,99,8.001,0.900,0.815,786,6425 -Le Brignon,43039,598,34.908,1.881,1.703,773,6427 -Brielles,35042,702,11.626,1.085,0.982,396,6773 -Le Trévoux,29300,1617,20.883,1.455,1.317,206,6773 -Château-Porcien,8107,1395,17.344,1.326,1.201,789,6940 -Mièges,39329,155,7.768,0.887,0.803,931,6639 -Mont-sous-Vaudrey,39365,1253,15.121,1.238,1.121,898,6652 -Fresney-le-Vieux,14291,271,2.501,0.503,0.455,451,6884 -Sogny-aux-Moulins,51538,114,6.705,0.824,0.746,802,6869 -Cussy-la-Colonne,21221,50,6.153,0.790,0.715,822,6662 -Entrains-sur-Nohain,58109,813,59.806,2.462,2.229,721,6712 -Les Isles-Bardel,14343,66,5.731,0.762,0.690,455,6866 -Bonnemaison,14084,404,8.648,0.936,0.847,436,6885 -Baudrières,71023,946,27.058,1.656,1.499,850,6619 -Champforgeuil,71081,2491,7.265,0.858,0.777,837,6637 -Siracourt,62797,272,3.147,0.565,0.512,646,7030 -Alleyrac,43004,116,11.449,1.077,0.975,777,6421 -Chevroux,1102,957,17.210,1.321,1.196,849,6591 -Milhaud,30169,5666,18.408,1.366,1.237,808,6295 -Rignosot,25491,117,3.885,0.627,0.568,942,6704 -Saint-Baraing,39477,264,6.338,0.801,0.725,887,6657 -Plouédern,29181,2795,19.588,1.409,1.276,168,6846 -Montmançon,21437,250,9.016,0.956,0.866,879,6700 -Montlandon,28265,244,2.950,0.547,0.495,555,6812 -Sully,71530,500,31.994,1.800,1.630,814,6658 -Val-de-Vie,14576,548,19.308,1.399,1.267,494,6875 -Ménil-Hubert-sur-Orne,61269,481,10.832,1.048,0.949,449,6868 -Izier,21320,800,7.526,0.873,0.790,865,6691 -Devrouze,71173,310,14.601,1.216,1.101,868,6629 -Donnay,14226,268,11.342,1.072,0.971,452,6875 -Saint-Lambert,14602,278,7.423,0.867,0.785,439,6875 -Saint-Didier,39480,274,2.990,0.550,0.498,892,6625 -Saint-Vénérand,43225,51,9.636,0.988,0.895,752,6420 -Aiguilhe,43002,1531,1.102,0.334,0.302,769,6440 -Bard-lès-Pesmes,70048,145,5.212,0.727,0.658,897,6690 -Coulonces,61123,222,6.149,0.789,0.714,481,6862 -Saint-Jean-de-Livet,14595,209,3.544,0.599,0.542,500,6892 -Condé-sur-Suippe,2211,279,5.909,0.774,0.701,767,6925 -Détain-et-Bruant,21228,140,15.553,1.255,1.136,837,6675 -Mont-Ormel,61289,55,3.735,0.615,0.557,491,6865 -Sercy,71515,94,5.797,0.766,0.694,828,6614 -Marieulles,57445,697,8.237,0.914,0.828,925,6883 -Salettes,43231,138,20.614,1.445,1.308,781,6417 -Jort,14345,298,6.616,0.819,0.742,473,6879 -Les Monts-Verts,48012,350,28.941,1.712,1.550,718,6420 -Blavignac,48026,273,13.792,1.182,1.070,722,6422 -Saint-Chély-d'Apcher,48140,4160,28.203,1.690,1.530,723,6409 -Cornant,89116,358,5.048,0.715,0.647,716,6782 -Chaudes-Aigues,15045,886,54.457,2.349,2.127,702,6413 -Sonnac,17428,516,16.844,1.306,1.182,448,6532 -Albaret-le-Comtal,48001,172,29.616,1.732,1.568,714,6418 -Les Bessons,48025,442,23.413,1.540,1.394,720,6411 -Les Champeaux,61086,119,9.687,0.991,0.897,489,6867 -Méry-Bissières-en-Auge,14410,1124,8.942,0.952,0.862,476,6899 -Nécy,61303,522,7.857,0.892,0.808,471,6865 -Chatelay,39117,105,13.189,1.156,1.047,905,6661 -Nan-sous-Thil,21449,185,11.116,1.061,0.961,802,6702 -Saint-Erblon,53214,174,5.562,0.751,0.680,390,6751 -Canapville,61072,211,8.211,0.912,0.826,497,6875 -Barou-en-Auge,14043,81,8.392,0.922,0.835,479,6874 -Cadarsac,33079,353,2.312,0.484,0.438,441,6424 -Sassy,14669,212,9.585,0.985,0.892,468,6881 -Cholet,49099,53718,87.462,2.977,2.695,404,6660 -Saint-Pierreville,7286,548,20.523,1.442,1.306,814,6415 -Saules,71503,128,2.068,0.458,0.415,828,6618 -Bagnols-sur-Cèze,30028,18192,31.228,1.779,1.611,831,6338 -Chanteuges,43056,448,16.207,1.281,1.160,740,6439 -Castillon-en-Auge,14141,167,7.344,0.863,0.781,489,6886 -Connangles,43076,148,21.967,1.492,1.351,748,6464 -Saint-Didier-sur-Doulon,43178,196,34.116,1.859,1.683,747,6468 -Anterrieux,15007,122,16.503,1.293,1.171,703,6412 -Saint-Pierre-le-Vieux,48177,315,15.022,1.234,1.117,726,6416 -Genlis,21292,5350,12.066,1.106,1.001,870,6684 -Neuvy-le-Roi,37170,1087,47.877,2.202,1.994,515,6725 -Dhuys et Morin-en-Brie,2458,814,40.116,2.016,1.825,736,6862 -Fultot,76293,209,3.726,0.614,0.556,539,6964 -Soumensac,47303,231,11.421,1.076,0.974,491,6403 -Villegaudin,71577,211,8.971,0.953,0.863,859,6634 -Aurières,63020,315,11.043,1.058,0.958,692,6512 -Ticheville,61485,209,9.988,1.006,0.911,498,6872 -Sourdun,77459,1502,23.342,1.538,1.393,731,6826 -Fournels,48064,364,15.537,1.255,1.136,713,6411 -Mackenheim,67277,761,11.755,1.091,0.988,1037,6798 -Vaux-sur-Mer,17461,3783,6.064,0.784,0.710,384,6515 -Pisseloup,52390,50,3.249,0.574,0.520,905,6751 -Saint-Martin-Lestra,42261,889,16.339,1.287,1.165,809,6517 -Le Mesnil-Eudes,14419,263,8.532,0.930,0.842,496,6894 -Neauphe-sur-Dive,61302,135,14.011,1.191,1.078,489,6868 -Roiville,61351,131,8.193,0.911,0.825,499,6868 -Saint-Germain-de-Modéon,21548,168,16.595,1.297,1.174,786,6701 -Comblessac,35084,690,17.310,1.324,1.199,318,6762 -Santenay,21582,874,10.349,1.024,0.927,828,6650 -Saint-Lambert-sur-Dive,61413,154,7.767,0.887,0.803,485,6861 -Tornac,30330,885,19.565,1.408,1.275,781,6327 -Moissey,39335,557,10.788,1.045,0.946,891,6678 -Fontans,48063,216,34.020,1.857,1.681,729,6401 -Beuvillers,14069,1364,4.917,0.706,0.639,498,6895 -Saint-Laurent-de-Veyrès,48167,38,9.102,0.960,0.869,708,6408 -Grandvals,48071,75,12.725,1.135,1.028,702,6404 -Saint-Jean-de-Bœuf,21553,112,12.349,1.119,1.013,834,6679 -Marestmontiers,80511,113,2.462,0.499,0.452,665,6953 -La Bussière-sur-Ouche,21120,152,20.613,1.445,1.308,828,6686 -Camembert,61071,187,10.269,1.020,0.924,491,6867 -Saint-Martin-sous-Montaigu,71459,363,3.641,0.607,0.550,831,6634 -Villy-lez-Falaise,14759,275,5.077,0.717,0.649,472,6872 -Crocy,14206,314,10.298,1.021,0.924,474,6868 -Èze,6059,2252,9.504,0.981,0.888,1052,6301 -Villers-la-Faye,21698,398,5.835,0.769,0.696,843,6671 -Bastia,2B033,44829,19.907,1.420,1.286,1224,6196 -Moltifao,2B162,672,55.497,2.371,2.147,1208,6171 -Châteauvert,83039,149,27.679,1.675,1.517,942,6268 -Losne,21356,1615,22.776,1.519,1.375,873,6669 -Fleurey-sur-Ouche,21273,1281,30.261,1.751,1.585,843,6688 -Saint-Mathieu-de-Tréviers,34276,4739,21.764,1.485,1.345,766,6298 -Néronde-sur-Dore,63249,505,9.017,0.956,0.866,739,6520 -Le Pin,44124,770,25.031,1.593,1.442,389,6732 -Deux-Verges,15060,50,11.272,1.069,0.968,702,6413 -Arzenc-d'Apcher,48007,50,7.818,0.890,0.806,708,6419 -Albaret-Sainte-Marie,48002,571,15.853,1.267,1.147,720,6416 -La Fresnaie-Fayel,61178,54,5.060,0.716,0.648,498,6863 -Semondans,25540,300,2.738,0.527,0.477,979,6721 -Les Moutiers-en-Auge,14457,119,10.090,1.011,0.915,478,6870 -Genouilly,71214,429,10.890,1.050,0.951,821,6616 -Clécy,14162,1259,24.573,1.578,1.429,447,6873 -Culles-les-Roches,71159,197,8.910,0.950,0.860,826,6616 -Pertheville-Ners,14498,245,8.433,0.924,0.837,474,6869 -Miraval-Cabardès,11232,43,12.527,1.127,1.020,648,6252 -Chaussin,39128,1667,16.012,1.274,1.153,881,6656 -Coudehard,61120,80,8.476,0.927,0.839,490,6862 -Chaintré,71074,572,3.322,0.580,0.525,835,6575 -Ratenelle,71366,393,8.051,0.903,0.818,854,6606 -Pleudaniel,22196,928,18.342,1.363,1.234,248,6866 -Taizé,71532,170,3.138,0.564,0.511,827,6603 -Aubigny-lès-Sombernon,21033,145,8.023,0.902,0.817,822,6690 -Épeugney,25220,594,14.036,1.193,1.080,928,6677 -Damblainville,14216,237,6.353,0.802,0.726,469,6873 -Saint-Gervais-des-Sablons,61399,70,8.788,0.944,0.855,484,6871 -Maroilles,59384,1391,22.080,1.496,1.355,758,7004 -Montferrat,83082,1549,34.089,1.858,1.682,982,6291 -Guêprei,61197,143,7.154,0.851,0.771,480,6862 -Pontchardon,61333,202,4.797,0.697,0.631,498,6873 -Montagny,73161,662,13.225,1.158,1.048,981,6489 -Saussey,21588,76,9.039,0.957,0.866,824,6665 -Saint-Martial,15199,81,14.853,1.227,1.111,705,6418 -Laubach,67260,319,1.705,0.416,0.377,1046,6876 -Veuvey-sur-Ouche,21673,205,10.144,1.014,0.918,829,6676 -Écorches,61152,85,9.812,0.997,0.903,487,6869 -Saint-Léger-du-Malzieu,48169,213,19.214,1.395,1.263,725,6420 -Saint-Rémy-de-Chaudes-Aigues,15209,117,15.180,1.240,1.123,703,6407 -Montregard,43142,601,40.040,2.014,1.824,801,6452 -Césarville-Dossainville,45065,264,19.209,1.395,1.263,644,6797 -Cesny-aux-Vignes,14149,434,4.121,0.646,0.585,471,6891 -Brem-sur-Mer,85243,2659,16.235,1.283,1.162,335,6625 -Vignats,14751,281,8.923,0.951,0.861,474,6864 -Colombier-le-Jeune,7068,570,15.235,1.242,1.125,831,6436 -Rimeize,48128,581,32.571,1.817,1.645,723,6409 -Saint-Jean-lès-Buzy,55458,370,10.385,1.026,0.929,901,6897 -Aubry-le-Panthou,61010,113,6.850,0.833,0.754,498,6863 -Volpajola,2B355,420,12.963,1.146,1.038,1226,6179 -Ernes,14245,328,9.067,0.958,0.867,469,6885 -Saint-Remy-sous-Broyes,51514,104,7.752,0.886,0.802,756,6847 -Ilheu,65229,39,2.054,0.456,0.413,503,6214 -Prêtreville,14522,413,11.363,1.073,0.972,502,6889 -Aubigny-en-Artois,62045,1465,6.268,0.797,0.722,669,7027 -Champosoult,61089,96,7.082,0.847,0.767,492,6864 -Saint-Martin-de-la-Lieue,14625,783,8.393,0.922,0.835,496,6894 -Clamerey,21177,184,12.099,1.107,1.002,810,6702 -Saint-Pierre-des-Ifs,14648,456,11.283,1.069,0.968,495,6894 -Piana,2A212,482,62.680,2.520,2.282,1171,6142 -Fontaine-au-Pire,59243,1213,7.619,0.879,0.796,727,7002 -Rochefort-sur-Nenon,39462,662,9.968,1.005,0.910,892,6672 -Dommartin-lès-Cuiseaux,71177,790,19.115,1.392,1.260,877,6600 -Pleure,39429,424,5.163,0.723,0.655,889,6648 -Concoules,30090,258,16.311,1.286,1.164,771,6366 -La Pyle,27482,156,1.689,0.414,0.375,546,6903 -Blaisy-Haut,21081,132,8.320,0.918,0.831,832,6695 -Bécherel,35022,673,0.555,0.237,0.215,333,6810 -La Houblonnière,14337,328,7.205,0.854,0.773,489,6897 -Fridefont,15073,108,16.574,1.296,1.173,710,6423 -Blangy-sous-Poix,80106,184,8.018,0.901,0.816,629,6966 -Brion,48031,80,21.916,1.490,1.349,704,6409 -Intville-la-Guétard,45170,127,4.883,0.703,0.637,641,6796 -Saint-Mars-sur-Colmont,53237,472,16.731,1.302,1.179,424,6814 -Briod,39079,203,4.204,0.653,0.591,901,6623 -Uzay-le-Venon,18268,399,35.375,1.893,1.714,659,6640 -Courlaoux,39171,1092,12.558,1.128,1.021,890,6621 -Castillon,14140,342,11.137,1.062,0.962,424,6904 -Grandrupt-de-Bains,88214,84,3.578,0.602,0.545,935,6778 -Néant-sur-Yvel,56145,1058,32.636,1.818,1.646,304,6779 -Chauchailles,48044,92,17.377,1.327,1.201,708,6407 -Nantois,55376,83,5.927,0.775,0.702,873,6838 -La Réorthe,85188,1097,24.195,1.566,1.418,393,6621 -Bourguébus,14092,1915,5.543,0.749,0.678,460,6894 -Ouézy,14482,233,4.733,0.692,0.627,472,6890 -Éguilly-sous-Bois,10136,120,10.129,1.013,0.917,814,6782 -Tallud-Sainte-Gemme,85287,476,18.722,1.377,1.247,405,6632 -Bellevesvre,71029,275,7.232,0.856,0.775,882,6639 -Montreuil-la-Cambe,61291,72,9.712,0.992,0.898,485,6867 -Lessard-et-le-Chêne,14362,156,10.192,1.016,0.920,493,6890 -Prinsuéjols-Malbouzon,48087,287,57.408,2.412,2.184,707,6401 -Gizia,39255,237,7.451,0.869,0.787,884,6605 -Villette-lès-Dole,39573,769,4.554,0.679,0.615,888,6663 -Arlay,39017,1232,20.295,1.434,1.298,894,6629 -Saint-Loup-de-Varennes,71444,1156,8.384,0.922,0.835,842,6628 -Perrières,14497,324,8.153,0.909,0.823,472,6879 -Frenelle-la-Petite,88186,44,3.501,0.596,0.540,927,6811 -Saint-Juéry,48161,66,1.639,0.408,0.369,707,6414 -Prunières,48121,259,13.225,1.158,1.048,726,6416 -Termes,48190,207,17.469,1.330,1.204,710,6415 -La Fage-Saint-Julien,48059,294,18.016,1.351,1.223,713,6410 -Les Monceaux,14435,173,3.797,0.620,0.561,489,6894 -Dissay-sous-Courcillon,72115,942,35.239,1.890,1.711,517,6732 -Noalhac,48106,98,13.508,1.170,1.059,713,6410 -Cerizy,2149,67,4.027,0.639,0.579,725,6963 -Nanton,71328,634,14.215,1.200,1.086,841,6612 -Mareil-sur-Loir,72185,662,12.033,1.104,1.000,477,6737 -Daoulas,29043,1792,5.705,0.760,0.688,164,6830 -Éguilly,21244,62,5.708,0.760,0.688,814,6692 -Beffia,39045,76,5.198,0.726,0.657,896,6605 -Pérassay,36156,361,24.490,1.575,1.426,632,6596 -Ruffey-lès-Beaune,21534,696,15.513,1.254,1.135,847,6662 -Curley,21217,134,5.676,0.758,0.686,846,6681 -Chaudenay-la-Ville,21155,44,5.255,0.730,0.661,822,6675 -Rauwiller,67386,208,4.904,0.705,0.638,1003,6864 -Recoules-d'Aubrac,48123,192,26.320,1.633,1.479,707,6401 -Pougne-Hérisson,79215,371,12.040,1.104,1.000,440,6626 -Durmignat,63140,199,12.468,1.124,1.018,693,6564 -Bressey-sur-Tille,21105,1105,7.312,0.861,0.780,867,6691 -Cruzille,71156,261,11.083,1.060,0.960,836,6601 -La Fage-Montivernoux,48058,156,37.570,1.951,1.766,713,6410 -Rolampont,52432,1512,49.323,2.236,2.025,868,6767 -Velogny,21662,35,4.051,0.641,0.580,810,6700 -Lisores,14368,267,11.966,1.101,0.997,496,6879 -Chaux,21162,488,7.101,0.848,0.768,845,6670 -Fays-la-Chapelle,10147,133,0.599,0.246,0.223,776,6782 -Gatey,39245,378,14.975,1.232,1.115,887,6650 -Vimoutiers,61508,3427,16.044,1.275,1.154,498,6872 -Beaumais,14053,183,10.699,1.041,0.943,478,6871 -Jons,69280,1467,7.295,0.860,0.779,862,6526 -Auxant,21036,72,5.573,0.751,0.680,820,6672 -Villy-le-Moutier,21708,345,20.172,1.430,1.295,849,6660 -Rouvres-en-Plaine,21532,1109,14.775,1.224,1.108,859,6686 -Le Jardin,19092,83,12.255,1.114,1.009,626,6471 -Saint-Alban-sur-Limagnole,48132,1336,51.148,2.276,2.061,731,6416 -Saint-Pois,50542,509,7.753,0.886,0.802,402,6860 -Le Malzieu-Ville,48090,735,7.988,0.900,0.815,727,6416 -Savigny-lès-Beaune,21590,1314,36.242,1.916,1.735,840,6662 -Yssingeaux,43268,7162,81.311,2.870,2.599,786,6445 -Saint-Pierre-en-Auge,14654,7825,146.497,3.853,3.489,482,6887 -Fontaine-les-Bassets,61171,105,5.945,0.776,0.703,480,6865 -Perrigny-sur-l'Ognon,21482,659,18.775,1.379,1.249,888,6690 -Nantoux,21450,170,6.637,0.820,0.742,834,6659 -Nançois-le-Grand,55371,72,9.316,0.972,0.880,875,6847 -Peintre,39409,123,6.524,0.813,0.736,888,6681 -Soustons,40310,7696,107.888,3.306,2.993,357,6309 -Le Pertuis,43150,448,12.028,1.104,1.000,786,6446 -Asquins,89021,294,21.741,1.484,1.344,760,6711 -Louvières-en-Auge,61238,70,6.239,0.795,0.720,482,6866 -Narcy,52347,251,11.162,1.063,0.962,854,6831 -Chenereilles,43069,328,14.564,1.215,1.100,795,6451 -Beurizot,21069,121,14.498,1.212,1.097,813,6699 -Saint-André-de-Chalencon,43166,347,17.379,1.327,1.201,772,6464 -Lajo,48079,101,18.632,1.374,1.244,736,6411 -Boussey,21097,33,5.638,0.756,0.684,816,6698 -Étreval,54185,62,2.393,0.492,0.445,925,6823 -Monistrol-sur-Loire,43137,8756,47.916,2.203,1.995,797,6465 -Eygliers,5052,776,29.834,1.739,1.575,986,6404 -Vorey,43267,1434,39.544,2.002,1.813,768,6452 -Notre-Dame-d'Estrées-Corbon,14474,237,11.711,1.089,0.986,478,6899 -Beauzac,43025,2923,35.849,1.906,1.726,783,6465 -Retournac,43162,2898,45.822,2.155,1.951,784,6459 -Marcilly-Ogny,21382,195,17.942,1.348,1.220,804,6683 -Fresnay-le-Samson,61180,90,6.761,0.828,0.750,493,6866 -Chevigny-Saint-Sauveur,21171,11496,12.018,1.103,0.999,858,6691 -Le Tronchet,35362,1154,11.415,1.075,0.973,341,6834 -Mézères,43134,160,8.711,0.939,0.850,780,6454 -Cessey-sur-Tille,21126,627,11.538,1.081,0.979,867,6691 -La Neuve-Lyre,27431,573,2.888,0.541,0.490,533,6869 -Saint-Sauveur-de-Montagut,7295,1114,11.703,1.089,0.986,822,6415 -Guerquesalles,61198,135,8.646,0.936,0.847,494,6871 -Vicques,14742,70,2.673,0.520,0.471,476,6876 -Fallon,70226,306,5.667,0.758,0.686,963,6718 -Crouttes,61139,310,13.478,1.169,1.058,493,6873 -Petite-Forêt,59459,4894,4.531,0.678,0.614,733,7032 -Mons,63232,537,13.934,1.188,1.076,737,6546 -Quarouble,59479,3015,12.237,1.113,1.008,745,7038 -Merri,61276,169,5.995,0.779,0.705,478,6868 -Salornay-sur-Guye,71495,865,11.163,1.064,0.963,821,6601 -Magny-lès-Villers,21368,246,3.822,0.622,0.563,844,6668 -Aougny,51013,101,7.492,0.871,0.789,755,6898 -Trun,61494,1271,9.148,0.963,0.872,484,6867 -Norrey-en-Auge,14469,93,8.832,0.946,0.857,477,6872 -Le Pré-d'Auge,14520,891,10.781,1.045,0.946,493,6897 -Les Villettes,43265,1401,11.587,1.084,0.981,790,6461 -Saint-Ouen-du-Mesnil-Oger,14637,211,5.994,0.779,0.705,473,6902 -Saint-Alban-en-Montagne,7206,90,14.095,1.195,1.082,774,6403 -Montreuil-en-Auge,14448,55,3.416,0.588,0.532,488,6901 -Saint-Ouen-le-Pin,14639,260,5.638,0.756,0.684,489,6897 -Le Bardon,45020,1060,12.339,1.118,1.012,600,6748 -Potigny,14516,2074,4.259,0.657,0.595,464,6879 -Quillebeuf-sur-Seine,27485,900,10.335,1.023,0.926,521,6933 -Saint-Martin-les-Eaux,4190,115,9.198,0.965,0.874,922,6313 -Émiéville,14237,588,3.983,0.635,0.575,466,6900 -Tiranges,43246,476,27.009,1.654,1.498,777,6466 -Chamalières-sur-Loire,43049,495,13.715,1.179,1.067,777,6457 -Saint-Germain-le-Vasson,14589,946,9.401,0.976,0.884,460,6885 -Reithouse,39455,63,4.808,0.698,0.632,896,6612 -Martainville,14404,120,5.922,0.775,0.702,455,6875 -Dannemarie,78194,199,3.456,0.592,0.536,599,6851 -Saint-Pierre-du-Bû,14649,475,7.483,0.871,0.789,465,6866 -Bellengreville,14057,1511,10.205,1.017,0.921,465,6898 -Salles-Adour,65401,582,2.512,0.504,0.456,464,6237 -Versainville,14737,461,7.778,0.888,0.804,466,6874 -Bernadets-Debat,65085,109,8.870,0.948,0.858,484,6253 -Flagey-lès-Auxonne,21268,197,7.976,0.899,0.814,882,6670 -Saint-Étienne-Lardeyrol,43181,760,11.971,1.101,0.997,778,6441 -Tailly,21616,181,4.591,0.682,0.617,837,6655 -Saint-Julien-d'Ance,43201,248,18.018,1.351,1.223,775,6467 -Fontaine-le-Pin,14276,358,8.493,0.928,0.840,461,6881 -Bresse-sur-Grosne,71058,187,10.105,1.012,0.916,835,6612 -Valambray,14005,1767,41.423,2.049,1.855,464,6891 -Épervans,71189,1607,12.528,1.127,1.020,844,6629 -Beaux,43024,833,16.869,1.307,1.183,784,6453 -Gilly-lès-Cîteaux,21297,691,11.122,1.062,0.962,849,6677 -Cuisy,55137,48,5.536,0.749,0.678,860,6911 -Bazoches-au-Houlme,61028,474,28.964,1.713,1.551,461,6866 -Saint-Sylvain,14659,1439,13.744,1.180,1.068,463,6890 -Domène,38150,6742,5.407,0.740,0.670,923,6461 -Duneau,72122,1047,12.972,1.146,1.038,513,6777 -Lessard-en-Bresse,71256,551,8.215,0.912,0.826,861,6627 -Écuelles,71186,279,10.099,1.012,0.916,857,6654 -Saint-Maurice-de-Lignon,43211,2579,30.071,1.746,1.581,792,6459 -Mouthier-en-Bresse,71326,429,30.199,1.749,1.584,885,6643 -Bouhey,21091,37,7.602,0.878,0.795,826,6678 -Falaise,14258,8214,11.798,1.093,0.990,466,6874 -Malrevers,43126,750,14.202,1.200,1.086,777,6442 -Argences,14020,3687,9.800,0.996,0.902,469,6899 -Molain,2488,153,1.813,0.429,0.388,736,6993 -Rosières,43165,1532,27.411,1.667,1.509,781,6450 -Grazac,43102,1044,21.752,1.485,1.345,791,6455 -Bas-en-Basset,43020,4351,47.001,2.182,1.976,790,6466 -Saint-Jeures,43199,963,34.568,1.871,1.694,795,6442 -Sainte-Sigolène,43224,5959,30.683,1.763,1.596,793,6463 -Combres,28105,565,15.134,1.238,1.121,555,6809 -Bessamorel,43028,444,7.433,0.868,0.786,786,6446 -La Séauve-sur-Semène,43236,1466,8.158,0.909,0.823,798,6469 -Lavoûte-sur-Loire,43119,847,10.519,1.032,0.934,770,6446 -Estreux,59215,947,5.325,0.735,0.665,741,7029 -Malvalette,43127,828,20.996,1.459,1.321,790,6471 -Valprivas,43249,496,22.393,1.506,1.364,784,6471 -Saint-Christophe-d'Allier,43173,92,19.250,1.397,1.265,755,6420 -Villers-Canivet,14753,791,12.250,1.114,1.009,460,6873 -Rapilly,14531,47,4.231,0.655,0.593,456,6867 -Fleury,50185,1043,12.736,1.136,1.029,386,6870 -Saint-Paul-de-Tartas,43215,201,27.738,1.676,1.517,771,6414 -Saint-Pierre-Canivet,14646,401,7.099,0.848,0.768,461,6873 -Estrées-la-Campagne,14252,245,7.428,0.868,0.786,462,6882 -Le Bailleul,72022,1243,27.759,1.677,1.518,461,6743 -Estevelles,62311,2048,2.513,0.505,0.457,694,7041 -Florimont,90046,451,18.306,1.362,1.233,1004,6724 -Gouvix,14309,827,5.228,0.728,0.659,460,6887 -La Panouse,48108,79,37.786,1.957,1.772,751,6405 -Barges,43019,85,7.094,0.848,0.768,771,6414 -Les Laubies,48083,165,23.092,1.530,1.385,735,6398 -Tréprel,14710,106,5.522,0.748,0.677,456,6872 -Le Bû-sur-Rouvres,14116,103,2.862,0.538,0.487,466,6885 -Thorey-sous-Charny,21633,171,11.484,1.079,0.977,810,6692 -Luisant,28220,6657,4.425,0.670,0.607,587,6816 -Lafarre,43109,68,12.942,1.145,1.037,776,6418 -Nance,39379,511,7.436,0.868,0.786,883,6633 -Mijanès,9193,59,39.563,2.002,1.813,617,6182 -Les Loges-Saulces,14375,172,6.820,0.831,0.752,459,6869 -Lascaux,19109,212,7.426,0.867,0.785,573,6470 -Arpenans,70029,245,12.058,1.105,1.000,958,6728 -Pierrefontaine-lès-Blamont,25452,462,8.684,0.938,0.849,989,6703 -Fourneaux-le-Val,14284,160,5.422,0.741,0.671,459,6866 -Le Roux,7200,49,16.571,1.296,1.173,790,6400 -Grandrieu,48070,743,63.637,2.539,2.299,756,6409 -Saint-Arcons-de-Barges,43168,121,15.384,1.248,1.130,775,6414 -Fixin,21265,749,10.173,1.015,0.919,853,6684 -Le Détroit,14223,88,5.495,0.746,0.675,456,6868 -Saint-Loup,51495,84,6.897,0.836,0.757,759,6850 -Issarlès,7106,145,18.849,1.382,1.251,786,6418 -Naussac-Fontanes,48105,351,25.054,1.593,1.442,766,6403 -Châteauneuf,21152,89,10.120,1.013,0.917,825,6683 -Eraines,14244,345,4.046,0.640,0.579,468,6871 -Évran,22056,1705,24.326,1.570,1.422,335,6824 -Fontenay-le-Marmion,14277,1915,10.156,1.014,0.918,458,6892 -Fresney-le-Puceux,14290,816,9.615,0.987,0.894,454,6892 -Neuvy-au-Houlme,61308,212,15.585,1.257,1.138,469,6862 -Pierrepont,14502,93,4.330,0.662,0.599,455,6870 -Bussy,60117,325,3.841,0.624,0.565,699,6947 -Ménil-Hermei,61267,202,6.586,0.817,0.740,454,6863 -Lafeuillade-en-Vézie,15090,597,16.494,1.293,1.171,653,6412 -Pourlans,71357,205,16.261,1.284,1.163,871,6656 -Boulogne-sur-Helpe,59093,340,8.734,0.941,0.852,765,6999 -Vielprat,43263,49,7.214,0.855,0.774,774,6419 -La Besseyre-Saint-Mary,43029,101,21.728,1.484,1.344,729,6431 -Saint-Cirgues-en-Montagne,7224,211,21.972,1.492,1.351,784,6412 -Rocles,48129,234,19.770,1.415,1.281,763,6397 -Lavillatte,7137,68,18.862,1.382,1.251,773,6408 -Langogne,48080,2886,31.135,1.776,1.608,768,6405 -Roquettes,31460,4103,3.368,0.584,0.529,570,6267 -Marcilly-lès-Buxy,71277,704,19.038,1.389,1.258,823,6623 -Audes,3010,437,28.233,1.691,1.531,669,6594 -Ars,23007,251,21.764,1.485,1.345,628,6548 -Saint-Gervais-du-Perron,61400,378,11.378,1.074,0.972,492,6830 -La Garde,83062,25236,15.597,1.257,1.138,943,6228 -Chanaleilles,43054,184,48.600,2.219,2.009,739,6412 -Soulangy,14677,249,7.153,0.851,0.771,467,6877 -Ussy,14720,879,8.737,0.941,0.852,458,6876 -Bons-Tassilly,14088,396,9.391,0.975,0.883,466,6877 -Saint-Amand-le-Petit,87132,103,15.434,1.251,1.133,608,6520 -Saint-Paul-le-Froid,48174,141,44.015,2.112,1.912,739,6407 -Rochonvillers,57586,193,5.671,0.758,0.686,920,6930 -Landos,43111,893,36.873,1.933,1.750,769,6415 -Nepvant,55377,85,5.103,0.719,0.651,860,6940 -Vimont,14761,710,8.953,0.952,0.862,466,6896 -Lachapelle-Graillouse,7121,203,20.809,1.452,1.315,778,6413 -Ifs,14341,11768,9.039,0.957,0.866,458,6899 -Thomirey,21631,47,7.077,0.847,0.767,820,6664 -Écury-le-Repos,51226,60,10.023,1.008,0.913,775,6858 -Martigny-sur-l'Ante,14405,315,9.547,0.984,0.891,460,6873 -Ménil-Vin,61273,53,3.654,0.608,0.550,456,6865 -Soumont-Saint-Quentin,14678,541,6.872,0.834,0.755,461,6881 -Mazan-l'Abbaye,7154,121,46.144,2.162,1.958,790,6405 -Maizières,14394,452,7.183,0.853,0.772,470,6882 -Saint-Jean-la-Fouillouse,48160,159,29.182,1.720,1.557,754,6404 -Saint-Germain-Langot,14588,320,10.569,1.035,0.937,457,6872 -Rousset,5127,179,16.587,1.296,1.173,957,6379 -Labergement-lès-Auxonne,21331,327,5.963,0.777,0.704,881,6676 -Aubigné-Racan,72013,2125,32.343,1.810,1.639,495,6740 -Noron-l'Abbaye,14467,312,7.600,0.878,0.795,464,6871 -Saint-Romain-le-Puy,42285,3945,21.381,1.472,1.333,786,6493 -Fontaines-sur-Saône,69088,7001,2.339,0.487,0.441,845,6528 -Perriers-en-Beauficel,50397,214,9.305,0.971,0.879,407,6858 -Épaney,14240,520,11.588,1.084,0.981,467,6876 -Bretteville-sur-Laize,14100,1844,9.841,0.999,0.905,455,6886 -Gathemo,50195,240,10.491,1.031,0.933,407,6858 -Barbery,14039,820,8.698,0.939,0.850,458,6885 -Bretteville-le-Rabet,14097,305,4.566,0.680,0.616,463,6885 -Saint-Martin-de-Salencey,71452,101,15.878,1.268,1.148,812,6602 -Moulines,14455,298,9.437,0.978,0.885,457,6881 -Nans-les-Pins,83087,4453,48.877,2.225,2.015,923,6260 -Bonnencontre,21089,449,10.886,1.050,0.951,863,6665 -Moureuille,63243,346,16.892,1.308,1.184,689,6560 -Auxy,71015,950,37.174,1.941,1.757,804,6648 -Augy,89023,1067,5.118,0.720,0.652,747,6743 -Cros-de-Géorand,7075,163,43.928,2.110,1.910,788,6414 -Coucouron,7071,809,24.398,1.572,1.423,773,6408 -La Truchère,71549,223,5.145,0.722,0.654,852,6604 -Ville-sur-Retourne,8484,83,9.601,0.986,0.893,806,6921 -Auroux,48010,390,35.223,1.889,1.710,754,6404 -Sainte-Eulalie,48149,37,21.484,1.475,1.335,739,6412 -Saint-Bômer-les-Forges,61369,1047,31.462,1.785,1.616,431,6849 -Lespéron,7142,319,25.469,1.606,1.454,772,6408 -Jarsy,73139,265,32.535,1.816,1.644,953,6512 -Sermesse,71517,239,8.527,0.929,0.841,861,6645 -Issanlas,7105,104,28.634,1.703,1.542,783,6409 -Arconcey,21020,221,15.022,1.234,1.117,810,6684 -Arbanats,33007,1229,7.605,0.878,0.795,433,6404 -Cormatin,71145,562,9.197,0.965,0.874,832,6606 -Surin,79320,663,13.573,1.173,1.062,436,6606 -Lanarce,7130,198,22.666,1.515,1.372,777,6401 -Aluze,71005,251,6.006,0.780,0.706,830,6641 -Baugé-en-Anjou,49018,11868,270.655,5.237,4.742,457,6728 -Rillé,37198,311,23.833,1.554,1.407,489,6706 -Saint-Brice,61370,155,4.619,0.684,0.619,431,6832 -Trévières,14711,926,11.836,1.095,0.991,417,6918 -La Montagne,44101,6215,3.630,0.606,0.549,346,6685 -Peyriguère,65359,26,4.204,0.653,0.591,477,6241 -Pradelles,43154,556,17.417,1.328,1.202,768,6405 -Saulchery,2701,732,2.668,0.520,0.471,722,6874 -Thury-en-Valois,60637,489,11.421,1.076,0.974,701,6896 -Le Neufbourg,50371,418,2.246,0.477,0.432,409,6848 -Villars,28411,171,8.424,0.924,0.837,594,6792 -Sotteville-lès-Rouen,76681,28991,7.434,0.868,0.786,560,6925 -Lacollonge,90059,234,1.932,0.442,0.400,998,6736 -Croisette,62258,291,7.587,0.877,0.794,646,7028 -La Chapelle-aux-Choux,72060,269,14.530,1.213,1.098,494,6727 -Civrac-de-Blaye,33126,850,13.343,1.163,1.053,427,6449 -Braye-sur-Maulne,37036,175,12.103,1.107,1.002,496,6720 -Courléon,49114,147,13.972,1.190,1.077,482,6700 -Gizeux,37112,400,21.100,1.462,1.324,488,6707 -Rânes,61344,1052,34.311,1.865,1.689,463,6839 -Mazé-Milon,49194,5787,41.886,2.060,1.865,454,6710 -Marcé,49188,842,21.223,1.466,1.327,454,6728 -Le Lude,72176,4344,68.772,2.640,2.390,481,6735 -Tulle,19272,14453,24.733,1.583,1.433,601,6464 -Lingeard,50271,79,3.648,0.608,0.550,405,6857 -Saint-Pierre,4194,97,5.482,0.745,0.675,1013,6322 -Ceaucé,61075,1206,41.695,2.055,1.861,431,6832 -Noirval,8325,28,4.924,0.706,0.639,831,6929 -Rauret,43160,195,20.600,1.445,1.308,760,6412 -Saint-Haon,43192,308,38.003,1.962,1.776,758,6416 -Avrillé-les-Ponceaux,37013,487,32.837,1.824,1.651,502,6704 -Montigné-lès-Rairies,49209,414,9.145,0.963,0.872,457,6731 -Saint-Clément-Rancoudray,50456,548,32.679,1.820,1.648,410,6852 -Henvic,29079,1333,10.376,1.025,0.928,189,6862 -Le Ménil-Ciboult,61262,129,6.272,0.797,0.722,420,6856 -Villers-sous-Chalamont,25627,290,22.602,1.513,1.370,931,6652 -Saint Bonnet-Laval,48139,258,31.975,1.800,1.630,760,6413 -Montfalcon,38255,128,5.741,0.763,0.691,871,6466 -Chastanier,48041,77,10.440,1.028,0.931,758,6401 -Sauzon,56241,981,22.530,1.511,1.368,228,6713 -Mouliherne,49221,864,41.145,2.042,1.849,472,6711 -Mantilly,61248,537,29.214,1.720,1.557,418,6826 -Sevenans,90094,706,2.048,0.456,0.413,990,6728 -Lavoûte-Chilhac,43118,286,3.642,0.607,0.550,733,6451 -Ferrussac,43094,80,17.279,1.323,1.198,730,6440 -Saint-Laurent-des-Hommes,24436,1022,32.259,1.808,1.637,479,6441 -Calvi,2B050,5442,31.508,1.787,1.618,1178,6177 -La Chapelle-Saint-Laud,49076,743,10.662,1.039,0.941,454,6731 -Le Tertre-Saint-Denis,78608,124,2.908,0.543,0.492,598,6872 -Saint-Poncy,15207,351,40.589,2.028,1.836,717,6456 -Lorcières,15107,175,22.117,1.497,1.355,727,6429 -Saint-Mars-sur-la-Futaie,53238,553,22.416,1.507,1.364,405,6819 -Signy-Montlibert,8421,90,6.207,0.793,0.718,869,6946 -Le Champ-de-la-Pierre,61085,45,4.124,0.646,0.585,463,6839 -La Ménitré,49201,2089,17.935,1.348,1.220,454,6710 -La Balme-les-Grottes,38026,1041,14.505,1.212,1.097,878,6526 -Romagny Fontenay,50436,1338,36.314,1.918,1.737,409,6848 -Mirebeau,86160,2213,13.807,1.183,1.071,488,6635 -Huparlac,12116,256,24.837,1.586,1.436,680,6398 -Moulines,50362,294,7.471,0.870,0.788,403,6834 -Lesbois,53131,194,5.976,0.778,0.704,418,6824 -Fougerolles-du-Plessis,53100,1228,33.841,1.852,1.677,404,6828 -Humbercamps,62465,219,3.578,0.602,0.545,670,7011 -Saint-Roch-sur-Égrenne,61452,179,12.318,1.117,1.011,422,6837 -Passais Villages,61324,1207,42.902,2.085,1.888,421,6825 -Mazouau,65309,16,1.405,0.377,0.341,489,6218 -Peyrusse,15151,154,29.178,1.719,1.556,702,6460 -Saint-Pierre-d'Argençon,5154,157,19.507,1.406,1.273,912,6382 -Saint-Cirgues,43175,159,13.747,1.180,1.068,731,6446 -Marcilly-sur-Maulne,37146,236,14.614,1.217,1.102,494,6719 -Auriac-l'Église,15013,158,20.027,1.424,1.289,710,6465 -Jarrier,73138,500,17.690,1.339,1.212,959,6472 -Brouains,50088,141,3.831,0.623,0.564,407,6855 -Pinols,43151,198,35.158,1.887,1.709,734,6442 -Bagnères-de-Bigorre,65059,7404,125.914,3.572,3.234,467,6205 -Arlet,43009,25,5.834,0.769,0.696,730,6446 -Auvers,43015,58,21.212,1.466,1.327,729,6431 -Les Bois d'Anjou,49138,2637,60.312,2.472,2.238,468,6711 -Chaliers,15034,168,18.669,1.375,1.245,720,6427 -Lonlay-l'Abbaye,61232,1135,53.209,2.322,2.102,422,6846 -Berstheim,67035,438,3.108,0.561,0.508,1044,6864 -Vézézoux,43261,588,7.144,0.851,0.771,727,6480 -Cernay,86047,471,3.315,0.580,0.525,494,6642 -Saint-Cyr-du-Bailleul,50462,394,23.422,1.541,1.395,420,6838 -Coulonges-sur-l'Autize,79101,2351,18.884,1.383,1.252,423,6601 -La Chapelle-Laurent,15042,280,26.501,1.639,1.484,721,6457 -Rageade,15158,97,12.591,1.129,1.022,723,6447 -Mercœur,43133,140,27.424,1.667,1.509,721,6451 -Le Fresne-Poret,50193,214,10.193,1.016,0.920,419,6855 -Paulhac-en-Margeride,48110,100,15.905,1.269,1.149,728,6430 -Julianges,48077,57,9.413,0.977,0.885,723,6425 -Hommes,37117,892,30.302,1.752,1.586,496,6710 -Landivy,53125,1147,29.078,1.716,1.554,400,6832 -Savigny-le-Vieux,50570,445,17.348,1.326,1.201,401,6834 -Courpignac,17129,408,14.881,1.228,1.112,428,6475 -Armentières,59017,25015,6.279,0.798,0.723,693,7066 -Baignes,70047,98,2.895,0.542,0.491,928,6725 -Livet-en-Saosnois,72164,70,1.645,0.408,0.369,494,6809 -Saint-Erblon,35266,2925,10.929,1.052,0.952,351,6780 -Saint-Gilles-des-Marais,61401,113,5.935,0.775,0.702,427,6837 -Saint-Blaise,74228,350,2.554,0.509,0.461,938,6556 -Lubécourt,57423,72,3.438,0.590,0.534,958,6865 -Saint-Paul-en-Jarez,42271,4837,19.871,1.419,1.285,828,6485 -Laroquevieille,15095,349,15.833,1.267,1.147,661,6437 -Savigné-sous-le-Lude,72330,430,33.996,1.856,1.680,483,6727 -Sermaise,49334,319,7.247,0.857,0.776,456,6719 -Charmensac,15043,84,15.364,1.248,1.130,707,6456 -Avrilly,61021,109,5.511,0.747,0.676,432,6832 -Morigny,50357,89,4.376,0.666,0.603,403,6874 -Le Mesnil-Robert,14424,194,4.092,0.644,0.583,410,6871 -Domfront en Poiraie,61145,4276,65.500,2.576,2.332,428,6837 -Villenave-près-Béarn,65476,54,3.161,0.566,0.512,448,6256 -Jarzé Villages,49163,2746,61.054,2.487,2.252,454,6717 -Lublé,37137,145,12.643,1.132,1.025,496,6720 -Barenton,50029,1181,35.651,1.901,1.721,413,6839 -Barret,16030,1023,22.380,1.506,1.364,451,6491 -Buais-Les-Monts,50090,629,24.736,1.583,1.433,409,6831 -Caniac-du-Causse,46054,360,35.106,1.886,1.708,597,6396 -Aulnay-sur-Iton,27023,710,1.767,0.423,0.383,558,6878 -Bousbach,57101,1217,5.918,0.774,0.701,989,6902 -Gennes-Val-de-Loire,49261,8679,146.694,3.855,3.490,452,6705 -Soulangis,18253,485,14.054,1.193,1.080,665,6675 -Chambezon,43050,111,5.150,0.722,0.654,720,6477 -Labeaume,7115,680,17.853,1.345,1.218,806,6376 -Apchat,63007,166,36.784,1.931,1.748,717,6475 -Saint-Gaudens,31483,11431,27.765,1.677,1.518,515,6223 -Saint-Pierre-en-Vaux,21566,147,10.978,1.055,0.955,817,6665 -La Pellerine,49237,145,5.377,0.738,0.668,486,6710 -Coinces,45099,563,21.930,1.491,1.350,606,6772 -Cannes,6029,74152,20.939,1.457,1.319,1027,6276 -Varogne,70522,141,4.539,0.678,0.614,940,6739 -Désertines,53091,484,26.074,1.625,1.471,415,6829 -La Lande-Chasles,49171,122,5.197,0.726,0.657,467,6711 -La Villeneuve-les-Convers,21695,47,8.963,0.953,0.863,817,6720 -Coulongé,72098,527,15.195,1.241,1.124,490,6739 -Sourdeval,50582,3162,52.666,2.310,2.092,410,6854 -La Bazoque,61030,263,2.708,0.524,0.474,435,6858 -Ger,50200,814,39.940,2.012,1.822,425,6849 -Landisacq,61222,746,10.904,1.051,0.952,431,6856 -Durtal,49127,3371,61.031,2.487,2.252,457,6728 -Ottrott,67368,1548,29.354,1.725,1.562,1026,6824 -Saint-Michel-de-Montjoie,50525,307,14.461,1.210,1.096,407,6860 -Saint-Germain-d'Arcé,72283,338,29.318,1.724,1.561,499,6725 -Verneil-le-Chétif,72369,619,14.817,1.225,1.109,495,6739 -Ruaudin,72260,3402,13.885,1.186,1.074,494,6766 -Orbec,14478,2083,10.201,1.017,0.921,506,6882 -Dangeul,72112,478,14.067,1.194,1.081,498,6795 -Mayet,72191,3140,54.220,2.344,2.122,494,6747 -Mauléon-d'Armagnac,32243,278,35.379,1.893,1.714,443,6318 -Hannescamps,62409,198,3.183,0.568,0.514,676,7007 -Souligné-sous-Ballon,72340,1209,12.787,1.138,1.030,496,6783 -Écommoy,72124,4632,28.666,1.704,1.543,498,6748 -Saint-Christophe-de-Chaulieu,61374,95,6.474,0.810,0.733,417,6854 -Saint-Gervazy,63356,324,14.347,1.206,1.092,717,6480 -Les Yveteaux,61512,102,5.811,0.767,0.694,460,6849 -Buigny-lès-Gamaches,80148,421,4.806,0.698,0.632,598,6994 -Teloché,72350,3021,22.987,1.526,1.382,497,6754 -Cerisy-Belle-Étoile,61078,729,13.443,1.167,1.057,435,6858 -Rochefort,73214,224,5.605,0.754,0.683,913,6500 -Gex,1173,12652,31.948,1.799,1.629,931,6586 -Laurie,15098,91,19.382,1.401,1.268,707,6462 -Putanges-le-Lac,61339,2200,77.503,2.802,2.537,462,6851 -Villedieu,15262,549,19.222,1.396,1.264,701,6435 -Marçon,72183,1050,30.354,1.754,1.588,517,6733 -Habloville,61199,323,11.782,1.093,0.990,466,6856 -Préval,72245,686,7.635,0.880,0.797,521,6797 -Laval-sur-Luzège,19111,99,16.626,1.298,1.175,635,6463 -Ally,43006,145,31.149,1.777,1.609,725,6447 -Tintry,71539,78,9.694,0.991,0.897,815,6649 -Récourt,62697,216,3.366,0.584,0.529,701,7019 -Tiviers,15237,169,13.613,1.174,1.063,712,6439 -Mazoires,63220,99,42.435,2.074,1.878,707,6473 -Sargé-lès-le-Mans,72328,3575,13.941,1.188,1.076,493,6773 -Giel-Courteilles,61189,432,12.745,1.136,1.029,466,6856 -Chastel,43065,132,27.897,1.681,1.522,724,6436 -Blet,18031,579,30.915,1.770,1.603,684,6642 -Lougé-sur-Maire,61237,319,13.842,1.184,1.072,462,6847 -Bourscheid,57100,181,4.127,0.647,0.586,1007,6861 -Saint-Paul,61443,666,7.921,0.896,0.811,433,6853 -Craon,53084,4513,24.338,1.570,1.422,405,6754 -La Chapelle-Biche,61095,526,6.481,0.810,0.733,434,6854 -Sevrai,61473,254,8.214,0.912,0.826,467,6847 -Champcerie,61084,156,9.014,0.956,0.866,464,6859 -Simplé,53260,443,9.205,0.966,0.875,411,6762 -Franqueville-Saint-Pierre,76475,6156,8.570,0.932,0.844,567,6925 -Roupeldange,57599,376,2.616,0.515,0.466,953,6905 -Ménil-Gondouin,61265,173,9.299,0.971,0.879,458,6853 -Tessé-Froulay,61482,393,5.222,0.727,0.658,446,6831 -Saint-Sauveur-sur-Tinée,6129,323,32.179,1.806,1.635,1027,6339 -Lastic,15097,128,10.368,1.025,0.928,718,6448 -Heining-lès-Bouzonville,57309,488,6.040,0.782,0.708,964,6917 -Préchac-sur-Adour,32330,203,4.433,0.670,0.607,457,6282 -Montchamp,15130,136,16.060,1.276,1.155,714,6440 -Sainte-Marie-du-Bois,53235,212,11.411,1.075,0.973,442,6826 -Ronnet,3216,175,20.054,1.425,1.290,679,6569 -Auxon,10018,980,25.614,1.611,1.459,767,6782 -Saint-Hilaire-de-Briouze,61402,317,13.775,1.181,1.069,458,6853 -Durcet,61148,304,9.662,0.989,0.895,445,6854 -Lougres,25350,779,5.961,0.777,0.704,979,6714 -Saint-Georges,15188,1178,33.180,1.834,1.661,715,6434 -Lempdes-sur-Allagnon,43120,1338,10.424,1.028,0.931,720,6477 -Saint-Aubin-Rivière,80699,111,3.107,0.561,0.508,612,6974 -Vieillespesse,15259,257,24.992,1.591,1.441,710,6445 -La Boissière,53033,114,6.318,0.800,0.724,402,6748 -Bouchamps-lès-Craon,53035,553,18.165,1.357,1.229,401,6750 -Martigné-sur-Mayenne,53146,1830,31.885,1.797,1.627,430,6792 -Chailland,53048,1197,35.837,1.906,1.726,417,6801 -Lys-Saint-Georges,36108,224,13.047,1.150,1.041,607,6617 -Bois-Guilbert,76107,320,8.106,0.906,0.820,587,6941 -Charette,38083,463,11.370,1.073,0.972,882,6527 -Connigis,2213,328,5.498,0.746,0.675,737,6881 -Sarrance,64506,169,46.690,2.175,1.969,413,6224 -Hagnicourt,8205,79,5.698,0.760,0.688,815,6949 -Banvou,61024,621,13.005,1.148,1.039,436,6845 -Saint-Didier-d'Aussiat,1346,879,15.145,1.239,1.122,855,6580 -Geraise,39248,41,6.113,0.787,0.713,926,6657 -Parthenay-de-Bretagne,35216,1675,4.874,0.703,0.637,340,6799 -Pointel,61332,326,7.605,0.878,0.795,452,6847 -Le Folgoët,29055,3172,9.850,0.999,0.905,157,6857 -Beauvain,61035,266,12.732,1.136,1.029,452,6842 -La Pallu,53173,199,6.554,0.815,0.738,456,6829 -Dambron,28121,98,11.931,1.099,0.995,618,6781 -Lignou,61227,146,7.683,0.882,0.799,452,6847 -Madré,53142,310,17.718,1.340,1.213,451,6827 -Pommerieux,53180,661,23.134,1.531,1.386,405,6754 -Prée-d'Anjou,53124,1435,42.912,2.085,1.888,411,6758 -Sainte-Reine,73277,153,14.506,1.212,1.097,942,6504 -Coudray,53078,867,10.982,1.055,0.955,426,6750 -Lapouyade,33230,504,25.993,1.623,1.469,443,6454 -Villy-le-Bouveret,74306,602,3.488,0.594,0.538,945,6554 -Chambœuf,42043,1669,11.263,1.068,0.967,805,6498 -Ruffigné,44148,708,33.835,1.852,1.677,356,6752 -Saint-Gérons,15189,214,18.379,1.365,1.236,634,6427 -Guignen,35127,3851,53.200,2.322,2.102,334,6767 -Coren,15055,426,16.808,1.305,1.182,708,6440 -Saires-la-Verrerie,61459,305,8.183,0.911,0.825,443,6846 -Chazelles,15048,36,6.366,0.803,0.727,725,6447 -Magny-le-Désert,61243,1416,33.835,1.852,1.677,458,6836 -Cattenières,59138,673,5.404,0.740,0.670,724,7006 -La Ferrière-aux-Étangs,61163,1499,11.165,1.064,0.963,440,6843 -Port,1307,855,4.293,0.660,0.598,898,6566 -Athis-Val de Rouvre,61007,4275,77.822,2.808,2.542,446,6856 -Fréville,88189,153,6.384,0.804,0.728,896,6806 -Aubusson,61011,427,3.936,0.632,0.572,439,6861 -Le Grais,61195,199,12.274,1.115,1.010,457,6846 -Ruynes-en-Margeride,15168,687,29.962,1.742,1.577,714,6436 -Molèdes,15126,98,22.523,1.511,1.368,703,6460 -Méhoudin,61257,126,3.833,0.623,0.564,451,6827 -Saint-Austremoine,43169,43,11.599,1.084,0.981,726,6448 -Andelat,15004,461,21.061,1.461,1.323,706,6444 -Courbeveille,53082,640,18.628,1.374,1.244,412,6772 -Leyvaux,15105,37,14.920,1.230,1.114,708,6467 -Sérilhac,19257,268,12.689,1.134,1.027,600,6443 -La Coulonche,61124,495,14.057,1.193,1.080,447,6844 -Simacourbe,64524,396,11.110,1.061,0.961,442,6264 -Alleuze,15002,212,25.594,1.610,1.458,711,6430 -Lhéraule,60359,191,2.845,0.537,0.486,624,6932 -Saint-Flour,15187,6504,27.078,1.656,1.499,710,6440 -Saint-Palais-de-Négrignac,17378,436,18.846,1.382,1.251,452,6470 -La Selle-la-Forge,61466,1462,8.175,0.910,0.824,443,6854 -Sainte-Florine,43185,3123,7.661,0.881,0.798,722,6478 -Parné-sur-Roc,53175,1335,24.002,1.559,1.412,425,6770 -Échalou,61149,392,5.619,0.755,0.684,443,6854 -Athée,53012,497,17.308,1.324,1.199,405,6764 -Pelouse,48111,235,33.286,1.836,1.662,749,6390 -Méral,53151,1091,29.724,1.735,1.571,403,6770 -Le Vast,50619,320,13.131,1.153,1.044,386,6957 -Saint-Mary-le-Plain,15203,158,22.133,1.498,1.356,715,6455 -Bagnoles de l'Orne Normandie,61483,2674,15.947,1.271,1.151,446,6835 -Sougé-le-Ganelon,72337,903,18.334,1.363,1.234,474,6809 -Lassicourt,10189,64,7.719,0.884,0.800,811,6815 -Saint-Étienne-du-Bois,1350,2490,28.653,1.704,1.543,876,6574 -La Ferté Macé,61168,5393,32.190,1.806,1.635,450,6833 -Cipières,6041,391,38.252,1.969,1.783,1019,6302 -Saint-André-de-Messei,61362,571,15.240,1.243,1.125,440,6847 -Rives d'Andaine,61096,3060,37.469,1.948,1.764,449,6829 -Sainte-Honorine-la-Guillaume,61408,337,14.841,1.226,1.110,452,6857 -Auzon,43016,888,17.045,1.314,1.190,732,6478 -Juvigny Val d'Andaine,61211,2196,80.087,2.849,2.580,447,6836 -Lozinghem,62532,1281,2.058,0.457,0.414,665,7047 -Marigné-Peuton,53145,549,16.592,1.297,1.174,414,6760 -Briscous,64147,2732,31.475,1.786,1.617,346,6273 -Mée,53148,221,8.732,0.941,0.852,412,6750 -Beuvillers,54069,411,5.993,0.779,0.705,913,6926 -La Baconnière,53015,1923,27.843,1.680,1.521,407,6794 -Alexain,53002,599,16.442,1.291,1.169,426,6799 -Sacé,53195,497,12.485,1.125,1.019,427,6790 -Denazé,53090,158,9.275,0.969,0.877,411,6762 -Sainte-Opportune,61436,249,8.553,0.931,0.843,448,6852 -Joncels,34121,312,46.377,2.168,1.963,720,6295 -Champsecret,61091,900,45.149,2.139,1.937,440,6843 -Montigny-en-Gohelle,62587,10185,3.490,0.595,0.539,695,7038 -Lannéanou,29114,389,16.322,1.286,1.164,210,6840 -Landigou,61221,431,5.425,0.741,0.671,443,6854 -La Colombe,50137,626,14.479,1.211,1.096,396,6873 -Peuton,53178,228,10.699,1.041,0.943,417,6759 -Dompierre,61146,403,8.653,0.936,0.847,439,6844 -Saint-Rome,31514,48,3.682,0.611,0.553,594,6258 -Folkling,57222,1295,11.862,1.096,0.992,986,6900 -Livré-la-Touche,53135,750,30.087,1.746,1.581,400,6759 -Mardilly,61252,134,12.782,1.138,1.030,497,6861 -Saint-Planchers,50541,1353,12.075,1.106,1.001,370,6871 -Blassac,43031,139,12.289,1.116,1.010,733,6452 -Le Merlerault,61275,822,19.315,1.399,1.267,499,6844 -Villeneuve-d'Allier,43264,290,14.457,1.210,1.096,730,6459 -Eyzahut,26131,142,6.749,0.827,0.749,860,6388 -Criteuil-la-Magdeleine,16116,419,15.222,1.242,1.125,447,6500 -La Verdière,83146,1600,68.442,2.633,2.384,932,6288 -Ménil-la-Tour,54360,339,8.871,0.948,0.858,911,6855 -Crestot,27185,556,6.380,0.804,0.728,551,6900 -Bonnac,15022,165,22.585,1.513,1.370,707,6455 -Sainte-Croix-Vallée-Française,48144,279,18.748,1.378,1.248,758,6347 -Vélines,24568,1131,10.748,1.044,0.945,470,6420 -Saint-Germain-de-Clairefeuille,61393,155,12.238,1.114,1.009,497,6853 -Chouvigny,3078,220,13.375,1.164,1.054,702,6556 -Montereau,45213,599,50.241,2.256,2.043,672,6749 -Croisilles,61138,204,11.417,1.076,0.974,498,6853 -Rézentières,15161,112,13.358,1.163,1.053,707,6445 -Montmirail,51380,3611,48.325,2.213,2.004,741,6858 -Les Touches,44205,2488,35.384,1.893,1.714,366,6713 -Miribel-Lanchâtre,38235,422,9.522,0.982,0.889,906,6433 -Bursard,61068,210,10.687,1.041,0.943,493,6829 -Saint-Pierre-de-Manneville,76634,921,10.255,1.019,0.923,550,6926 -Saint-Hilaire-la-Gravelle,41214,716,17.518,1.332,1.206,562,6761 -Boitron,61051,353,13.521,1.170,1.059,499,6835 -Godisson,61192,110,6.268,0.797,0.722,496,6846 -Saint-Léonard-des-Parcs,61416,73,13.488,1.169,1.058,498,6838 -Azérat,43017,268,18.143,1.356,1.228,731,6469 -Le Gault-du-Perche,41096,337,28.299,1.693,1.533,553,6776 -Condé-sur-Seulles,14175,297,2.439,0.497,0.450,433,6908 -Molompize,15127,288,17.569,1.334,1.208,707,6456 -Vivans,42337,231,25.579,1.610,1.458,770,6568 -Cosmes,53075,287,13.787,1.182,1.070,413,6763 -Is-sur-Tille,21317,4413,22.557,1.512,1.369,860,6719 -Plestan,22193,1587,33.406,1.840,1.666,294,6830 -La Chapelle-sur-Loire,37058,1453,19.344,1.400,1.268,486,6688 -Val d'Arcomie,15108,993,89.260,3.007,2.723,708,6426 -Neuhaeusel,67319,344,3.129,0.563,0.510,1073,6871 -Otterswiller,67367,1346,3.319,0.580,0.525,1023,6855 -Neuilly-le-Bisson,61304,302,5.985,0.779,0.705,496,6827 -Martinpuich,62561,198,5.939,0.776,0.703,685,6995 -Clavières,15051,211,44.667,2.127,1.926,729,6434 -Vabres,15245,249,18.867,1.383,1.252,718,6437 -Cronce,43082,79,16.342,1.287,1.165,730,6444 -Cossé-le-Vivien,53077,3098,44.915,2.133,1.931,403,6766 -Ardes,63009,538,16.633,1.298,1.175,712,6479 -Courlay,79103,2454,29.376,1.725,1.562,427,6635 -Celoux,15032,66,9.731,0.993,0.899,718,6450 -Nonant-le-Pin,61310,507,18.393,1.365,1.236,496,6846 -La Chapelle-Craonnaise,53058,346,10.489,1.031,0.933,411,6763 -Benerville-sur-Mer,14059,439,3.057,0.557,0.504,486,6918 -Perrigny-sur-Loire,71348,136,15.340,1.247,1.129,768,6606 -Aillières-Beauvoir,72002,219,15.124,1.238,1.121,503,6811 -Védrines-Saint-Loup,15251,139,27.431,1.667,1.509,718,6437 -Ferrières-Saint-Mary,15069,244,19.262,1.397,1.265,706,6450 -Houssay,53117,486,14.085,1.195,1.082,419,6761 -Le Ménil-Broût,61261,170,3.468,0.593,0.537,498,6824 -Thanvillé,67490,603,2.057,0.457,0.414,1022,6811 -Saint-Germain-le-Guillaume,53225,488,13.483,1.169,1.058,416,6799 -Moulins-le-Carbonnel,72212,702,16.411,1.289,1.167,474,6813 -Ginai,61190,93,9.348,0.973,0.881,493,6851 -Ménil-Erreux,61263,225,11.126,1.062,0.962,492,6824 -Souvigné,37251,844,24.865,1.587,1.437,501,6715 -Les Pineaux,85175,626,17.323,1.325,1.200,383,6617 -Marville-Moutiers-Brûlé,28239,965,20.436,1.439,1.303,578,6839 -Aunou-sur-Orne,61015,270,18.216,1.359,1.230,497,6841 -Saint-Lucien,76601,252,9.118,0.961,0.870,586,6935 -Lonny,8260,646,4.681,0.689,0.624,813,6968 -Niafles,53165,345,7.990,0.900,0.815,400,6756 -Vire Normandie,14762,17425,141.237,3.783,3.425,410,6871 -Andouillé,53005,2281,37.064,1.938,1.755,413,6791 -Locquénolé,29132,787,0.912,0.304,0.275,195,6857 -Mentières,15125,124,13.177,1.155,1.046,712,6439 -Theys,38504,1958,36.115,1.913,1.732,939,6473 -Beaumesnil,14054,202,5.050,0.715,0.647,411,6875 -Maisoncelles-sur-Ajon,14390,191,4.334,0.663,0.600,441,6889 -Campagnolles,14127,529,10.255,1.019,0.923,409,6873 -Noues de Sienne,14658,4456,120.061,3.488,3.158,409,6864 -Longvillers,14379,359,6.768,0.828,0.750,432,6889 -Bossus-lès-Rumigny,8073,102,8.160,0.909,0.823,790,6974 -Avenay,14034,553,5.724,0.762,0.690,449,6895 -Villiers-Charlemagne,53273,1135,27.636,1.673,1.515,426,6767 -Moriat,63242,367,10.892,1.051,0.952,722,6478 -Ferrières-le-Lac,25234,170,2.492,0.502,0.455,994,6694 -Talizat,15231,585,38.025,1.963,1.777,701,6448 -Le Bosc,9063,100,25.509,1.608,1.456,576,6206 -Origné,53172,422,10.392,1.026,0.929,422,6771 -Meslay-du-Maine,53152,2908,24.529,1.576,1.427,438,6768 -Éterville,14254,1605,4.962,0.709,0.642,450,6901 -Épinay-sur-Odon,14241,626,11.754,1.091,0.988,438,6890 -Valjouze,15247,23,2.997,0.551,0.499,704,6453 -Monts-en-Bessin,14449,417,7.232,0.856,0.775,436,6895 -Frugerès-les-Mines,43099,559,1.068,0.329,0.298,725,6476 -Vacognes-Neuilly,14721,617,8.017,0.901,0.816,441,6892 -Heudicourt,27333,664,10.763,1.044,0.945,602,6918 -Goumois,25280,166,5.927,0.775,0.702,997,6691 -Baron-sur-Odon,14042,917,6.454,0.809,0.732,444,6897 -Ouffières,14483,190,4.215,0.654,0.592,447,6886 -Roffiac,15164,611,21.541,1.477,1.337,702,6436 -Gesnes,53105,229,11.206,1.066,0.965,434,6791 -Massiac,15119,1718,34.801,1.878,1.700,713,6463 -Cuttoli-Corticchiato,2A103,1979,30.551,1.759,1.593,1187,6113 -Saint-Brice,53203,529,13.270,1.160,1.050,445,6755 -Hénansal,22077,1169,29.282,1.722,1.559,300,6844 -Samerey,21581,160,7.124,0.850,0.770,879,6667 -Saint-Pierre-de-Colombier,7282,412,9.470,0.980,0.887,800,6400 -Malherbe-sur-Ajon,14037,549,11.860,1.096,0.992,441,6892 -Flins-Neuve-Église,78237,156,1.246,0.355,0.321,596,6867 -Les Monts d'Aunay,14027,4704,69.777,2.659,2.407,438,6880 -Coutevroult,77141,1079,7.915,0.896,0.811,688,6862 -Vergongheon,43258,1858,12.074,1.106,1.001,727,6473 -Saint-Loup-du-Dorat,53233,376,8.263,0.915,0.828,445,6761 -Montpezat-sous-Bauzon,7161,855,27.275,1.662,1.505,794,6406 -Arquenay,53009,640,25.398,1.604,1.452,430,6770 -Souvigné-sur-Sarthe,72343,630,17.237,1.322,1.197,446,6750 -Burzet,7045,397,38.133,1.966,1.780,798,6403 -Saint-Maurice-en-Gourgois,42262,1823,31.630,1.790,1.621,796,6479 -Fraisses,42099,3735,4.673,0.688,0.623,797,6477 -Landouzy-la-Cour,2404,185,10.147,1.014,0.918,769,6972 -By,25104,71,7.309,0.861,0.780,919,6661 -Brée,53043,535,16.609,1.297,1.174,441,6789 -Grez-en-Bouère,53110,1017,27.666,1.674,1.516,435,6754 -Tracy-Bocage,14708,305,5.375,0.738,0.668,429,6891 -Montigny,14446,96,3.911,0.629,0.570,442,6887 -Merle-Leignec,42142,323,16.467,1.292,1.170,779,6471 -Sainte-Honorine-du-Fay,14592,1344,7.534,0.874,0.791,448,6891 -Les Ifs,76371,78,4.016,0.638,0.578,586,6978 -Périgneux,42169,1478,31.893,1.798,1.628,786,6482 -Saint-Hilaire-Cusson-la-Valmitte,42235,334,18.647,1.375,1.245,783,6478 -Chémeré-le-Roi,53067,406,15.366,1.248,1.130,440,6770 -Maizet,14393,351,5.758,0.764,0.692,448,6890 -Saulges,53257,313,21.936,1.491,1.350,443,6774 -Lauwin-Planque,59334,1715,3.631,0.607,0.550,704,7033 -Saint-Léger,53232,304,17.175,1.319,1.194,444,6783 -Saint-Vaast-sur-Seulles,14661,140,4.290,0.659,0.597,436,6901 -Vendeuvre,14735,752,26.551,1.640,1.485,477,6880 -Crossac,44050,2926,25.857,1.619,1.466,308,6715 -Barjouville,28024,1723,4.140,0.648,0.587,587,6812 -Le Mesnil-au-Grain,14412,75,4.400,0.668,0.605,438,6890 -Parfouru-sur-Odon,14491,197,3.732,0.615,0.557,435,6894 -Saint-Bonnet-le-Château,42204,1536,1.875,0.436,0.395,783,6482 -Molas,31347,166,10.567,1.035,0.937,519,6260 -Apinac,42006,419,15.535,1.255,1.136,776,6482 -Douzy,8145,2151,20.197,1.431,1.296,847,6957 -La Bauche,73033,507,6.593,0.817,0.740,918,6491 -Saint-Louet-sur-Seulles,14607,150,4.400,0.668,0.605,430,6893 -May-sur-Orne,14408,1955,3.479,0.594,0.538,453,6895 -Montarcher,42146,66,5.874,0.771,0.698,776,6484 -Préaux,53184,167,9.817,0.997,0.903,441,6763 -Val-du-Maine,53017,914,23.998,1.559,1.412,443,6765 -Estivareilles,42091,690,22.741,1.518,1.374,779,6479 -Vendes,14734,313,3.483,0.594,0.538,438,6900 -Saint-Patrice-du-Désert,61442,200,20.659,1.447,1.310,455,6830 -Saillant,63309,278,17.434,1.329,1.203,770,6486 -Clérieux,26096,2019,13.648,1.176,1.065,853,6441 -Esquay-Notre-Dame,14249,1438,3.071,0.558,0.505,447,6897 -Saint-Paul-en-Cornillon,42270,1358,3.686,0.611,0.553,796,6477 -Landes-sur-Ajon,14353,413,6.143,0.789,0.714,438,6890 -Amayé-sur-Orne,14006,993,5.297,0.733,0.664,450,6893 -Les Moutiers-en-Cinglais,14458,514,6.248,0.796,0.721,447,6886 -Échevannes,21240,280,11.462,1.078,0.976,862,6716 -Luriecq,42126,1308,20.359,1.436,1.300,786,6487 -Aboën,42001,435,8.969,0.953,0.863,786,6481 -Villers-sur-Authie,80806,476,12.154,1.110,1.005,609,7023 -Neau,53163,768,12.810,1.139,1.031,441,6793 -Deneuvre,54154,532,9.258,0.969,0.877,978,6821 -Aurec-sur-Loire,43012,6111,22.979,1.526,1.382,797,6477 -Fleury-sur-Orne,14271,4829,6.853,0.833,0.754,454,6898 -Musièges,74195,401,2.972,0.549,0.497,929,6550 -Usson-en-Forez,42318,1494,47.324,2.190,1.983,777,6476 -Éréac,22053,680,21.527,1.477,1.337,307,6812 -Caloire,42031,328,4.713,0.691,0.626,796,6479 -Saint-Éloy-la-Glacière,63337,56,12.060,1.105,1.000,747,6494 -Val d'Arry,14475,2272,25.036,1.593,1.442,443,6897 -Le Monestier,63230,207,17.442,1.329,1.203,750,6492 -Cizancourt,80197,35,1.851,0.433,0.392,695,6970 -Hauterive,61202,481,6.997,0.842,0.762,494,6823 -Neauphe-sous-Essai,61301,210,11.428,1.076,0.974,495,6833 -Sées,61464,4182,40.510,2.026,1.834,489,6835 -Villexanton,41292,201,11.588,1.084,0.981,586,6740 -Peynier,13072,3405,24.777,1.584,1.434,915,6266 -Saint-Bonnet-le-Chastel,63324,208,23.375,1.539,1.393,749,6481 -Fournols,63162,320,29.150,1.719,1.556,744,6495 -Larré,61224,427,5.675,0.758,0.686,490,6827 -Saint-Bonnet-le-Bourg,63323,154,20.080,1.426,1.291,746,6487 -Thiolières,63431,163,5.360,0.737,0.667,753,6497 -Champétières,63081,270,18.469,1.368,1.239,757,6490 -Chanu,61093,1259,15.697,1.261,1.142,431,6856 -Aix-la-Fayette,63002,91,13.014,1.148,1.039,740,6488 -Saint-Ferréol-des-Côes,63341,543,15.026,1.234,1.117,753,6496 -Saint-Germain-du-Corbéis,61397,3813,7.480,0.871,0.789,484,6816 -Joué-du-Bois,61209,423,21.317,1.470,1.331,461,6839 -Saint-Germain-l'Herm,63353,492,36.484,1.923,1.741,740,6487 -Mieuxcé,61279,630,10.292,1.021,0.924,478,6815 -Le Ribay,53190,458,17.157,1.318,1.193,449,6812 -Boulay-les-Ifs,53038,164,8.988,0.954,0.864,470,6817 -Ancinnes,72005,961,27.421,1.667,1.509,493,6814 -Fayet-Ronaye,63158,106,20.300,1.434,1.298,739,6481 -Vieux,14747,701,5.522,0.748,0.677,447,6895 -Bréal-sous-Montfort,35037,5973,33.978,1.855,1.680,341,6783 -Saint-Aubin-du-Désert,53198,245,12.693,1.134,1.027,466,6808 -Saint-Charles-la-Forêt,53206,209,10.638,1.038,0.940,430,6765 -Coulx,47071,237,16.399,1.289,1.167,501,6379 -Nozay,10269,146,15.869,1.268,1.148,777,6821 -Noyen-sur-Sarthe,72223,2633,42.907,2.085,1.888,472,6759 -Massoins,6082,103,11.923,1.099,0.995,1031,6326 -Saint-Céneri-le-Gérei,61372,120,3.853,0.625,0.566,474,6813 -Saint-Amant-Roche-Savine,63314,495,24.002,1.559,1.412,745,6500 -Chambon-sur-Dolore,63076,163,19.762,1.415,1.281,749,6493 -Grandchamp,72142,160,5.529,0.748,0.677,491,6807 -Loupfougères,53139,404,18.671,1.375,1.245,448,6807 -Bourg-le-Roi,72043,316,0.366,0.193,0.175,487,6809 -Vissac-Auteyrac,43013,338,17.600,1.335,1.209,747,6448 -La Ferrière-Bochard,61165,740,10.832,1.048,0.949,474,6819 -Pré-en-Pail-Saint-Samson,53185,2343,58.009,2.424,2.195,463,6827 -Saint-Jean-Lachalm,43198,285,34.940,1.882,1.704,753,6428 -Pébrac,43149,115,17.416,1.328,1.202,743,6439 -La Chomette,43072,154,7.075,0.847,0.767,735,6459 -Ravigny,53187,233,6.573,0.816,0.739,474,6822 -Bouessay,53037,742,9.335,0.973,0.881,448,6758 -Louvigny,72170,182,8.771,0.943,0.854,491,6807 -Saint-Claude-de-Diray,41204,1773,9.134,0.962,0.871,579,6726 -Escrignelles,45138,52,14.038,1.193,1.080,689,6736 -Alençon,61001,26129,10.797,1.046,0.947,483,6818 -Saint-Floret,63342,250,12.310,1.117,1.011,706,6495 -La Bouille,76131,745,1.248,0.356,0.322,550,6918 -Mallemoisson,4110,1052,6.446,0.808,0.732,948,6330 -Crennes-sur-Fraubée,53085,193,12.690,1.134,1.027,455,6814 -La Chapelle-au-Riboul,53057,501,13.091,1.152,1.043,446,6804 -Trans,53266,235,15.602,1.257,1.138,454,6805 -Belgeard,53028,614,13.101,1.152,1.043,434,6798 -Villeneuve-Saint-Germain,2805,2517,4.540,0.678,0.614,725,6919 -Saint-Pierre-des-Nids,53246,1993,37.155,1.940,1.757,474,6813 -Lonrai,61234,1141,6.164,0.790,0.715,479,6822 -Villeferry,21694,30,3.254,0.574,0.520,816,6706 -Livet,53134,148,11.300,1.070,0.969,441,6783 -Féniers,23080,94,14.504,1.212,1.097,634,6514 -Bouère,53036,1102,43.052,2.089,1.891,438,6753 -Civens,42065,1368,13.284,1.160,1.050,797,6517 -Héloup,61203,925,12.890,1.143,1.035,481,6813 -Le Buret,53046,309,12.914,1.144,1.036,439,6765 -Germéfontaine,25268,129,11.180,1.064,0.963,966,6688 -Chaufour-Notre-Dame,72073,1065,11.245,1.067,0.966,479,6769 -Messery,74180,2163,9.207,0.966,0.875,955,6587 -La Bazouge-des-Alleux,53023,540,18.173,1.357,1.229,431,6791 -Saint-Georges-le-Fléchard,53220,418,8.464,0.926,0.838,440,6774 -Bérus,72034,453,6.855,0.833,0.754,483,6811 -Villaines-la-Juhel,53271,2855,28.744,1.707,1.546,455,6812 -Saint-Paul-le-Gaultier,72309,290,15.227,1.242,1.125,473,6805 -Montbizot,72205,1812,11.394,1.074,0.972,491,6785 -Savigné-sur-Lathan,37241,1362,17.804,1.343,1.216,499,6705 -Villepail,53272,173,15.621,1.258,1.139,462,6818 -Loiré,49178,861,34.184,1.861,1.685,405,6729 -Arthies,95024,281,7.505,0.872,0.790,612,6891 -Pacé,61321,368,7.605,0.878,0.795,477,6823 -Saint-Ambroix,30227,3078,11.923,1.099,0.995,794,6353 -Damigny,61143,2656,4.884,0.703,0.637,485,6821 -Cubelles,43083,152,12.133,1.109,1.004,746,6436 -Essert,90039,3287,7.126,0.850,0.770,985,6732 -Yvré-l'Évêque,72386,4254,27.676,1.675,1.517,500,6777 -Saint-Sigismond,49321,375,13.026,1.149,1.040,401,6715 -Champfrémont,53052,305,13.051,1.150,1.041,468,6821 -Saint-Léonard-des-Bois,72294,472,27.427,1.667,1.509,469,6809 -Angrie,49008,947,41.055,2.040,1.847,399,6731 -Béthon,72036,337,3.871,0.626,0.567,485,6810 -Pezé-le-Robert,72234,374,16.347,1.287,1.165,476,6791 -Chenay,72076,226,2.190,0.471,0.426,489,6821 -Chassignolles,43064,64,18.199,1.358,1.230,738,6476 -Bouillé-Ménard,49036,745,15.915,1.270,1.150,401,6748 -Ingrandes-Le Fresne sur Loire,49160,2601,12.764,1.137,1.029,404,6710 -Montrelais,44104,859,14.009,1.191,1.078,401,6705 -Chérisay,72079,307,7.972,0.899,0.814,486,6811 -Villeneuve-les-Sablons,60678,1194,4.479,0.674,0.610,634,6904 -Saint-Georges-du-Bois,72280,2100,7.282,0.859,0.778,485,6766 -Annay,62033,4298,4.330,0.662,0.599,694,7041 -Rouessé-Fontaine,72254,278,12.543,1.127,1.020,490,6804 -Ayrens,15016,664,25.826,1.618,1.465,647,6429 -Vern-sur-Seiche,35352,7893,19.974,1.423,1.288,357,6778 -Izé,53120,472,28.482,1.699,1.538,457,6794 -Cerisé,61077,859,4.438,0.671,0.608,490,6820 -Rouillon,72257,2282,9.232,0.967,0.876,485,6772 -Brains-sur-Gée,72045,812,15.958,1.272,1.152,477,6770 -Saint-Christophe-en-Champagne,72274,205,7.739,0.886,0.802,465,6768 -Gesnes-le-Gandelin,72141,967,13.015,1.148,1.039,480,6813 -Saint-Victeur,72323,455,7.165,0.852,0.771,479,6804 -Josat,43107,80,12.459,1.124,1.018,747,6455 -Pruillé-le-Chétif,72247,1324,10.406,1.027,0.930,482,6769 -Domeyrat,43086,194,9.527,0.982,0.889,737,6461 -Ruffiac,56200,1428,36.857,1.932,1.749,306,6763 -Antoingt,63005,392,7.801,0.889,0.805,713,6490 -Saint-Front-sur-Lémance,47242,536,19.801,1.416,1.282,542,6384 -Gesvres,53106,526,21.682,1.482,1.342,470,6813 -Thorigné-en-Charnie,53264,196,17.365,1.326,1.201,452,6775 -Condé-sur-Sarthe,61117,2535,8.470,0.926,0.838,483,6819 -Vimory,45345,1196,26.342,1.634,1.479,678,6758 -Saulzoir,59558,1787,10.086,1.011,0.915,731,7014 -Saint-Pierre-des-Bois,72312,237,7.516,0.873,0.790,464,6765 -Fay,72130,643,9.477,0.980,0.887,482,6768 -Nonards,19152,454,11.012,1.056,0.956,605,6435 -Doranges,63137,150,19.481,1.405,1.272,746,6475 -Monlet,43138,409,35.350,1.893,1.714,753,6457 -Vallon-sur-Gée,72367,802,17.321,1.325,1.200,473,6767 -Mareil-en-Champagne,72184,381,7.932,0.896,0.811,465,6768 -Saint-Sauveur-la-Sagne,63398,96,7.818,0.890,0.806,754,6476 -Paulhaguet,43148,875,11.263,1.068,0.967,738,6459 -Saint-Paterne - Le Chevain,72308,2129,12.977,1.147,1.039,488,6816 -Lasseubetat,64325,206,7.145,0.851,0.771,422,6240 -Pontailler-sur-Saône,21496,1315,13.244,1.158,1.048,885,6690 -Arçonnay,72006,1841,8.000,0.900,0.815,483,6816 -Maigné,72177,349,11.418,1.076,0.974,470,6764 -Javron-les-Chapelles,53121,1391,38.590,1.977,1.790,455,6814 -Saint-Saturnin,51516,58,8.034,0.902,0.817,766,6837 -Saint-Ouen-en-Champagne,72307,239,11.178,1.064,0.963,461,6768 -Loué,72168,2185,15.824,1.266,1.146,468,6772 -Brûlon,72050,1609,16.220,1.282,1.161,459,6772 -Auvers-sous-Montfaucon,72017,245,7.540,0.874,0.791,471,6772 -Auxerre,89024,34846,49.905,2.249,2.036,744,6738 -Hercé,53115,311,10.282,1.021,0.924,417,6821 -Suzay,27625,347,4.116,0.646,0.585,593,6909 -Étival-lès-le-Mans,72127,1948,10.358,1.024,0.927,480,6768 -Champfleur,72056,1373,13.175,1.155,1.046,488,6811 -Bantigny,59048,507,3.183,0.568,0.514,716,7014 -Saint-Georges-d'Aurac,43188,469,17.647,1.337,1.211,747,6448 -Oisseau,53170,1193,30.870,1.769,1.602,428,6818 -Novillars,25429,1508,2.049,0.456,0.413,936,6693 -Allonnes,72003,11102,18.214,1.358,1.230,485,6764 -Saint-Denis-de-Gastines,53211,1548,49.073,2.230,2.019,418,6809 -Larchamp,53126,1107,41.398,2.048,1.854,400,6816 -Puch-d'Agenais,47214,703,23.228,1.534,1.389,480,6360 -Tassillé,72348,139,6.530,0.813,0.736,471,6769 -Annouville-Vilmesnil,76021,484,5.850,0.770,0.697,514,6955 -Couëron,44047,20900,48.975,2.228,2.017,348,6693 -Flocques,76266,707,4.961,0.709,0.642,584,6993 -Saint-Ellier-du-Maine,53213,524,17.989,1.350,1.222,400,6817 -Saint-Martin-d'Oney,40274,1403,34.409,1.867,1.690,404,6324 -Sainte-Eugénie-de-Villeneuve,43183,99,6.373,0.804,0.728,751,6451 -Bannes,53019,123,8.367,0.921,0.834,453,6772 -Sury-aux-Bois,45316,794,37.989,1.962,1.776,657,6762 -Le Mans,72181,142991,52.618,2.309,2.091,487,6772 -Le Pas,53176,546,22.039,1.494,1.353,428,6818 -Meurcé,72194,267,6.204,0.793,0.718,491,6798 -Saint-Berthevin-la-Tannière,53202,344,17.793,1.343,1.216,409,6823 -Saint-Jean-en-Val,63366,354,12.172,1.111,1.006,730,6492 -Brecé,53042,814,35.357,1.893,1.714,418,6812 -Saint-Symphorien,72321,582,22.584,1.513,1.370,470,6780 -Montaudin,53154,906,21.914,1.490,1.349,409,6815 -Malleval,42132,578,5.164,0.723,0.655,835,6479 -Chassillé,72070,242,7.304,0.860,0.779,469,6772 -Joué-en-Charnie,72149,654,23.585,1.546,1.400,461,6776 -Saint-Contest,14566,2510,7.967,0.898,0.813,454,6907 -Châtillon-sur-Colmont,53064,1046,40.080,2.015,1.824,425,6813 -Guécélard,72146,3015,12.200,1.112,1.007,487,6760 -Chavaniac-Lafayette,43067,279,8.463,0.926,0.838,748,6450 -Gorron,53107,2592,14.838,1.226,1.110,416,6819 -Contest,53074,851,23.303,1.537,1.392,430,6803 -Saint-Pierre-sur-Erve,53248,141,9.702,0.991,0.897,446,6771 -Saint-Pierre-des-Landes,53245,942,42.206,2.068,1.872,396,6805 -Vals-le-Chastel,43250,44,3.998,0.636,0.576,743,6464 -Montenay,53155,1363,37.798,1.957,1.772,417,6803 -Vautorte,53269,592,24.301,1.569,1.421,413,6808 -Crissé,72109,604,20.962,1.457,1.319,472,6795 -Coulans-sur-Gée,72096,1643,27.551,1.671,1.513,478,6778 -Grandcamp-Maisy,14312,1562,14.860,1.227,1.111,408,6929 -Juvigné,53123,1456,62.554,2.518,2.280,396,6804 -Parmilieu,38295,703,12.839,1.141,1.033,884,6528 -Rians,83104,4264,97.040,3.136,2.839,919,6287 -Saint-Bonnet-Elvert,19186,208,18.335,1.363,1.234,615,6454 -Salzuit,43232,365,8.065,0.904,0.818,740,6456 -Placé,53179,334,25.713,1.614,1.461,423,6801 -Ernée,53096,5731,36.432,1.921,1.739,408,6810 -Alvignac,46003,735,13.038,1.149,1.040,594,6418 -Plomion,2608,445,16.460,1.291,1.169,774,6972 -Saint-Georges-Buttavent,53219,1432,37.059,1.938,1.755,420,6807 -Saint-Baudelle,53200,1130,7.301,0.860,0.779,431,6804 -Saint-Jean-d'Assé,72290,1739,21.336,1.470,1.331,485,6784 -Parigné-sur-Braye,53174,846,9.710,0.992,0.898,429,6809 -Clary,59149,1105,9.963,1.005,0.910,726,6996 -Saint-Brice-sous-Rânes,61371,136,9.503,0.981,0.888,464,6849 -Courcelles-Epayelles,60168,204,6.427,0.807,0.731,672,6942 -Marby,8273,57,7.406,0.866,0.784,803,6974 -Ligny-en-Barrois,55291,4058,32.447,1.813,1.642,873,6844 -Sainte-Jamme-sur-Sarthe,72289,2065,8.607,0.934,0.846,488,6788 -Cistrières,43073,144,22.127,1.497,1.355,746,6473 -Boulot,70084,681,7.147,0.851,0.771,924,6700 -Saint-Denis-d'Orques,72278,812,47.260,2.188,1.981,459,6778 -Sainte-Gemmes-le-Robert,53218,877,35.777,1.904,1.724,451,6791 -Esmoulières,70217,96,19.945,1.422,1.287,971,6754 -Compeyre,12070,534,10.405,1.027,0.930,708,6340 -Couteuges,43079,300,10.568,1.035,0.937,741,6455 -Malvières,43128,136,13.645,1.176,1.065,755,6474 -Saint-Georges-sur-Erve,53221,382,20.540,1.443,1.307,457,6794 -Saint-Rémy-de-Sillé,72315,838,11.495,1.079,0.977,469,6789 -Neuville-sur-Sarthe,72217,2402,23.063,1.529,1.384,495,6777 -Neuvillette-en-Charnie,72218,299,14.613,1.217,1.102,462,6779 -Porto-Vecchio,2A247,11813,168.481,4.132,3.741,1234,6067 -Foucart,76279,355,4.262,0.657,0.595,527,6948 -Torcé-Viviers-en-Charnie,53265,756,48.986,2.228,2.017,460,6780 -Siaugues-Sainte-Marie,43239,801,40.756,2.032,1.840,753,6445 -Avoine,61020,224,9.537,0.983,0.890,473,6844 -Montreuil-le-Chétif,72209,302,14.721,1.221,1.106,474,6796 -Bouvante,26059,238,84.547,2.927,2.650,881,6435 -Juvancourt,10182,121,8.386,0.922,0.835,836,6781 -Saint-Sauveur-de-Carrouges,61453,245,11.596,1.084,0.981,471,6839 -Cerzat,43044,207,10.471,1.030,0.933,736,6450 -Polastron,32321,270,15.171,1.240,1.123,523,6275 -Coulaines,72095,7447,3.974,0.635,0.575,493,6776 -Chemiré-en-Charnie,72074,210,11.503,1.080,0.978,461,6776 -Médavy,61256,152,4.403,0.668,0.605,487,6846 -Loromontzey,54325,88,7.846,0.892,0.808,949,6817 -Pont-sur-Yonne,89309,3382,13.965,1.190,1.077,716,6799 -Montreuil-au-Houlme,61290,137,7.823,0.890,0.806,461,6848 -Joué-du-Plain,61210,254,14.698,1.220,1.105,467,6845 -Francheville,61176,153,9.559,0.984,0.891,476,6839 -Saint-Vert,43226,111,20.659,1.447,1.310,742,6472 -Aries-Espénan,65026,69,5.596,0.753,0.682,499,6244 -Ballon-Saint Mars,72023,2211,31.777,1.794,1.624,492,6788 -Saint-Pavace,72310,1928,5.180,0.724,0.656,490,6774 -Mogues,8291,199,8.196,0.911,0.825,867,6954 -La Ferrière-Béchet,61164,242,13.841,1.184,1.072,482,6832 -La Guierche,72147,1082,7.942,0.897,0.812,490,6783 -Saint-André,73223,467,30.450,1.756,1.590,986,6462 -Occagnes,61314,648,15.655,1.259,1.140,477,6859 -Chaveroche,19053,218,18.522,1.370,1.240,641,6500 -Nouans,72222,284,10.008,1.007,0.912,493,6799 -Neuvillalais,72216,591,18.974,1.387,1.256,476,6791 -Domfront-en-Champagne,72119,1027,21.068,1.461,1.323,484,6781 -La Bazoge,72024,3657,22.981,1.526,1.382,490,6778 -Mont-Saint-Jean,72211,643,42.398,2.073,1.877,471,6801 -Longueval,80490,276,8.547,0.931,0.843,687,6993 -Le Ménil-Scelleur,61271,95,5.461,0.744,0.674,469,6841 -Prades,43155,65,4.931,0.707,0.640,746,6435 -Sanxay,86253,551,24.521,1.576,1.427,468,6607 -Moulins-sur-Orne,61298,311,9.221,0.967,0.876,476,6857 -Pouillé-les-Côeaux,44134,1025,12.265,1.115,1.010,388,6715 -Trangé,72360,1359,11.208,1.066,0.965,484,6772 -Montmerrei,61288,514,12.895,1.143,1.035,482,6839 -Saint-Martin-sur-Oust,56229,1319,28.223,1.691,1.531,308,6755 -Rouvres,14546,216,8.890,0.949,0.859,466,6885 -Semallé,61467,362,14.301,1.204,1.090,492,6824 -Varennes-Saint-Honorat,43252,24,11.903,1.098,0.994,751,6450 -Le Cercueil,61076,139,13.436,1.167,1.057,477,6836 -Amné,72004,563,16.016,1.274,1.153,471,6775 -Sarceaux,61462,1056,10.845,1.048,0.949,479,6848 -Noordpeene,59436,789,17.254,1.322,1.197,657,7076 -Joué-l'Abbé,72150,1286,10.480,1.030,0.933,493,6784 -Les Mujouls,6087,49,14.579,1.215,1.100,1014,6315 -La Chaux,61104,52,5.109,0.719,0.651,458,6836 -Vazeilles-Limandre,43254,251,11.963,1.101,0.997,755,6444 -Blandouet-Saint Jean,53228,616,36.525,1.924,1.742,453,6781 -Courtesoult-et-Gatey,70183,61,10.252,1.019,0.923,898,6727 -La Bellière,61039,123,13.765,1.181,1.069,476,6839 -Touchay,18266,261,23.732,1.551,1.404,637,6626 -Lavardin,72157,737,7.633,0.879,0.796,484,6780 -Macé,61240,427,14.439,1.210,1.096,492,6842 -Juillé,72152,474,5.747,0.763,0.691,485,6797 -Le Château-d'Almenêches,61101,207,10.645,1.039,0.941,487,6846 -Le Grez,72145,394,7.385,0.865,0.783,466,6794 -Teillé,72349,489,11.713,1.089,0.986,490,6790 -Montclard,43139,56,9.579,0.985,0.892,742,6463 -Laines-aux-Bois,10186,520,16.442,1.291,1.169,776,6793 -Oppenans,70395,56,3.551,0.600,0.543,954,6728 -Maresché,72186,894,15.010,1.233,1.116,491,6793 -Chassagnes,43063,159,12.218,1.113,1.008,744,6460 -La Chaise-Dieu,43048,608,13.586,1.173,1.062,755,6472 -Saint-Martin-des-Landes,61424,212,11.248,1.068,0.967,470,6832 -Le Sauze-du-Lac,5163,147,12.224,1.113,1.008,963,6382 -Vaiges,53267,1160,36.227,1.916,1.735,439,6777 -Saint-Julien-des-Landes,85236,1713,28.482,1.699,1.538,340,6630 -Gandelain,61182,408,14.948,1.231,1.115,472,6821 -Charraix,43060,77,9.783,0.996,0.902,743,6435 -Saint-Marceau,72297,552,8.917,0.951,0.861,488,6792 -Mazerat-Aurouze,43131,206,16.405,1.289,1.167,747,6456 -Tully,80770,559,1.866,0.435,0.394,593,7000 -Sainte-Sabine-sur-Longève,72319,773,11.888,1.097,0.993,483,6788 -Pouillon,51444,495,2.847,0.537,0.486,768,6913 -Lucé-sous-Ballon,72174,107,6.823,0.831,0.752,493,6792 -Marliens,21388,579,4.352,0.664,0.601,864,6681 -Saint-Ellier-les-Bois,61384,242,13.880,1.186,1.074,469,6831 -Ri,61349,169,7.476,0.870,0.788,469,6860 -Bermicourt,62114,162,5.542,0.749,0.678,645,7033 -Saint-Hilaire,43193,161,14.759,1.223,1.107,736,6478 -La Chapelle-Saint-Ursin,18050,3475,7.868,0.893,0.809,649,6661 -Saint-Hernin,29250,761,29.303,1.723,1.560,210,6815 -La Quinte,72249,784,8.831,0.946,0.857,479,6774 -Burdignin,74050,606,9.853,0.999,0.905,963,6576 -Saint-Laurent-de-Condel,14603,492,12.411,1.121,1.015,453,6885 -Aunou-le-Faucon,61014,239,6.765,0.828,0.750,485,6849 -Degré,72113,795,9.912,1.002,0.907,483,6778 -Saint-Nicolas-des-Bois,61433,287,25.406,1.604,1.452,477,6828 -Avéron-Bergelle,32022,146,14.577,1.215,1.100,462,6303 -Collat,43075,82,10.342,1.024,0.927,746,6459 -Touvérac,16384,656,18.290,1.361,1.232,447,6484 -Saint-Bérain,43171,87,13.368,1.164,1.054,751,6439 -La Tardière,85289,1304,20.526,1.442,1.306,418,6625 -Fleuré,61170,210,12.025,1.104,1.000,475,6849 -Faverolles,61158,145,10.596,1.036,0.938,458,6844 -Bailleul,61023,608,16.926,1.310,1.186,477,6859 -Marnans,38221,148,6.559,0.815,0.738,875,6470 -Boucé,61055,619,20.427,1.439,1.303,469,6841 -Villers-Bocage,14752,3110,5.754,0.764,0.692,435,6894 -Béceleuf,79032,753,19.124,1.392,1.260,432,6606 -Valframbert,61497,1738,14.322,1.205,1.091,489,6821 -Boissei-la-Lande,61049,123,7.191,0.854,0.773,485,6847 -Gavrus,14297,555,2.777,0.530,0.480,444,6897 -Ballon,17032,793,12.276,1.115,1.010,392,6556 -Courvaudon,14195,239,9.682,0.990,0.896,441,6889 -Brive-la-Gaillarde,19031,47004,48.651,2.220,2.010,579,6449 -Aurseulles,14011,1927,46.558,2.172,1.967,429,6904 -Beugny,62122,386,5.765,0.764,0.692,697,7003 -Mutrécy,14461,359,6.680,0.823,0.745,450,6892 -Lanrodec,22116,1314,31.992,1.800,1.630,251,6840 -Parennes,72229,526,14.622,1.217,1.102,463,6786 -Doucelles,72120,250,4.472,0.673,0.609,492,6799 -Relevant,1319,463,12.368,1.119,1.013,850,6552 -Mamers,72180,5311,5.121,0.720,0.652,506,6808 -Laas,45177,234,6.600,0.818,0.741,643,6780 -La Chapelle-près-Sées,61098,454,9.868,1.000,0.905,489,6832 -Vernie,72370,339,9.964,1.005,0.910,476,6791 -Goudargues,30131,1099,30.362,1.754,1.588,814,6345 -La Celle-Dunoise,23039,543,28.975,1.713,1.551,602,6583 -Écouché-les-Vallées,61153,2185,41.530,2.051,1.857,467,6848 -Juvigny-sur-Orne,61212,114,3.317,0.580,0.525,482,6851 -Saint-Herblain,44162,46603,30.017,1.744,1.579,349,6687 -La Roche-Mabile,61350,156,5.202,0.726,0.657,473,6827 -Roche-sur-Linotte-et-Sorans-les-Cordiers,70449,68,9.399,0.976,0.884,943,6712 -Le Bouillon,61056,172,17.923,1.348,1.220,486,6830 -La Chapelle-Bertin,43057,50,11.362,1.073,0.972,752,6459 -Saint-Denis-sur-Sarthon,61382,1110,13.800,1.182,1.070,475,6825 -Berbezit,43027,48,10.478,1.030,0.933,744,6464 -Saultain,59557,2339,6.449,0.808,0.732,740,7025 -Monts-sur-Orne,61194,926,31.256,1.780,1.612,475,6853 -Larressore,64317,1980,10.902,1.051,0.952,340,6264 -Tanques,61479,156,6.279,0.798,0.723,475,6849 -Orainville,2572,513,8.742,0.941,0.852,775,6918 -Saint-Trojan,33486,341,3.140,0.564,0.511,418,6451 -Jax,43106,147,12.418,1.122,1.016,748,6455 -Saint-Alyre-d'Arlanc,63312,171,24.173,1.565,1.417,750,6472 -Lacapelle-del-Fraisse,15087,336,15.369,1.248,1.130,653,6408 -Cotignac,83046,2208,44.245,2.117,1.917,952,6278 -Chassagne,63097,69,16.197,1.281,1.160,707,6489 -Mézières-sous-Lavardin,72197,702,15.385,1.249,1.131,482,6789 -Tanville,61480,223,13.261,1.159,1.049,478,6832 -Saint-Martin-l'Aiguillon,61427,194,14.799,1.225,1.109,467,6842 -Lalacelle,61213,284,13.384,1.165,1.055,468,6822 -Pirmil,72237,520,17.659,1.338,1.211,469,6764 -Wisches,67543,2111,19.281,1.398,1.266,1009,6835 -La Chapelle-Saint-Aubin,72065,2389,6.001,0.780,0.706,487,6774 -Champagnat-le-Jeune,63079,148,9.413,0.977,0.885,731,6483 -Souillé,72338,663,4.575,0.681,0.617,491,6785 -Clémont,18067,724,50.060,2.252,2.039,648,6724 -Tonquédec,22340,1183,18.516,1.370,1.240,230,6865 -Saint-Michel-de-Double,24465,242,29.661,1.734,1.570,482,6445 -Vernassal,43259,351,19.319,1.399,1.267,756,6453 -Châtillon-lès-Sons,2169,85,10.645,1.039,0.941,750,6964 -Saint-Julien-des-Chazes,43202,66,6.857,0.834,0.755,743,6439 -Betoncourt-lès-Brotte,70067,119,3.036,0.555,0.503,951,6742 -Saint-Saturnin,72320,2510,9.692,0.991,0.897,488,6779 -Jouy,89209,530,17.632,1.337,1.211,700,6783 -Le Tronchet,72362,158,3.904,0.629,0.570,484,6790 -Trébabu,29282,345,4.352,0.664,0.601,127,6836 -Monistrol-d'Allier,43136,197,27.483,1.669,1.511,753,6428 -Laval-sur-Doulon,43116,63,12.500,1.125,1.019,743,6471 -La Terrasse-sur-Dorlay,42308,783,8.685,0.938,0.849,821,6483 -Chilhac,43070,187,4.095,0.644,0.583,734,6452 -Houtkerque,59318,1005,13.209,1.157,1.048,668,7086 -Janailhac,87077,540,18.640,1.374,1.244,560,6507 -Hermelinghen,62439,405,6.459,0.809,0.732,621,7079 -Belfonds,61036,207,14.276,1.203,1.089,487,6836 -Montabard,61283,288,11.110,1.061,0.961,474,6860 -Sévigny,61472,310,7.700,0.883,0.799,477,6855 -Le Born,48029,148,30.354,1.754,1.588,741,6389 -Tennie,72351,1080,33.200,1.834,1.661,465,6783 -Conlie,72089,1878,17.232,1.321,1.196,477,6783 -Saint-Broing,70461,115,10.229,1.018,0.922,905,6709 -Épineu-le-Chevreuil,72126,301,14.797,1.224,1.108,471,6776 -Chérizet,71125,21,2.915,0.543,0.492,819,6603 -Colombiers,61111,336,12.268,1.115,1.010,480,6822 -La Lande-de-Goult,61216,193,28.590,1.702,1.541,473,6834 -Cures,72111,494,11.576,1.083,0.981,481,6778 -Saint-Germain-du-Teil,48156,878,22.647,1.515,1.372,716,6373 -Saint-Georges-d'Annebecq,61390,141,9.420,0.977,0.885,461,6840 -Maricourt,80513,177,7.566,0.876,0.793,683,6987 -Vieux-Pont,61503,200,9.753,0.994,0.900,468,6841 -Le Pin-au-Haras,61328,282,8.699,0.939,0.850,489,6852 -Courcelles-la-Forêt,72100,410,19.645,1.411,1.278,477,6749 -Bonneval,43035,72,14.706,1.221,1.106,757,6465 -Sainte-Marie-en-Chanois,70469,213,4.836,0.700,0.634,962,6754 -La Répara-Auriples,26020,230,15.200,1.241,1.124,860,6400 -Sainte-Marguerite,43208,44,5.388,0.739,0.669,745,6459 -Flers,62337,227,5.553,0.750,0.679,648,7025 -Poillé-sur-Vègre,72239,609,17.591,1.335,1.209,453,6765 -Noirlieu,51404,105,13.693,1.178,1.067,831,6875 -Allerey-sur-Saône,71003,808,16.557,1.295,1.173,850,6646 -Villaines-sous-Malicorne,72377,1029,19.524,1.406,1.273,465,6747 -Leulinghen-Bernes,62505,428,6.824,0.832,0.753,610,7082 -Château-Larcher,86065,1010,15.454,1.251,1.133,492,6597 -Fix-Saint-Geneys,43095,124,8.075,0.905,0.819,751,6449 -Allan,26005,1706,29.160,1.719,1.556,843,6383 -Sarcé,72327,298,11.015,1.056,0.956,490,6739 -Pignan,34202,6844,20.526,1.442,1.306,758,6278 -Accolans,25005,99,5.197,0.726,0.657,968,6716 -Saint-Ferréol-d'Auroure,43184,2445,10.872,1.050,0.951,797,6474 -Laize-Clinchamps,14349,1975,8.110,0.906,0.820,454,6892 -Faurilles,24176,35,4.368,0.665,0.602,518,6404 -Juvinas,7111,172,8.490,0.927,0.839,804,6400 -Bordeaux,33063,252040,49.699,2.244,2.032,421,6427 -Boulon,14090,653,13.888,1.186,1.074,455,6886 -Avoise,72021,626,24.457,1.574,1.425,457,6755 -Peseux,39412,316,5.503,0.747,0.676,881,6658 -Feuguerolles-Bully,14266,1427,8.187,0.911,0.825,450,6895 -Malicorne-sur-Sarthe,72179,1916,15.160,1.239,1.122,465,6748 -Servian,34300,4747,40.929,2.036,1.843,723,6260 -Tourzel-Ronzières,63435,250,11.954,1.101,0.997,712,6492 -Seulline,14579,1331,32.348,1.810,1.639,430,6891 -Crosmières,72110,1044,20.548,1.443,1.307,462,6740 -Cagnotte,40059,760,14.533,1.213,1.098,369,6287 -Biefvillers-lès-Bapaume,62129,92,4.086,0.643,0.582,687,7004 -Pincé,72236,195,5.837,0.769,0.696,447,6748 -Dureil,72123,71,8.062,0.904,0.818,468,6751 -Fillé,72133,1510,10.176,1.015,0.919,484,6757 -Abancourt,59001,461,5.682,0.759,0.687,713,7014 -Sablé-sur-Sarthe,72264,12350,37.022,1.937,1.754,447,6750 -Landéhen,22098,1412,12.063,1.106,1.001,289,6828 -Glonville,54229,353,18.942,1.385,1.254,975,6825 -Pocé-les-Bois,35229,1283,14.942,1.230,1.114,383,6786 -La Flèche,72154,15163,79.232,2.833,2.565,468,6732 -Grimbosq,14320,291,8.636,0.935,0.847,448,6891 -Haut-du-Them-Château-Lambert,70283,435,25.289,1.601,1.450,983,6755 -Esteil,63156,63,4.567,0.680,0.616,728,6485 -La Rivière-de-Corps,10321,3253,7.341,0.862,0.780,776,6797 -Oizé,72226,1320,16.890,1.308,1.184,481,6747 -Fercé-sur-Sarthe,72131,588,12.189,1.111,1.006,472,6757 -Saint-Maximin-la-Sainte-Baume,83116,16388,64.610,2.559,2.317,931,6271 -La Chapelle-d'Aligné,72061,1691,33.455,1.841,1.667,460,6741 -Rieux,51460,200,11.488,1.079,0.977,736,6861 -Saint-Sauveur,5156,477,23.652,1.548,1.402,979,6391 -Urbalacone,2A331,65,8.267,0.915,0.828,1196,6098 -Boudes,63046,287,7.964,0.898,0.813,715,6482 -Saint-Genès-la-Tourette,63348,177,18.490,1.369,1.240,740,6488 -Raillicourt,8352,205,6.875,0.835,0.756,814,6950 -Briec,29020,5627,67.620,2.618,2.370,174,6796 -Vennecy,45333,1736,10.722,1.042,0.943,627,6761 -Gouy-en-Artois,62379,326,9.969,1.005,0.910,672,7015 -Laigné-en-Belin,72155,2376,12.767,1.137,1.029,495,6753 -Belvédère-Campomoro,2A035,164,26.875,1.650,1.494,1189,6076 -Gapennes,80374,276,11.404,1.075,0.973,626,7012 -Zutkerque,62906,1742,16.486,1.292,1.170,635,7084 -Arnage,72008,5251,10.856,1.049,0.950,489,6760 -Domecy-sur-Cure,89145,391,20.692,1.448,1.311,759,6699 -Neuville-Saint-Vaast,62609,1512,12.629,1.131,1.024,684,7028 -Limésy,76385,1505,14.976,1.232,1.115,548,6950 -Dordives,45127,3340,15.172,1.240,1.123,683,6780 -Saint-Biez-en-Belin,72268,722,9.313,0.971,0.879,493,6749 -Pannes,45247,3704,20.834,1.453,1.316,679,6767 -Serra-di-Ferro,2A276,476,32.785,1.823,1.651,1188,6091 -Saint-Ouen-en-Belin,72306,1292,15.299,1.245,1.127,489,6750 -Fozzano,2A118,212,19.378,1.401,1.268,1197,6088 -Yèvres,28424,1658,41.819,2.058,1.863,569,6787 -Monnes,2496,108,4.831,0.700,0.634,715,6893 -Grossa,2A129,43,18.307,1.362,1.233,1186,6072 -Cognocoli-Monticchi,2A091,168,35.682,1.901,1.721,1192,6099 -Bresdon,17062,224,16.857,1.307,1.183,458,6532 -Thiembronne,62812,849,22.875,1.522,1.378,630,7057 -Arbellara,2A018,153,11.285,1.069,0.968,1202,6083 -Vaulx-Vraucourt,62839,1023,14.036,1.193,1.080,695,7007 -Belfahy,70061,80,3.142,0.564,0.511,981,6750 -Grandeyrolles,63172,53,5.334,0.735,0.665,703,6501 -Requeil,72252,1210,14.089,1.195,1.082,485,6747 -Brousse,63056,342,22.489,1.510,1.367,735,6497 -Herméville-en-Woëvre,55244,240,14.599,1.216,1.101,890,6898 -Vion,72378,1438,20.285,1.434,1.298,457,6749 -Guargualé,2A132,140,10.614,1.037,0.939,1194,6096 -Pietrosella,2A228,1640,35.497,1.896,1.717,1181,6101 -Champeix,63080,1337,12.192,1.111,1.006,710,6496 -Olmeto,2A189,1219,43.887,2.109,1.910,1194,6083 -Aulnay,17024,1394,31.210,1.778,1.610,440,6556 -Solesmes,72336,1190,11.502,1.080,0.978,457,6755 -Cérans-Foulletourte,72051,3372,32.472,1.814,1.642,480,6756 -Madriat,63202,108,4.700,0.690,0.625,713,6483 -Montaigut-le-Blanc,63234,860,22.555,1.512,1.369,705,6497 -Lioux,84066,275,38.837,1.984,1.796,889,6325 -Monts-en-Ternois,62590,64,3.398,0.587,0.531,657,7024 -Giuncheto,2A127,84,7.648,0.880,0.797,1200,6073 -Lecelles,59335,2791,16.330,1.286,1.164,726,7042 -Juigné-sur-Sarthe,72151,1156,20.597,1.445,1.308,456,6759 -La Nouaille,23144,247,47.965,2.205,1.996,632,6527 -Le Chambon,7049,43,10.605,1.037,0.939,804,6414 -Denain,59172,19714,11.521,1.080,0.978,730,7028 -La Sentinelle,59564,3148,3.879,0.627,0.568,733,7028 -Saint-Martin-en-Bresse,71456,1934,35.054,1.885,1.707,860,6638 -Lamontgie,63185,652,7.111,0.849,0.769,728,6486 -Aubry-du-Hainaut,59027,1651,4.321,0.662,0.599,731,7031 -Haveluy,59292,3129,4.730,0.692,0.627,727,7028 -Briare,45053,5384,45.423,2.145,1.942,686,6725 -Bray-Saint-Aignan,45051,1757,26.172,1.628,1.474,657,6751 -Chidrac,63109,509,3.589,0.603,0.546,713,6495 -Thun-Saint-Amand,59594,1131,3.691,0.612,0.554,731,7044 -Champoulet,45070,48,9.394,0.976,0.884,694,6730 -Malvillers,70329,63,7.176,0.853,0.772,908,6742 -Lailly-en-Val,45179,3078,46.173,2.163,1.958,606,6741 -Sully-sur-Loire,45315,5401,43.603,2.102,1.903,647,6743 -Ouzouer-des-Champs,45242,255,11.416,1.075,0.973,679,6755 -Neuvy-sur-Loire,58193,1465,20.883,1.455,1.317,691,6717 -Vulmont,57737,31,3.065,0.557,0.504,941,6873 -Monchaux-sur-Écaillon,59407,542,4.510,0.676,0.612,734,7021 -Neschers,63250,832,9.694,0.991,0.897,713,6497 -Bessonies,46338,81,7.426,0.867,0.785,632,6414 -Vichel,63456,347,5.772,0.765,0.693,718,6479 -Les Pradeaux,63287,333,5.634,0.756,0.684,722,6490 -Bruay-sur-l'Escaut,59112,11638,6.681,0.823,0.745,739,7032 -Anzin,59014,13426,3.653,0.608,0.550,738,7032 -Saint-Maudez,22315,293,5.342,0.736,0.666,316,6831 -Nevoy,45227,1176,30.866,1.768,1.601,669,6733 -Thivencelle,59591,852,4.003,0.637,0.577,745,7038 -Virville,76747,362,2.494,0.503,0.455,510,6947 -Beaulieu-sur-Loire,45029,1836,49.499,2.239,2.027,685,6710 -Crespin,59160,4551,9.957,1.004,0.909,746,7034 -Échemines,10134,100,18.565,1.372,1.242,763,6809 -Ancourteville-sur-Héricourt,76009,327,3.540,0.599,0.542,530,6956 -Bonnée,45039,716,11.665,1.087,0.984,654,6745 -La Trinité,50607,397,9.213,0.966,0.875,387,6864 -Quiévrechain,59484,6358,4.698,0.690,0.625,746,7032 -La Garde-Freinet,83063,1882,76.541,2.785,2.522,985,6259 -Pardines,63268,270,5.200,0.726,0.657,717,6496 -Vieux-Condé,59616,10395,11.041,1.058,0.958,738,7041 -Cernoy-en-Berry,45064,454,28.991,1.714,1.552,677,6715 -Dampierre-en-Burly,45122,1490,48.453,2.216,2.006,663,6736 -Isdes,45171,553,43.945,2.110,1.910,643,6725 -Brue-Auriac,83025,1343,36.635,1.927,1.745,936,6278 -Villy-sur-Yères,76745,196,8.326,0.918,0.831,588,6982 -Saint-Brisson-sur-Loire,45271,988,22.086,1.496,1.355,673,6724 -Ouzouer-sur-Trézée,45245,1155,62.696,2.520,2.282,681,6732 -Germigny-des-Prés,45153,732,10.025,1.008,0.913,643,6748 -Saint-Aignan-le-Jaillard,45268,607,24.050,1.561,1.413,656,6741 -Verneuil,18277,34,11.324,1.071,0.970,672,6635 -Lothey,29142,463,13.304,1.161,1.051,180,6812 -Auzat-la-Combelle,63022,2106,12.719,1.135,1.028,723,6482 -Rombies-et-Marchipont,59505,760,4.796,0.697,0.631,744,7029 -Chézy,3076,236,36.641,1.927,1.745,739,6612 -Odomez,59444,932,4.867,0.702,0.636,738,7041 -Lompret,59356,2301,3.107,0.561,0.508,701,7063 -Chalus,63074,176,6.582,0.817,0.740,716,6487 -Avillers,88023,86,6.916,0.837,0.758,937,6806 -Réveillon,51459,105,6.769,0.828,0.750,735,6851 -Parentignat,63270,523,3.741,0.616,0.558,722,6494 -Saint-Yvoine,63404,589,8.985,0.954,0.864,715,6497 -Coux,7072,1632,12.029,1.104,1.000,828,6404 -Collanges,63114,157,4.461,0.672,0.608,716,6481 -Mennessis,2474,420,5.223,0.727,0.658,719,6957 -Saint-Florent,45277,453,37.686,1.954,1.769,658,6735 -Noards,27434,55,4.281,0.659,0.597,517,6904 -Viglain,45336,876,39.989,2.013,1.823,643,6737 -Neuvy-en-Sullias,45226,1348,25.254,1.600,1.449,641,6740 -Saint-Saulve,59544,11161,12.058,1.105,1.000,743,7030 -Saint-Julien-du-Sault,89348,2409,24.235,1.567,1.419,717,6766 -Onnaing,59447,8782,12.966,1.146,1.038,740,7034 -Issoudun-Létrieix,23097,300,26.548,1.640,1.485,636,6556 -Saurier,63409,266,8.523,0.929,0.841,705,6491 -Villeneuve,63458,161,4.222,0.654,0.592,714,6486 -Saint-Babel,63321,949,19.500,1.406,1.273,720,6499 -Lion-en-Sullias,45184,407,24.459,1.574,1.425,660,6740 -Brachy,76136,768,11.107,1.061,0.961,550,6969 -Le Châtelard,73081,671,17.942,1.348,1.220,943,6511 -Les Baroches,54048,354,13.281,1.160,1.050,913,6908 -Saint-Benoît-sur-Loire,45270,2044,20.475,1.440,1.304,651,6743 -Saint-Martin-du-Fouilloux,79278,235,24.174,1.565,1.417,457,6616 -Saint-Martin-sur-Ocre,45291,1234,15.794,1.265,1.145,675,6730 -Bousse,72044,439,12.041,1.105,1.000,469,6747 -Blancafort,18030,1049,65.569,2.578,2.334,667,6719 -Chemiré-le-Gaudin,72075,969,22.912,1.524,1.380,476,6760 -Courtillers,72106,933,7.408,0.866,0.784,454,6750 -Beaulieu,63031,442,8.689,0.938,0.849,724,6484 -Attigny,88016,235,16.068,1.276,1.155,923,6775 -Brinon-sur-Sauldre,18037,993,118.154,3.460,3.133,639,6710 -Thou,45323,233,15.123,1.238,1.121,693,6718 -Saint-Léger-sur-Roanne,42253,1139,4.526,0.677,0.613,778,6551 -Tassé,72347,324,10.792,1.046,0.947,461,6759 -Avremesnil,76050,1018,5.446,0.743,0.673,550,6973 -Perrier,63275,893,6.452,0.809,0.732,714,6494 -Fontenay-sur-Vègre,72136,327,11.473,1.078,0.976,462,6760 -Zévaco,2A358,59,10.091,1.011,0.915,1203,6109 -Saint-Jean-du-Bois,72293,631,14.705,1.221,1.106,471,6753 -Villaines-la-Carelle,72374,155,14.804,1.225,1.109,498,6812 -Servins,62793,1085,6.304,0.799,0.723,675,7036 -Auvers-le-Hamon,72016,1490,48.324,2.213,2.004,456,6760 -La Fontaine-Saint-Martin,72135,621,13.843,1.184,1.072,477,6746 -Boeschepe,59086,2186,13.721,1.179,1.067,679,7076 -Annay,58007,339,26.597,1.642,1.487,694,6718 -Nourray,41163,113,12.228,1.113,1.008,553,6735 -Saint-Julien-sur-Cher,41218,772,16.335,1.286,1.164,608,6688 -Louailles,72167,732,10.608,1.037,0.939,458,6745 -Saint-Laurent-Nouan,41220,4343,61.302,2.492,2.256,594,6737 -Champcevrais,89072,312,33.078,1.831,1.658,701,6738 -Lavau,89220,469,55.383,2.369,2.145,695,6725 -Précigné,72244,2981,58.413,2.433,2.203,457,6746 -Montluel,1262,7005,40.164,2.017,1.826,855,6538 -Notre-Dame-du-Pé,72232,637,7.785,0.888,0.804,454,6741 -Les Bordes,45042,1820,24.131,1.564,1.416,657,6743 -Varennes-Changy,45332,1487,29.827,1.738,1.574,678,6751 -Saint-Germain-Lembron,63352,1957,15.805,1.265,1.145,718,6487 -Mézeray,72195,1908,33.346,1.838,1.664,478,6754 -Létra,69113,932,14.705,1.221,1.106,815,6541 -Batilly-en-Puisaye,45023,116,17.406,1.328,1.202,695,6726 -Ligron,72163,510,13.694,1.178,1.067,477,6747 -Bonny-sur-Loire,45040,1994,26.707,1.645,1.489,685,6720 -Saint-Vincent,63403,410,6.004,0.780,0.706,709,6496 -Égliseneuve-des-Liards,63145,136,8.284,0.916,0.829,735,6495 -Granges-la-Ville,70276,189,2.588,0.512,0.464,969,6724 -Yzengremer,80834,505,3.466,0.593,0.537,594,6998 -Arith,73020,441,24.104,1.563,1.415,941,6521 -Ouzouer-sur-Loire,45244,2754,35.784,1.904,1.724,661,6739 -Spay,72344,2897,14.145,1.197,1.084,489,6760 -Pleugueneuc,35226,1870,24.817,1.586,1.436,341,6821 -Bisel,68039,543,8.116,0.907,0.821,1018,6722 -Parigné-le-Pôlin,72230,1088,13.996,1.191,1.078,488,6756 -Faugères,7088,105,5.814,0.768,0.695,790,6376 -Épeigné-sur-Dême,37101,165,21.111,1.463,1.325,524,6734 -Ladinhac,15089,464,26.901,1.651,1.495,665,6405 -Langesse,45180,76,8.991,0.954,0.864,676,6748 -Louvagny,14381,60,5.578,0.752,0.681,476,6876 -Guilly,45164,644,17.037,1.314,1.190,643,6747 -Chenillé-Champteussé,49067,354,17.031,1.314,1.190,425,6740 -Chichey,51151,175,7.187,0.853,0.772,755,6844 -Rogny-les-Sept-Écluses,89324,683,32.791,1.823,1.651,693,6741 -Vannes-sur-Cosson,45331,595,35.583,1.899,1.719,640,6731 -Le Tignet,6140,3228,11.315,1.071,0.970,1013,6286 -Le Châtellier,61102,418,8.355,0.920,0.833,438,6849 -Vieilles-Maisons-sur-Joudry,45334,642,16.489,1.293,1.171,658,6750 -Ousson-sur-Loire,45238,750,5.433,0.742,0.672,685,6720 -Saint-Quentin-les-Marais,51510,138,6.637,0.820,0.742,818,6853 -Coullons,45108,2430,81.261,2.869,2.598,658,6723 -Saint-Aubin-du-Plain,79238,551,14.162,1.198,1.085,434,6650 -Aulhat-Flat,63160,908,12.874,1.142,1.034,727,6498 -Dammarie-en-Puisaye,45120,172,25.921,1.621,1.468,686,6724 -Teillé,44202,1785,29.003,1.714,1.552,380,6715 -Gundershoffen,67176,3656,17.494,1.331,1.205,1045,6879 -Grainville-Langannerie,14310,719,5.435,0.742,0.672,461,6882 -Cazeneuve,32100,140,8.377,0.921,0.834,471,6312 -La Bussière,45060,814,35.010,1.883,1.705,685,6736 -Adon,45001,228,24.746,1.583,1.433,688,6743 -Sainte-Geneviève-des-Bois,45278,1080,40.811,2.033,1.841,681,6746 -Lorris,45187,2898,45.064,2.137,1.935,661,6747 -Saint-Hérent,63357,111,13.017,1.148,1.039,712,6483 -Boismorand,45036,825,25.394,1.604,1.452,681,6746 -Aizecourt-le-Bas,80014,57,3.559,0.601,0.544,702,6989 -Morvillars,90072,1121,5.638,0.756,0.684,996,6721 -Beauchêne,41014,182,10.015,1.007,0.912,547,6763 -Le Moulinet-sur-Solin,45218,126,19.644,1.411,1.278,668,6744 -Poilly-lez-Gien,45254,2413,33.306,1.837,1.663,669,6733 -Gien,45155,14108,67.807,2.621,2.373,681,6734 -Aillant-sur-Milleron,45002,399,27.239,1.661,1.504,695,6740 -Corzé,49110,1819,31.449,1.785,1.616,444,6723 -Dammarie-sur-Loing,45121,498,21.056,1.461,1.323,693,6741 -Faverelles,45141,153,19.163,1.393,1.261,698,6719 -Saint-Georges-sur-Loire,49283,3570,34.218,1.862,1.686,413,6705 -Avrillé,49015,13699,15.998,1.273,1.153,428,6716 -Cantenay-Épinard,49055,2214,16.591,1.297,1.174,432,6724 -Cerdon,45063,954,67.195,2.609,2.362,658,6723 -Moulainville,55361,123,11.242,1.067,0.966,883,6898 -Poupry,28303,108,14.623,1.217,1.102,614,6776 -Melleroy,45199,503,24.226,1.567,1.419,701,6755 -Bollezeele,59089,1441,17.608,1.336,1.210,657,7084 -Le Charme,45079,148,13.756,1.181,1.069,702,6746 -Saint-Laurent-en-Brionnais,71437,328,12.957,1.146,1.038,795,6577 -Saint-Jean-Cap-Ferrat,6121,1618,2.683,0.521,0.472,1049,6299 -Beauficel,50040,144,9.159,0.963,0.872,411,6858 -Montreuil-Juigné,49214,7513,14.435,1.209,1.095,427,6725 -Biran,32054,385,36.578,1.925,1.743,493,6295 -Charbonnier-les-Mines,63091,896,3.376,0.585,0.530,721,6481 -Saint-Gondon,45280,1115,24.253,1.568,1.420,665,6736 -Moncé-en-Belin,72200,3656,17.574,1.334,1.208,487,6760 -Feins-en-Gâtinais,45143,37,11.863,1.096,0.992,689,6740 -Myennes,58187,533,7.168,0.852,0.771,695,6704 -Vandy,8461,207,11.192,1.065,0.964,827,6928 -Savigny-en-Sancerre,18246,991,33.691,1.848,1.673,687,6703 -Saint-Père,58261,1116,17.258,1.322,1.197,699,6698 -Les Mars,23123,196,13.135,1.154,1.045,658,6543 -Chécy,45089,8697,15.510,1.254,1.135,626,6755 -Écuillé,49130,631,12.596,1.130,1.023,433,6732 -Villers-Vermont,60691,125,6.607,0.818,0.741,608,6941 -Velleguindry-et-Levrecey,70535,159,10.610,1.037,0.939,934,6723 -Forcelles-sous-Gugney,54204,94,5.398,0.740,0.670,929,6814 -Pujo-le-Plan,40238,632,18.678,1.376,1.246,429,6311 -Laye,5072,230,10.703,1.041,0.943,945,6397 -Usson,63439,277,5.475,0.745,0.675,727,6494 -Miré,49205,989,17.978,1.350,1.222,436,6749 -Sartène,2A272,3252,200.537,4.508,4.082,1202,6078 -Saint-Rémy-de-Chargnat,63392,568,6.303,0.799,0.723,725,6489 -Orignolles,17269,664,13.858,1.185,1.073,448,6461 -Juvardeil,49170,822,19.234,1.396,1.264,439,6732 -ÃŽle-d'Houat,56086,243,3.301,0.578,0.523,250,6712 -Verrières,63452,71,3.235,0.573,0.519,704,6497 -Bergonne,63036,349,5.824,0.768,0.695,717,6491 -Grez-Neuville,49155,1449,27.819,1.679,1.520,427,6730 -Saint-Martin-d'Ollières,63376,150,14.649,1.218,1.103,739,6481 -Connerré,72090,2900,16.615,1.297,1.174,511,6778 -Orbeil,63261,839,9.702,0.991,0.897,722,6494 -Saint-Denis-le-Vêtu,50464,619,14.127,1.196,1.083,378,6887 -Longuenée-en-Anjou,49200,6351,54.882,2.358,2.135,428,6729 -Saint-Cirgues-sur-Couze,63330,352,1.572,0.399,0.361,712,6495 -Gauciel,27280,891,7.817,0.890,0.806,572,6885 -Ravières,89321,770,22.127,1.497,1.355,792,6736 -Denée,49120,1402,16.023,1.274,1.153,426,6706 -Dampierre-en-Crot,18084,204,22.213,1.500,1.358,667,6703 -Valz-sous-Châteauneuf,63442,51,5.130,0.721,0.653,731,6481 -Barlieu,18022,370,28.573,1.701,1.540,671,6714 -Dung,25207,650,3.287,0.577,0.522,980,6719 -Savennières,49329,1338,21.364,1.471,1.332,427,6706 -Beaucouzé,49020,5002,17.963,1.349,1.221,427,6717 -Condat-lès-Montboissier,63119,225,20.678,1.447,1.310,735,6495 -Claviers,83041,678,15.990,1.273,1.153,990,6287 -Rentières,63299,117,15.721,1.262,1.143,712,6481 -Morannes sur Sarthe-Daumeray,49220,3642,88.551,2.995,2.712,443,6735 -Ménétréol-sur-Sauldre,18147,216,50.116,2.253,2.040,643,6702 -Assigny,18014,157,17.311,1.324,1.199,679,6702 -Briollay,49048,2898,14.479,1.211,1.096,439,6725 -Bazouges Cré sur Loir,72025,2075,47.387,2.191,1.984,463,6732 -Léré,18125,1114,16.135,1.279,1.158,692,6709 -Coudres,27177,549,15.366,1.248,1.130,571,6867 -Sarrigné,49326,815,3.086,0.559,0.506,443,6718 -Thou,18264,76,9.400,0.976,0.884,674,6702 -Daon,53089,490,18.262,1.360,1.231,427,6744 -Lajoux,39274,250,23.653,1.548,1.402,935,6597 -Boulay-les-Barres,45046,947,12.383,1.120,1.014,611,6767 -Angers,49007,151229,44.514,2.124,1.923,431,6719 -Bony,2100,137,8.026,0.902,0.817,716,6986 -Leffincourt,8250,187,17.850,1.345,1.218,815,6920 -Voingt,63467,33,6.627,0.819,0.742,663,6524 -Estrun,59219,711,2.819,0.534,0.483,722,7017 -Boulleret,18032,1427,32.820,1.824,1.651,694,6707 -Ennordres,18088,209,64.428,2.555,2.313,651,6707 -Sargé-sur-Braye,41235,1052,42.131,2.066,1.871,543,6757 -Villegenon,18284,219,33.282,1.836,1.662,670,6698 -Montreuil-sur-Maine,49217,744,11.512,1.080,0.978,424,6736 -Le Plessis-Grammoire,49241,2326,9.487,0.980,0.887,441,6718 -Saint-Thélo,22330,419,14.661,1.219,1.104,265,6808 -Saint-Clément-de-la-Place,49271,2161,33.559,1.844,1.670,419,6725 -Saint-Melaine-sur-Aubance,49308,2040,5.076,0.717,0.649,434,6704 -Aulx-lès-Cromary,70036,164,4.229,0.655,0.593,932,6703 -Plélauff,22181,653,25.968,1.622,1.469,236,6807 -Cheffois,85067,980,18.820,1.381,1.250,413,6630 -Santranges,18243,413,24.529,1.576,1.427,680,6715 -Carnin,59133,988,2.344,0.487,0.441,697,7046 -Pierrefitte-ès-Bois,45251,306,27.715,1.676,1.517,674,6712 -Belleville-sur-Loire,18026,1054,11.070,1.059,0.959,692,6712 -Oizon,18170,677,62.489,2.516,2.278,659,6705 -Erdre-en-Anjou,49367,5750,92.558,3.062,2.772,406,6726 -Sury-près-Léré,18257,697,18.018,1.351,1.223,684,6709 -Bethonvilliers,90013,253,1.939,0.443,0.401,997,6740 -Varennes-sur-Usson,63444,281,6.228,0.794,0.719,726,6494 -Saint-Maurice-sur-Fessard,45293,1197,15.372,1.248,1.130,672,6768 -Sury-ès-Bois,18259,264,32.819,1.824,1.651,679,6703 -Concressault,18070,205,7.573,0.876,0.793,666,6711 -Trichey,89422,43,6.624,0.819,0.742,785,6758 -Étriché,49132,1547,19.769,1.415,1.281,440,6737 -Saint-Germain-d'Anxure,53222,400,10.461,1.030,0.933,421,6797 -Albigny-sur-Saône,69003,2833,2.622,0.515,0.466,842,6531 -Largentière,7132,1660,7.360,0.864,0.782,801,6383 -Brenat,63051,617,8.924,0.951,0.861,726,6496 -Vailly-sur-Sauldre,18269,662,18.547,1.371,1.241,675,6709 -La Celle-sur-Loire,58044,836,21.737,1.484,1.344,694,6706 -Saint-Junien-la-Bregère,23205,138,25.517,1.608,1.456,601,6536 -Saint-Jean-de-la-Croix,49288,230,1.884,0.437,0.396,428,6708 -Huisseau-sur-Mauves,45167,1661,37.155,1.940,1.757,604,6759 -La Chapelle-Marcousse,63087,63,19.953,1.422,1.287,711,6483 -Vernou-en-Sologne,41271,623,54.812,2.357,2.134,599,6716 -Lamotte-Beuvron,41106,4733,23.368,1.539,1.393,629,6722 -Sennely,45309,710,50.025,2.251,2.038,640,6731 -Sand,67433,1236,6.391,0.805,0.729,1040,6819 -Saint-Péravy-la-Colombe,45296,752,19.325,1.399,1.267,599,6770 -Tiercé,49347,4349,34.195,1.861,1.685,446,6734 -Baracé,49017,572,13.488,1.169,1.058,446,6731 -Luby-Betmont,65289,104,7.214,0.855,0.774,479,6247 -Montreuil-sur-Loir,49216,570,12.159,1.110,1.005,447,6725 -Montravers,79183,378,10.070,1.010,0.914,417,6642 -Olivet,45232,21520,23.300,1.536,1.391,619,6749 -Hautvillers,51287,717,11.750,1.091,0.988,770,6885 -Liesle,25336,521,16.623,1.298,1.175,914,6669 -Sauvagnat-Sainte-Marthe,63411,482,6.441,0.808,0.732,717,6501 -Feneu,49135,2216,25.949,1.621,1.468,427,6726 -Courgoul,63122,70,8.563,0.931,0.843,706,6490 -Bouchemaine,49035,6709,20.632,1.446,1.309,427,6707 -Saint-Jean-le-Blanc,45286,8636,7.656,0.881,0.798,621,6756 -Cheffes,49090,977,17.614,1.336,1.210,434,6728 -Mozé-sur-Louet,49222,2006,26.053,1.625,1.471,431,6697 -Gémigny,45152,209,14.480,1.211,1.096,602,6762 -Écouflant,49129,4070,17.612,1.336,1.210,436,6716 -Happonvilliers,28192,300,19.213,1.395,1.263,562,6803 -Vogüé,7348,1078,11.921,1.099,0.995,810,6385 -La Ferté-Saint-Cyr,41085,1057,59.431,2.454,2.222,604,6734 -Sainte-Catherine,63328,53,5.634,0.756,0.684,735,6483 -Veilleins,41268,161,46.528,2.171,1.966,599,6699 -Saint-Ay,45269,3400,10.321,1.023,0.926,605,6750 -Isbergues,62473,8946,14.411,1.208,1.094,660,7056 -Barjac,30029,1582,42.956,2.086,1.889,811,6356 -Saint-Martin-des-Plains,63375,146,3.862,0.626,0.567,724,6490 -Villeny,41285,498,35.522,1.897,1.718,609,6727 -Chadeleuf,63073,425,5.795,0.766,0.694,715,6497 -Bruailles,71064,990,22.513,1.510,1.367,874,6616 -Saint-Denis-sur-Huisne,61381,54,4.674,0.688,0.623,518,6823 -Miniac-Morvan,35179,3902,31.654,1.791,1.622,337,6831 -Saint-Germain-des-Prés,49284,1399,20.119,1.428,1.293,416,6710 -La Sommette,25550,235,7.417,0.867,0.785,964,6681 -Saint-Étienne-sur-Chalaronne,1351,1546,21.108,1.462,1.324,847,6564 -Ingrannes,45168,527,38.977,1.987,1.799,645,6768 -Nonette-Orsonnette,63255,563,10.526,1.033,0.935,724,6485 -La Roche-Bernard,56195,685,0.452,0.214,0.194,301,6727 -La Chapelle-sur-Usson,63088,68,6.793,0.830,0.751,732,6484 -Auxelles-Haut,90006,293,6.487,0.811,0.734,981,6745 -Rivière,37201,714,3.664,0.609,0.551,495,6674 -L'Abergement-de-Varey,1002,243,9.193,0.965,0.874,888,6545 -Arrancy,2024,53,5.587,0.752,0.681,756,6935 -Barles,4020,136,59.682,2.459,2.226,956,6361 -Mayres,7153,261,29.578,1.731,1.567,789,6399 -Romans,1328,594,22.110,1.497,1.355,855,6558 -Jâlons,51303,569,10.266,1.020,0.924,785,6881 -Somme-Yèvre,51549,113,21.579,1.479,1.339,829,6871 -Le Mesnil-sur-Blangy,14426,169,7.413,0.867,0.785,500,6909 -Augnat,63017,160,9.586,0.986,0.893,712,6480 -Le Breuil-sur-Couze,63052,1052,5.922,0.775,0.702,723,6485 -Melve,4118,115,14.199,1.199,1.086,939,6369 -Soulaines-sur-Aubance,49338,1418,12.922,1.144,1.036,434,6699 -Saint-Antoine-du-Queyret,33372,64,6.931,0.838,0.759,463,6414 -Meilhaud,63222,515,4.505,0.676,0.612,714,6495 -Brassac-les-Mines,63050,3306,7.121,0.849,0.769,727,6480 -Saint-Pierre-le-Vieux,85265,966,23.424,1.541,1.395,414,6598 -Ligny-le-Ribault,45182,1243,59.077,2.447,2.216,604,6734 -Sainte-Gemmes-sur-Loire,49278,3416,14.721,1.221,1.106,433,6708 -Barbaise,8047,97,6.862,0.834,0.755,814,6957 -Bécon-les-Granits,49026,2810,46.810,2.178,1.972,417,6714 -Moult-Chicheboville,14456,2966,17.722,1.340,1.213,463,6894 -Saint-Hilaire-Saint-Mesmin,45282,3029,14.127,1.196,1.083,615,6749 -Marcilly-en-Villette,45193,2096,62.601,2.518,2.280,625,6744 -Hardricourt,78299,2198,3.354,0.583,0.528,617,6880 -Crémery,80223,113,2.543,0.508,0.460,688,6961 -Vélu,62840,136,3.173,0.567,0.513,697,6999 -Fay-aux-Loges,45142,3758,26.440,1.637,1.482,634,6761 -Chaingy,45067,3649,21.710,1.483,1.343,611,6753 -Yenne,73330,2979,23.347,1.538,1.393,915,6519 -Dauzat-sur-Vodable,63134,86,15.221,1.242,1.125,709,6488 -Bienville,60070,455,3.559,0.601,0.544,686,6927 -Dhuizon,41074,1235,45.785,2.154,1.950,599,6717 -Saint-Barthélemy-d'Anjou,49267,9209,14.701,1.220,1.105,441,6714 -Soulaire-et-Bourg,49339,1484,18.412,1.366,1.237,434,6723 -Sceaux-d'Anjou,49330,1183,17.441,1.329,1.203,427,6729 -La Jaille-Yvon,49161,320,12.917,1.144,1.036,425,6741 -Bannay,51034,19,7.194,0.854,0.773,752,6863 -Seichebrières,45305,203,14.861,1.227,1.111,644,6762 -Saint-Denis-de-l'Hôel,45273,3057,25.444,1.606,1.454,638,6751 -Peslières,63277,67,6.858,0.834,0.755,740,6483 -Saint-Martin-du-Fouilloux,49306,1672,14.964,1.231,1.115,424,6711 -Saint-Jean-Saint-Gervais,63367,124,14.468,1.211,1.096,729,6479 -Chazé-sur-Argos,49089,1059,31.811,1.795,1.625,411,6732 -Sacquenville,27504,1219,9.941,1.004,0.909,561,6887 -Quittebeuf,27486,648,13.532,1.171,1.060,554,6893 -Ingré,45169,8893,20.816,1.452,1.315,608,6758 -Mûrs-Erigné,49223,5453,17.438,1.329,1.203,431,6708 -Champigny-sur-Aube,10077,104,6.692,0.823,0.745,780,6830 -Aibre,25008,477,4.457,0.672,0.608,977,6725 -Saint-Étienne-sur-Usson,63340,284,15.706,1.261,1.142,732,6493 -Val d'Erdre-Auxence,49183,4856,131.516,3.650,3.305,402,6716 -Roche-Charles-la-Mayrand,63303,41,16.371,1.288,1.166,699,6482 -Cléry-Saint-André,45098,3452,18.328,1.363,1.234,608,6743 -Melleville,76422,264,9.076,0.959,0.868,592,6984 -Gignat,63166,241,3.526,0.598,0.541,718,6488 -Colombiers-du-Plessis,53071,482,21.471,1.475,1.335,418,6815 -Ydes,15265,1738,17.715,1.340,1.213,659,6475 -Le Lion-d'Angers,49176,4870,48.592,2.219,2.009,423,6733 -Saint-Jeure-d'Andaure,7249,104,13.435,1.167,1.057,818,6441 -Mézières-lez-Cléry,45204,830,27.088,1.657,1.500,611,6750 -Wentzwiller,68362,745,4.772,0.695,0.629,1038,6726 -Montgru-Saint-Hilaire,2507,33,3.273,0.576,0.522,724,6899 -Servoz,74266,957,13.449,1.167,1.057,991,6543 -Chaumont-sur-Tharonne,41046,1075,80.480,2.856,2.586,623,6720 -L'Hôellerie,14334,313,5.860,0.771,0.698,512,6897 -Beaurainville,62100,2099,13.182,1.156,1.047,622,7034 -Cercottes,45062,1440,24.227,1.567,1.419,622,6767 -Chambellay,49064,392,13.573,1.173,1.062,424,6737 -La Marolle-en-Sologne,41127,366,25.197,1.598,1.447,610,6724 -Bienville-la-Petite,54074,33,1.793,0.426,0.386,960,6841 -Gidy,45154,1982,23.547,1.545,1.399,611,6764 -Millançay,41140,775,61.866,2.504,2.267,610,6711 -Chenu,72077,431,30.906,1.770,1.603,503,6722 -Lalongue,64307,213,7.960,0.898,0.813,441,6268 -Solignat,63422,491,11.197,1.065,0.964,717,6491 -Gruchet-Saint-Siméon,76330,683,2.600,0.513,0.464,548,6972 -Pierrefitte-sur-Sauldre,41176,800,74.875,2.754,2.494,634,6721 -Varsberg,57696,940,4.108,0.645,0.584,965,6902 -Jumeaux,63182,640,7.216,0.855,0.774,728,6480 -Sully-la-Chapelle,45314,421,26.312,1.633,1.479,637,6769 -Thorigné-d'Anjou,49344,1222,16.813,1.305,1.182,423,6731 -Livron-sur-Drôme,26165,9098,41.332,2.046,1.852,839,6410 -Bains,43018,1347,37.715,1.955,1.770,763,6430 -Beaune-sur-Arzon,43023,227,14.510,1.213,1.098,767,6466 -Vienne-en-Val,45335,1937,35.817,1.905,1.725,633,6739 -Saint-Lyé-la-Forêt,45289,1154,27.354,1.665,1.508,623,6774 -La Possonnière,49247,2429,18.715,1.377,1.247,418,6703 -Jouy-le-Potier,45175,1353,50.799,2.269,2.054,609,6736 -Darvoy,45123,1872,8.560,0.931,0.843,633,6749 -Saint-Paulien,43216,2405,40.547,2.027,1.835,764,6444 -Saint-André-sur-Cailly,76555,858,12.294,1.116,1.010,573,6938 -Saint-Pierre-de-Bressieux,38440,763,23.251,1.535,1.390,883,6467 -Cournon,56044,767,10.990,1.055,0.955,316,6753 -Foissy-sur-Vanne,89171,339,15.803,1.265,1.145,739,6793 -Saint-Saturnin,16348,1286,13.538,1.171,1.060,471,6513 -La Ferté-Saint-Aubin,45146,7393,86.361,2.958,2.678,624,6738 -Saint-Christophe-sur-Dolaison,43174,952,27.232,1.661,1.504,764,6435 -Lissac,43122,268,12.116,1.108,1.003,761,6451 -Séneujols,43238,315,12.288,1.116,1.010,760,6428 -Sanssac-l'Église,43233,1136,15.697,1.261,1.142,762,6437 -Saint-Jean-de-Beauregard,91560,410,4.019,0.638,0.578,639,6840 -Saran,45302,16379,20.320,1.435,1.299,614,6763 -Bœurs-en-Othe,89048,343,22.306,1.503,1.361,752,6784 -Molinons,89261,278,11.958,1.101,0.997,740,6789 -Céaux-d'Allègre,43043,476,32.561,1.816,1.644,763,6453 -Coulours,89120,135,17.699,1.339,1.212,742,6788 -Dry,45130,1395,23.064,1.529,1.384,601,6745 -Brienon-sur-Armançon,89055,3158,26.018,1.624,1.470,749,6768 -Fleury-les-Aubrais,45147,20973,10.122,1.013,0.917,619,6763 -Ménestreau-en-Villette,45200,1470,54.434,2.348,2.126,632,6738 -Saint-Victor-sur-Arlanc,43228,86,11.765,1.092,0.989,759,6473 -Saint-Mards-en-Othe,10350,641,31.419,1.784,1.615,761,6789 -Saint-Benoist-sur-Vanne,10335,235,16.686,1.300,1.177,750,6790 -Chamonix-Mont-Blanc,74056,8759,245.455,4.987,4.515,1000,6533 -La Ferté-Beauharnais,41083,510,2.515,0.505,0.457,614,6717 -Curtil-Vergy,21219,137,2.724,0.525,0.475,844,6676 -Mercy,89249,81,2.676,0.521,0.472,746,6770 -Cirières,79091,959,17.195,1.320,1.195,426,6642 -Thillot,55507,237,3.676,0.610,0.552,896,6885 -Carville-Pot-de-Fer,76161,111,5.285,0.732,0.663,534,6959 -La Forêt-du-Parc,27256,584,7.616,0.878,0.795,571,6869 -Nibelle,45228,1173,27.168,1.659,1.502,650,6765 -Dore-l'Église,63139,621,27.469,1.668,1.510,761,6479 -Saint-Georges-Lagricol,43189,533,19.253,1.397,1.265,768,6467 -Lalley,38204,197,23.783,1.552,1.405,910,6406 -Ceyssac,43045,414,10.931,1.052,0.952,766,6440 -Chanteau,45072,1446,28.979,1.714,1.552,624,6761 -Neuvicq,17260,437,22.915,1.524,1.380,448,6466 -Vals-près-le-Puy,43251,3354,5.187,0.725,0.656,768,6435 -Souesmes,41249,1080,99.880,3.181,2.880,642,6711 -Cerisy-la-Salle,50111,1062,17.050,1.314,1.190,388,6893 -Ormes,45235,4093,18.233,1.359,1.230,608,6758 -Farincourt,52195,39,5.043,0.715,0.647,901,6738 -Montharville,28260,97,6.468,0.810,0.733,576,6789 -Nogent-en-Othe,10266,46,9.101,0.960,0.869,761,6781 -Borne,43036,418,5.457,0.744,0.674,762,6446 -Blanzac,43030,403,8.668,0.937,0.848,770,6446 -Polignac,43152,2816,32.905,1.826,1.653,769,6440 -Chailley,89069,542,16.958,1.311,1.187,754,6776 -Saint-Jean-Kourtzerode,57614,722,2.796,0.532,0.482,1009,6858 -Sanchey,88439,934,5.556,0.750,0.679,951,6792 -Bellevue-la-Montagne,43026,406,32.968,1.828,1.655,761,6461 -Chemillé-en-Anjou,49092,21600,321.374,5.706,5.166,430,6683 -Les Places,27459,78,1.983,0.448,0.406,512,6897 -Saint-Victor-la-Rivière,63401,248,19.180,1.394,1.262,697,6493 -Herment,63175,264,9.626,0.988,0.895,667,6521 -Cléry,73086,418,10.850,1.048,0.949,952,6510 -Ardon,45006,1156,54.662,2.353,2.130,619,6748 -Sauvessanges,63412,517,33.128,1.832,1.659,770,6479 -Orthoux-Sérignac-Quilhan,30192,409,14.065,1.194,1.081,784,6307 -Craponne-sur-Arzon,43080,2001,33.397,1.840,1.666,766,6474 -Saint-Honoré-les-Bains,58246,751,25.109,1.595,1.444,762,6643 -Espaly-Saint-Marcel,43089,3518,6.276,0.797,0.722,769,6439 -Chambost-Allières,69037,833,13.955,1.189,1.077,817,6549 -Combreux,45101,277,12.699,1.134,1.027,650,6759 -Manziat,1231,1977,12.728,1.136,1.029,847,6585 -Aubrives,8028,874,10.678,1.040,0.942,828,6996 -Bissy-sur-Fley,71037,92,4.785,0.696,0.630,824,6618 -Aix-Villemaur-Pâlis,10003,3569,75.327,2.763,2.502,755,6786 -Cormoyeux,51173,119,2.144,0.466,0.422,766,6891 -Saint-Florentin,89345,4396,28.512,1.700,1.539,749,6768 -Coadout,22040,581,9.887,1.001,0.906,247,6841 -Cerisiers,89066,990,26.013,1.623,1.469,737,6782 -Vitry-aux-Loges,45346,2122,43.990,2.111,1.911,649,6758 -Esnon,89156,392,12.112,1.108,1.003,741,6772 -Neuville-sur-Vanne,10263,419,17.278,1.323,1.198,756,6798 -Saint-Félix-de-l'Héras,34253,35,12.770,1.137,1.029,723,6306 -Mareau-aux-Prés,45196,1272,15.426,1.250,1.132,610,6752 -Férolles,45144,1157,17.111,1.317,1.192,631,6749 -Eichhoffen,67120,538,2.286,0.481,0.436,1028,6817 -Jargeau,45173,4577,14.663,1.219,1.104,631,6753 -La Rivière,33356,415,3.120,0.562,0.509,438,6431 -Courgenay,89122,559,29.945,1.742,1.577,740,6802 -Brion,89056,629,16.777,1.304,1.181,734,6769 -Neufvillage,57501,37,0.625,0.252,0.228,977,6878 -Sandillon,45300,3926,42.969,2.087,1.890,631,6746 -Lailly,89214,192,22.529,1.511,1.368,736,6799 -Villereau,45342,366,9.093,0.960,0.869,627,6776 -Saint-Jean-de-Braye,45284,20376,13.707,1.178,1.067,622,6756 -Villeneuve-l'Archevêque,89461,1146,7.001,0.842,0.762,742,6795 -La Chapelle-Saint-Mesmin,45075,10223,8.961,0.953,0.863,615,6756 -Donnery,45126,2779,21.719,1.483,1.343,630,6759 -Mardié,45194,2771,17.304,1.324,1.199,633,6753 -Combleux,45100,504,1.101,0.334,0.302,625,6755 -Bérulle,10042,246,16.804,1.305,1.182,748,6786 -Pannecières,45246,128,7.036,0.844,0.764,634,6800 -Hainvillers,60294,77,2.996,0.551,0.499,676,6943 -Oursel-Maison,60485,241,7.014,0.843,0.763,640,6946 -Erceville,45135,309,12.758,1.137,1.029,627,6793 -Saint-Pierre-du-Champ,43217,518,30.664,1.763,1.596,767,6460 -Paroy-en-Othe,89288,187,5.319,0.734,0.665,741,6772 -Loury,45188,2484,34.361,1.866,1.690,630,6764 -Chaspuzac,43062,773,10.054,1.009,0.914,757,6440 -Chevilly,45093,2688,42.237,2.069,1.873,620,6772 -Chieulles,57142,417,2.613,0.515,0.466,934,6899 -Chomelix,43071,476,26.884,1.650,1.494,767,6460 -Saint-Romain,63394,214,16.013,1.274,1.153,772,6486 -Saint-Vidal,43229,597,7.951,0.898,0.813,764,6444 -Thignonville,45320,388,9.150,0.963,0.872,636,6797 -Les Sièges,89395,420,23.729,1.551,1.404,742,6788 -Desvres,62268,5040,9.421,0.977,0.885,618,7065 -Fournaudin,89181,120,9.223,0.967,0.876,750,6782 -Medeyrolles,63221,116,17.063,1.315,1.191,762,6476 -Châteauneuf-sur-Loire,45082,8077,40.132,2.016,1.825,638,6751 -Ambert,63003,6707,60.721,2.480,2.245,757,6491 -Saint-Just,63371,158,19.275,1.397,1.265,763,6488 -Vulaines,10444,224,8.698,0.939,0.850,745,6792 -Villers-Vaudey,70568,60,5.548,0.750,0.679,907,6732 -Traînou,45327,3293,33.565,1.844,1.670,629,6760 -Guigneville,45162,532,32.101,1.803,1.632,641,6794 -Montigny,45214,249,5.349,0.736,0.666,632,6777 -Santeau,45301,415,8.694,0.939,0.850,639,6775 -Saint-Vincent-de-Salers,15218,66,18.872,1.383,1.252,663,6459 -Rigny-le-Ferron,10319,366,19.099,1.391,1.259,748,6787 -Remicourt,51456,56,9.454,0.979,0.886,834,6873 -Colmesnil-Manneville,76184,104,1.962,0.446,0.404,558,6973 -Flacy,89165,114,12.574,1.129,1.022,743,6788 -Venizy,89436,925,44.233,2.117,1.917,750,6780 -La Forie,63161,322,2.832,0.536,0.485,760,6500 -Planty,10290,239,10.757,1.044,0.945,751,6796 -Dannemarie,25194,114,2.309,0.484,0.438,993,6705 -Bellechaume,89035,435,24.554,1.577,1.428,741,6772 -Bouilly-en-Gâtinais,45045,323,15.953,1.271,1.151,648,6776 -Bagneaux,89027,211,16.307,1.285,1.163,746,6797 -Crésantignes,10116,312,2.115,0.463,0.419,776,6782 -Villechétive,89451,237,9.610,0.987,0.894,742,6779 -Oison,45231,130,12.148,1.109,1.004,623,6780 -Fislis,68092,430,7.479,0.871,0.789,1030,6721 -Engenville,45133,566,18.128,1.355,1.227,643,6796 -Yèvre-la-Ville,45348,706,26.689,1.644,1.489,649,6779 -Courcy-aux-Loges,45111,436,20.909,1.456,1.318,640,6769 -Langlade,30138,2175,9.060,0.958,0.867,803,6301 -Outarville,45240,1347,46.717,2.176,1.970,623,6792 -Bernières-d'Ailly,14064,252,9.412,0.977,0.885,474,6878 -Pithiviers,45252,9027,6.866,0.834,0.755,645,6789 -Castanet,82029,288,22.166,1.499,1.357,618,6354 -Marsainvilliers,45198,296,10.775,1.045,0.946,647,6789 -Saint-Christophe-sur-Guiers,38376,848,23.366,1.539,1.393,916,6486 -Marsac-en-Livradois,63211,1458,48.596,2.219,2.009,752,6489 -Lafauche,52256,77,5.173,0.724,0.656,883,6804 -Attray,45011,210,16.892,1.308,1.184,632,6782 -Arquian,58012,586,33.907,1.854,1.679,697,6717 -Saint-Martin-des-Olmes,63374,290,17.037,1.314,1.190,762,6489 -Grabels,34116,8281,16.581,1.296,1.173,760,6282 -Nancray-sur-Rimarde,45220,610,11.589,1.084,0.981,649,6771 -Quéven,56185,8571,24.624,1.580,1.431,217,6760 -Viverols,63465,410,12.563,1.128,1.021,766,6484 -Saint-Pierre-le-Bost,23233,131,17.190,1.320,1.195,643,6592 -Baffie,63027,113,10.837,1.048,0.949,763,6488 -Grandrif,63173,179,22.118,1.497,1.355,766,6488 -Mareau-aux-Bois,45195,582,11.588,1.084,0.981,639,6775 -Thouarsais-Bouildroux,85292,766,17.444,1.329,1.203,405,6621 -Gonfaron,83067,4313,41.702,2.056,1.862,970,6248 -Pierrefitte-Nestalas,65362,1155,1.727,0.418,0.378,449,6213 -Darbres,7077,241,16.395,1.289,1.167,820,6401 -Munchhausen,67308,732,5.861,0.771,0.698,1076,6882 -Singles,63421,170,20.527,1.442,1.306,667,6494 -Vrigny,45347,831,16.132,1.278,1.157,644,6770 -Estouy,45139,524,18.715,1.377,1.247,648,6791 -Chevrières,38099,712,16.467,1.292,1.170,879,6454 -Jouy-en-Pithiverais,45174,271,15.901,1.269,1.149,638,6784 -Gredisans,39262,137,2.358,0.489,0.443,891,6678 -Izel-lès-Équerchin,62476,986,9.949,1.004,0.909,696,7032 -Chaumont-le-Bourg,63105,232,8.281,0.916,0.829,758,6483 -Ascoux,45010,1143,6.643,0.820,0.742,645,6780 -Bouzonville-aux-Bois,45047,436,7.546,0.874,0.791,643,6780 -Écardenville-la-Campagne,27210,472,7.393,0.865,0.783,544,6893 -Aschères-le-Marché,45009,1150,21.008,1.459,1.321,627,6776 -Burtoncourt,57121,194,5.100,0.719,0.651,948,6909 -Lapeyrouse-Mornay,26155,1217,11.507,1.080,0.978,858,6471 -Lézigneux,42122,1701,14.821,1.225,1.109,783,6494 -Montreuil-sur-Barse,10255,303,13.070,1.151,1.042,798,6791 -Roncenay,10324,158,3.819,0.622,0.563,778,6790 -Estissac,10142,1870,25.511,1.608,1.456,759,6800 -Chilleurs-aux-Bois,45095,1997,52.565,2.308,2.090,640,6775 -Bazoches-les-Gallerandes,45025,1535,37.000,1.936,1.753,632,6782 -Escrennes,45137,736,11.489,1.079,0.977,637,6783 -Précieux,42180,1032,16.469,1.292,1.170,787,6501 -Saint-Jean-de-Bonneval,10342,391,6.177,0.791,0.716,776,6787 -Chaussy,45088,328,13.053,1.150,1.041,623,6786 -Rupt,52442,333,6.480,0.810,0.733,859,6816 -Saint-Just-Saint-Rambert,42279,15232,41.350,2.047,1.853,801,6486 -Bucey-en-Othe,10066,427,12.986,1.147,1.039,762,6798 -Saint-Aubin,40249,501,9.650,0.989,0.895,397,6298 -Messon,10240,469,11.472,1.078,0.976,770,6798 -Châteaubourg,35068,6991,28.957,1.713,1.551,370,6786 -Courteranges,10110,568,6.511,0.812,0.735,790,6797 -Sury-le-Comtal,42304,6417,24.201,1.566,1.418,789,6493 -L'Hôpital-le-Grand,42108,1035,12.980,1.147,1.039,792,6502 -Bois-le-Roi,27073,1165,5.468,0.744,0.674,578,6862 -Saint-Anthème,63319,697,69.167,2.647,2.397,767,6502 -Saint-Élier,27535,442,2.343,0.487,0.441,550,6880 -Pithiviers-le-Vieil,45253,1826,33.724,1.849,1.674,642,6782 -Neuville-aux-Bois,45224,4591,31.822,1.796,1.626,627,6775 -Beaufin,38031,20,6.540,0.814,0.737,933,6416 -Bonson,42022,3818,5.217,0.727,0.658,797,6493 -Gumières,42107,323,16.109,1.278,1.157,775,6491 -Verrières-en-Forez,42328,694,21.159,1.464,1.326,779,6495 -Michelbach-le-Haut,68208,609,7.413,0.867,0.785,1033,6725 -Vauchassis,10396,504,24.144,1.564,1.416,769,6785 -Saint-Parres-lès-Vaudes,10358,1010,3.105,0.561,0.508,790,6787 -Villy-le-Bois,10434,56,5.376,0.738,0.668,781,6784 -Autruy-sur-Juine,45015,686,27.157,1.659,1.502,634,6801 -Toges,8453,99,3.497,0.595,0.539,831,6926 -Pierre-Bénite,69152,10493,4.467,0.673,0.609,843,6512 -Bondaroy,45038,413,7.008,0.843,0.763,645,6789 -Saint-Thibault,10363,550,11.770,1.092,0.989,786,6786 -Marolles-lès-Bailly,10226,103,4.369,0.665,0.602,798,6791 -Franken,68096,337,6.287,0.798,0.723,1027,6733 -Saint-Thomas-la-Garde,42290,594,3.485,0.594,0.538,784,6498 -Saint-Georges-Haute-Ville,42228,1421,9.654,0.989,0.895,786,6497 -Courtenot,10109,228,8.343,0.919,0.832,799,6783 -Tivernon,45325,278,12.600,1.130,1.023,619,6785 -Patay,45248,2160,13.996,1.191,1.078,602,6775 -Montsapey,73175,61,26.422,1.636,1.481,959,6497 -Haraucourt,54250,724,12.471,1.124,1.018,945,6845 -Saint-Cyprien,42211,2481,7.148,0.851,0.771,797,6493 -Chenereilles,42060,522,9.186,0.965,0.874,786,6490 -Craintilleux,42075,1304,8.342,0.919,0.832,794,6496 -Prasville,28304,434,16.526,1.294,1.172,602,6799 -Cormost,10104,309,11.383,1.074,0.972,785,6787 -Bouilly,10051,1055,15.539,1.255,1.136,776,6790 -Allonnes,49002,3026,36.603,1.926,1.744,471,6691 -Toury,28391,2613,18.971,1.386,1.255,624,6787 -Baigneaux,28019,238,11.976,1.102,0.998,614,6783 -Santilly,28367,342,17.916,1.347,1.220,615,6782 -Trinay,45330,228,17.447,1.330,1.204,623,6779 -Allondans,25013,251,5.122,0.720,0.652,983,6720 -Saudemont,62782,454,5.598,0.753,0.682,703,7015 -Sougy,45313,835,28.260,1.692,1.532,608,6771 -Seltz,67463,3308,20.918,1.456,1.318,1072,6879 -Guilleville,28189,181,13.550,1.172,1.061,609,6790 -Cubry,25182,87,5.435,0.742,0.672,957,6719 -Terminiers,28382,914,32.009,1.801,1.631,611,6777 -Rouvray-Sainte-Croix,45262,144,9.573,0.985,0.892,605,6772 -Saint-Marcellin-en-Forez,42256,4760,31.396,1.784,1.615,788,6488 -Ymonville,28426,494,20.941,1.457,1.319,607,6798 -Puygros,73210,388,10.284,1.021,0.924,934,6502 -Fresnay-l'Évêque,28164,744,29.271,1.722,1.559,615,6796 -Veauchette,42324,1190,7.590,0.877,0.794,798,6498 -Clérey,10100,1096,18.949,1.386,1.255,790,6788 -Saint-Clément-de-Valorgue,63331,230,13.450,1.167,1.057,770,6491 -Rivas,42185,651,4.646,0.686,0.621,796,6500 -Maupas,10229,107,4.286,0.659,0.597,781,6781 -Rouvray-Saint-Denis,28319,439,19.536,1.407,1.274,618,6799 -Soleymieux,42301,649,9.077,0.959,0.868,784,6492 -Camps-sur-l'Isle,33088,606,3.042,0.555,0.503,461,6441 -Machy,10212,113,2.730,0.526,0.476,776,6784 -Châtillon-Coligny,45085,1898,25.625,1.611,1.459,691,6750 -Rouilly-Saint-Loup,10329,517,11.291,1.070,0.969,784,6795 -Lusigny-sur-Barse,10209,2131,38.158,1.966,1.780,794,6793 -Torvilliers,10381,960,12.214,1.112,1.007,770,6796 -Faÿ-lès-Nemours,77178,483,7.830,0.891,0.807,677,6793 -Assé-le-Boisne,72011,916,28.797,1.708,1.546,480,6808 -Andrézieux-Bouthéon,42005,9839,15.870,1.268,1.148,803,6493 -Soignolles,14674,122,5.889,0.772,0.699,466,6885 -Sommeval,10371,315,9.636,0.988,0.895,772,6783 -Virey-sous-Bar,10437,629,10.860,1.049,0.950,799,6783 -Maraye-en-Othe,10222,465,42.346,2.071,1.875,768,6783 -Chennegy,10096,439,23.299,1.536,1.391,762,6788 -Vancé,72368,325,12.631,1.131,1.024,527,6751 -Le Latet,39281,80,4.394,0.667,0.604,926,6638 -Dénestanville,76214,261,2.653,0.518,0.469,563,6968 -Sagnes-et-Goudoulet,7203,120,24.997,1.591,1.441,798,6414 -La Madeleine-sur-Loing,77267,352,6.174,0.791,0.716,679,6789 -Verrières,10406,1881,10.190,1.016,0.920,783,6794 -Saint-André-Lachamp,7213,158,16.681,1.300,1.177,788,6381 -Longeville-sur-Mogne,10204,152,4.144,0.648,0.587,780,6785 -Les Bordes-Aumont,10049,541,5.627,0.755,0.684,783,6787 -Vaudes,10399,720,7.549,0.875,0.792,789,6786 -Péreyres,7173,50,12.640,1.132,1.025,801,6408 -Javernant,10177,153,5.663,0.757,0.685,776,6785 -Jonzieux,42115,1143,10.358,1.024,0.927,807,6468 -Saint-Léger-près-Troyes,10344,869,9.213,0.966,0.875,779,6792 -Ondreville-sur-Essonne,45233,408,6.589,0.817,0.740,656,6787 -Bréviandes,10060,2811,6.194,0.792,0.717,783,6797 -Sainte-Eulalie,7235,214,22.351,1.505,1.363,793,6418 -Isle-Aumont,10173,480,3.505,0.596,0.540,783,6792 -Chauffour-lès-Bailly,10092,119,19.184,1.394,1.262,801,6787 -Borée,7037,157,28.408,1.697,1.536,794,6419 -Pornichet,44132,10676,12.843,1.141,1.033,296,6698 -Montiéramey,10249,404,6.730,0.826,0.748,800,6793 -Gigondas,84049,534,27.123,1.658,1.501,863,6345 -Le Pouliguen,44135,4410,4.346,0.664,0.601,289,6701 -Le Grand-Serre,26143,907,24.916,1.589,1.439,863,6467 -Bercenay-en-Othe,10037,474,17.774,1.342,1.215,765,6789 -Zermezeele,59667,211,4.941,0.708,0.641,662,7080 -Ichy,77230,174,7.775,0.888,0.804,668,6789 -Wemaers-Cappel,59655,252,4.171,0.650,0.589,661,7082 -Hosta,64265,81,17.287,1.323,1.198,366,6236 -Griselles,21309,92,12.466,1.124,1.018,803,6753 -Aulnay-la-Rivière,45014,510,16.145,1.279,1.158,650,6790 -Dimancheville,45125,116,2.357,0.489,0.443,656,6793 -Monchel-sur-Canche,62577,90,5.010,0.712,0.645,643,7024 -Bougligny,77045,731,16.378,1.288,1.166,677,6791 -Feuillères,80307,146,5.934,0.775,0.702,688,6982 -Chappes,10083,317,9.693,0.991,0.897,793,6783 -Culan,18083,723,20.184,1.430,1.295,653,6602 -Conchy-sur-Canche,62234,213,9.857,0.999,0.905,643,7020 -Saint-Martin-Boulogne,62758,11320,12.936,1.145,1.037,602,7068 -Saint-Jean-le-Thomas,50496,408,2.465,0.500,0.453,367,6857 -Grincourt-lès-Pas,62389,29,2.821,0.535,0.484,662,7010 -Briarres-sur-Essonne,45054,543,8.264,0.915,0.828,656,6793 -Montceaux-lès-Vaudes,10246,252,10.105,1.012,0.916,788,6785 -Fresnoy-le-Château,10162,274,11.568,1.083,0.981,791,6794 -Fromelles,59257,917,8.665,0.937,0.848,688,7058 -Tréméven,22370,338,5.184,0.725,0.656,256,6860 -Coullemont,62243,115,4.071,0.642,0.581,663,7015 -Boulancourt,77046,357,6.474,0.810,0.733,661,6795 -Remilly-Wirquin,62702,343,5.313,0.734,0.665,643,7066 -Boudeville,76129,208,4.676,0.688,0.623,548,6959 -Échilleuses,45131,395,12.509,1.126,1.019,662,6785 -Orville,45237,117,7.213,0.855,0.774,658,6793 -Forges-les-Eaux,76276,3804,15.469,1.252,1.134,595,6946 -Puiseaux,45258,3401,20.301,1.434,1.298,661,6792 -Fouchères,10158,526,8.631,0.935,0.847,795,6782 -Gaudiempré,62368,198,6.232,0.795,0.720,666,7011 -Villemereuil,10416,244,7.777,0.888,0.804,779,6790 -Montaulin,10245,809,12.493,1.125,1.019,786,6795 -Saint-André-les-Vergers,10333,12116,5.771,0.765,0.693,777,6799 -Houdain,62457,7337,6.306,0.799,0.723,668,7041 -Haut-Loquin,62419,188,5.452,0.743,0.673,627,7074 -La Ferté-Loupière,89163,519,30.598,1.761,1.594,721,6752 -Grevilly,71226,36,2.652,0.518,0.469,840,6605 -Neufmoulin,80588,362,4.451,0.672,0.608,623,7004 -Wicquinghem,62886,249,6.891,0.836,0.757,626,7052 -Moussey,10260,636,7.248,0.857,0.776,783,6792 -Martincourt-sur-Meuse,55323,66,5.913,0.774,0.701,858,6942 -Mesnil-Saint-Père,10238,480,17.548,1.333,1.207,800,6798 -Les Houches,74143,2926,46.904,2.180,1.974,996,6545 -Menet,15124,567,27.449,1.668,1.510,670,6465 -Villevenard,51641,214,13.442,1.167,1.057,759,6862 -Saint-Sylvestre-Cappel,59546,1171,8.128,0.907,0.821,670,7076 -Aize,36002,115,17.130,1.317,1.192,601,6665 -Saint-Germain,10340,2318,13.878,1.186,1.074,778,6795 -Assenay,10013,146,3.424,0.589,0.533,779,6788 -Nonville,77340,612,11.630,1.086,0.983,681,6799 -Talcy,89406,75,6.897,0.836,0.757,781,6722 -Laventie,62491,4988,18.308,1.362,1.233,685,7060 -Matringhem,62562,191,4.488,0.674,0.610,643,7050 -La Neuville-sur-Essonne,45225,401,9.229,0.967,0.876,656,6787 -Saint-Antonin,6115,95,6.382,0.804,0.728,1021,6319 -La Vendue-Mignot,10402,253,10.574,1.035,0.937,782,6787 -Fontvannes,10156,722,12.963,1.146,1.038,762,6799 -Saint-Julien-les-Villas,10343,6820,5.257,0.730,0.661,783,6798 -Lugy,62533,147,2.840,0.536,0.485,640,7048 -Villemoyenne,10419,775,12.258,1.114,1.009,792,6790 -La Loge,62521,194,0.696,0.266,0.241,632,7035 -Rosières-près-Troyes,10325,4066,6.242,0.795,0.720,777,6797 -Rety,62705,2090,18.343,1.363,1.234,617,7077 -Saint-Pouange,10360,906,10.038,1.008,0.913,778,6795 -Le Malesherbois,45191,8134,85.284,2.940,2.662,655,6795 -Saint-Michel-sous-Bois,62762,119,5.689,0.759,0.687,626,7046 -La Cour-Marigny,45112,344,13.508,1.170,1.059,667,6754 -Sequedin,59566,4700,3.970,0.634,0.574,698,7058 -Buchères,10067,1605,7.228,0.856,0.775,783,6792 -Griselles,45161,798,30.173,1.748,1.583,687,6770 -Aumâtre,80040,181,5.563,0.751,0.680,611,6980 -Saint-Fort-sur-Gironde,17328,913,34.747,1.876,1.699,410,6490 -Renescure,59497,2089,18.975,1.387,1.256,655,7073 -Écuires,62289,739,9.160,0.963,0.872,611,7037 -Saint-Hilaire-les-Andrésis,45281,898,25.755,1.615,1.462,704,6776 -Courtenay,45115,4035,50.159,2.254,2.041,709,6770 -Foucherolles,45149,288,9.842,0.999,0.905,700,6779 -Chapelon,45078,263,6.565,0.816,0.739,669,6773 -Cormolain,14182,415,11.143,1.063,0.962,417,6898 -Pommier,62664,233,5.817,0.768,0.695,671,7011 -Schmittviller,57636,326,2.360,0.489,0.443,1007,6888 -Thimory,45321,743,12.544,1.127,1.020,670,6761 -Butot-Vénesville,76732,250,3.538,0.599,0.542,525,6970 -Presnoy,45256,247,7.859,0.892,0.808,668,6763 -Sauvimont,32420,65,3.489,0.595,0.539,537,6263 -Rouvroy,62724,8698,6.515,0.812,0.735,693,7032 -Béalencourt,62090,129,7.407,0.866,0.784,640,7039 -Mercatel,62568,675,5.797,0.766,0.694,687,7015 -Avroult,62067,606,4.780,0.696,0.630,641,7060 -Charbogne,8103,219,9.055,0.958,0.867,813,6934 -Domats,89144,831,23.969,1.558,1.411,708,6779 -Mormant-sur-Vernisson,45216,116,11.015,1.056,0.956,679,6762 -Bouquemaison,80122,506,7.306,0.860,0.779,654,7012 -Paroy-sur-Tholon,89289,291,4.293,0.660,0.598,728,6760 -Villemoutiers,45339,484,16.160,1.280,1.159,670,6767 -Neuilly-lès-Dijon,21452,1829,4.599,0.683,0.618,858,6689 -Saints-en-Puisaye,89367,571,27.698,1.675,1.517,719,6729 -Saint-Martin-d'Ordon,89353,411,10.208,1.017,0.921,709,6770 -Meung-sur-Loire,45203,6354,20.267,1.433,1.297,604,6752 -Tannerre-en-Puisaye,89408,284,29.144,1.718,1.556,714,6738 -Champignelles,89073,1039,53.643,2.331,2.111,708,6740 -Spézet,29278,1832,61.524,2.497,2.261,203,6805 -Ottwiller,67369,260,5.123,0.720,0.652,1009,6871 -Saint-Firmin-des-Bois,45275,468,19.083,1.391,1.259,694,6766 -Solterre,45312,478,9.830,0.998,0.904,681,6755 -Challignac,16074,323,13.195,1.156,1.047,459,6487 -Blécourt,52055,111,7.232,0.856,0.775,853,6812 -Ouzouer-sous-Bellegarde,45243,313,11.572,1.083,0.981,661,6768 -Haudonville,54255,88,7.609,0.878,0.795,956,6826 -Roquetoire,62721,1948,10.881,1.050,0.951,651,7064 -Les Vastres,43253,203,30.161,1.748,1.583,802,6436 -Saint-Michel,45294,125,5.142,0.722,0.654,654,6773 -Louzouer,45189,279,11.285,1.069,0.968,693,6772 -Saint-Omer-Capelle,62766,1085,10.732,1.043,0.944,637,7099 -Bransles,77050,563,13.855,1.185,1.073,690,6784 -Égry,45132,368,7.386,0.865,0.783,659,6779 -Auvilliers-en-Gâtinais,45017,371,20.583,1.444,1.307,655,6761 -Colline-Beaumont,62231,137,4.647,0.686,0.621,605,7027 -Ervauville,45136,550,12.578,1.129,1.022,697,6775 -Béon,89037,514,15.525,1.254,1.135,727,6764 -Racquinghem,62684,2296,5.363,0.737,0.667,655,7068 -Auchy-au-Bois,62049,491,4.297,0.660,0.598,655,7049 -Parly,89286,808,20.881,1.455,1.317,722,6741 -Lapan,18122,203,10.643,1.038,0.940,647,6649 -Treilles-en-Gâtinais,45328,283,14.010,1.191,1.078,672,6774 -Saint-Loup-des-Vignes,45288,400,9.290,0.970,0.878,659,6773 -Vidai,61502,95,1.599,0.403,0.365,505,6821 -Famechon,62322,119,4.612,0.684,0.619,662,7004 -Merry-la-Vallée,89251,377,18.374,1.364,1.235,727,6743 -Chambost-Longessaigne,69038,939,15.421,1.250,1.132,808,6518 -Giou-de-Mamou,15074,774,14.492,1.212,1.097,659,6425 -Corquilleroy,45104,2797,13.974,1.190,1.077,679,6772 -Yquebeuf,76756,240,6.502,0.812,0.735,574,6944 -Ayette,62068,326,5.164,0.723,0.655,681,7009 -Montargis,45208,14222,4.462,0.672,0.608,680,6765 -Lavilleneuve-au-Roi,52278,81,10.460,1.029,0.932,841,6785 -Ladon,45178,1395,13.736,1.180,1.068,662,6767 -Cernay-en-Dormois,51104,156,25.454,1.606,1.454,827,6905 -Thurageau,86271,809,35.326,1.892,1.713,491,6638 -Mondreville,77297,345,20.167,1.429,1.294,668,6782 -Chériennes,62222,151,4.756,0.694,0.628,633,7025 -Vieure,3312,277,30.087,1.746,1.581,686,6601 -Saint-Georges,62749,325,9.774,0.995,0.901,633,7030 -Juranville,45176,448,15.228,1.242,1.125,659,6772 -Fontaine-lès-Hermans,62344,112,3.864,0.626,0.567,653,7049 -Sanghen,62775,320,6.222,0.794,0.719,620,7073 -Montrevel-en-Bresse,1266,2463,10.005,1.007,0.912,864,6585 -Cortrat,45105,77,10.987,1.055,0.955,682,6758 -Saint-Jean-Lagineste,46339,318,12.779,1.138,1.030,606,6416 -Charny Orée de Puisaye,89086,4967,229.932,4.827,4.370,708,6761 -Thury,89416,441,23.314,1.537,1.392,724,6724 -Corconne,30095,536,13.093,1.152,1.043,777,6307 -Oletta,2B185,1650,26.552,1.640,1.485,1224,6192 -Saint-Jans-Cappel,59535,1730,7.971,0.899,0.814,679,7073 -Cepoy,45061,2366,8.470,0.926,0.838,682,6774 -Le Val d'Ocre,89334,573,29.617,1.732,1.568,726,6746 -Chevannes,45091,321,12.029,1.104,1.000,690,6784 -Bordeaux-en-Gâtinais,45041,114,9.481,0.980,0.887,666,6779 -Chuelles,45097,1190,30.864,1.768,1.601,697,6763 -Bergholtzzell,68030,440,2.250,0.477,0.432,1014,6768 -Wirwignes,62896,749,12.544,1.127,1.020,613,7064 -Heuchin,62451,545,8.226,0.913,0.827,650,7042 -Écauville,27212,112,3.329,0.581,0.526,555,6893 -Villeneuve-de-Berg,7341,2951,24.911,1.589,1.439,817,6383 -Izel-lès-Hameau,62477,714,8.630,0.935,0.847,665,7024 -La Celle-Saint-Cyr,89063,817,18.755,1.379,1.249,720,6761 -Mézières-en-Gâtinais,45205,271,9.968,1.005,0.910,663,6770 -Saint-Sauveur-en-Puisaye,89368,890,30.735,1.765,1.598,717,6723 -Nesploy,45223,374,12.950,1.145,1.037,654,6765 -Ochancourt,80603,314,3.982,0.635,0.575,600,7002 -Grévillers,62387,365,6.409,0.806,0.730,684,7000 -Pont-à-Vendin,62666,3177,2.009,0.451,0.408,692,7043 -Gaubertin,45151,263,7.291,0.859,0.778,657,6782 -Lasalle,30140,1147,10.141,1.014,0.918,766,6328 -Sommecaise,89397,372,15.691,1.261,1.142,718,6746 -Causses-et-Veyran,34061,601,17.762,1.342,1.215,709,6265 -Mentque-Nortbécourt,62567,658,10.908,1.051,0.952,638,7076 -Omécourt,60476,198,8.676,0.938,0.849,616,6949 -Toucy,89419,2690,35.255,1.890,1.711,723,6733 -Beauvoir,89033,390,6.756,0.827,0.749,729,6745 -Diges,89139,1143,36.018,1.910,1.729,733,6732 -Wissant,62899,981,12.688,1.134,1.027,608,7092 -Guigny,62395,150,3.586,0.603,0.546,627,7026 -Looze,89230,450,6.386,0.804,0.728,733,6765 -Druyes-les-Belles-Fontaines,89148,283,39.722,2.006,1.816,735,6720 -Oiry,51413,835,10.775,1.045,0.946,776,6882 -Prissé,71360,2034,10.914,1.052,0.952,836,6584 -Broussy-le-Petit,51091,126,11.637,1.086,0.983,760,6857 -Montliard,45215,229,9.014,0.956,0.866,657,6768 -Saint-Bonnet-près-Orcival,63326,474,14.918,1.229,1.113,690,6514 -La Selle-sur-le-Bied,45307,1031,23.945,1.558,1.411,694,6778 -Luray,28223,1574,4.536,0.678,0.614,584,6847 -Mignères,45206,318,5.128,0.721,0.653,671,6771 -Serques,62792,1147,10.419,1.027,0.930,641,7075 -Préfontaines,45255,451,11.686,1.088,0.985,678,6781 -Fruges,62364,2388,18.897,1.384,1.253,637,7049 -Sainte-Marie-Cappel,59536,878,7.560,0.875,0.792,666,7078 -Wimille,62894,4091,22.050,1.495,1.354,603,7079 -Saint-Loup-d'Ordon,89350,257,18.053,1.352,1.224,709,6766 -Cudot,89133,345,18.991,1.387,1.256,716,6767 -Sépeaux-Saint Romain,89388,579,30.564,1.760,1.594,720,6761 -Paucourt,45249,902,20.724,1.449,1.312,683,6768 -Neuilly-l'Hôpital,80590,321,7.706,0.884,0.800,618,7009 -Lynde,59366,750,9.093,0.960,0.869,658,7069 -Vieille-Église,62852,1386,21.228,1.467,1.328,637,7089 -Sougères-en-Puisaye,89400,321,26.835,1.649,1.493,729,6721 -Sèvremoine,49301,25681,215.262,4.670,4.228,395,6664 -Égleny,89150,448,8.005,0.901,0.816,730,6747 -Marquay,62558,182,3.598,0.604,0.547,659,7033 -Ronchères,89325,98,11.343,1.072,0.971,711,6728 -Belle-et-Houllefort,62105,559,9.272,0.969,0.877,614,7075 -Pourrain,89311,1409,23.927,1.557,1.410,733,6742 -Moiron,39334,132,1.844,0.432,0.391,895,6619 -Cadéac,65116,310,6.378,0.804,0.728,482,6204 -Courtempierre,45114,236,13.329,1.162,1.052,675,6780 -Moulins-sur-Ouanne,89272,301,10.154,1.014,0.918,726,6732 -Chantecoq,45073,496,15.948,1.271,1.151,695,6769 -Givraines,45157,418,11.258,1.068,0.967,655,6781 -Fontaine-l'Étalon,62345,104,3.988,0.636,0.576,632,7024 -Lainsecq,89216,334,25.182,1.597,1.446,718,6717 -Échannay,21238,129,7.187,0.853,0.772,829,6688 -Hem-Hardinval,80427,357,10.251,1.019,0.923,649,7005 -Alembon,62020,633,9.239,0.968,0.876,619,7077 -Courcité,53083,902,30.632,1.762,1.595,457,6803 -Plénise,39427,63,5.341,0.736,0.666,931,6637 -Coudroy,45107,330,14.770,1.223,1.107,662,6758 -Mérinville,45201,188,11.882,1.097,0.993,694,6775 -Juvanzé,10183,34,4.976,0.710,0.643,817,6804 -Barville-en-Gâtinais,45021,329,10.314,1.022,0.925,654,6782 -Gavrelle,62369,622,9.044,0.957,0.866,694,7025 -Aubigny-sur-Nère,18015,5514,61.787,2.502,2.265,660,6712 -Dannes,62264,1330,10.515,1.032,0.934,604,7056 -Machy,80497,131,3.304,0.579,0.524,615,7019 -Lombreuil,45185,301,7.650,0.880,0.797,672,6759 -Bussy-le-Repos,89060,449,23.804,1.553,1.406,718,6777 -Lorcy,45186,559,17.184,1.320,1.195,667,6771 -Dracy,89147,218,22.170,1.499,1.357,718,6736 -Les Ormes,89281,337,8.656,0.937,0.848,721,6751 -Les Hauts de Forterre,89405,523,33.145,1.833,1.660,734,6725 -Apremont,85006,1799,30.089,1.746,1.581,341,6638 -Vernines,63451,423,17.681,1.338,1.211,691,6505 -Girolles,45156,627,13.867,1.185,1.073,682,6775 -Clairvaux-les-Lacs,39154,1444,12.316,1.117,1.011,910,6614 -Haravesnes,62411,50,2.386,0.492,0.445,639,7021 -Chevry-sous-le-Bignon,45094,227,7.401,0.866,0.784,692,6781 -Feuchy,62331,1037,5.517,0.748,0.677,688,7022 -Bellegarde,45031,1698,4.932,0.707,0.640,653,6764 -Boynes,45050,1359,15.421,1.250,1.132,652,6777 -Verquigneul,62847,1886,3.594,0.603,0.546,677,7046 -Merry-sur-Yonne,89253,202,23.759,1.552,1.405,745,6716 -Les Autels,2038,58,6.045,0.783,0.709,787,6963 -Sailly-Flibeaucourt,80692,1039,10.744,1.043,0.944,613,7008 -Lalande,89217,135,10.258,1.019,0.923,720,6731 -Pers-en-Gâtinais,45250,253,10.709,1.042,0.943,694,6781 -Allemant,51005,159,15.868,1.268,1.148,758,6854 -Saizenay,39497,98,4.888,0.704,0.637,926,6657 -Villers-Brûlin,62856,365,3.859,0.625,0.566,665,7031 -Le Doulieu,59180,1462,11.902,1.098,0.994,678,7063 -Haucourt,62414,248,6.117,0.787,0.713,697,7015 -Nœux-les-Mines,62617,12010,8.857,0.947,0.857,675,7043 -Avessac,44007,2501,76.327,2.781,2.518,327,6744 -Boiscommun,45035,1138,15.958,1.272,1.152,654,6769 -Chamvres,89079,654,5.628,0.755,0.684,725,6761 -Montigny-sur-Vence,8305,239,8.268,0.915,0.828,815,6949 -Saint-Aubin-sur-Yonne,89335,416,8.908,0.950,0.860,725,6767 -Bambecque,59046,741,11.836,1.095,0.991,666,7090 -Saint-Pierre-Brouck,59539,993,8.851,0.947,0.857,643,7086 -Saint-Pardoux-Isaac,47264,1147,7.359,0.863,0.781,494,6395 -Armeau,89018,769,10.251,1.019,0.923,722,6773 -Méteren,59401,2279,18.521,1.370,1.240,674,7070 -Poilly-sur-Tholon,89304,694,19.665,1.412,1.278,731,6747 -La Petite-Boissière,79207,638,13.189,1.156,1.047,417,6650 -Maninghen-Henne,62546,323,3.995,0.636,0.576,608,7077 -Noyellette,62629,173,2.068,0.458,0.415,672,7021 -Cézy,89067,1124,16.263,1.284,1.163,725,6767 -Boëseghem,59087,747,7.097,0.848,0.768,659,7064 -Précy-sur-Vrin,89313,442,21.561,1.478,1.338,716,6767 -Saint-Hilaire-sur-Puiseaux,45283,174,11.398,1.075,0.973,675,6755 -Saint-Pabu,29257,2083,9.829,0.998,0.904,140,6855 -Conflans-sur-Loing,45102,369,9.193,0.965,0.874,686,6761 -Saint-Martin-d'Hardinghem,62760,284,6.734,0.826,0.748,639,7058 -Fréville-du-Gâtinais,45150,182,10.023,1.008,0.913,657,6770 -Saint-Carreuc,22281,1509,13.241,1.158,1.048,273,6828 -Beaune-la-Rolande,45030,2007,20.595,1.445,1.308,657,6773 -Fressin,62359,571,17.248,1.322,1.197,635,7038 -Boursin,62167,262,7.659,0.881,0.798,615,7075 -Rosoy,60547,633,4.890,0.704,0.637,663,6916 -Grenay,62386,6889,3.191,0.569,0.515,681,7040 -Ingenheim,67220,326,5.376,0.738,0.668,1031,6858 -Bostens,40050,200,7.776,0.888,0.804,430,6323 -Bazoches-sur-le-Betz,45026,956,15.439,1.251,1.133,701,6779 -Beaucamps-Ligny,59056,857,5.050,0.715,0.647,695,7055 -Saint-Fargeau,89344,1636,69.124,2.646,2.396,710,6726 -Leugny,89221,346,13.461,1.168,1.058,726,6731 -Chassy,89088,461,16.662,1.299,1.176,721,6751 -Grazac,81106,597,32.077,1.803,1.632,591,6301 -Châlonvillars,70117,1252,7.622,0.879,0.796,984,6734 -Pierrefort,15152,903,24.639,1.580,1.431,686,6428 -Levis,89222,230,12.125,1.108,1.003,726,6731 -Courtemaux,45113,265,12.220,1.113,1.008,693,6771 -Frémicourt,62353,248,5.696,0.760,0.688,695,7001 -Moulon,45219,198,9.623,0.987,0.894,670,6771 -Saint-Michel-de-Maurienne,73261,2456,36.313,1.918,1.737,976,6462 -Le Bignon-Mirabeau,45032,324,12.866,1.142,1.034,697,6781 -Châlette-sur-Loing,45068,12746,13.109,1.152,1.043,681,6770 -Sementron,89383,113,11.772,1.092,0.989,728,6728 -Villouxel,88511,80,4.614,0.684,0.619,893,6808 -Saint-Martin-des-Champs,89352,291,34.338,1.865,1.689,699,6727 -Vellefaux,70532,490,10.120,1.013,0.917,934,6722 -Étrun,62320,317,2.254,0.478,0.433,676,7024 -Brunembert,62179,416,6.201,0.793,0.718,622,7071 -Verlin,89440,435,14.164,1.198,1.085,718,6771 -Villevallier,89468,420,8.448,0.925,0.838,723,6769 -Saint-Maurice-le-Vieil,89360,372,4.929,0.707,0.640,730,6747 -Laroche-Saint-Cydroine,89218,1250,9.025,0.956,0.866,736,6763 -Fontenoy,89179,294,15.905,1.269,1.149,724,6725 -Brécy,2119,343,10.455,1.029,0.932,729,6892 -Guillac,33196,166,3.057,0.557,0.504,446,6415 -La Chapelle-sur-Oreuse,89080,617,17.990,1.350,1.222,721,6801 -Colembert,62230,923,10.009,1.007,0.912,614,7073 -Bruay-la-Buissière,62178,22230,16.445,1.291,1.169,670,7046 -La Selle-en-Hermoy,45306,827,19.631,1.410,1.277,688,6766 -Vernoy,89442,241,14.476,1.211,1.096,709,6775 -Courdemanges,51184,392,19.454,1.404,1.271,815,6843 -Nargis,45222,1495,22.265,1.502,1.360,679,6777 -Écueil,51225,303,7.021,0.843,0.763,772,6901 -Mont-Saint-Père,2524,696,10.530,1.033,0.935,733,6886 -Villeroy,89466,402,7.061,0.846,0.766,715,6787 -Vaumort,89434,365,14.648,1.218,1.103,732,6780 -Belleau,2062,136,6.752,0.827,0.749,721,6888 -Sainte-Cécile,50453,831,11.620,1.085,0.982,391,6866 -La Chapelle-sur-Chézy,2162,279,8.103,0.906,0.820,729,6872 -La Postolle,89310,141,11.666,1.087,0.984,733,6801 -Essômes-sur-Marne,2290,2793,28.664,1.704,1.543,722,6881 -Amanzé,71006,177,11.302,1.070,0.969,795,6579 -Voisines,89483,502,27.056,1.656,1.499,732,6793 -Condé-en-Brie,2209,675,4.453,0.672,0.608,740,6879 -Villebougis,89450,630,11.796,1.093,0.990,711,6792 -Longmesnil,76393,53,3.937,0.632,0.572,601,6948 -Villeneuve-la-Dondagre,89459,292,14.599,1.216,1.101,713,6783 -Concarneau,29039,19046,40.843,2.034,1.842,184,6775 -Saint-Eugène,2677,244,6.972,0.840,0.761,736,6881 -Les Bordes,89051,551,18.836,1.381,1.250,729,6782 -Trélou-sur-Marne,2748,950,20.416,1.438,1.302,742,6890 -Étampes-sur-Marne,2292,1258,2.193,0.471,0.426,730,6882 -Véron,89443,1961,15.881,1.268,1.148,726,6779 -Villers-sur-Fère,2816,524,10.766,1.044,0.945,738,6894 -Bouresches,2105,203,7.621,0.879,0.796,724,6887 -Corrobert,51175,203,14.266,1.202,1.088,742,6871 -Fouchères,89180,458,14.740,1.222,1.106,713,6785 -Viels-Maisons,2798,1201,21.558,1.478,1.338,731,6870 -Caffiers,62191,758,4.811,0.698,0.632,617,7084 -Nançois-sur-Ornain,55372,386,8.080,0.905,0.819,872,6851 -Le Charmel,2164,318,9.779,0.995,0.901,742,6891 -Cessey,25109,337,7.546,0.874,0.791,922,6675 -Château-Thierry,2168,14847,16.994,1.312,1.188,730,6883 -La Croix-sur-Ourcq,2241,108,10.582,1.035,0.937,725,6893 -Poggio-Mezzana,2B242,663,8.910,0.950,0.860,1234,6167 -Cult,70193,228,6.913,0.837,0.758,907,6693 -Vallées en Champagne,2053,566,41.611,2.053,1.859,745,6882 -Breny,2121,248,4.549,0.679,0.615,727,6899 -Crézancy,2239,1225,7.121,0.849,0.769,740,6883 -Montfort-sur-Meu,35188,6614,14.051,1.193,1.080,331,6795 -Gaël,35117,1651,52.908,2.315,2.096,314,6789 -Hagen,57282,365,3.508,0.596,0.540,930,6939 -Campénéac,56032,1925,60.844,2.483,2.248,306,6779 -Viffort,2800,324,10.067,1.010,0.914,735,6870 -Malay-le-Grand,89239,1543,22.143,1.498,1.356,729,6782 -Thorigny-sur-Oreuse,89414,1485,49.723,2.245,2.033,724,6801 -Frévillers,62362,243,5.119,0.720,0.652,666,7035 -Monthurel,2510,152,4.008,0.637,0.577,740,6880 -Mametz,62543,1991,9.710,0.992,0.898,649,7060 -Épieds,2280,384,19.121,1.392,1.260,733,6886 -Romeny-sur-Marne,2653,500,4.308,0.661,0.598,723,6876 -La Cauchie,62216,206,2.219,0.474,0.429,671,7011 -Brasles,2114,1484,7.341,0.862,0.780,733,6883 -Vaudelnay,49364,1159,25.600,1.611,1.459,458,6678 -Chamoy,10074,508,16.660,1.299,1.176,768,6782 -Saint-Laurent-la-Gâtine,28343,443,7.002,0.842,0.762,591,6844 -Saint-Georges-d'Espéranche,38389,3311,24.683,1.581,1.431,860,6494 -Frencq,62354,827,20.046,1.425,1.290,608,7056 -Chaumot,89094,786,14.991,1.232,1.115,712,6776 -Cuy,89136,873,7.193,0.854,0.773,721,6797 -Épaux-Bézu,2279,559,19.875,1.419,1.285,726,6892 -Saint-Valérien,89370,1677,22.202,1.500,1.358,707,6790 -L'Épine-aux-Bois,2281,263,12.319,1.117,1.011,730,6865 -Nesles-la-Montagne,2540,1202,17.322,1.325,1.200,732,6876 -Brannay,89054,792,10.860,1.049,0.950,709,6790 -Nieppe,59431,7449,17.142,1.318,1.193,690,7065 -Beuvardes,2083,739,15.644,1.259,1.140,738,6890 -Raismes,59491,12642,33.368,1.839,1.665,731,7031 -Vandenesse-en-Auxois,21652,299,11.272,1.069,0.968,821,6681 -Pont-sur-Vanne,89308,192,10.616,1.037,0.939,731,6791 -Saulty,62784,760,12.896,1.143,1.035,667,7010 -Montlevon,2518,297,22.792,1.520,1.376,740,6877 -Sigloy,45311,674,10.721,1.042,0.943,643,6751 -Maillot,89236,1141,6.234,0.795,0.720,725,6783 -Dixmont,89142,914,42.001,2.063,1.868,734,6779 -Paron,89287,4866,10.511,1.032,0.934,719,6786 -Évry,89162,386,4.609,0.683,0.618,718,6796 -Bonnesvalyn,2099,243,6.350,0.802,0.726,723,6890 -Corbeilles,45103,1540,32.665,1.819,1.647,669,6773 -Le Fresne-Camilly,14288,873,7.075,0.847,0.767,446,6914 -Nogentel,2554,1005,6.917,0.837,0.758,731,6877 -Malay-le-Petit,89240,353,10.921,1.052,0.952,730,6786 -Saugon,33502,470,15.510,1.254,1.135,422,6462 -Lixy,89229,441,12.288,1.116,1.010,706,6793 -Kersaint-Plabennec,29095,1420,11.947,1.100,0.996,158,6848 -Rosoy,89326,1116,6.018,0.781,0.707,722,6785 -Marsangy,89245,836,14.647,1.218,1.103,721,6781 -Langon-sur-Cher,41110,809,38.759,1.982,1.795,614,6695 -Saligny,89373,667,9.925,1.003,0.908,728,6790 -Saint-Christophe,28329,155,6.157,0.790,0.715,580,6784 -Tourcelles-Chaumont,8455,93,4.866,0.702,0.636,817,6923 -Saint-Sérotin,89369,565,14.158,1.198,1.085,713,6795 -Villiers-Louis,89471,450,11.167,1.064,0.963,727,6789 -Saint-Doulchard,18205,9486,23.982,1.559,1.412,648,6666 -Montfaucon,2505,203,15.385,1.249,1.131,732,6875 -Nieurlet,59433,951,10.305,1.022,0.925,652,7078 -Dollot,89143,326,15.296,1.245,1.127,702,6791 -Fossoy,2328,536,7.508,0.872,0.790,737,6884 -Pargny-la-Dhuys,2590,173,13.062,1.150,1.041,743,6872 -Azy-sur-Marne,2042,390,2.756,0.528,0.478,728,6878 -Chézy-sur-Marne,2186,1350,22.614,1.514,1.371,725,6877 -Totainville,88476,124,5.079,0.717,0.649,923,6807 -Rozoy-Bellevalle,2664,113,6.780,0.829,0.751,731,6869 -Audrehem,62055,560,9.278,0.970,0.878,628,7073 -Saint-Pol-sur-Ternoise,62767,5001,8.229,0.913,0.827,656,7033 -Merville,59400,9842,27.034,1.655,1.498,671,7060 -Dompierre-les-Églises,87057,379,30.704,1.764,1.597,569,6571 -Sailly-en-Ostrevent,62734,727,7.537,0.874,0.791,698,7022 -Sercus,59568,450,4.964,0.709,0.642,662,7070 -Yerville,76752,2429,10.462,1.030,0.933,550,6954 -Courmont,2227,140,10.134,1.013,0.917,744,6891 -Vichel-Nanteuil,2796,89,6.333,0.801,0.725,721,6897 -Cagnano,2B046,171,14.783,1.224,1.108,1223,6217 -Nailly,89274,1276,21.585,1.479,1.339,715,6788 -Tantonville,54513,639,8.082,0.905,0.819,931,6821 -Saint-Père-sur-Loire,45297,1049,10.735,1.043,0.944,656,6742 -Saint-Martin-du-Tertre,89354,1588,6.903,0.836,0.757,720,6791 -Neuillac,17258,303,10.462,1.030,0.933,433,6495 -Sergy,2712,155,13.607,1.174,1.063,739,6899 -Sens,89387,25913,21.853,1.488,1.347,722,6785 -Tremblay-les-Villages,28393,2291,63.573,2.538,2.298,586,6830 -Thiancourt,90096,296,2.740,0.527,0.477,999,6720 -Gondecourt,59266,4004,8.202,0.912,0.826,697,7052 -Noisy-sur-Oise,95456,669,3.800,0.621,0.562,651,6894 -Nogent-l'Artaud,2555,2197,24.123,1.563,1.415,721,6874 -Villers-au-Bois,62854,561,5.238,0.729,0.660,675,7032 -Châtelus-le-Marcheix,23056,328,43.603,2.102,1.903,594,6543 -Trucy-sur-Yonne,89424,141,8.473,0.927,0.839,749,6724 -Guarbecque,62391,1434,5.452,0.743,0.673,663,7055 -Saint-Priest-de-Gimel,19236,496,17.882,1.346,1.219,614,6472 -Andres,62031,1569,7.258,0.858,0.777,622,7085 -Etcharry,64221,125,7.493,0.871,0.789,382,6258 -Fruncé,28167,414,17.013,1.313,1.189,562,6812 -Égriselles-le-Bocage,89151,1298,23.605,1.547,1.401,710,6780 -Savigny-sur-Clairis,89380,455,16.465,1.292,1.170,707,6778 -Chérisy,62223,295,6.228,0.794,0.719,696,7014 -Schœnbourg,67454,433,5.101,0.719,0.651,1012,6866 -Rexpoëde,59499,2027,13.376,1.164,1.054,670,7094 -Fère-en-Tardenois,2305,3098,20.865,1.454,1.316,738,6894 -Armentières-sur-Ourcq,2023,105,6.835,0.832,0.753,730,6896 -Le Quesnoy-en-Artois,62677,350,8.007,0.901,0.816,631,7028 -Moiry,8293,151,3.910,0.629,0.570,864,6946 -Givry-lès-Loisy,51273,73,5.051,0.715,0.647,769,6864 -Sailly-au-Bois,62733,307,9.325,0.972,0.880,673,7004 -Orve,25436,64,5.602,0.753,0.682,970,6700 -Collemiers,89113,658,10.614,1.037,0.939,717,6786 -Essises,2289,422,7.541,0.874,0.791,732,6876 -Scaër,29274,5383,117.887,3.456,3.129,202,6798 -Cogners,72085,194,13.641,1.176,1.065,522,6752 -Chavot-Courcourt,51142,349,4.392,0.667,0.604,767,6879 -Courtoin,89126,42,6.032,0.782,0.708,710,6780 -Loisy-en-Brie,51327,210,14.999,1.233,1.116,764,6869 -Rognaix,73216,473,8.887,0.949,0.859,965,6500 -Sorrus,62799,805,6.817,0.831,0.752,607,7041 -Épernay,51230,23084,22.783,1.519,1.375,763,6882 -Soucy,89399,1581,21.515,1.476,1.336,721,6794 -Prugny,10307,378,8.577,0.932,0.844,770,6796 -Marenla,62551,247,10.086,1.011,0.915,622,7038 -Landrethun-lès-Ardres,62488,747,5.791,0.766,0.694,627,7082 -Noé,89278,546,8.624,0.935,0.847,730,6781 -Fortel-en-Artois,62346,212,5.956,0.777,0.704,645,7019 -Saint-Denis-lès-Sens,89342,766,6.824,0.832,0.753,718,6794 -Subligny,89404,502,7.875,0.893,0.809,713,6785 -Hardencourt-Cocherel,27312,254,4.967,0.709,0.642,579,6885 -Moslins,51387,312,11.785,1.093,0.990,763,6873 -Reuves,51458,75,6.409,0.806,0.730,759,6854 -Beaumerie-Saint-Martin,62094,393,9.298,0.971,0.879,615,7037 -Matha,17224,2154,19.294,1.398,1.266,440,6534 -Le Frêche,40100,391,23.559,1.545,1.399,442,6318 -Thorigné-Fouillard,35334,8425,13.586,1.173,1.062,362,6794 -Rignovelle,70445,110,4.392,0.667,0.604,960,6745 -Mesnil-Sellières,10239,590,8.464,0.926,0.838,791,6806 -Coupelle-Vieille,62247,607,14.765,1.223,1.107,635,7051 -Bessas,7033,210,17.317,1.325,1.200,801,6359 -Cumières,51202,768,2.999,0.551,0.499,766,6885 -Beaunay,51045,110,3.562,0.601,0.544,764,6866 -Érize-la-Brûlée,55175,189,10.781,1.045,0.946,865,6864 -Crépy,62256,150,6.933,0.838,0.759,642,7040 -Gron,89195,1223,11.800,1.093,0.990,719,6786 -Gonnehem,62376,2549,15.314,1.246,1.128,667,7051 -Rousson,89327,407,5.712,0.761,0.689,718,6775 -Quatzenheim,67382,781,3.169,0.567,0.513,1036,6845 -Outreau,62643,13709,7.054,0.845,0.765,602,7069 -Fontaine-la-Gaillarde,89172,505,10.445,1.029,0.932,732,6793 -Jully-sur-Sarce,10181,249,30.608,1.761,1.594,799,6777 -Véranne,42326,830,16.200,1.281,1.160,831,6477 -Le Wast,62880,208,0.939,0.308,0.279,615,7073 -Arrans,21025,76,10.534,1.033,0.935,798,6732 -Colincamps,80203,88,4.455,0.672,0.608,670,7000 -Jully,89210,155,19.953,1.422,1.287,799,6744 -Saint-Dizier-en-Diois,26300,48,13.913,1.187,1.075,897,6385 -Morangis,51384,382,8.621,0.935,0.847,763,6873 -Nanteuil-la-Forêt,51393,267,14.564,1.215,1.100,769,6890 -Fleury-la-Rivière,51252,520,7.952,0.898,0.813,763,6891 -Bains-sur-Oust,35013,3468,45.074,2.137,1.935,323,6750 -Alquines,62024,1007,10.553,1.034,0.936,627,7069 -Hubersent,62460,266,8.102,0.906,0.820,613,7054 -Arthonnay,89019,158,25.759,1.616,1.463,788,6758 -Channay,21143,63,13.481,1.169,1.058,801,6757 -Couches,71149,1362,19.921,1.421,1.287,824,6641 -Mardeuil,51344,1513,9.256,0.968,0.876,765,6885 -Saligos,65399,110,7.203,0.854,0.773,453,6203 -Vauciennes,51597,334,5.103,0.719,0.651,766,6883 -Lanmodez,22111,423,4.215,0.654,0.592,253,6876 -Bagneux-la-Fosse,10025,168,23.061,1.529,1.384,793,6768 -Moussy,51390,748,2.795,0.532,0.482,769,6879 -Buros,64152,1862,13.921,1.188,1.076,432,6257 -Vinay,51643,609,3.138,0.564,0.511,765,6880 -Triors,26355,551,5.767,0.764,0.692,865,6446 -Romery,51465,154,2.064,0.457,0.414,767,6888 -Saint-Yrieix-la-Montagne,23249,225,23.927,1.557,1.410,620,6533 -Nuits,89280,402,11.608,1.084,0.981,791,6739 -Montbarrois,45209,312,6.103,0.786,0.712,657,6773 -Villon,89475,108,9.457,0.979,0.886,787,6754 -Talus-Saint-Prix,51563,110,6.262,0.797,0.722,756,6860 -Domagné,35096,2269,29.292,1.723,1.560,369,6787 -Saint-Rémy,21568,708,13.875,1.186,1.074,797,6732 -Artigues,83006,248,32.607,1.818,1.646,925,6275 -Vieille-Chapelle,62851,781,3.465,0.593,0.537,679,7056 -Luc-en-Diois,26167,489,23.135,1.531,1.386,897,6390 -Val-des-Marais,51158,566,39.779,2.008,1.818,770,6863 -Villiers-le-Bois,10431,93,5.177,0.724,0.656,789,6764 -Saint-Germain-le-Gaillard,28339,339,8.278,0.916,0.829,573,6815 -Broussy-le-Grand,51090,314,21.237,1.467,1.328,762,6857 -Mathonville,76416,318,4.098,0.644,0.583,584,6949 -Vert-Toulon,51611,295,22.104,1.497,1.355,765,6857 -Joncy,71242,530,15.181,1.240,1.123,817,6612 -Bomy,62153,623,14.548,1.214,1.099,644,7051 -Soizy-aux-Bois,51542,183,7.277,0.859,0.778,755,6856 -Fosseux,62347,140,5.469,0.744,0.674,667,7018 -Essars,62310,1708,3.599,0.604,0.547,675,7051 -Bonnes,16049,422,14.773,1.223,1.107,476,6461 -Champguyon,51116,271,16.783,1.304,1.181,738,6853 -Le Vermont,88501,70,4.370,0.665,0.602,1001,6819 -Ville-en-Tardenois,51624,661,11.344,1.072,0.971,759,6895 -Cruzy-le-Châtel,89131,257,59.459,2.454,2.222,795,6756 -Gigny,89187,100,10.858,1.049,0.950,799,6751 -Villette,54582,183,4.681,0.689,0.624,885,6935 -Hervelinghen,62444,234,5.908,0.774,0.701,611,7089 -Villiers-sous-Praslin,10432,71,8.410,0.923,0.836,793,6776 -Hergnies,59301,4415,10.751,1.044,0.945,738,7041 -Bergères-sous-Montmirail,51050,117,10.631,1.038,0.940,745,6859 -Nouvion,80598,1318,15.866,1.268,1.148,611,7012 -Rémécourt,60529,81,2.755,0.528,0.478,663,6927 -Broyes,51092,362,15.207,1.241,1.124,754,6853 -Bannes,51035,286,23.317,1.537,1.392,767,6852 -Aix-en-Ergny,62017,182,4.860,0.702,0.636,628,7052 -Bard,42012,659,13.432,1.167,1.057,776,6501 -Channes,10079,120,14.314,1.204,1.090,797,6762 -Boissy-le-Repos,51070,222,15.221,1.242,1.125,749,6861 -Congy,51163,259,17.587,1.335,1.209,761,6868 -Le Thuit,27635,144,3.098,0.560,0.507,581,6909 -Foncquevillers,62341,442,9.285,0.970,0.878,675,7006 -Teillet-Argenty,3279,560,22.045,1.495,1.354,661,6572 -La Villeneuve-lès-Charleville,51626,114,11.123,1.062,0.962,754,6854 -Vaudoncourt,88496,160,5.757,0.764,0.692,909,6794 -Villers-Chemin-et-Mont-lès-Étrelles,70366,122,7.421,0.867,0.785,916,6708 -Courjeonnet,51186,47,5.547,0.750,0.679,762,6858 -Sibiville,62795,111,7.384,0.865,0.783,653,7024 -Le Gault-Soigny,51264,540,26.300,1.632,1.478,741,6857 -Pradelles,59469,385,3.263,0.575,0.521,672,7069 -Morsains,51386,132,14.419,1.209,1.095,744,6854 -Lachy,51313,329,16.994,1.312,1.188,754,6850 -Savigny-en-Revermont,71506,1171,27.595,1.672,1.514,884,6615 -Malzéville,54339,7969,7.628,0.879,0.796,934,6850 -Fossé,8176,53,8.939,0.952,0.862,844,6931 -Aullène,2A024,186,40.859,2.035,1.843,1209,6104 -Mailly-le-Camp,10216,1546,42.983,2.087,1.890,783,6844 -Ponthoile,80633,618,19.517,1.406,1.273,604,7014 -Vaupoisson,10400,123,10.846,1.048,0.949,787,6821 -Vatry,51595,148,8.463,0.926,0.838,793,6860 -Sainte-Marthe,27568,514,17.486,1.331,1.205,543,6874 -Plancoët,22172,3022,11.576,1.083,0.981,315,6839 -Sommesous,51545,533,36.891,1.933,1.750,791,6853 -Heiltz-le-Hutier,51288,235,10.900,1.051,0.952,832,6843 -Louches,62531,951,12.983,1.147,1.039,628,7079 -Cros-de-Ronesque,15058,142,16.211,1.282,1.161,671,6419 -Poses,27474,1176,5.344,0.736,0.666,570,6913 -Coulogne,62244,5323,9.185,0.965,0.874,620,7092 -Pierremont,62655,283,6.142,0.789,0.714,647,7035 -Villiers-Herbisse,10430,87,26.437,1.637,1.482,787,6838 -Lenharrée,51319,92,17.711,1.340,1.213,784,6857 -Arrelles,10009,86,14.452,1.210,1.096,798,6775 -Dommartin-le-Coq,10127,65,6.414,0.806,0.730,801,6825 -Fère-Champenoise,51248,2173,65.832,2.583,2.339,783,6857 -Sigy-en-Bray,76676,524,18.251,1.360,1.231,587,6941 -Herbisse,10172,171,21.926,1.490,1.349,787,6837 -Fiennes,62334,897,11.632,1.086,0.983,615,7081 -Vaucogne,10398,74,16.492,1.293,1.171,798,6824 -Coupetz,51178,76,10.565,1.035,0.937,798,6855 -Dommartin-Lettrée,51212,152,32.668,1.819,1.647,792,6849 -Macaye,64364,569,19.732,1.414,1.280,352,6253 -Dosnon,10130,110,28.914,1.712,1.550,787,6837 -Prémierfait,10305,90,14.895,1.228,1.112,779,6823 -Neuville-au-Cornet,62607,71,2.333,0.486,0.440,655,7026 -Vinets,10436,171,9.243,0.968,0.876,790,6827 -Doudeauville,62273,576,13.832,1.184,1.072,614,7058 -Villette-sur-Aube,10429,261,7.339,0.862,0.780,783,6824 -Verteuil-d'Agenais,47317,595,22.453,1.508,1.365,494,6381 -Ochtezeele,59443,383,5.625,0.755,0.684,659,7079 -Quœux-Haut-Maînil,62683,254,12.073,1.106,1.001,635,7024 -Ortillon,10273,24,8.041,0.903,0.818,788,6819 -Gatteville-le-Phare,50196,492,9.825,0.998,0.904,389,6961 -Domléger-Longvillers,80245,294,8.940,0.952,0.862,634,7008 -Boiry-Saint-Martin,62146,278,3.516,0.597,0.541,683,7012 -Villemorien,10418,208,13.940,1.188,1.076,800,6777 -Lespinoy,62501,222,3.974,0.635,0.575,618,7036 -Audincthun,62053,657,15.234,1.242,1.125,639,7057 -Vassimont-et-Chapelaine,51594,60,21.581,1.479,1.339,785,6855 -Gommecourt,62375,98,3.352,0.583,0.528,676,7005 -Faux-Fresnay,51243,329,27.256,1.662,1.505,767,6837 -Hôpital-Camfrout,29080,2230,13.209,1.157,1.048,163,6828 -Bellancourt,80078,514,6.020,0.781,0.707,624,6999 -Boubers-sur-Canche,62158,592,9.230,0.967,0.876,643,7020 -Boulogne-sur-Mer,62160,41669,7.777,0.888,0.804,600,7070 -Méjannes-le-Clap,30164,707,38.484,1.975,1.788,811,6346 -Allibaudières,10004,212,24.259,1.568,1.420,779,6832 -Perrigny-sur-Armançon,89296,130,14.055,1.193,1.080,788,6733 -Sennevoy-le-Bas,89385,90,8.744,0.941,0.852,799,6747 -Cernon,51106,129,16.094,1.277,1.156,796,6859 -Charny-le-Bachot,10086,255,13.753,1.180,1.068,771,6825 -Turcey,21648,188,12.486,1.125,1.019,831,6704 -Avirey-Lingey,10022,211,17.808,1.343,1.216,798,6774 -Amplier,62030,303,8.690,0.938,0.849,657,7008 -Frohen-sur-Authie,80369,231,7.139,0.850,0.770,645,7013 -Boulages,10052,225,11.642,1.086,0.983,765,6831 -Ville-sur-Jarnioux,69265,814,10.289,1.021,0.924,822,6543 -La Tour-du-Pin,38509,8023,4.805,0.698,0.632,892,6499 -La Caine,14122,151,2.434,0.497,0.450,442,6887 -Tigny-Noyelle,62815,173,6.683,0.823,0.745,608,7031 -Beauvois,62101,144,2.628,0.516,0.467,647,7031 -Wisques,62898,229,3.754,0.617,0.559,643,7069 -Villeseneux,51638,232,25.932,1.621,1.468,783,6857 -Arcis-sur-Aube,10006,2835,9.495,0.981,0.888,785,6824 -Plancy-l'Abbaye,10289,979,42.026,2.064,1.869,771,6837 -Ognes,51412,65,7.757,0.887,0.803,767,6846 -Capian,33093,712,18.268,1.360,1.231,434,6405 -Hoymille,59319,3224,5.549,0.750,0.679,663,7096 -Beugnâtre,62121,170,3.980,0.635,0.575,690,7005 -Balnot-la-Grange,10028,122,20.199,1.431,1.296,791,6764 -Barbezieux-Saint-Hilaire,16028,4678,26.599,1.642,1.487,451,6496 -Haussimont,51285,141,17.501,1.332,1.206,788,6853 -Marles-sur-Canche,62556,297,5.142,0.722,0.654,615,7041 -Goudon,65206,232,7.540,0.874,0.791,475,6244 -Lhuître,10195,297,36.093,1.912,1.731,797,6836 -Verdonnet,21664,86,18.110,1.355,1.227,797,6738 -Champfleury,10075,106,18.111,1.355,1.227,779,6837 -Lantages,10188,241,18.927,1.385,1.254,787,6777 -Euvy,51241,84,14.387,1.207,1.093,776,6849 -La Baume-d'Hostun,26034,567,8.533,0.930,0.842,875,6445 -Praslin,10302,86,12.051,1.105,1.000,792,6772 -Le Titre,80763,368,4.526,0.677,0.613,615,7010 -Bouvelinghem,62169,210,6.398,0.805,0.729,631,7069 -Herbeuville,55243,183,6.751,0.827,0.749,891,6886 -Connantray-Vaurefroy,51164,168,28.729,1.706,1.545,779,6845 -Pargues,10278,135,14.032,1.192,1.079,793,6769 -Gelvécourt-et-Adompt,88192,113,3.812,0.621,0.562,938,6794 -Fauquembergues,62325,991,7.033,0.844,0.764,636,7054 -Willies,59661,154,4.120,0.646,0.585,780,7004 -Saint-Nabord-sur-Aube,10354,139,8.575,0.932,0.844,787,6821 -Breuvery-sur-Coole,51087,218,10.185,1.016,0.920,793,6861 -Lachaussée-du-Bois-d'Écu,60336,211,5.932,0.775,0.702,641,6942 -Bragelogne-Beauvoir,10058,244,23.567,1.545,1.399,797,6762 -Dompierre-sur-Authie,80248,406,22.767,1.519,1.375,622,7018 -Diéval,62269,753,12.085,1.107,1.002,663,7038 -Asnières-en-Montagne,21026,191,28.508,1.700,1.539,796,6732 -Arcey,25022,1438,12.542,1.127,1.020,974,6721 -Pont-sur-Meuse,55407,136,3.620,0.606,0.549,887,6859 -Buffon,21114,185,8.901,0.950,0.860,794,6728 -Saint-Germain-du-Plain,71420,2263,19.492,1.405,1.272,855,6624 -Cuchery,51199,407,7.013,0.843,0.763,759,6893 -Faucogney-et-la-Mer,70227,557,14.170,1.198,1.085,972,6754 -Montcavrel,62585,420,9.649,0.989,0.895,617,7045 -Prédefin,62668,199,3.889,0.628,0.569,648,7047 -Bussy-Lettrée,51099,350,33.612,1.845,1.670,789,6857 -Lignières-en-Vimeu,80480,110,3.332,0.581,0.526,611,6979 -Stigny,89403,101,18.063,1.353,1.225,792,6741 -Le Boisle,80109,360,11.784,1.093,0.990,626,7022 -Poivres,10293,154,42.529,2.076,1.880,791,6847 -Salon,10365,122,22.058,1.495,1.354,774,6841 -Renty,62704,646,15.665,1.260,1.141,633,7057 -Prémesques,59470,2138,5.058,0.716,0.648,698,7062 -Cubzac-les-Ponts,33143,2422,8.914,0.950,0.860,431,6436 -Soudé,51555,185,32.377,1.811,1.640,798,6845 -Farbus,62324,554,3.519,0.597,0.541,689,7030 -Clamanges,51154,207,23.680,1.549,1.402,780,6862 -La Villeneuve-sous-Thury,60679,163,4.278,0.658,0.596,706,6896 -Ramerupt,10314,403,13.762,1.181,1.069,796,6823 -Rœux,62718,1463,4.916,0.706,0.639,693,7021 -Collioure,66053,2633,12.019,1.104,1.000,706,6154 -Arcizans-Avant,65021,394,14.886,1.228,1.112,447,6215 -Enquin-lez-Guinegatte,62295,1611,20.203,1.431,1.296,652,7054 -Hardifort,59282,383,6.140,0.789,0.714,665,7081 -Bourlens,47036,376,15.616,1.258,1.139,537,6374 -Corroy,51176,162,19.896,1.420,1.286,771,6848 -Agny,62013,1931,6.122,0.788,0.713,684,7019 -Wizernes,62902,3317,6.265,0.797,0.722,643,7070 -Vault-de-Lugny,89433,305,15.297,1.245,1.127,761,6712 -Montépreux,51377,43,15.348,1.247,1.129,785,6846 -Hazebrouck,59295,21685,27.446,1.668,1.510,664,7072 -Quiestède,62681,608,2.845,0.537,0.486,654,7066 -Couturelle,62253,67,2.137,0.465,0.421,664,7011 -Semoine,10369,202,22.493,1.510,1.367,779,6845 -Confolent-Port-Dieu,19167,38,10.768,1.045,0.946,662,6494 -Le Neufour,55379,73,0.920,0.305,0.276,845,6895 -Tain-l'Hermitage,26347,6194,4.681,0.689,0.624,844,6444 -Angluzelles-et-Courcelles,51010,152,13.760,1.181,1.069,770,6843 -Condé-sur-l'Escaut,59153,9680,18.366,1.364,1.235,746,7041 -Le Chêne,10095,304,20.994,1.458,1.320,788,6828 -Terdeghem,59587,548,8.909,0.950,0.860,667,7077 -Port-le-Grand,80637,282,11.289,1.069,0.968,611,7005 -Salomé,59550,2969,5.308,0.733,0.664,690,7048 -Moudeyres,43144,104,9.271,0.969,0.877,786,6431 -Boismont,80110,479,16.004,1.273,1.153,606,7010 -Soye,25553,385,14.051,1.193,1.080,962,6711 -Haulchin,59288,2268,5.153,0.723,0.655,730,7025 -Offlanges,39392,198,8.734,0.941,0.852,894,6680 -Pouan-les-Vallées,10299,549,16.678,1.300,1.177,777,6825 -Maubeuge,59392,29679,18.881,1.383,1.252,766,7019 -Morembert,10257,32,2.517,0.505,0.457,799,6823 -Gommenec'h,22063,553,12.087,1.107,1.002,252,6856 -Torcy-le-Petit,10380,81,7.179,0.853,0.772,788,6828 -Rhèges,10316,238,14.814,1.225,1.109,775,6825 -Gourgançon,51276,154,29.104,1.717,1.555,778,6846 -Aumerval,62058,197,3.418,0.588,0.532,658,7047 -Ormes,10272,187,10.222,1.018,0.922,780,6829 -Ouzouer-le-Doyen,41172,252,16.391,1.289,1.167,577,6759 -Boisseau,41019,101,8.168,0.910,0.824,573,6741 -Vicq,59613,1506,4.004,0.637,0.577,742,7035 -Ambleteuse,62025,1812,5.653,0.757,0.685,604,7080 -Pelonne,26227,23,2.825,0.535,0.484,889,6367 -Le Pompidou,48115,161,23.101,1.530,1.385,755,6343 -Saint-Georges-de-Rouelley,50474,557,20.833,1.453,1.316,422,6837 -Saint-Aybert,59530,373,4.183,0.651,0.589,745,7040 -Fargues-Saint-Hilaire,33165,2860,6.966,0.840,0.761,427,6420 -Sommeilles,55493,205,18.725,1.377,1.247,840,6868 -Saint-Rémy,24494,508,22.407,1.507,1.364,478,6430 -Semoy,45308,3156,7.745,0.886,0.802,621,6759 -Trouans,10386,232,29.754,1.736,1.572,798,6841 -Droupt-Sainte-Marie,10132,237,14.551,1.214,1.099,772,6823 -Morionvilliers,52342,29,6.817,0.831,0.752,877,6810 -Audembert,62052,422,7.567,0.876,0.793,608,7087 -Averdoingt,62061,291,8.574,0.932,0.844,658,7027 -Willerval,62892,649,4.095,0.644,0.583,688,7028 -Marles-les-Mines,62555,5615,4.476,0.673,0.609,667,7045 -Neulette,62605,28,1.399,0.376,0.340,641,7031 -Yvrencheux,80833,128,6.093,0.786,0.712,629,7008 -Arques,62040,9852,22.401,1.507,1.364,655,7073 -Domecy-sur-le-Vault,89146,89,6.217,0.794,0.719,761,6709 -Hecmanville,27325,170,2.982,0.550,0.498,530,6899 -Lez-Fontaine,59342,232,4.464,0.673,0.609,776,7010 -Bruille-Saint-Amand,59114,1673,7.923,0.896,0.811,736,7039 -Bousignies-sur-Roc,59101,405,12.193,1.111,1.006,786,7016 -Éclaibes,59187,304,4.881,0.703,0.637,767,7013 -Hagetmau,40119,4664,28.602,1.702,1.541,408,6293 -Mairieux,59370,740,6.577,0.816,0.739,771,7023 -Ronsenac,16283,572,26.636,1.643,1.488,486,6491 -Liessies,59347,531,17.588,1.335,1.209,777,6999 -Flaumont-Waudrechies,59233,382,5.672,0.758,0.686,770,7003 -Chanaz,73073,510,7.340,0.862,0.780,916,6524 -Grigny,62388,295,2.168,0.469,0.425,633,7031 -Lopérec,29139,850,40.028,2.014,1.824,176,6825 -Soudron,51556,305,43.067,2.089,1.891,784,6857 -Connantre,51165,1108,28.433,1.697,1.536,767,6852 -Montenils,77304,27,5.310,0.733,0.664,734,6860 -Hauteville,62418,318,4.075,0.643,0.582,669,7020 -Escalles,62307,233,7.378,0.865,0.783,609,7090 -Viâpres-le-Petit,10408,121,11.372,1.073,0.972,779,6835 -Monprimblanc,33288,292,5.015,0.713,0.646,442,6399 -Taulignan,26348,1697,35.405,1.894,1.715,856,6371 -Aibes,59003,374,9.227,0.967,0.876,776,7013 -Neuf-Mesnil,59424,1337,1.265,0.358,0.324,765,7019 -Barly,80055,173,11.649,1.086,0.983,647,7013 -Feignies,59225,6943,18.790,1.380,1.249,763,7020 -Beaurieux,59062,165,7.406,0.866,0.784,779,7009 -Souligné-Flacé,72339,693,16.624,1.298,1.175,480,6769 -Hestrud,59306,295,6.087,0.785,0.711,781,7011 -Bernaville,80086,1083,17.425,1.329,1.203,642,7007 -Quend,80649,1387,37.279,1.943,1.759,596,7027 -Chauffours,28095,277,7.540,0.874,0.791,578,6811 -Saint-André-en-Morvan,58229,310,22.890,1.523,1.379,764,6703 -Rouvray,21531,499,9.434,0.978,0.885,784,6700 -Blannay,89044,118,7.374,0.864,0.782,758,6716 -Pierre-Perthuis,89297,126,7.471,0.870,0.788,761,6706 -Monterblanc,56137,3267,25.543,1.609,1.457,270,6753 -Menades,89248,62,5.734,0.762,0.690,761,6704 -Savigny,69175,2017,21.410,1.473,1.334,820,6524 -Wavrans-sur-l'Aa,62882,1286,11.727,1.090,0.987,638,7062 -Palaiseau,91477,34120,11.673,1.088,0.985,641,6847 -Dagny,77151,307,7.891,0.894,0.809,710,6845 -Rezay,18193,220,21.610,1.480,1.340,635,6618 -Sars-Poteries,59555,1463,7.844,0.891,0.807,773,7008 -Chambles,42042,987,19.163,1.393,1.261,798,6482 -Fontenay-près-Vézelay,89176,133,15.789,1.265,1.145,758,6701 -Warlus,62878,376,5.447,0.743,0.673,678,7021 -Cussy-les-Forges,89134,344,13.715,1.179,1.067,776,6710 -Tréfols,51579,161,14.586,1.216,1.101,739,6854 -Neuf-Brisach,68231,1915,1.274,0.359,0.325,1037,6779 -Les Fontenelles,25248,567,8.433,0.924,0.837,984,6686 -Pierrefeu,6097,315,22.148,1.498,1.356,1027,6315 -Cauroir,59141,578,5.618,0.754,0.683,723,7007 -Éperlecques,62297,3582,25.726,1.614,1.461,644,7083 -Haut-Lieu,59290,394,8.965,0.953,0.863,765,6999 -Les Choux,45096,501,33.683,1.847,1.672,671,6744 -Villegats,27689,351,3.594,0.603,0.546,588,6880 -Vendin-lès-Béthune,62841,2433,3.654,0.608,0.550,671,7049 -Menucourt,95388,5607,3.712,0.613,0.555,624,6881 -Hans,51283,145,19.385,1.401,1.268,825,6891 -Jeumont,59324,10185,10.243,1.019,0.923,780,7020 -Alluy,58004,389,27.595,1.672,1.514,746,6662 -Dommartin-sous-Hans,51213,56,6.507,0.812,0.735,833,6895 -Saint-Andeux,21538,138,11.865,1.096,0.992,782,6703 -Moivre,51371,62,22.172,1.499,1.357,823,6876 -Avallon,89025,6748,26.685,1.644,1.489,773,6710 -Douvrin,62276,5286,9.612,0.987,0.894,689,7045 -Saint-Calez-en-Saosnois,72270,178,7.313,0.861,0.780,503,6803 -Provency,89316,243,12.029,1.104,1.000,774,6717 -Sumène,30325,1560,36.750,1.930,1.747,764,6322 -Dampierre-le-Château,51206,102,11.120,1.061,0.961,834,6879 -Montréal,7162,574,6.156,0.790,0.715,804,6379 -Gouy-Saint-André,62382,639,13.339,1.163,1.053,623,7030 -Vaux-en-Vermandois,2772,149,3.892,0.628,0.569,709,6971 -Sainte-Colombe,89339,205,18.535,1.370,1.240,771,6718 -Saint-Nicolas,62764,4806,3.194,0.569,0.515,684,7022 -Blangerval-Blangermont,62137,112,4.650,0.686,0.621,645,7024 -Err,66067,675,26.268,1.631,1.477,621,6146 -Dommartin-Varimont,51214,140,23.685,1.549,1.402,832,6875 -Florent-en-Argonne,51253,243,12.301,1.116,1.010,841,6892 -Herlies,59303,2408,7.131,0.850,0.770,688,7054 -Longuenesse,62525,11029,8.442,0.925,0.838,644,7070 -L'Isle-sur-Serein,89204,672,4.416,0.669,0.606,778,6723 -Clayes,35081,858,4.332,0.663,0.600,340,6798 -Athie,89022,138,4.888,0.704,0.637,776,6716 -Linghem,62517,210,3.669,0.610,0.552,654,7055 -Lucy-sur-Cure,89233,209,10.546,1.034,0.936,760,6727 -Écurie,62290,392,3.007,0.552,0.500,684,7027 -Le Sappey-en-Chartreuse,38471,1113,15.008,1.233,1.116,918,6464 -Rougiers,83110,1648,20.834,1.453,1.316,933,6257 -Troyes,10387,60640,13.306,1.161,1.051,778,6800 -Avesnes,62062,50,3.021,0.553,0.501,626,7052 -Montillot,89266,276,22.728,1.518,1.374,752,6708 -Annay-la-Côe,89009,345,12.845,1.141,1.033,766,6716 -Dourdan,91200,10702,30.768,1.766,1.599,624,6826 -Saint-Moré,89362,175,12.121,1.108,1.003,760,6719 -Verzé,71574,780,19.954,1.422,1.287,837,6587 -Tortefontaine,62824,226,11.927,1.099,0.995,621,7024 -Passy-sur-Marne,2595,129,3.797,0.620,0.561,743,6885 -Mandrevillars,70330,242,2.948,0.547,0.495,984,6732 -Coutarnoux,89128,143,8.643,0.936,0.847,769,6723 -Herlin-le-Sec,62436,177,3.816,0.622,0.563,653,7027 -Saint-Momelin,59538,480,6.003,0.780,0.706,647,7077 -Forceville-en-Vimeu,80330,240,3.040,0.555,0.503,613,6985 -Les Islettes,55253,756,5.501,0.747,0.676,845,6894 -Saint-Romain,21569,218,19.665,1.412,1.278,828,6661 -Blairville,62135,312,4.600,0.683,0.618,680,7015 -Marsac,65299,227,1.575,0.399,0.361,464,6252 -Croissy-Beaubourg,77146,1983,10.876,1.050,0.951,675,6859 -Ennetières-en-Weppes,59196,1316,10.485,1.031,0.933,693,7061 -Fresnoy-en-Gohelle,62358,217,2.975,0.549,0.497,694,7030 -Sarton,62779,182,6.527,0.813,0.736,661,7003 -Magny,89235,863,30.520,1.759,1.593,775,6707 -Annoux,89012,87,8.866,0.948,0.858,780,6723 -Tréméoc,29296,1339,11.685,1.088,0.985,164,6783 -Guînes,62397,5657,26.257,1.631,1.477,621,7081 -Sauvigny-le-Beuréal,89377,73,4.785,0.696,0.630,783,6707 -Mory,62594,315,7.355,0.863,0.781,691,7006 -Teneur,62808,262,6.931,0.838,0.759,646,7038 -Blou,49030,998,21.613,1.480,1.340,467,6703 -Vieux-Château,21681,86,6.459,0.809,0.732,786,6711 -Givry,89190,170,8.577,0.932,0.844,759,6715 -Sainte-Magnance,89351,474,19.450,1.404,1.271,784,6705 -Island,89203,184,20.689,1.448,1.311,766,6704 -Sermizelles,89392,259,7.164,0.852,0.771,761,6714 -Massangis,89246,382,41.964,2.062,1.867,769,6727 -Bezalles,77033,248,2.652,0.518,0.469,717,6842 -Saint-Père,89364,318,15.734,1.263,1.144,759,6710 -Thory,89415,205,8.280,0.916,0.829,769,6717 -Cassuéjouls,12058,110,10.471,1.030,0.933,687,6403 -Sauvigny-le-Bois,89378,710,15.429,1.250,1.132,775,6715 -Wambercourt,62871,246,6.073,0.784,0.710,629,7039 -Joiselle,51306,99,9.697,0.991,0.897,735,6849 -Épense,51229,126,11.382,1.074,0.972,834,6879 -Pont-de-Barret,26249,671,16.730,1.302,1.179,862,6391 -Germisay,52219,19,6.693,0.823,0.745,877,6812 -Étaule,89159,359,8.888,0.949,0.859,768,6716 -Bernay-en-Ponthieu,80087,231,9.948,1.004,0.909,612,7018 -Ligescourt,80477,222,5.124,0.721,0.653,618,7022 -Cambron,80163,733,12.776,1.138,1.030,614,7003 -Herrin,59304,423,2.152,0.467,0.423,696,7051 -Angely,89008,159,8.676,0.938,0.849,774,6720 -Helfaut,62423,1669,8.929,0.951,0.861,647,7065 -Girolles,89188,174,16.315,1.286,1.164,762,6714 -Roëllecourt,62717,545,9.441,0.978,0.885,658,7030 -Saint-André-en-Terre-Plaine,89333,162,14.303,1.204,1.090,783,6708 -Houvin-Houvigneul,62459,228,8.741,0.941,0.852,653,7022 -Caucourt,62218,346,5.548,0.750,0.679,668,7032 -Ardeuil-et-Montfauxelles,8018,70,4.344,0.663,0.600,824,6907 -Béalcourt,80060,103,3.572,0.602,0.545,641,7012 -Arrest,80029,862,11.149,1.063,0.962,599,7004 -Pianottoli-Caldarello,2A215,928,42.776,2.082,1.885,1204,6059 -Écuelle,70211,73,5.624,0.755,0.684,893,6720 -Wailly-Beaucamp,62870,1015,14.303,1.204,1.090,607,7036 -Mainneville,27379,415,8.150,0.909,0.823,603,6919 -Précy-le-Sec,89312,251,15.734,1.263,1.144,765,6720 -Montréal,89267,187,7.447,0.869,0.787,778,6719 -Lucy-le-Bois,89232,303,10.675,1.040,0.942,769,6717 -Saint-André-de-l'Eure,27507,3965,19.942,1.421,1.287,573,6865 -Savigny-en-Terre-Plaine,89379,154,8.880,0.949,0.859,784,6712 -Belrupt-en-Verdunois,55045,576,9.382,0.975,0.883,877,6899 -Dissangis,89141,125,7.324,0.861,0.780,776,6720 -Marmeaux,89244,91,10.886,1.050,0.951,782,6719 -Hamelincourt,62406,256,6.636,0.820,0.742,686,7008 -Sailly-sur-la-Lys,62736,4019,9.824,0.998,0.904,683,7062 -Beauvilliers,89032,83,6.289,0.798,0.723,777,6703 -Coulommiers,77131,14947,10.924,1.052,0.952,708,6857 -Bus-lès-Artois,80153,135,6.748,0.827,0.749,668,7003 -Hautvillers-Ouville,80422,584,6.112,0.787,0.713,614,7009 -Acquin-Westbécourt,62008,814,14.469,1.211,1.096,638,7070 -Leulinghem,62504,248,4.756,0.694,0.628,642,7073 -Wingles,62895,8776,6.034,0.782,0.708,690,7046 -Châtel-Gérard,89092,220,30.863,1.768,1.601,781,6722 -Arcy-sur-Cure,89015,486,26.484,1.638,1.483,760,6726 -Blacy,89043,104,8.454,0.926,0.838,777,6720 -Bussières,89058,127,11.793,1.093,0.990,782,6704 -Pontaubert,89306,395,3.864,0.626,0.567,766,6712 -Bouvron,44023,3141,47.520,2.194,1.986,329,6709 -Croix-en-Ternois,62260,324,6.622,0.819,0.742,646,7032 -Gumiane,26147,20,8.921,0.951,0.861,882,6383 -Plancher-Bas,70413,1962,29.158,1.719,1.556,981,6738 -Engins,38153,469,20.900,1.455,1.317,908,6458 -Saint-Vincent,43230,1000,20.923,1.456,1.318,767,6452 -Pisy,89300,71,12.235,1.113,1.008,784,6718 -Saint-Paër,76631,1364,18.121,1.355,1.227,545,6940 -Toutry,21642,441,6.416,0.806,0.730,784,6711 -Rocles,3214,379,21.664,1.482,1.342,701,6594 -Voutenay-sur-Cure,89485,215,10.237,1.018,0.922,762,6717 -Pila-Canale,2A232,286,18.768,1.379,1.249,1189,6091 -Sincey-lès-Rouvray,21608,103,8.761,0.942,0.853,783,6704 -Montcombroux-les-Mines,3181,320,23.674,1.549,1.402,757,6582 -Saint-Germain-des-Champs,89347,360,36.475,1.922,1.740,767,6702 -Allennes-les-Marais,59005,3462,5.542,0.749,0.678,697,7048 -Calzan,9072,32,4.035,0.639,0.579,598,6216 -Santosse,21583,53,7.965,0.898,0.813,826,6658 -Neufchelles,60448,372,6.457,0.809,0.732,706,6891 -Bassou,89029,872,4.095,0.644,0.583,739,6758 -Mont-Saint-Sulpice,89268,802,19.838,1.418,1.284,748,6764 -Vincelottes,89479,272,1.871,0.435,0.394,747,6735 -Boyelles,62172,357,4.126,0.647,0.586,687,7009 -Marizy-Saint-Mard,2467,49,4.619,0.684,0.619,717,6897 -Vieil-Moutier,62853,389,5.835,0.769,0.696,622,7065 -Artigat,9019,568,24.093,1.562,1.414,577,6226 -Lindry,89228,1392,15.177,1.240,1.123,731,6747 -Deux Rivières,89130,1259,31.920,1.798,1.628,749,6732 -Beine,89034,490,21.427,1.473,1.334,756,6743 -La Chapelle-Saint-Sauveur,71093,678,27.559,1.671,1.513,869,6642 -Varinfroy,60656,292,2.963,0.548,0.496,703,6889 -Hautevesnes,2375,172,7.289,0.859,0.778,718,6891 -Aubrometz,62047,153,2.728,0.526,0.476,640,7022 -Troësnes,2749,228,2.805,0.533,0.483,713,6899 -Saint-Gengoulph,2679,147,7.584,0.877,0.794,714,6889 -Nuncq-Hautecôe,62631,470,6.704,0.824,0.746,650,7022 -Trigance,83142,182,61.110,2.488,2.253,976,6293 -Quéant,62673,659,9.041,0.957,0.866,700,7011 -Chézy-en-Orxois,2185,411,16.497,1.293,1.171,708,6894 -Torcy-en-Valois,2744,78,3.600,0.604,0.547,719,6888 -Furchhausen,67149,415,2.847,0.537,0.486,1027,6856 -Mareuil-sur-Ourcq,60380,1616,10.290,1.021,0.924,708,6894 -Freneuse,76282,912,3.263,0.575,0.521,558,6913 -Lucy-le-Bocage,2443,190,7.687,0.883,0.799,722,6882 -Éply,54179,303,11.370,1.073,0.972,932,6876 -Canlers,62209,162,3.629,0.606,0.549,640,7043 -Villefargeau,89453,1099,14.058,1.193,1.080,734,6745 -Charentenay,89084,305,14.767,1.223,1.107,743,6726 -Simiane-Collongue,13107,5561,30.185,1.749,1.584,901,6258 -Sery,89394,98,4.336,0.663,0.600,751,6725 -Dampierre-en-Graçay,18085,254,9.543,0.983,0.890,621,6677 -Saint-Maxent,80710,383,6.343,0.802,0.726,610,6989 -Quissac,30210,3172,23.212,1.534,1.389,780,6317 -Loison-sur-Créquoise,62522,258,9.130,0.962,0.871,623,7042 -Hours,64266,265,5.774,0.765,0.693,443,6240 -Couin,62242,111,5.812,0.767,0.694,668,7005 -La Chapelle-d'Armentières,59143,8432,10.699,1.041,0.943,695,7062 -Seignelay,89382,1559,13.610,1.174,1.063,743,6753 -Fontenay-sous-Fouronnes,89177,74,12.364,1.119,1.013,744,6728 -Nampont,80580,252,19.526,1.407,1.274,612,7030 -Veuilly-la-Poterie,2792,152,7.471,0.870,0.788,717,6888 -Tourailles,41261,134,7.498,0.872,0.790,563,6732 -Rouvres-en-Multien,60554,460,8.143,0.908,0.822,703,6892 -Favreuil,62326,231,4.994,0.711,0.644,689,7005 -Saint-Louis-de-Montferrand,33434,2158,11.369,1.073,0.972,421,6437 -Boullarre,60092,224,7.481,0.871,0.789,700,6894 -Offin,62635,211,5.322,0.734,0.665,627,7038 -Quiéry-la-Motte,62680,734,8.955,0.953,0.863,700,7032 -Érize-la-Petite,55177,59,7.257,0.857,0.776,867,6870 -Camblain-Châtelain,62197,1777,9.925,1.003,0.908,660,7040 -Licy-Clignon,2428,75,4.125,0.646,0.585,720,6888 -Courchamps,2225,90,2.762,0.529,0.479,719,6890 -Bas-Lieu,59050,353,7.629,0.879,0.796,767,7004 -Longfossé,62524,1444,10.277,1.020,0.924,616,7061 -Echinghen,62281,393,5.887,0.772,0.699,607,7067 -Saint-Aubin,59529,367,10.159,1.015,0.919,764,7008 -Vincelles,89478,944,12.584,1.129,1.022,750,6733 -Vergigny,89439,1558,33.612,1.845,1.670,751,6758 -Campagne-lès-Wardrecques,62205,1223,4.665,0.688,0.623,654,7069 -Maisoncelle-Tuilerie,60377,302,7.761,0.887,0.803,645,6944 -Marsac-sur-Don,44091,1499,27.813,1.679,1.520,346,6734 -Charette-Varennes,71101,456,16.447,1.291,1.169,870,6646 -Quincy-le-Vicomte,21518,208,19.065,1.390,1.259,791,6726 -Leffrinckoucke,59340,4277,7.204,0.854,0.773,663,7108 -Le Crotoy,80228,2044,16.529,1.294,1.172,602,7021 -Saint-Georges-sur-Baulche,89346,3254,9.698,0.991,0.897,738,6746 -Bourecq,62162,616,4.039,0.640,0.579,659,7054 -Escolives-Sainte-Camille,89155,710,7.553,0.875,0.792,744,6735 -Migennes,89257,7162,16.631,1.298,1.175,742,6764 -Corbeil,51169,93,9.559,0.984,0.891,808,6831 -Grand-Laviers,80385,420,9.141,0.962,0.871,611,7005 -Saint-Martin-Choquel,62759,473,6.289,0.798,0.723,622,7062 -Irancy,89202,288,12.263,1.115,1.010,748,6736 -Polincove,62662,831,4.804,0.698,0.632,639,7086 -Thal-Drulingen,67488,183,5.330,0.735,0.665,1005,6876 -Hinges,62454,2478,8.366,0.921,0.834,674,7056 -Boursonne,60094,302,3.403,0.587,0.531,703,6901 -Estrée-Wamin,62316,169,5.186,0.725,0.656,657,7021 -Erquinghem-le-Sec,59201,590,1.749,0.421,0.381,695,7058 -Chitry,89108,354,15.069,1.236,1.119,752,6743 -Olivese,2A186,228,29.316,1.723,1.560,1209,6104 -Brimeux,62177,839,10.693,1.041,0.943,618,7036 -Thiézac,15236,606,41.507,2.051,1.857,669,6435 -Marizy-Sainte-Geneviève,2466,131,7.885,0.894,0.809,716,6899 -Bussiares,2137,149,7.682,0.882,0.799,717,6886 -Saint-Jean-de-la-Motte,72291,960,32.469,1.814,1.642,477,6740 -Vironchaux,80808,487,16.191,1.281,1.160,618,7024 -Rougefay,62722,84,3.800,0.621,0.562,640,7021 -Bazarnes,89030,429,19.390,1.402,1.269,745,6728 -Montigny-l'Allier,2512,276,10.364,1.025,0.928,706,6891 -Villeneuve-Saint-Salves,89463,256,7.103,0.848,0.768,750,6749 -Chevannes,89102,2186,24.213,1.566,1.418,734,6739 -Freybouse,57239,434,5.886,0.772,0.699,978,6884 -Priez,2622,50,5.071,0.717,0.649,718,6891 -Niergnies,59432,510,4.357,0.664,0.601,719,7006 -Marolles,60385,685,13.210,1.157,1.048,708,6894 -Dammard,2258,387,8.112,0.907,0.821,712,6895 -Charmoy,89085,1151,6.953,0.839,0.760,737,6758 -Neuilly-Saint-Front,2543,2104,17.999,1.350,1.222,720,6899 -Gélannes,10164,739,12.097,1.107,1.002,752,6820 -Ferreux-Quincey,10148,370,15.355,1.247,1.129,743,6821 -Athies,62042,993,4.333,0.663,0.600,688,7025 -Avant-lès-Marcilly,10020,509,27.784,1.678,1.519,740,6818 -Champs-sur-Yonne,89077,1558,4.444,0.671,0.608,744,6738 -Menneville,62566,715,5.323,0.734,0.665,620,7063 -Charmoy,10085,75,6.915,0.837,0.758,745,6810 -Pouy-sur-Vannes,10301,148,15.724,1.262,1.143,746,6797 -Ossey-les-Trois-Maisons,10275,590,16.328,1.286,1.164,758,6816 -Mézangers,53153,672,29.584,1.731,1.567,444,6791 -Merlimont,62571,3300,20.308,1.434,1.298,604,7040 -Prignac,17290,299,6.922,0.837,0.758,438,6530 -Soligny-les-Étangs,10370,239,15.965,1.272,1.152,736,6813 -Faux-Villecerf,10145,221,21.415,1.473,1.334,758,6804 -Thièvres,62814,133,1.254,0.356,0.322,661,7004 -Marcilly-le-Hayer,10223,720,34.479,1.869,1.692,747,6798 -Saint-Loup-de-Buffigny,10347,214,10.219,1.018,0.922,747,6819 -Fontaine-Mâcon,10153,667,15.996,1.273,1.153,740,6818 -Beaufort,59058,987,12.832,1.140,1.032,768,7017 -Bessy,10043,139,7.142,0.851,0.771,777,6829 -Saint-Lupien,10348,239,22.980,1.526,1.382,749,6808 -Prunay-Belleville,10308,229,25.777,1.616,1.463,758,6805 -Origny-le-Sec,10271,610,16.428,1.290,1.168,760,6820 -Saint-Martin-de-Bossenay,10351,366,16.453,1.291,1.169,749,6815 -Millam,59402,809,12.341,1.118,1.012,646,7087 -Doucier,39201,306,12.533,1.127,1.020,909,6619 -Villadin,10410,115,12.502,1.125,1.019,752,6804 -Beaumont,89031,632,6.478,0.810,0.733,739,6758 -Bourdenay,10054,124,18.582,1.372,1.242,743,6808 -Senlecques,62789,266,2.057,0.457,0.414,624,7062 -Wicres,59658,475,2.813,0.534,0.483,692,7053 -Jullianges,43108,439,18.560,1.371,1.241,758,6466 -Saint-Aubin,10334,587,17.848,1.345,1.218,742,6818 -Saint-Flavy,10339,277,17.335,1.325,1.200,760,6812 -Hautecloque,62416,219,6.813,0.831,0.752,652,7025 -Irles,80451,107,5.401,0.740,0.670,684,7001 -Marigny-le-Châtel,10224,1739,20.366,1.436,1.300,752,6811 -Monéteau,89263,3989,18.596,1.373,1.243,746,6753 -Nantillois,55375,63,7.651,0.880,0.797,854,6915 -Jussy,89212,394,7.424,0.867,0.785,743,6738 -Saint-Lumine-de-Clisson,44173,2109,18.286,1.361,1.232,366,6675 -Saint-Maurice-aux-Riches-Hommes,89359,418,33.176,1.833,1.660,736,6799 -La Fosse-Corduan,10157,214,3.771,0.618,0.560,748,6818 -Eppe-Sauvage,59198,275,16.723,1.302,1.179,784,7000 -Pars-lès-Romilly,10280,833,17.975,1.350,1.222,752,6819 -Pennesières,70405,189,9.131,0.962,0.871,933,6713 -Rouvray,89328,391,7.663,0.881,0.798,750,6757 -Mesnil-Saint-Loup,10237,605,11.379,1.074,0.972,757,6799 -Lugagnan,65291,139,0.769,0.279,0.253,452,6223 -Les Attaques,62043,1948,20.692,1.448,1.311,621,7089 -Couloisy,60167,528,3.818,0.622,0.563,703,6923 -Ferrière-la-Grande,59230,5311,10.024,1.008,0.913,772,7016 -Migé,89256,433,14.791,1.224,1.108,742,6729 -Bercenay-le-Hayer,10038,187,14.830,1.226,1.110,742,6802 -Avesnes-sur-Helpe,59036,4654,2.310,0.484,0.438,767,7004 -Bouy-sur-Orvin,10057,58,6.622,0.819,0.742,738,6814 -Villeneuve-lès-Béziers,34336,4255,17.320,1.325,1.200,726,6244 -Perrigny,89295,1279,12.824,1.140,1.032,741,6746 -Laizé,71250,1090,10.605,1.037,0.939,837,6588 -Rigny-la-Nonneuse,10318,170,18.293,1.361,1.232,751,6811 -Saint-Étienne-de-Maurs,15184,784,17.413,1.328,1.202,639,6404 -Beugnies,59078,630,8.934,0.951,0.861,770,7009 -Solre-le-Château,59572,1832,13.750,1.180,1.068,777,7011 -Trancault,10383,184,26.966,1.653,1.497,735,6808 -Beauval,80071,2096,22.847,1.521,1.377,655,7001 -La Houssoye,60319,614,6.600,0.818,0.741,625,6917 -Villeneuve-Renneville-Chevigny,51627,314,17.261,1.322,1.197,779,6866 -Mailly-Champagne,51338,672,10.165,1.015,0.919,781,6893 -Nédonchel,62601,247,3.820,0.622,0.563,654,7049 -Les Grandes-Loges,51278,272,12.901,1.143,1.035,794,6884 -Oneux,80609,379,12.466,1.124,1.018,626,7008 -Magenta,51663,1717,0.997,0.318,0.288,770,6885 -Matougues,51357,612,13.701,1.178,1.067,792,6878 -Sigoyer,5168,664,25.122,1.595,1.444,940,6379 -Villers-Allerand,51629,876,12.357,1.119,1.013,775,6894 -Trécon,51578,79,12.505,1.126,1.019,779,6866 -Saint-Martin-sur-le-Pré,51504,794,12.014,1.103,0.999,801,6880 -Saint-Céols,18202,15,3.361,0.584,0.529,674,6679 -Chavannes-sur-l'Étang,68065,690,6.119,0.787,0.713,1004,6734 -Le Mesnil-sur-Oger,51367,1116,7.976,0.899,0.814,777,6871 -Géovreisset,1171,891,3.280,0.576,0.522,900,6574 -Portets,33334,2686,15.460,1.252,1.134,430,6407 -Sainte-Marie-la-Robert,61420,84,5.550,0.750,0.679,469,6843 -Miannay,80546,560,8.847,0.947,0.857,607,6999 -Notre-Dame-de-Livaye,14473,121,2.733,0.526,0.476,483,6896 -Beaumont-sur-Vesle,51044,800,5.746,0.763,0.691,786,6900 -Servières-le-Château,19258,616,25.537,1.609,1.457,624,6446 -Ergny,62302,237,9.254,0.968,0.876,627,7052 -Val de Livre,51564,646,22.320,1.504,1.362,782,6893 -Fréthun,62360,1288,7.978,0.899,0.814,614,7091 -Marieux,80514,118,4.084,0.643,0.582,659,6999 -Valravillon,89196,1751,37.249,1.943,1.759,730,6758 -Gosné,35121,1994,18.420,1.366,1.237,368,6806 -Pocancy,51435,168,27.050,1.656,1.499,781,6876 -Sainte-Colombe,69189,1932,1.602,0.403,0.365,846,6494 -Tours-sur-Marne,51576,1379,23.227,1.534,1.389,785,6882 -Norrent-Fontes,62620,1410,5.669,0.758,0.686,660,7056 -Germinon,51268,174,19.564,1.408,1.275,783,6864 -Les Istres-et-Bury,51302,98,5.049,0.715,0.647,781,6876 -Nuisement-sur-Coole,51409,352,15.237,1.243,1.125,798,6864 -Ledringhem,59338,664,7.032,0.844,0.764,661,7084 -Avize,51029,1763,7.631,0.879,0.796,775,6876 -Biencourt,80104,133,2.183,0.470,0.426,607,6988 -Vaudemange,51599,301,13.141,1.154,1.045,792,6886 -Yaucourt-Bussus,80830,247,7.148,0.851,0.771,626,7000 -Verzy,51614,992,13.328,1.162,1.052,785,6893 -Saint-Christophe-du-Jambet,72273,228,11.256,1.068,0.967,482,6796 -Quelmes,62674,575,9.908,1.002,0.907,637,7073 -Coolus,51168,220,13.176,1.155,1.046,793,6868 -Bouconvillers,60090,385,4.794,0.697,0.631,619,6896 -Mourmelon-le-Petit,51389,805,12.272,1.115,1.010,793,6893 -Bléquin,62140,516,8.668,0.937,0.848,625,7063 -Bécourt,62102,270,6.077,0.785,0.711,621,7060 -Strazeele,59582,951,4.702,0.690,0.625,674,7070 -Le Drennec,29047,1818,9.591,0.986,0.893,157,6853 -Massugas,33277,226,14.407,1.208,1.094,473,6413 -Sotta,2A288,1374,66.528,2.596,2.350,1218,6064 -Audruicq,62057,5396,14.449,1.210,1.096,634,7090 -Périgny,3205,447,27.221,1.661,1.504,742,6568 -Auchy-lès-Hesdin,62050,1576,9.759,0.994,0.900,635,7038 -Saint-Acheul,80697,26,3.050,0.556,0.503,639,7011 -Ozillac,17270,630,15.880,1.268,1.148,436,6483 -Nonvilliers-Grandhoux,28282,427,22.020,1.494,1.353,563,6802 -Ormoy,89282,689,13.452,1.167,1.057,742,6764 -Saint-Didier-sous-Aubenas,7229,978,2.759,0.529,0.479,814,6392 -Bellecombe-Tarendol,26046,80,13.628,1.175,1.064,889,6367 -Berles-au-Bois,62112,515,8.892,0.949,0.859,675,7013 -Saint-Quentin-sur-Sauxillanges,63389,112,8.247,0.914,0.828,731,6495 -Beaurepaire,85017,2368,24.391,1.572,1.423,384,6653 -Remomeix,88386,483,4.644,0.686,0.621,996,6804 -Athis,51018,886,16.878,1.308,1.184,782,6876 -Thibie,51566,289,10.488,1.031,0.933,790,6868 -Juvigny,51312,922,21.597,1.479,1.339,794,6884 -Chaintrix-Bierges,51107,326,10.296,1.021,0.924,780,6864 -Scey-sur-Saône-et-Saint-Albin,70482,1550,28.458,1.698,1.537,924,6738 -Ménil-Hubert-en-Exmes,61268,115,10.407,1.027,0.930,496,6858 -Estaing,12098,475,16.965,1.311,1.187,672,6386 -Cherville,51150,80,3.816,0.622,0.563,785,6881 -Villers-le-Château,51634,250,20.796,1.452,1.315,790,6868 -Vitz-sur-Authie,80810,127,4.713,0.691,0.626,633,7018 -Pontigny,89307,754,12.029,1.104,1.000,753,6753 -Béthune,62119,25186,9.470,0.980,0.887,674,7046 -Wierre-au-Bois,62888,225,3.874,0.627,0.568,614,7062 -Fouronnes,89182,165,17.954,1.349,1.221,744,6722 -Humières,62468,235,6.873,0.834,0.755,642,7032 -Igornay,71237,547,21.760,1.485,1.345,802,6664 -Noyelles-sous-Lens,62628,6656,3.711,0.613,0.555,689,7037 -Bonnard,89050,891,4.074,0.642,0.581,742,6759 -Creveney,70188,59,2.510,0.504,0.456,948,6735 -Mancy,51342,254,3.564,0.601,0.544,770,6876 -Saint-Pierre,51509,295,10.233,1.018,0.922,790,6871 -Chemilly-sur-Yonne,89096,912,5.773,0.765,0.693,743,6753 -Gonnetot,76306,206,2.338,0.487,0.441,549,6964 -Sainte-Pallaye,89363,110,4.093,0.644,0.583,753,6727 -Le Marais-la-Chapelle,14402,108,2.459,0.499,0.452,480,6868 -Venouse,89437,305,8.043,0.903,0.818,751,6758 -Bésingrand,64117,132,2.346,0.488,0.442,410,6260 -Rémy,62703,383,3.615,0.605,0.548,697,7019 -Villiers-les-Hauts,89470,127,19.157,1.393,1.261,785,6738 -Carpiquet,14137,2468,5.884,0.772,0.699,447,6903 -Ludes,51333,635,12.288,1.116,1.010,778,6897 -Saint-Laurent-des-Arbres,30278,2997,16.373,1.288,1.166,832,6328 -Trépail,51580,431,8.366,0.921,0.834,784,6892 -Soulages,15229,80,15.140,1.239,1.122,723,6444 -Condé-sur-Marne,51161,823,12.341,1.118,1.012,785,6886 -Ceignes,1067,253,10.169,1.015,0.919,892,6560 -Lignorelles,89226,190,11.455,1.077,0.975,753,6750 -Le Plagnal,7175,74,15.641,1.259,1.140,774,6398 -Humbercourt,80445,269,8.310,0.918,0.831,660,7015 -Culoz,1138,3053,19.077,1.390,1.259,914,6535 -Mutigny,51392,191,3.786,0.619,0.560,773,6888 -Bréville-sur-Mer,50081,781,6.840,0.832,0.753,368,6873 -Fagnières,51242,4830,19.543,1.407,1.274,796,6876 -Bernâtre,80085,30,4.600,0.683,0.618,637,7010 -Ville-en-Selve,51623,274,8.911,0.950,0.860,778,6890 -Villers-Pater,70565,50,4.728,0.692,0.627,938,6711 -Pernes,62652,1639,4.546,0.679,0.615,659,7043 -Bucy-Saint-Liphard,45059,196,17.842,1.345,1.218,608,6758 -Quaëdypre,59478,1078,18.798,1.380,1.249,663,7096 -Héry,89201,1814,21.382,1.472,1.333,748,6752 -Saint-Ciers-sur-Gironde,33389,3025,51.592,2.286,2.070,419,6472 -Kalhausen,57355,853,13.505,1.170,1.059,1001,6890 -Saint-Barthélemy-d'Agenais,47232,510,15.434,1.251,1.133,493,6385 -Aulnay-sur-Marne,51023,254,9.080,0.959,0.868,788,6880 -Cheniers,51146,109,15.398,1.249,1.131,790,6867 -Corneville-la-Fouquetière,27173,122,4.020,0.638,0.578,533,6888 -Vert,78647,828,3.723,0.614,0.556,603,6871 -Bodilis,29010,1603,20.128,1.428,1.293,175,6845 -Sermiers,51532,553,18.272,1.361,1.232,773,6892 -Le Ponchel,62665,203,4.652,0.687,0.622,634,7017 -Agenville,80005,95,3.337,0.581,0.526,637,7010 -La Chapelle-sur-Aveyron,45077,649,19.053,1.389,1.258,690,6755 -Champtonnay,70124,99,5.237,0.728,0.659,900,6699 -Blancs-Coteaux,51612,3330,65.943,2.585,2.340,777,6864 -Les Éparres,38156,992,7.832,0.891,0.807,877,6497 -Jorxey,88254,85,5.422,0.741,0.671,938,6804 -Beaufort-en-Anjou,49021,7166,42.226,2.068,1.872,457,6707 -Branches,89053,466,11.059,1.059,0.959,738,6749 -Hauterive,89200,390,9.573,0.985,0.892,743,6758 -Aubin-Saint-Vaast,62046,768,6.699,0.824,0.746,626,7031 -Mondigny,8295,164,5.846,0.770,0.697,817,6957 -Quenne,89319,467,8.773,0.943,0.854,747,6743 -Val-de-Mercy,89426,392,13.452,1.167,1.057,746,6729 -Coulomby,62245,735,10.247,1.019,0.923,628,7067 -Cheny,89099,2484,9.714,0.992,0.898,742,6759 -Charbuy,89083,1871,23.541,1.544,1.398,736,6750 -Nauroy,2539,712,6.288,0.798,0.723,720,6983 -Ambonnay,51007,976,11.751,1.091,0.988,788,6889 -Germaine,51266,512,14.788,1.224,1.108,773,6893 -Saint-Mard-lès-Rouffy,51499,164,6.911,0.837,0.758,780,6874 -Bauvin,59052,5230,3.870,0.626,0.567,693,7048 -Grauves,51281,626,7.834,0.891,0.807,770,6876 -Vacquerie-le-Boucq,62833,89,3.304,0.579,0.524,642,7019 -Ambricourt,62026,115,3.407,0.588,0.532,642,7040 -Anvin,62036,766,7.896,0.894,0.809,648,7041 -Rilly-la-Montagne,51461,1000,8.893,0.949,0.859,777,6899 -Aÿ-Champagne,51030,5741,32.125,1.804,1.633,772,6888 -Cramant,51196,901,5.360,0.737,0.667,775,6878 -Riencourt-lès-Cagnicourt,62709,267,4.774,0.695,0.629,698,7012 -Verzenay,51613,1062,10.571,1.035,0.937,783,6892 -Prégilbert,89314,186,6.706,0.824,0.746,751,6725 -Gaye,51265,591,21.276,1.468,1.329,762,6843 -Glénay,79134,568,21.329,1.470,1.331,457,6646 -Venoy,89438,1798,23.120,1.531,1.386,748,6748 -Avenay-Val-d'Or,51028,1019,12.433,1.122,1.016,776,6885 -Saint-Loup-Nantouard,70466,115,7.770,0.887,0.803,907,6708 -Bourg-l'Évêque,49038,251,5.347,0.736,0.666,400,6745 -Appoigny,89013,3174,22.386,1.506,1.364,737,6755 -Mazingarbe,62563,8011,10.302,1.022,0.925,683,7041 -Rémérangles,60530,216,8.648,0.936,0.847,649,6930 -Avensan,33022,2904,52.884,2.315,2.096,404,6437 -Bouin-Plumoison,62661,493,6.170,0.791,0.716,627,7030 -Fontaine-sur-Ay,51256,341,7.709,0.884,0.800,777,6891 -Veslud,2791,234,4.122,0.646,0.585,751,6939 -Villers-Marmery,51636,536,10.685,1.040,0.942,787,6895 -Houplin-Ancoisne,59316,3439,6.483,0.810,0.733,698,7053 -Cuis,51200,395,8.291,0.917,0.830,771,6877 -Pouançay,86196,235,5.467,0.744,0.674,465,6670 -Courson-les-Carrières,89125,935,34.622,1.873,1.696,741,6721 -Vraux,51656,460,12.782,1.138,1.030,792,6885 -Mont-Saint-Jean,2522,71,3.997,0.636,0.576,787,6968 -Bleigny-le-Carreau,89045,301,10.376,1.025,0.928,749,6748 -Warlincourt-lès-Pas,62877,186,5.153,0.723,0.655,666,7011 -Agnez-lès-Duisans,62011,649,7.412,0.867,0.785,676,7025 -Nielles-lès-Ardres,62614,546,4.514,0.676,0.612,630,7086 -Coulangeron,89117,210,8.566,0.932,0.844,733,6732 -Linthelles,51323,108,11.085,1.060,0.960,762,6845 -Rimboval,62710,141,7.135,0.850,0.770,626,7046 -Bompas,9058,198,2.788,0.531,0.481,586,6197 -Nouvelle-Église,62623,650,9.172,0.964,0.873,631,7096 -Airon-Saint-Vaast,62016,185,5.906,0.774,0.701,607,7037 -Vouarces,51652,65,5.996,0.779,0.705,765,6831 -Sept-Saulx,51530,605,18.219,1.359,1.230,795,6896 -Surgy,58282,336,16.290,1.285,1.163,737,6718 -Noyelle-Vion,62630,291,5.377,0.738,0.668,666,7021 -Signes,83127,2804,133.190,3.674,3.326,937,6251 -Gy-l'Évêque,89199,453,15.141,1.239,1.122,742,6737 -Duranville,27208,154,4.792,0.697,0.631,519,6896 -Merry-Sec,89252,174,14.213,1.200,1.086,734,6726 -Vaudringhem,62837,545,7.662,0.881,0.798,629,7060 -Bessy-sur-Cure,89040,191,10.656,1.039,0.941,755,6727 -Vaulx,62838,89,4.846,0.701,0.635,637,7020 -Aigny,51003,274,11.233,1.067,0.966,791,6886 -Chassy,18056,245,17.870,1.346,1.219,691,6659 -Écury-sur-Coole,51227,498,18.253,1.360,1.231,794,6867 -Mailly-la-Ville,89237,513,23.730,1.551,1.404,753,6717 -La Veuve,51617,620,24.636,1.580,1.431,800,6884 -Lattre-Saint-Quentin,62490,265,7.706,0.884,0.800,671,7020 -Arces-Dilo,89014,616,27.156,1.659,1.502,743,6777 -Vélye,51603,187,10.765,1.044,0.945,784,6868 -Pihen-lès-Guînes,62657,487,9.319,0.972,0.880,613,7086 -Vouzy,51655,293,9.424,0.977,0.885,784,6868 -Hébuterne,62422,524,10.989,1.055,0.955,676,7004 -Saint-Amand,62741,124,5.474,0.745,0.675,668,7010 -Champigneul-Champagne,51117,312,29.513,1.729,1.565,790,6874 -Baconnes,51031,270,21.232,1.467,1.328,801,6898 -Montigny-la-Resle,89265,590,16.108,1.278,1.157,750,6754 -Bouquehault,62161,755,8.111,0.907,0.821,621,7081 -Belleydoux,1035,317,17.828,1.344,1.217,918,6577 -Bouy,51078,563,22.518,1.510,1.367,799,6885 -Batilly-en-Gâtinais,45022,454,10.340,1.024,0.927,651,6777 -Fleury-la-Vallée,89167,1102,15.211,1.241,1.124,736,6750 -Villiers-sur-Yonne,58312,276,15.959,1.272,1.152,742,6700 -Pas-en-Artois,62649,776,10.867,1.049,0.950,665,7005 -Bullecourt,62185,239,6.376,0.804,0.728,693,7012 -Gennes-Ivergny,62370,128,10.933,1.052,0.952,633,7018 -Embry,62293,242,11.703,1.089,0.986,624,7044 -Saint-Montan,7279,1909,33.579,1.845,1.670,824,6370 -Bouzy,51079,948,6.250,0.796,0.721,784,6890 -Wintershouse,67540,907,3.672,0.610,0.552,1046,6867 -Clamecy,58079,3823,30.905,1.770,1.603,743,6709 -Anzin-Saint-Aubin,62037,2755,5.127,0.721,0.653,682,7023 -Nordausques,62618,1235,5.961,0.777,0.704,637,7080 -Saint-Imoges,51488,318,17.255,1.322,1.197,773,6888 -Ouagne,58200,155,11.814,1.094,0.991,736,6701 -Vassogne,2764,86,2.939,0.546,0.494,754,6924 -La Maison-Dieu,58154,123,13.850,1.185,1.073,751,6705 -Girac,46123,380,4.401,0.668,0.605,609,6427 -Wismes,62897,483,12.121,1.108,1.003,634,7061 -Vézelay,89446,433,22.034,1.494,1.353,752,6709 -Andryes,89007,403,29.731,1.736,1.572,731,6712 -Romelfing,57592,357,10.827,1.047,0.948,991,6867 -Saint-Martin-de-Valgalgues,30284,4365,13.401,1.165,1.055,784,6341 -Laval-du-Tarn,48085,99,36.964,1.935,1.752,724,6361 -Monthelon,51378,356,2.658,0.519,0.470,769,6879 -Tincques,62820,832,10.785,1.045,0.946,664,7027 -Landujan,35143,958,14.528,1.213,1.098,327,6803 -Chouilly,51153,1013,16.090,1.277,1.156,771,6881 -Pierry,51431,1201,5.125,0.721,0.653,768,6881 -Gravelines,59273,11461,20.681,1.448,1.311,637,7099 -Crain,89129,394,9.996,1.006,0.911,741,6714 -Crémarest,62255,782,11.824,1.095,0.991,614,7070 -Loos-en-Gohelle,62528,6647,12.709,1.135,1.028,683,7040 -Recy,51453,1036,14.356,1.206,1.092,796,6876 -Hamblain-les-Prés,62405,504,4.901,0.705,0.638,696,7021 -Bergères-lès-Vertus,51049,637,18.362,1.364,1.235,771,6866 -Boutteville,50070,72,1.841,0.432,0.391,390,6930 -Coulonvillers,80215,236,9.608,0.987,0.894,632,7010 -Allemanche-Launay-et-Soyer,51004,107,15.265,1.244,1.126,757,6836 -Hermin,62441,212,4.145,0.648,0.587,668,7034 -Bethon,51056,282,15.387,1.249,1.131,742,6836 -Neuvireuil,62612,547,4.357,0.664,0.601,695,7028 -Ottmarsheim,68253,1820,25.648,1.612,1.460,1034,6754 -Lau-Balagnas,65267,521,2.962,0.548,0.496,447,6215 -Dornecy,58103,489,17.431,1.329,1.203,746,6707 -Nogent-sur-Seine,10268,5973,19.913,1.420,1.286,735,6822 -Thaas,51565,97,10.433,1.028,0.931,766,6837 -Baudement,51041,112,8.548,0.931,0.843,755,6833 -Châtillon-sur-Morin,51137,213,18.084,1.354,1.226,741,6845 -Maizières-la-Grande-Paroisse,10220,1503,20.399,1.438,1.302,758,6826 -Escardes,51233,86,14.447,1.210,1.096,736,6844 -Fontaine-Denis-Nuisy,51254,234,13.224,1.158,1.048,747,6841 -Petit-Auverné,44121,429,22.768,1.519,1.375,380,6729 -Saint-Prix,7290,280,15.242,1.243,1.125,821,6427 -Saron-sur-Aube,51524,303,16.491,1.293,1.171,752,6831 -Fresnes-lès-Montauban,62355,568,4.901,0.705,0.638,694,7027 -Dainville,62263,5573,11.245,1.067,0.966,678,7020 -Noyelles-Godault,62624,5922,5.461,0.744,0.674,699,7034 -Domvast,80250,349,12.955,1.146,1.038,624,7014 -Brion,36026,556,44.347,2.120,1.919,606,6655 -Crillon-le-Brave,84041,478,7.657,0.881,0.798,871,6340 -La Motte-du-Caire,4134,558,27.347,1.665,1.508,942,6361 -Linthes,51324,118,9.034,0.957,0.866,764,6851 -Neuvy,51402,244,17.010,1.313,1.189,734,6848 -Les Essarts-le-Vicomte,51236,142,11.308,1.070,0.969,742,6839 -Acq,62007,752,4.870,0.702,0.636,675,7026 -Puisieux,62672,672,11.660,1.087,0.984,679,7003 -Villenauxe-la-Grande,10420,2724,18.223,1.359,1.230,743,6834 -Arpheuilles,18013,294,48.030,2.206,1.997,665,6627 -Divion,62270,6905,11.058,1.058,0.958,665,7040 -Quilly,44139,1379,17.792,1.343,1.216,325,6720 -Mont-Bernanchon,62584,1363,11.472,1.078,0.976,674,7056 -Campigneulles-les-Petites,62207,551,6.215,0.794,0.719,612,7041 -Combas,30088,628,16.059,1.276,1.155,791,6304 -Guerstling,57273,417,4.453,0.672,0.608,959,6918 -Pousseaux,58217,196,11.136,1.062,0.962,743,6711 -Méry-sur-Seine,10233,1520,12.455,1.123,1.017,768,6826 -Fresnicourt-le-Dolmen,62356,760,8.045,0.903,0.818,674,7037 -Rix,58222,157,3.992,0.636,0.576,737,6704 -Succieu,38498,733,8.446,0.925,0.838,885,6494 -Bouhy,58036,454,36.708,1.929,1.747,715,6714 -Lucy-sur-Yonne,89234,142,8.159,0.909,0.823,745,6714 -Bouzincourt,80129,555,8.178,0.910,0.824,673,6993 -Pourcy,51445,190,8.365,0.921,0.834,767,6897 -Barbuise,10031,449,18.655,1.375,1.245,741,6830 -Chevroches,58073,125,3.272,0.576,0.522,741,6704 -Festigny,89164,86,5.538,0.749,0.678,739,6719 -Granges-sur-Aube,51279,184,8.091,0.905,0.819,762,6834 -Vinon-sur-Verdon,83150,4224,36.086,1.912,1.731,924,6299 -Barbonne-Fayel,51036,500,24.416,1.573,1.424,747,6841 -Granace,2A128,88,4.033,0.639,0.579,1202,6078 -Oisy,58198,307,17.388,1.327,1.201,734,6711 -Saint-Privat,19237,1081,32.256,1.808,1.637,629,6447 -Coulanges-sur-Yonne,89119,571,10.594,1.036,0.938,741,6716 -Châtres,10089,701,15.883,1.269,1.149,761,6824 -Drocourt,62277,2936,3.433,0.590,0.534,695,7031 -La Noue,51407,402,13.348,1.163,1.053,744,6851 -Coursegoules,6050,528,41.218,2.044,1.851,1027,6303 -Chantemerle,51124,45,8.451,0.925,0.838,749,6834 -Amanty,55005,42,11.129,1.062,0.962,889,6827 -Breugnon,58038,174,13.502,1.170,1.059,732,6702 -La Chapelle-Lasson,51127,85,15.037,1.234,1.117,758,6837 -Lichères-sur-Yonne,89225,55,14.325,1.205,1.091,743,6711 -Châtel-Censoir,89091,643,25.096,1.595,1.444,745,6714 -Brosses,89057,305,20.101,1.427,1.292,752,6718 -Montpothier,10254,335,7.875,0.893,0.809,739,6829 -La Villeneuve-au-Châtelot,10421,145,6.325,0.801,0.725,745,6830 -Villeneuve-Saint-Vistre-et-Villevotte,51628,124,9.605,0.987,0.894,758,6839 -Rubrouck,59516,944,14.991,1.232,1.115,653,7083 -Étrelles-sur-Aube,10144,156,10.547,1.034,0.936,765,6831 -L'Étrat,42092,2573,8.685,0.938,0.849,806,6488 -Audresselles,62056,663,5.763,0.764,0.692,604,7083 -Saint-Denis-sur-Coise,42216,658,10.740,1.043,0.944,814,6501 -Nestier,65327,159,4.965,0.709,0.642,495,6220 -Anglure,51009,869,8.068,0.904,0.818,761,6834 -La Forestière,51258,222,22.678,1.516,1.373,742,6837 -Rémering,57570,436,4.939,0.707,0.640,965,6912 -Chambrecy,51111,146,6.193,0.792,0.717,762,6900 -Bassurels,48020,61,46.786,2.177,1.971,746,6337 -Sézanne,51535,4912,23.107,1.530,1.385,750,6846 -Le Meix-Saint-Epoing,51360,272,11.364,1.073,0.972,749,6842 -Sangatte,62774,4789,14.327,1.205,1.091,618,7097 -Saint-Pierre-sur-Orthe,53249,461,31.779,1.794,1.624,461,6801 -Durnes,25208,177,8.559,0.931,0.843,944,6670 -Saint-Vérain,58270,334,24.962,1.590,1.440,699,6709 -Thiétreville,76689,376,5.375,0.738,0.668,520,6959 -Pleurs,51432,870,16.770,1.304,1.181,764,6847 -Bagneux,51032,457,13.862,1.185,1.073,763,6831 -Alligny-Cosne,58002,879,34.738,1.876,1.699,709,6703 -Hallennes-lez-Haubourdin,59278,4249,4.349,0.664,0.601,697,7058 -Saint-Cyr-sur-Loire,37214,15763,13.489,1.169,1.058,523,6702 -Ledinghem,62495,335,8.719,0.940,0.851,627,7060 -Marsangis,51353,48,6.738,0.826,0.748,764,6834 -Billy-sur-Oisy,58032,374,26.729,1.646,1.490,731,6712 -Heubécourt-Haricourt,27331,462,11.891,1.098,0.994,593,6893 -Brissac,34042,617,43.946,2.110,1.910,754,6311 -Saint-Pierre-d'Entremont,38446,564,32.537,1.816,1.644,926,6481 -Autheux,80042,124,8.272,0.915,0.828,643,7003 -Annezin,62035,5892,6.047,0.783,0.709,675,7050 -Nesles,62603,954,5.089,0.718,0.650,605,7057 -Potangis,51443,127,8.884,0.949,0.859,745,6831 -Armes,58011,291,8.593,0.933,0.845,743,6709 -Brèves,58039,255,16.609,1.297,1.174,747,6706 -Périgny-la-Rose,10284,136,6.985,0.841,0.761,745,6831 -Les Hays,39266,324,6.886,0.835,0.756,883,6649 -Rochemaure,7191,2268,25.015,1.592,1.441,838,6389 -Marnay-sur-Seine,10225,224,10.000,1.007,0.912,742,6826 -Gerbaix,73122,386,6.899,0.836,0.757,915,6506 -Montmiral,26207,660,26.627,1.643,1.488,870,6457 -Saint-Oulph,10356,281,10.967,1.054,0.954,766,6827 -Berthelange,25055,320,4.088,0.644,0.583,911,6680 -Charly,18054,251,26.079,1.626,1.472,686,6642 -Cauchy-à-la-Tour,62217,2860,3.138,0.564,0.511,661,7044 -Saint-Loup,58251,478,17.382,1.327,1.201,699,6709 -Saint-Oradoux-près-Crocq,23225,99,13.377,1.164,1.054,652,6530 -Ciez,58077,372,28.317,1.694,1.534,715,6703 -Marigny,51351,107,11.633,1.086,0.983,760,6840 -Berles-Monchel,62113,490,8.489,0.927,0.839,668,7027 -Saint-Sulpice-sur-Risle,61456,1677,28.645,1.704,1.543,524,6857 -Sainte-Marie-Kerque,62756,1640,18.519,1.370,1.240,640,7093 -Quesnoy-le-Montant,80654,574,7.068,0.846,0.766,605,7003 -Étais-la-Sauvin,89158,634,44.809,2.131,1.929,726,6708 -Courcelles,58090,214,9.658,0.989,0.895,728,6700 -Esternay,51237,1909,31.740,1.793,1.623,738,6846 -Douchy-lès-Ayette,62272,304,5.542,0.749,0.678,677,7008 -Cerniébaud,39085,87,10.446,1.029,0.932,940,6630 -La Celle-sous-Chantemerle,51103,145,12.049,1.105,1.000,749,6834 -Violaines,62863,3611,10.031,1.008,0.913,683,7046 -Esclavolles-Lurey,51234,595,9.489,0.981,0.888,748,6826 -Courvières,25176,315,10.951,1.053,0.953,937,6643 -Bonningues-lès-Calais,62156,574,8.567,0.932,0.844,615,7089 -Sallaumines,62771,9799,3.837,0.624,0.565,689,7037 -Crèvecœur-le-Petit,60179,141,3.327,0.581,0.526,664,6943 -Besnans,70065,79,2.924,0.544,0.493,946,6710 -Douchy,2270,160,5.078,0.717,0.649,709,6965 -Pouligny-Saint-Martin,36164,224,15.901,1.269,1.149,627,6601 -Estrées-lès-Crécy,80290,390,11.202,1.065,0.964,626,7018 -Piffonds,89298,645,24.615,1.579,1.430,709,6770 -Cambligneul,62198,339,4.736,0.693,0.627,673,7032 -Tollent,62822,91,4.276,0.658,0.596,629,7022 -Baulon,35016,2140,25.229,1.599,1.448,335,6775 -La Chapelle-Agnon,63086,357,26.004,1.623,1.469,752,6505 -Menestreau,58162,114,19.447,1.404,1.271,722,6699 -Dampierre-sous-Bouhy,58094,458,27.186,1.660,1.503,709,6715 -Rochefort-sur-la-Côe,52428,61,5.160,0.723,0.655,865,6795 -Lavans-Vuillafans,25331,233,10.052,1.009,0.914,949,6671 -La Chapelle-Saint-André,58058,329,27.320,1.664,1.507,722,6699 -Courcelles-sur-Blaise,52149,101,5.726,0.762,0.690,846,6814 -Minzier,74184,1006,8.777,0.943,0.854,933,6557 -Asnières-sous-Bois,89020,132,18.136,1.356,1.228,748,6706 -Terville,57666,6929,3.832,0.623,0.564,928,6919 -Sainpuits,89331,315,22.971,1.526,1.382,718,6710 -Bussus-Bussuel,80155,299,8.249,0.914,0.828,630,7000 -Fransu,80348,171,5.620,0.755,0.684,636,7001 -Saint-Léonard,62755,3510,3.533,0.598,0.541,601,7067 -Château-Ville-Vieille,5038,344,67.162,2.609,2.362,996,6420 -Clesles,51155,628,13.346,1.163,1.053,762,6824 -Lafage-sur-Sombre,19097,120,18.839,1.382,1.251,630,6465 -Chaignes,27136,276,6.420,0.807,0.731,585,6882 -Dommartin-Dampierre,51211,72,8.317,0.918,0.831,832,6886 -Conflans-sur-Seine,51162,652,6.168,0.791,0.716,750,6829 -Lagrange,90060,128,0.917,0.305,0.276,998,6740 -Saint-Quentin-le-Verger,51511,122,10.651,1.039,0.941,753,6837 -Bierville,76094,311,2.137,0.465,0.421,575,6938 -Vaudrivillers,25590,90,3.743,0.616,0.558,958,6695 -Lantenay,1206,272,6.504,0.812,0.735,896,6555 -Pont-sur-Seine,10298,1161,16.081,1.276,1.155,745,6821 -Crancey,10114,730,8.874,0.948,0.858,745,6823 -Argers,51015,115,6.813,0.831,0.752,837,6887 -Marey-sur-Tille,21385,323,30.243,1.751,1.585,854,6724 -Trucy-l'Orgueilleux,58299,221,13.609,1.174,1.063,730,6707 -Perroy,58209,167,21.714,1.483,1.343,709,6702 -Molosmes,89262,175,24.631,1.580,1.431,775,6761 -Chaserey,10087,54,6.932,0.838,0.759,782,6761 -Chéu,89101,552,7.649,0.880,0.797,757,6762 -Saint-Marcel,1371,1303,11.679,1.088,0.985,856,6539 -Eecke,59189,1221,10.440,1.028,0.931,673,7075 -Chablis,89068,2281,38.658,1.979,1.792,763,6750 -Les Loges-Margueron,10202,197,31.266,1.780,1.612,778,6777 -Dampierre-Saint-Nicolas,76210,489,3.945,0.632,0.572,570,6973 -Choranche,38108,121,10.688,1.041,0.943,893,6444 -Écoust-Saint-Mein,62285,492,8.514,0.929,0.841,692,7007 -Poilly-sur-Serein,89303,283,21.272,1.468,1.329,769,6744 -Tonnerre,89418,4705,58.634,2.437,2.206,775,6754 -Villecomte,21692,254,16.396,1.289,1.167,854,6712 -Barry,65067,127,2.624,0.516,0.467,457,6230 -Longvilliers,62527,250,10.987,1.055,0.955,611,7047 -Mœurs-Verdey,51369,319,13.290,1.160,1.050,752,6850 -Aubertin,64072,658,17.287,1.323,1.198,416,6247 -Guisy,62398,268,1.169,0.344,0.311,630,7032 -Méré,89250,193,11.818,1.094,0.991,760,6755 -Flogny-la-Chapelle,89169,1032,23.808,1.553,1.406,766,6767 -Marcilly-sur-Seine,51343,643,9.998,1.006,0.911,754,6827 -Éclimeux,62282,172,6.095,0.786,0.712,644,7034 -Plessé,44128,5241,105.211,3.265,2.956,331,6734 -Bailleul,59043,14467,43.564,2.101,1.902,677,7067 -Haegen,67179,691,20.659,1.447,1.310,1015,6857 -Civray,18066,950,41.602,2.053,1.859,641,6652 -Le Villars,71576,287,5.638,0.756,0.684,848,6603 -Saint-Bernard,1339,1434,3.209,0.570,0.516,834,6539 -Delettes,62265,1174,14.744,1.222,1.106,645,7061 -Saint-Augustin,77400,1744,10.368,1.025,0.928,704,6855 -Mauperthuis,77281,487,1.971,0.447,0.405,703,6854 -Fouquières-lès-Béthune,62350,1074,2.416,0.495,0.448,673,7047 -Anglards-de-Saint-Flour,15005,347,12.138,1.109,1.004,711,6431 -Andilly,74009,870,6.075,0.785,0.711,939,6557 -Lens,62498,30689,11.668,1.087,0.984,689,7037 -Cours,79104,553,14.881,1.228,1.112,436,6602 -Le Vernet-Sainte-Marguerite,63449,295,25.069,1.594,1.443,696,6499 -Turgy,10388,45,10.025,1.008,0.913,779,6769 -Chemilly-sur-Serein,89095,153,13.062,1.150,1.041,762,6739 -Mouffy,89270,133,4.925,0.706,0.639,738,6726 -Uxeau,71552,526,32.909,1.826,1.653,780,6620 -Thorey,89413,31,6.985,0.841,0.761,784,6758 -Mélisey,89247,256,22.273,1.502,1.360,777,6759 -Cambronne-lès-Clermont,60120,1122,9.368,0.974,0.882,658,6915 -Hézecques,62453,120,5.061,0.716,0.648,641,7049 -Contes,62236,328,7.171,0.852,0.771,625,7038 -Éleu-dit-Leauwette,62291,2960,1.166,0.344,0.311,687,7036 -Attignat-Oncin,73022,526,18.563,1.371,1.241,915,6497 -Bévillers,59081,556,4.801,0.697,0.631,729,7006 -Vosnon,10441,231,12.785,1.138,1.030,760,6779 -Ligny-le-Châtel,89227,1286,27.495,1.669,1.511,754,6755 -Rougemont,21530,159,9.560,0.984,0.891,792,6727 -Lichères-près-Aigremont,89224,162,16.434,1.290,1.168,763,6738 -Vallières,10394,144,8.371,0.921,0.834,777,6769 -Bernouil,89038,106,4.594,0.682,0.617,769,6754 -Prusy,10309,96,3.968,0.634,0.574,777,6765 -Viviers,89482,134,9.245,0.968,0.876,768,6747 -Crissey,71154,2481,11.154,1.063,0.962,844,6639 -Fontenay-près-Chablis,89175,141,5.055,0.716,0.648,760,6750 -Anthenay,51012,71,6.627,0.819,0.742,754,6895 -Noyers,27445,270,5.372,0.738,0.668,602,6908 -Liévin,62510,30936,12.849,1.141,1.033,681,7037 -Châtres-sur-Cher,41044,1097,35.340,1.892,1.713,621,6693 -Davrey,10122,247,9.620,0.987,0.894,773,6771 -Appenwihr,68008,568,7.730,0.885,0.801,1030,6779 -Dyé,89149,208,17.048,1.314,1.190,764,6751 -Brandeville,55071,186,12.081,1.106,1.001,865,6921 -Saint-Bon,51473,112,7.916,0.896,0.811,733,6841 -Verneuil,51609,840,13.049,1.150,1.041,752,6890 -Romigny,51466,211,11.319,1.071,0.970,755,6896 -Bouranton,10053,569,8.246,0.914,0.828,787,6800 -Chaumuzy,51140,375,19.945,1.422,1.287,765,6891 -Glamondans,25273,214,9.735,0.993,0.899,949,6692 -Étoges,51238,458,14.639,1.218,1.103,761,6866 -Ceffonds,52088,638,36.672,1.928,1.746,826,6812 -Saint-Firmin-des-Prés,41209,829,13.991,1.191,1.078,560,6749 -Bonningues-lès-Ardres,62155,665,10.686,1.041,0.943,632,7074 -Cappelle-Brouck,59130,1174,17.634,1.337,1.211,645,7085 -Vorges-les-Pins,25631,597,4.801,0.697,0.631,921,6675 -Champlat-et-Boujacourt,51120,170,6.317,0.800,0.724,759,6894 -Venteuil,51605,533,6.285,0.798,0.723,762,6890 -Haguenau,67180,34460,183.695,4.314,3.906,1049,6875 -Hulluch,62464,3429,5.734,0.762,0.690,686,7044 -Vaison-la-Romaine,84137,6046,27.174,1.659,1.502,862,6355 -Jaulges,89205,517,12.387,1.120,1.014,759,6760 -Le Breuil,51085,391,15.992,1.273,1.153,750,6877 -Sambourg,89374,81,12.655,1.132,1.025,776,6738 -La Caure,51100,99,8.622,0.935,0.847,755,6867 -Coursan-en-Othe,10107,105,9.375,0.975,0.883,760,6778 -Incourt,62470,84,1.861,0.434,0.393,640,7032 -Cheney,89098,237,5.985,0.779,0.705,773,6759 -La Chapelle-Vaupelteigne,89081,89,5.102,0.719,0.651,760,6750 -La Calotterie,62196,646,9.483,0.980,0.887,611,7043 -Janvilliers,51304,168,8.896,0.949,0.859,750,6868 -Blaringhem,59084,2076,18.266,1.360,1.231,662,7067 -Monchy-le-Preux,62582,690,9.382,0.975,0.883,690,7019 -Bénifontaine,62107,355,4.164,0.650,0.589,689,7043 -Saint-Laurent-Blangy,62753,6659,9.850,0.999,0.905,686,7025 -La Couture,62252,2807,13.451,1.167,1.057,680,7051 -Margny,51350,117,10.667,1.040,0.942,750,6868 -Vezins,49371,1704,18.425,1.366,1.237,421,6674 -La Chapelle-sous-Orbais,51128,54,14.747,1.222,1.106,750,6868 -Blanzée,55055,17,3.417,0.588,0.532,886,6899 -Boursault,51076,450,16.510,1.293,1.171,763,6883 -Briouze,61063,1550,17.247,1.322,1.197,450,6853 -Argentenay,89016,83,5.167,0.724,0.656,785,6748 -Sains-en-Gohelle,62737,6213,5.728,0.762,0.690,677,7040 -Coigneux,80201,49,2.903,0.542,0.491,668,7002 -Fleury,62339,127,2.842,0.537,0.486,648,7036 -Lespesses,62500,404,3.122,0.562,0.509,660,7050 -Gouvets,50214,265,11.195,1.065,0.964,399,6879 -Orbais-l'Abbaye,51416,572,16.115,1.278,1.157,752,6875 -Oppy,62639,407,4.911,0.705,0.638,694,7027 -Les Croûtes,10118,100,7.138,0.850,0.770,764,6764 -Noyelles-sur-Escaut,59438,784,4.984,0.711,0.644,711,7003 -Fromentières,51263,375,8.831,0.946,0.857,754,6865 -Passy-Grigny,51425,378,12.002,1.103,0.999,751,6895 -Jeugny,10179,499,16.060,1.276,1.155,782,6780 -Sormery,89398,344,31.150,1.777,1.609,755,6782 -Chesley,10098,326,21.273,1.468,1.329,779,6763 -Pacy-sur-Armançon,89284,190,13.568,1.172,1.061,784,6742 -Saint-Julien-sur-Sarthe,61412,682,16.263,1.284,1.163,507,6827 -Montmort-Lucy,51381,603,29.530,1.730,1.566,762,6874 -Tourville-en-Auge,14706,240,3.148,0.565,0.512,495,6917 -Fresnes,89183,65,4.909,0.705,0.638,774,6743 -Montigny-les-Monts,10251,250,14.720,1.221,1.106,773,6774 -Suizy-le-Franc,51560,108,6.029,0.782,0.708,754,6870 -Racines,10312,167,7.547,0.874,0.791,761,6772 -Ruca,22268,602,12.284,1.116,1.010,306,6839 -Vauchamps,51596,356,12.937,1.145,1.037,744,6864 -Rennes-sur-Loue,25488,99,5.502,0.747,0.676,916,6660 -Soudaine-Lavinadière,19262,176,22.229,1.501,1.359,603,6497 -Oberhoffen-lès-Wissembourg,67344,332,3.067,0.557,0.504,1060,6892 -Brugny-Vaudancourt,51093,452,19.853,1.418,1.284,766,6879 -Dormans,51217,2922,22.556,1.512,1.369,744,6886 -Sainte-Gemme,51480,139,7.170,0.852,0.771,750,6895 -Saint-Germain-sur-Ille,35274,918,3.899,0.629,0.570,355,6803 -Illies,59320,1546,7.985,0.899,0.814,687,7050 -Herré,40124,141,23.039,1.528,1.383,460,6331 -Binson-et-Orquigny,51063,175,3.359,0.583,0.528,757,6887 -Champaubert,51113,124,12.669,1.133,1.026,754,6865 -Luscan,31308,58,3.310,0.579,0.524,505,6215 -Å’uilly,51410,635,9.180,0.964,0.873,759,6882 -Igny-Comblizy,51298,403,40.859,2.035,1.843,749,6882 -Vézilly,2794,183,10.751,1.044,0.945,749,6897 -Neuvillette,80596,218,3.174,0.567,0.513,652,7012 -Villers-sous-Châtillon,51637,213,4.809,0.698,0.632,762,6890 -Germigny,89186,548,11.848,1.096,0.992,762,6767 -Le Baizil,51033,257,14.678,1.220,1.105,760,6877 -Chantillac,16079,330,17.974,1.349,1.221,445,6472 -Chichée,89104,319,18.832,1.381,1.250,765,6744 -Mouthoumet,11260,108,14.019,1.192,1.079,662,6210 -Baye,51042,422,18.008,1.351,1.223,752,6864 -Tronchoy,89423,126,6.592,0.817,0.740,770,6757 -Butteaux,89061,257,7.598,0.877,0.794,763,6767 -Chazelles-sur-Lavieu,42058,283,9.728,0.993,0.899,780,6493 -Nesle-le-Repons,51396,153,5.118,0.720,0.652,753,6884 -Saint-Cyr-les-Colons,89341,446,34.522,1.870,1.693,760,6734 -Corribert,51174,58,9.757,0.994,0.900,755,6870 -Jonquery,51309,119,4.268,0.658,0.596,759,6895 -Beugnon,89041,314,7.649,0.880,0.797,759,6768 -Rugny,89329,79,13.938,1.188,1.076,787,6758 -Noyers,89279,589,35.418,1.894,1.715,768,6733 -Champvoisy,51121,250,9.189,0.965,0.874,745,6890 -Garentreville,77200,112,6.404,0.806,0.730,668,6794 -Saint-Rémy-au-Bois,62768,100,4.106,0.645,0.584,619,7032 -Fulvy,89184,132,3.838,0.624,0.565,786,6738 -Tissey,89417,98,6.003,0.780,0.706,768,6753 -Varennes,89430,322,10.165,1.015,0.919,757,6759 -Vandières,51592,312,13.168,1.155,1.046,754,6888 -Lignières,10196,214,25.958,1.622,1.469,769,6760 -Aigremont,89002,78,6.848,0.833,0.754,765,6737 -Ruisseauville,62726,198,3.896,0.628,0.569,639,7043 -Neuville-Vitasse,62611,508,6.996,0.842,0.762,687,7015 -Lasson,89219,143,7.096,0.848,0.768,762,6774 -Vis-en-Artois,62864,656,6.414,0.806,0.730,694,7017 -Bernon,10040,173,18.001,1.351,1.223,775,6763 -Jouancy,89207,23,5.987,0.779,0.705,779,6733 -Sailly,78536,388,5.498,0.746,0.675,612,6885 -Le Thoult-Trosnay,51570,101,15.155,1.239,1.122,752,6863 -Hardinghen,62412,1206,8.467,0.926,0.838,619,7077 -Sommancourt,52475,67,5.900,0.773,0.700,849,6824 -Steinsoultz,68325,779,4.054,0.641,0.580,1028,6728 -Bosroger,23028,111,7.638,0.880,0.797,644,6544 -Saint-Jacques-d'Atticieux,7243,319,5.009,0.712,0.645,828,6471 -Fillièvres,62335,501,20.609,1.445,1.308,640,7021 -Châtillon-sur-Marne,51136,691,11.536,1.081,0.979,759,6890 -Troissy,51585,860,15.423,1.250,1.132,753,6885 -Olizy,51414,164,4.532,0.678,0.614,754,6895 -Crépand,21212,325,5.814,0.768,0.695,798,6722 -La Ville-sous-Orbais,51639,52,11.140,1.062,0.962,747,6873 -Liencourt,62507,283,3.414,0.588,0.532,661,7019 -Nitry,89277,366,34.692,1.875,1.698,765,6728 -Hucqueliers,62463,467,7.658,0.881,0.798,624,7054 -Thélus,62810,1209,8.998,0.955,0.865,688,7028 -Carisey,89062,360,11.402,1.075,0.973,761,6759 -Haverskerque,59293,1441,9.282,0.970,0.878,665,7060 -Scherlenheim,67444,128,2.343,0.487,0.441,1032,6862 -Mareuil-le-Port,51346,1179,8.955,0.953,0.863,754,6888 -Serrigny,89393,114,7.444,0.868,0.786,767,6747 -Saint-Pierre-de-Coutances,50537,415,4.035,0.639,0.579,374,6890 -Belval-sous-Châtillon,51048,151,7.128,0.850,0.770,763,6890 -Reulle-Vergy,21523,134,6.085,0.785,0.711,845,6678 -Verdon,51607,211,11.554,1.082,0.980,743,6872 -La Neuville-aux-Larris,51398,162,1.683,0.413,0.374,759,6893 -Pimelles,89299,61,9.968,1.005,0.910,789,6748 -Mercuer,7155,1210,7.684,0.882,0.799,809,6394 -Villeneuve-au-Chemin,10422,186,3.393,0.586,0.531,764,6777 -Vézannes,89445,47,9.071,0.959,0.868,767,6755 -Baslieux-sous-Châtillon,51038,191,5.900,0.773,0.700,759,6893 -Villy,89477,106,5.871,0.771,0.698,757,6754 -Mornand-en-Forez,42151,402,21.561,1.478,1.338,786,6506 -Reuil,51457,282,5.357,0.737,0.667,760,6886 -Bougy,14089,399,3.098,0.560,0.507,443,6895 -Quincerot,89320,58,9.954,1.004,0.909,785,6760 -Sarry,89376,161,25.677,1.613,1.460,778,6727 -Boissy-Mauvoisin,78082,610,5.169,0.724,0.656,598,6875 -Vic-de-Chassenay,21676,222,26.478,1.638,1.483,792,6707 -Vaux-sur-Saint-Urbain,52511,57,6.440,0.808,0.732,863,6809 -Saint-Martin-d'Ablois,51002,1438,22.297,1.503,1.361,765,6879 -Courtaoult,10108,88,8.443,0.925,0.838,767,6769 -Serres-Sainte-Marie,64521,557,9.690,0.991,0.897,412,6266 -Bligny,51069,125,2.618,0.515,0.466,763,6901 -Leuvrigny,51320,352,7.994,0.900,0.815,755,6884 -Lagesse,10185,204,12.685,1.134,1.027,786,6766 -Vermenton,89441,1320,53.420,2.326,2.106,758,6734 -Épineuil,89153,598,6.199,0.793,0.718,775,6754 -Gurmençon,64252,886,2.998,0.551,0.499,408,6235 -Mareuil-en-Brie,51345,270,8.961,0.953,0.863,756,6876 -Saint-Aubin-sur-Mer,76564,185,6.233,0.795,0.720,549,6980 -Le Passage,38296,790,6.569,0.816,0.739,896,6497 -Le Bouchet-Mont-Charvin,74045,241,18.406,1.366,1.237,966,6528 -Annay-sur-Serein,89010,229,27.154,1.659,1.502,768,6734 -Percey,89292,247,9.538,0.983,0.890,763,6765 -Coyecques,62254,595,13.871,1.186,1.074,640,7057 -Vulaines-lès-Provins,77532,66,10.751,1.044,0.945,718,6830 -Villaz,74303,3465,15.269,1.244,1.126,946,6542 -Saint-Hilaire-les-Courbes,19209,153,36.945,1.935,1.752,609,6498 -Les Landes-Genusson,85119,2344,31.357,1.782,1.613,383,6662 -Venon,27677,387,5.183,0.725,0.656,556,6898 -Vienne-le-Château,51621,524,51.387,2.282,2.066,836,6899 -Béru,89039,77,5.231,0.728,0.659,767,6744 -Avreuil,10024,158,10.350,1.024,0.927,776,6773 -Champagnac-la-Prune,19040,163,13.289,1.160,1.050,618,6453 -Caëstre,59120,1957,10.220,1.018,0.922,670,7075 -Ruminghem,62730,1660,13.922,1.188,1.076,643,7087 -La Motte-de-Galaure,26216,790,7.741,0.886,0.802,849,6455 -Lizines,77256,185,5.819,0.768,0.695,714,6825 -Espiens,47090,378,17.671,1.338,1.211,488,6346 -Merrey,52320,105,6.855,0.833,0.754,894,6775 -Pont-Salomon,43153,2077,8.675,0.938,0.849,796,6469 -Saint-Jean-Soleymieux,42240,856,16.567,1.296,1.173,780,6493 -Mazinghem,62564,477,5.207,0.726,0.657,657,7056 -Varennes-le-Grand,71555,2277,19.136,1.392,1.260,845,6624 -Wancourt,62873,663,8.962,0.953,0.863,689,7019 -Cahon,80161,199,7.032,0.844,0.764,608,7002 -Richebourg,62706,2605,17.404,1.328,1.202,684,7051 -Étivey,89161,199,27.934,1.682,1.523,789,6728 -Bailleul-lès-Pernes,62071,430,3.545,0.599,0.542,656,7047 -Laires,62485,363,8.651,0.936,0.847,648,7047 -Liettres,62509,323,3.062,0.557,0.504,653,7054 -Longnes,72166,331,6.498,0.811,0.734,469,6774 -Hauterives,26148,1900,30.767,1.766,1.599,863,6467 -Écouviez,55169,506,4.282,0.659,0.597,877,6938 -Hesmond,62449,171,8.298,0.917,0.830,624,7040 -Roffey,89323,142,8.671,0.937,0.848,767,6759 -Saint-Thibaud-de-Couz,73282,1046,24.145,1.564,1.416,924,6492 -Vendin-le-Vieil,62842,8683,10.660,1.039,0.941,687,7040 -Censy,89064,55,4.821,0.699,0.633,780,6733 -Étourvy,10143,174,15.513,1.254,1.135,787,6763 -Wierre-Effroy,62889,829,18.978,1.387,1.256,614,7075 -Junay,89211,83,3.624,0.606,0.549,768,6753 -Ivry-la-Bataille,27355,2754,7.784,0.888,0.804,587,6865 -Saint-Riquier,80716,1247,14.811,1.225,1.109,623,7004 -Sauméjan,47286,102,19.720,1.414,1.280,462,6354 -Santes,59553,5768,7.545,0.874,0.791,698,7054 -Saint-Vincent-sur-Jabron,4199,194,30.367,1.754,1.588,915,6347 -Bacqueville,27034,618,10.974,1.054,0.954,580,6914 -Montigny-devant-Sassey,55349,120,9.793,0.996,0.902,855,6925 -Germainville,28178,278,8.798,0.944,0.855,586,6850 -Berlencourt-le-Cauroy,62111,281,7.637,0.880,0.797,660,7019 -Sains-lès-Pernes,62740,283,4.270,0.658,0.596,655,7042 -Sancoins,18242,3090,53.647,2.331,2.111,697,6634 -Oz,38289,247,26.933,1.652,1.496,938,6450 -Savouges,21596,371,3.137,0.564,0.511,856,6679 -Le Verguier,2782,217,4.299,0.660,0.598,712,6982 -La Loge-Pomblin,10201,67,5.232,0.728,0.659,776,6773 -Baon,89028,81,8.627,0.935,0.847,786,6751 -Tharoiseau,89409,62,3.461,0.592,0.536,761,6709 -Le Châtelier,51133,57,10.759,1.044,0.945,843,6872 -Életot,76232,630,6.946,0.839,0.760,518,6968 -Saint-Malo,35288,46005,36.428,1.921,1.739,330,6851 -Moulins-en-Tonnerrois,89271,102,15.258,1.243,1.125,776,6738 -Veix,19281,65,21.969,1.492,1.351,611,6488 -Carency,62213,735,8.527,0.929,0.841,681,7032 -Ervy-le-Châtel,10140,1218,21.554,1.478,1.338,764,6777 -Estrée-Cauchy,62314,377,3.996,0.636,0.576,673,7035 -Élise-Daucourt,51228,102,15.363,1.248,1.130,834,6882 -Vias,34332,5613,32.739,1.821,1.649,730,6242 -Saint-Loup-de-Naud,77418,884,10.964,1.054,0.954,714,6827 -Vireaux,89481,142,14.710,1.221,1.106,776,6746 -Braux-Sainte-Cohière,51082,96,6.232,0.795,0.720,832,6889 -Voilemont,51650,43,5.866,0.771,0.698,830,6882 -Châtrices,51138,34,19.776,1.416,1.282,846,6887 -Adinfer,62009,256,6.276,0.797,0.722,680,7010 -Hessenheim,67195,621,5.208,0.726,0.657,1037,6798 -Érin,62303,228,6.401,0.805,0.729,643,7036 -Herly,62437,321,16.381,1.288,1.166,628,7053 -Villers-aux-Vents,55560,132,6.098,0.786,0.712,850,6864 -Passavant-en-Argonne,51424,211,7.463,0.870,0.788,844,6882 -Maizières,62542,187,6.938,0.838,0.759,662,7025 -Moyenneville,62597,266,6.474,0.810,0.733,684,7011 -Seraumont,88453,47,10.425,1.028,0.931,891,6818 -Saumur,49328,27125,66.566,2.597,2.351,470,6684 -Montval-sur-Loir,72071,6160,27.439,1.667,1.509,503,6734 -Vezot,72372,75,6.376,0.804,0.728,499,6808 -Brézins,38058,2078,8.289,0.916,0.829,879,6475 -Saint-Martin-sur-Armançon,89355,138,14.220,1.200,1.086,782,6754 -Mazaye,63219,727,21.920,1.490,1.349,690,6524 -Dannemoine,89137,473,10.270,1.020,0.924,771,6755 -Ligny-lès-Aire,62512,613,8.038,0.902,0.817,652,7052 -Verquin,62848,3425,3.677,0.610,0.552,676,7044 -Lézinnes,89223,674,16.167,1.280,1.159,780,6743 -Yrouerre,89486,162,14.466,1.211,1.096,771,6741 -Franqueville,80346,182,6.266,0.797,0.722,633,7001 -Biaches,80102,380,6.551,0.815,0.738,691,6981 -Grandville,10167,97,9.164,0.964,0.873,788,6832 -Osches,55395,54,9.178,0.964,0.873,863,6883 -Vézinnes,89447,161,6.268,0.797,0.722,770,6757 -Sommelonne,55494,469,10.220,1.018,0.922,852,6844 -Montfey,10247,139,11.502,1.080,0.978,764,6777 -Lusigny-sur-Ouche,21360,109,9.955,1.004,0.909,830,6665 -Vieux-Champagne,77496,189,8.917,0.951,0.861,712,6831 -Trébrivan,22344,734,23.026,1.527,1.383,218,6822 -Frelinghien,59252,2402,11.237,1.067,0.966,698,7068 -Séguret,84126,851,21.142,1.464,1.326,865,6346 -Bitschhoffen,67048,452,2.547,0.508,0.460,1038,6873 -West-Cappel,59657,606,7.643,0.880,0.797,667,7091 -Arrigny,51016,251,16.091,1.277,1.156,825,6831 -Sachin,62732,344,5.961,0.777,0.704,653,7045 -Lucheux,80495,538,28.091,1.687,1.527,663,7012 -Metz-Robert,10241,60,4.277,0.658,0.596,780,6775 -Ramillies,59492,597,5.105,0.719,0.651,716,7012 -Sainte-Vertu,89371,92,14.495,1.212,1.097,767,6734 -Humbert,62466,234,7.844,0.891,0.807,624,7044 -Verruyes,79345,910,26.540,1.640,1.485,451,6606 -Courgis,89123,260,10.274,1.020,0.924,753,6744 -Rognon,25498,49,4.045,0.640,0.579,948,6708 -Soumaintrain,89402,216,10.791,1.046,0.947,765,6767 -Maisnil-lès-Ruitz,62540,1655,5.555,0.750,0.679,671,7040 -Agnières,62012,247,3.276,0.576,0.522,672,7030 -Eaux-Puiseaux,10133,253,8.661,0.937,0.848,765,6778 -Thieulloy-la-Ville,80755,143,3.304,0.579,0.524,622,6960 -Sognolles-en-Montois,77454,403,10.237,1.018,0.922,708,6825 -Môlay,89259,91,12.067,1.106,1.001,772,6742 -Saint-Didier-en-Brionnais,71406,141,11.479,1.078,0.976,784,6584 -Collan,89112,175,13.169,1.155,1.046,763,6751 -Montchenu,26194,581,16.514,1.294,1.172,863,6457 -Le Mériot,10231,607,12.640,1.132,1.025,730,6825 -Angerville-la-Campagne,27017,1302,3.620,0.606,0.549,564,6877 -Ancy-le-Libre,89006,182,21.930,1.491,1.350,785,6748 -Coussegrey,10112,197,15.938,1.271,1.151,777,6759 -Marœuil,62557,2477,11.834,1.095,0.991,679,7024 -Maligny,89242,804,22.239,1.501,1.359,762,6750 -Bainghen,62076,232,6.816,0.831,0.752,624,7074 -Souhey,21612,93,2.731,0.526,0.476,807,6712 -Chabournay,86048,1045,5.909,0.774,0.701,491,6626 -Saint-Hilaire-Cottes,62750,809,7.327,0.862,0.780,658,7051 -Ancy-le-Franc,89005,935,19.732,1.414,1.280,784,6742 -Le Meillard,80526,154,7.031,0.844,0.764,643,7007 -Moncheaux-lès-Frévent,62576,130,4.039,0.640,0.579,654,7023 -Pécy,77357,867,21.140,1.464,1.326,708,6836 -Fleys,89168,182,8.135,0.908,0.822,767,6746 -Fierville-les-Parcs,14269,205,4.934,0.707,0.640,499,6909 -San-Giuliano,2B303,703,23.774,1.552,1.405,1235,6157 -Argenteuil-sur-Armançon,89017,210,30.660,1.763,1.596,783,6735 -Pasilly,89290,49,10.072,1.010,0.914,781,6736 -Saint-Mard,2682,111,4.681,0.689,0.624,744,6922 -Vadelaincourt,55525,83,5.423,0.741,0.671,863,6887 -Herbinghen,62432,368,4.371,0.665,0.602,621,7073 -Charmes,88090,4706,23.772,1.552,1.405,949,6817 -La Chapelle-Saint-Sulpice,77090,241,6.389,0.805,0.729,715,6828 -Neuf-Berquin,59423,1219,6.422,0.807,0.731,678,7063 -La Tuilière,42314,290,31.626,1.790,1.621,761,6536 -Marolles-sous-Lignières,10227,332,15.137,1.238,1.121,769,6759 -Killem,59326,1084,12.008,1.103,0.999,668,7098 -Mercurol-Veaunes,26179,2623,24.994,1.591,1.441,846,6440 -Grisolles,2356,245,10.877,1.050,0.951,728,6890 -Courcelles-Frémoy,21203,125,11.443,1.077,0.975,792,6706 -Lières,62508,382,3.273,0.576,0.522,657,7051 -Fiefs,62333,384,11.058,1.058,0.958,652,7047 -Pérenchies,59457,8366,3.040,0.555,0.503,699,7063 -Gézaincourt,80377,419,7.097,0.848,0.768,649,7003 -Senailly,21604,138,9.472,0.980,0.887,798,6722 -Arphy,30015,173,20.968,1.458,1.320,746,6323 -Saint-Brice,77403,768,11.471,1.078,0.976,723,6832 -Ossun,65344,2364,27.834,1.679,1.520,450,6234 -Montberthault,21426,216,12.145,1.109,1.004,788,6704 -Croisilles,62259,1909,11.426,1.076,0.974,693,7012 -Mogneville,60404,1564,3.933,0.631,0.571,662,6914 -Armentières-en-Brie,77008,1250,7.208,0.855,0.774,703,6877 -Sancourt,59552,198,3.946,0.632,0.572,713,7013 -Knœrsheim,67245,225,2.365,0.490,0.444,1026,6851 -Gauville-la-Campagne,27282,565,6.126,0.788,0.713,559,6884 -Barbaste,47021,1508,38.860,1.984,1.796,477,6341 -Pressagny-l'Orgueilleux,27477,706,10.191,1.016,0.920,590,6894 -Waly,55577,61,6.215,0.794,0.719,853,6884 -Cuinchy,62262,1745,4.171,0.650,0.589,681,7047 -Bressieux,38056,92,0.895,0.301,0.273,878,6471 -Millery,21413,381,20.941,1.457,1.319,799,6716 -Meunet-sur-Vatan,36122,192,12.571,1.129,1.022,613,6669 -Menétrux-en-Joux,39322,56,8.871,0.948,0.858,919,6617 -Athie,21029,77,5.919,0.774,0.701,795,6717 -Savignac-de-Duras,47294,220,14.914,1.229,1.113,477,6410 -Landiras,33225,2256,59.873,2.463,2.230,426,6386 -Thémines,46318,216,13.458,1.168,1.058,605,6402 -Ormoy,28289,242,9.165,0.964,0.873,587,6835 -Péseux,25449,120,6.649,0.821,0.743,979,6697 -Chavelot,88099,1413,6.236,0.795,0.720,956,6798 -Jonzier-Épagny,74144,777,7.126,0.850,0.770,931,6559 -La Framboisière,28159,343,5.194,0.725,0.656,554,6836 -Torcy-et-Pouligny,21640,200,10.340,1.024,0.927,795,6712 -Sainte-Reine,70471,33,6.252,0.796,0.721,910,6713 -Précy-sous-Thil,21505,735,8.627,0.935,0.847,801,6701 -Villiers-Saint-Denis,2818,1083,7.641,0.880,0.797,718,6879 -Hesdigneul-lès-Béthune,62445,824,2.607,0.514,0.465,672,7046 -Méry-sur-Marne,77290,671,5.743,0.763,0.691,715,6875 -Domprel,25203,174,9.507,0.981,0.888,961,6684 -Corsaint,21199,158,20.539,1.443,1.307,787,6715 -Maintenay,62538,414,12.127,1.108,1.003,618,7031 -Vassy-sous-Pisy,89431,71,7.500,0.872,0.790,789,6721 -Villaines-les-Prévôes,21686,140,10.611,1.037,0.939,800,6717 -Aisy-sous-Thil,21007,223,8.471,0.926,0.838,796,6699 -Corrombles,21198,244,11.464,1.078,0.976,791,6712 -Châtenay-en-France,95144,72,3.075,0.558,0.505,659,6885 -Bourthes,62168,866,22.382,1.506,1.364,622,7056 -Forest-l'Abbaye,80331,296,3.271,0.576,0.522,616,7013 -Dompierre-en-Morvan,21232,215,15.337,1.247,1.129,792,6698 -Chevaline,74072,199,14.134,1.197,1.084,948,6520 -Candas,80168,1094,17.344,1.326,1.201,651,6997 -Villeblevin,89449,1866,7.387,0.865,0.783,707,6806 -Longueville,62526,135,3.537,0.599,0.542,622,7072 -Tilloy-lez-Cambrai,59597,569,3.289,0.577,0.522,716,7012 -Montaud,38248,552,14.422,1.209,1.095,899,6464 -Genay,21291,379,13.845,1.184,1.072,796,6716 -Créances,50151,2169,20.888,1.455,1.317,371,6907 -Les Ableuvenettes,88001,68,4.520,0.677,0.613,937,6791 -Époisses,21247,787,21.722,1.484,1.344,788,6710 -Pintheville,55406,110,5.238,0.729,0.660,893,6894 -Bierry-les-Belles-Fontaines,89042,202,27.084,1.657,1.500,791,6723 -Forléans,21282,104,7.152,0.851,0.771,792,6709 -Lanhouarneau,29111,1316,17.970,1.349,1.221,172,6854 -Montigny-Saint-Barthélemy,21430,86,6.237,0.795,0.720,794,6703 -Velars-sur-Ouche,21661,1673,12.199,1.112,1.007,843,6695 -Bézu-le-Guéry,2084,260,11.207,1.066,0.965,717,6881 -Saint-Jacques-des-Blats,15192,349,31.311,1.781,1.613,681,6440 -Viserny,21709,179,6.818,0.831,0.752,798,6721 -Bionville,54075,117,12.316,1.117,1.011,1001,6832 -Courcelles-lès-Semur,21205,247,12.065,1.106,1.001,795,6705 -Fain-lès-Moutiers,21260,157,9.778,0.995,0.901,789,6721 -Domptin,2268,660,4.535,0.678,0.614,721,6880 -Moutiers-Saint-Jean,21446,250,5.051,0.715,0.647,793,6718 -Naves,59422,637,5.217,0.727,0.658,721,7011 -Quincerot,21516,77,4.399,0.668,0.605,797,6724 -Neuville-Saint-Rémy,59428,3807,2.377,0.491,0.445,715,7009 -Pontaubault,50408,542,1.942,0.444,0.402,380,6846 -Raillencourt-Sainte-Olle,59488,2268,7.118,0.849,0.769,715,7011 -Gurcy-le-Châtel,77223,576,12.715,1.135,1.028,708,6818 -Masnières,59389,2704,11.013,1.056,0.956,717,7001 -Villers-en-Vexin,27690,314,6.316,0.800,0.724,599,6907 -Tanavelle,15232,238,13.501,1.170,1.059,702,6436 -Ligny-en-Cambrésis,59349,1899,8.891,0.949,0.859,725,7002 -Parenty,62648,526,13.019,1.149,1.040,617,7054 -La Bassée,59051,6421,3.539,0.599,0.542,687,7048 -Naix-aux-Forges,55370,215,6.333,0.801,0.725,876,6842 -Iwuy,59322,3336,12.767,1.137,1.029,722,7016 -Escaudœuvres,59206,3277,6.664,0.822,0.744,721,7011 -Fontaine-Notre-Dame,59244,1782,10.573,1.035,0.937,714,7009 -Eswars,59216,350,2.774,0.530,0.480,719,7012 -Lépine,62499,266,10.782,1.045,0.946,611,7033 -Capinghem,59128,2424,1.870,0.435,0.394,698,7060 -Cuvillers,59167,198,2.906,0.543,0.492,718,7014 -Thun-Saint-Martin,59595,521,6.013,0.781,0.707,721,7011 -Quiévy,59485,1765,6.825,0.832,0.753,729,7006 -Plessis-Saint-Jean,89302,219,11.118,1.061,0.961,722,6803 -Avesnes-les-Aubert,59037,3634,9.048,0.957,0.866,727,7013 -Estourmel,59213,460,5.467,0.744,0.674,723,7005 -Sailly-lez-Cambrai,59521,468,3.277,0.576,0.522,711,7012 -Broxeele,59111,385,3.774,0.618,0.560,653,7080 -Boiry-Becquerelle,62144,433,4.605,0.683,0.618,686,7012 -Willeman,62890,182,10.205,1.017,0.921,642,7029 -Saint-Martin-sur-Cojeul,62761,210,3.441,0.590,0.534,688,7015 -Saint-Denœux,62745,161,4.041,0.640,0.579,621,7043 -Wambaix,59635,380,6.240,0.795,0.720,721,7005 -Cagnoncles,59121,607,6.186,0.792,0.717,724,7010 -Fontenet,17165,403,10.201,1.017,0.921,431,6542 -Séranvillers-Forenville,59567,404,7.284,0.859,0.778,721,7002 -Caudry,59139,14493,12.968,1.146,1.038,732,7001 -Manerbe,14398,555,18.454,1.367,1.238,488,6900 -Verlinghem,59611,2445,10.091,1.011,0.915,702,7064 -Ronchères,2655,113,6.085,0.785,0.711,745,6895 -Vernonvilliers,10403,62,7.611,0.878,0.795,824,6801 -Haynecourt,59294,325,5.952,0.777,0.704,709,7011 -Haussignémont,51284,277,2.822,0.535,0.484,830,6848 -Haucourt-en-Cambrésis,59287,202,3.564,0.601,0.544,724,7002 -Hem-Lenglet,59300,574,4.916,0.706,0.639,715,7018 -Yversay,86300,493,5.983,0.779,0.705,486,6621 -Sapignies,62776,196,3.376,0.585,0.530,687,7004 -Chemy,59145,769,3.469,0.593,0.537,701,7048 -Barbey,77021,146,4.309,0.661,0.598,705,6806 -Eyrein,19081,497,26.292,1.632,1.478,616,6467 -Saint-Laurent-de-Lin,37223,322,13.871,1.186,1.074,495,6715 -Setques,62794,608,3.897,0.628,0.569,642,7069 -Thun-l'Évêque,59593,750,5.698,0.760,0.688,722,7016 -Gorges,80381,42,4.875,0.703,0.637,643,7001 -Morchies,62591,206,6.688,0.823,0.745,697,7003 -Saffré,44149,3860,58.813,2.441,2.210,361,6721 -Chalmaison,77076,753,10.065,1.010,0.914,718,6823 -Cambrai,59122,32668,18.218,1.359,1.230,715,7008 -Guitté,22071,702,14.959,1.231,1.115,318,6811 -Aubencheul-au-Bac,59023,530,3.209,0.570,0.516,712,7016 -Brotte-lès-Ray,70099,75,5.026,0.714,0.646,908,6727 -Sarrancolin,65408,569,32.413,1.812,1.641,482,6212 -Luisetaines,77263,242,5.062,0.716,0.648,715,6818 -Courlon-sur-Yonne,89124,1192,16.861,1.307,1.183,715,6807 -Marcoing,59377,1881,15.088,1.236,1.119,715,7005 -Étaimpuis,76249,784,10.510,1.032,0.934,563,6950 -Dury,62280,344,5.373,0.738,0.668,701,7015 -Carnières,59132,1100,8.168,0.910,0.824,725,7005 -Tressan,34313,650,3.906,0.629,0.570,739,6274 -Savy-Berlette,62785,932,7.581,0.876,0.793,669,7030 -Avesnes-le-Comte,62063,1951,9.310,0.971,0.879,667,7018 -Gumery,10169,244,10.931,1.052,0.952,732,6817 -Rieux-en-Cambrésis,59502,1460,7.644,0.880,0.797,725,7010 -Boussières-en-Cambrésis,59102,414,4.821,0.699,0.633,728,7009 -Cadillac-en-Fronsadais,33082,1258,3.788,0.620,0.561,433,6436 -Avesnes-le-Sec,59038,1470,10.528,1.033,0.935,726,7019 -Paillencourt,59455,992,7.601,0.878,0.795,717,7018 -Plassay,17280,716,17.053,1.314,1.190,410,6529 -Courtémont,51191,62,10.657,1.039,0.941,827,6895 -Saint-Aubert,59528,1569,8.105,0.906,0.820,732,7013 -Vouillé-les-Marais,85304,762,9.077,0.959,0.868,395,6593 -Proville,59476,3165,6.311,0.800,0.724,713,7006 -Croix,59163,21271,4.446,0.671,0.608,711,7066 -La Madeleine,59368,21253,2.695,0.523,0.474,704,7062 -Roncq,59508,13475,10.572,1.035,0.937,707,7074 -Sermoise,2714,344,5.541,0.749,0.678,733,6921 -Mouvaux,59421,13326,4.159,0.649,0.588,710,7066 -Givry-en-Argonne,51272,450,7.495,0.871,0.789,838,6874 -Leers,59339,9546,5.411,0.740,0.670,715,7065 -Tourcoing,59599,97476,15.153,1.239,1.122,711,7066 -Bousbecque,59098,4833,6.457,0.809,0.732,706,7073 -Laheycourt,55271,405,17.895,1.347,1.220,848,6871 -Biache-Saint-Vaast,62128,4058,9.302,0.971,0.879,699,7022 -Grand-Rullecourt,62385,422,10.804,1.046,0.947,660,7018 -Savennes,23170,215,7.165,0.852,0.771,615,6555 -Braux-Saint-Remy,51083,86,9.758,0.994,0.900,833,6882 -Winnezeele,59662,1279,15.751,1.263,1.144,668,7086 -Malmy,51341,34,4.839,0.700,0.634,830,6899 -Proveysieux,38325,505,20.342,1.436,1.300,910,6466 -Comines,59152,12369,16.072,1.276,1.155,703,7071 -Lys-lez-Lannoy,59367,13340,3.270,0.576,0.522,714,7064 -Piégon,26233,269,10.290,1.021,0.924,873,6360 -Linselles,59352,8356,11.718,1.090,0.987,702,7071 -Marquette-lez-Lille,59386,10424,4.856,0.701,0.635,705,7066 -Questrecques,62679,311,5.881,0.772,0.699,611,7065 -Le Parcq,62647,791,9.300,0.971,0.879,633,7033 -Trégomeur,22356,941,10.727,1.043,0.944,267,6843 -Brouckerque,59110,1356,11.912,1.099,0.995,648,7094 -Raye-sur-Authie,62690,247,5.909,0.774,0.701,626,7025 -Lambersart,59328,27618,6.078,0.785,0.711,700,7062 -Villeneuve-d'Ascq,59009,62358,27.488,1.669,1.511,713,7057 -Saint-André-lez-Lille,59527,12293,3.160,0.566,0.512,701,7064 -Marcq-en-Barœul,59378,38805,13.993,1.191,1.078,706,7065 -Wervicq-Sud,59656,5412,5.090,0.718,0.650,704,7072 -Conques-sur-Orbiel,11099,2496,25.802,1.617,1.464,651,6245 -Sailly-lez-Lannoy,59522,1773,4.440,0.671,0.608,715,7060 -Saint-Pierre-sur-Doux,7285,107,21.628,1.480,1.340,815,6448 -Saint-Denis-en-Val,45274,7507,17.358,1.326,1.201,625,6755 -Mingot,65311,98,1.766,0.423,0.383,471,6258 -Margueron,33269,380,13.602,1.174,1.063,484,6410 -Samazan,47285,870,17.303,1.324,1.199,468,6374 -Serbonnes,89390,600,9.914,1.002,0.907,714,6801 -Le Tallud,79322,2033,19.250,1.397,1.265,445,6620 -Hautefage,19091,310,24.266,1.568,1.420,618,6446 -Pitgam,59463,958,23.360,1.538,1.393,653,7097 -Neuville-en-Ferrain,59426,10371,6.186,0.792,0.717,710,7074 -Toufflers,59598,3923,2.384,0.491,0.445,716,7062 -Lignerolles,36095,102,13.087,1.152,1.043,633,6601 -Montmédy,55351,2178,23.486,1.543,1.397,871,6940 -Onjon,10270,250,22.456,1.508,1.365,792,6812 -Bondues,59090,10046,13.013,1.148,1.039,709,7068 -Hem,59299,18914,9.678,0.990,0.896,713,7060 -Beaumont-en-Beine,2056,175,5.448,0.743,0.673,709,6956 -Aubure,68014,358,4.894,0.704,0.637,1013,6795 -Chemin-d'Aisey,21165,70,8.607,0.934,0.846,816,6736 -Longsols,10206,124,12.657,1.132,1.025,792,6814 -Savières,10368,1008,18.645,1.374,1.244,770,6815 -Villacerf,10409,584,9.673,0.990,0.896,775,6814 -Amanlis,35002,1703,25.570,1.610,1.458,368,6775 -Bézu-Saint-Germain,2085,1063,11.054,1.058,0.958,729,6891 -Ambléon,1006,110,6.040,0.782,0.708,900,6520 -Wambrechies,59636,10539,15.482,1.252,1.134,705,7069 -Baâlon,55025,300,14.594,1.216,1.101,864,6936 -Verricourt,10405,53,7.003,0.842,0.762,800,6819 -Chauchigny,10090,255,9.867,1.000,0.905,772,6813 -Labrit,40135,867,72.527,2.711,2.455,416,6336 -Vallant-Saint-Georges,10392,376,17.953,1.349,1.221,764,6815 -Aubeterre,10015,344,11.808,1.094,0.991,780,6812 -Liffol-le-Petit,52289,323,25.743,1.615,1.462,892,6800 -Chaudrey,10091,147,13.881,1.186,1.074,789,6817 -Saint-Saury,15214,190,30.670,1.763,1.596,630,6424 -Remilly-en-Montagne,21520,149,8.514,0.929,0.841,829,6688 -Montsuzain,10256,409,19.714,1.413,1.279,779,6814 -Montsecret-Clairefougère,61292,674,14.004,1.191,1.078,427,6862 -Vassel,63445,289,2.974,0.549,0.497,723,6517 -Colomby-Anguerny,14014,1121,5.668,0.758,0.686,454,6913 -Saint-Benoît-sur-Seine,10336,406,11.801,1.093,0.990,775,6808 -Épieds,27220,360,4.834,0.700,0.634,581,6871 -Rouziers,15167,121,8.730,0.940,0.851,638,6409 -Voué,10442,675,13.621,1.175,1.064,779,6818 -Saint-Mesmin,10353,822,16.401,1.289,1.167,763,6813 -Charmont-sous-Barbuise,10084,1027,38.372,1.972,1.785,789,6818 -La Sône,38495,581,3.048,0.556,0.503,879,6448 -Montrécourt,59415,228,3.539,0.599,0.542,731,7014 -Salles-de-Barbezieux,16360,455,9.852,0.999,0.905,454,6489 -Noël-Cerneux,25425,421,6.373,0.804,0.728,978,6675 -Rilly-Sainte-Syre,10320,231,14.148,1.197,1.084,770,6815 -Saint-Python,59541,1012,7.434,0.868,0.786,732,7010 -Payns,10282,1367,17.155,1.318,1.193,768,6809 -Assé-le-Riboul,72012,522,16.833,1.306,1.182,484,6792 -Bourdettes,64145,511,2.216,0.474,0.429,435,6239 -La Wantzenau,67519,5804,25.407,1.604,1.452,1052,6848 -Mergey,10230,696,15.077,1.236,1.119,780,6813 -Orvilliers-Saint-Julien,10274,316,24.128,1.564,1.416,761,6819 -Les Grandes-Chapelles,10166,391,22.116,1.497,1.355,779,6819 -Mesnil-Lettre,10236,58,8.809,0.945,0.856,796,6819 -Pavilly,76495,6282,14.292,1.203,1.089,549,6946 -Droupt-Saint-Basle,10131,352,18.678,1.376,1.246,769,6818 -Berre-les-Alpes,6015,1259,9.474,0.980,0.887,1049,6315 -Pougy,10300,292,8.978,0.954,0.864,801,6818 -Mesgrigny,10234,301,7.266,0.858,0.777,763,6818 -Wasquehal,59646,20722,6.877,0.835,0.756,709,7066 -Chapelle-Vallon,10082,244,19.443,1.404,1.271,777,6813 -Saint-Augustin,62691,799,11.975,1.102,0.998,649,7060 -Luyères,10210,451,17.515,1.332,1.206,785,6808 -Saint-Jean-sur-Reyssouze,1364,737,27.519,1.670,1.512,860,6586 -Quesnoy-sur-Deûle,59482,6780,14.426,1.209,1.095,699,7066 -Noyelles-en-Chaussée,80599,246,10.536,1.033,0.935,627,7011 -Méthamis,84075,428,37.062,1.938,1.755,878,6323 -Champigny,89074,2283,21.188,1.465,1.326,710,6803 -Mont-Saint-Vincent,71320,333,13.664,1.177,1.066,813,6614 -Bachant,59041,2334,9.423,0.977,0.885,762,7011 -Robersart,59503,177,2.319,0.485,0.439,745,7008 -Grouches-Luchuel,80392,595,9.032,0.957,0.866,658,7008 -Senlis,62790,163,4.906,0.705,0.638,641,7049 -Rinxent,62711,2972,8.401,0.923,0.836,613,7081 -Farges-lès-Chalon,71194,770,3.980,0.635,0.575,837,6637 -Monceau-Saint-Waast,59406,495,5.971,0.778,0.704,760,7008 -Jolimetz,59325,873,3.963,0.634,0.574,748,7016 -Neuville-en-Avesnois,59425,305,3.164,0.566,0.512,741,7013 -Saint-Agnan,89332,952,13.254,1.159,1.049,702,6798 -Wardrecques,62875,1331,3.774,0.618,0.560,653,7067 -Marbaix,59374,487,6.622,0.819,0.742,760,7006 -Esquerdes,62309,1617,9.392,0.976,0.884,640,7067 -La Cadière-et-Cambo,30058,209,11.970,1.101,0.997,763,6319 -Dohem,62271,832,9.199,0.965,0.874,640,7057 -Le Quesne,80651,271,1.434,0.381,0.345,613,6975 -Febvin-Palfart,62327,596,14.475,1.211,1.096,652,7050 -Saint-Léger-aux-Bois,76598,501,11.201,1.065,0.964,598,6971 -Michery,89255,1033,17.090,1.316,1.192,722,6803 -Fresnes-en-Woëvre,55198,681,9.056,0.958,0.867,891,6892 -Louvignies-Quesnoy,59363,936,8.396,0.922,0.835,746,7012 -Ecquedecques,62286,509,2.619,0.515,0.466,660,7050 -Valenciennes,59606,43680,13.836,1.184,1.072,737,7027 -Saint-Cosme-en-Vairais,72276,1997,32.969,1.828,1.655,515,6799 -Famars,59221,2505,4.752,0.694,0.628,736,7025 -Murols,12166,111,13.860,1.185,1.073,665,6407 -La Chapelle-Saint-Luc,10081,12796,10.523,1.033,0.935,777,6801 -Haute-Avesnes,62415,450,4.039,0.640,0.579,675,7026 -Montgueux,10248,404,11.271,1.069,0.968,770,6798 -Porcieu-Amblagnieu,38320,1756,15.915,1.270,1.150,887,6531 -Le Pavillon-Sainte-Julie,10281,294,22.958,1.525,1.381,766,6811 -Faverney,70228,953,18.430,1.367,1.238,928,6743 -Piney,10287,1513,71.536,2.692,2.437,801,6796 -Minzac,24272,457,16.116,1.278,1.157,465,6436 -Saint-Lyé,10349,2940,32.920,1.826,1.653,775,6808 -Le Quesnoy,59481,5014,14.237,1.201,1.087,747,7019 -Romeries,59506,440,5.999,0.780,0.706,739,7013 -Rang,25479,421,10.437,1.028,0.931,967,6711 -Plougar,29187,783,17.584,1.335,1.209,173,6851 -Grand-Fayt,59270,508,8.780,0.943,0.854,755,7001 -Pont-Sainte-Marie,10297,5070,3.997,0.636,0.576,782,6802 -Mesnard-la-Barotière,85144,1408,11.910,1.099,0.995,389,6646 -Preux-au-Bois,59472,845,3.988,0.636,0.576,748,7006 -Précy-Notre-Dame,10303,82,4.599,0.683,0.618,805,6813 -Trémeur,22369,752,14.890,1.228,1.112,312,6820 -Carling,57123,3439,2.683,0.521,0.472,971,6901 -Géraudot,10165,337,16.133,1.279,1.158,799,6798 -La Genevroye,52214,31,2.813,0.534,0.483,852,6798 -Villereau,59619,971,5.732,0.762,0.690,751,7016 -Laubressel,10190,537,16.376,1.288,1.166,791,6803 -Houdain-lez-Bavay,59315,876,12.150,1.110,1.005,757,7024 -Creney-près-Troyes,10115,1777,15.790,1.265,1.145,787,6807 -Monnières,39345,425,2.097,0.461,0.417,886,6670 -Leval,59344,2465,5.900,0.773,0.700,758,7010 -Monchecourt,59409,2493,6.852,0.833,0.754,717,7024 -Wargnies-le-Petit,59640,755,5.223,0.727,0.658,747,7021 -Rantigny,60524,2495,4.174,0.650,0.589,659,6914 -Mecquignies,59396,692,4.750,0.694,0.628,759,7019 -Beaumont-en-Cambrésis,59059,448,3.318,0.580,0.525,732,7005 -Aulnoy-lez-Valenciennes,59032,7316,6.088,0.785,0.711,739,7024 -Obies,59441,710,5.412,0.741,0.671,757,7018 -Préseau,59471,1920,6.362,0.803,0.727,740,7023 -Rouilly-Sacey,10328,386,19.217,1.395,1.263,792,6805 -Saint-Hippolyte-du-Fort,30263,3937,29.394,1.726,1.563,770,6315 -Sablons sur Huisne,61116,2140,52.838,2.314,2.095,537,6811 -Macey,10211,954,20.861,1.454,1.316,766,6802 -Vendeville,59609,1627,2.568,0.510,0.462,707,7053 -Saint-Waast,59548,630,5.879,0.772,0.699,753,7024 -Saint-Maigrin,17357,541,21.411,1.473,1.334,447,6484 -Dierrey-Saint-Julien,10124,258,21.301,1.469,1.330,762,6799 -Saint-Julien-sous-les-Côes,55460,143,5.005,0.712,0.645,894,6861 -Barberey-Saint-Sulpice,10030,1389,9.564,0.984,0.891,777,6806 -Villechétif,10412,925,12.276,1.115,1.010,788,6805 -Ruesnes,59518,439,6.771,0.828,0.750,741,7017 -Saint-Parres-aux-Tertres,10357,3116,11.914,1.099,0.995,782,6802 -Dierrey-Saint-Pierre,10125,293,21.736,1.484,1.344,761,6806 -Sainte-Radégonde-des-Noyers,85267,907,31.348,1.782,1.613,388,6591 -Dosches,10129,294,20.483,1.441,1.305,794,6800 -Parfondrupt,55400,46,8.491,0.928,0.840,898,6900 -Heudicourt-sous-les-Côes,55245,168,13.671,1.177,1.066,897,6876 -Marly,59383,11495,8.043,0.903,0.818,740,7026 -Bry,59116,415,2.881,0.540,0.489,749,7024 -Villers-sous-Pareid,55565,79,6.154,0.790,0.715,901,6894 -Montsec,55353,84,5.898,0.773,0.700,898,6868 -Beire-le-Fort,21057,343,5.251,0.729,0.660,870,6683 -Serrières-de-Briord,1403,1262,8.522,0.929,0.841,889,6525 -Ville-en-Woëvre,55557,124,14.246,1.201,1.087,894,6895 -Cluis,36056,1002,35.951,1.909,1.728,604,6609 -Artres,59019,1053,6.509,0.812,0.735,738,7020 -La Remaudière,44141,1284,13.143,1.154,1.045,378,6692 -Herpont,51292,135,23.025,1.527,1.383,825,6880 -Englefontaine,59194,1307,4.733,0.692,0.627,745,7012 -Ferrières,54192,300,6.219,0.794,0.719,945,6832 -Manheulles,55317,139,10.479,1.030,0.933,891,6894 -Saint-Mihiel,55463,4149,32.954,1.827,1.654,886,6870 -Taisnières-sur-Hon,59584,978,16.200,1.281,1.160,758,7024 -Glannes,51275,190,13.194,1.156,1.047,815,6846 -Valbois,55530,91,17.059,1.315,1.191,890,6872 -Vigneulles-lès-Hattonchâtel,55551,1572,63.906,2.545,2.304,906,6882 -Avillers-Sainte-Croix,55021,60,5.487,0.746,0.675,898,6883 -Bettrechies,59077,253,3.319,0.580,0.525,753,7024 -Millencourt-en-Ponthieu,80548,361,8.656,0.937,0.848,622,7008 -Boubers-lès-Hesmond,62157,87,1.746,0.421,0.381,625,7044 -Bavay,59053,3350,10.342,1.024,0.927,755,7022 -Beaudignies,59057,563,7.888,0.894,0.809,740,7012 -Sainte-Catherine,62744,3499,4.398,0.668,0.605,684,7023 -Hannonville-sous-les-Côes,55228,586,15.754,1.263,1.144,892,6882 -Hennemont,55242,111,10.750,1.044,0.945,897,6897 -Maizeray,55311,35,3.873,0.626,0.567,896,6892 -Berlaimont,59068,3105,13.172,1.155,1.046,756,7010 -Pareid,55399,120,7.084,0.847,0.767,896,6894 -Saint-Martin-sur-Nohain,58256,373,24.297,1.569,1.421,703,6697 -La Buxerette,36028,107,11.071,1.059,0.959,606,6601 -Wimereux,62893,6795,8.129,0.908,0.822,601,7080 -Troisvilles,59604,836,8.473,0.927,0.839,735,7002 -Équirre,62301,72,4.274,0.658,0.596,646,7044 -La Tourette,42312,573,5.699,0.760,0.688,783,6482 -Buxières-sous-les-Côes,55093,287,26.780,1.647,1.491,900,6871 -Soustelle,30323,127,11.150,1.063,0.962,778,6341 -Loupmont,55303,77,10.318,1.022,0.925,898,6869 -Saint-Maurice-sous-les-Côes,55462,370,9.370,0.974,0.882,896,6885 -Wargnies-le-Grand,59639,1091,5.682,0.759,0.687,746,7025 -Langrune-sur-Mer,14354,1766,4.842,0.700,0.634,456,6919 -Calonne-Ricouart,62194,5466,4.615,0.684,0.619,665,7044 -Zuytpeene,59669,526,11.879,1.097,0.993,662,7078 -Lugny-lès-Charolles,71268,348,16.907,1.309,1.185,792,6588 -Locquignol,59353,370,97.594,3.145,2.848,754,7019 -Saosnes,72326,211,11.428,1.076,0.974,501,6806 -Prouville,80642,305,8.868,0.948,0.858,640,7006 -La Corbière,70172,106,3.209,0.570,0.516,962,6750 -Ficheux,62332,526,5.855,0.770,0.697,683,7013 -Apremont-la-Forêt,55012,398,32.916,1.826,1.653,891,6863 -Saint-Martin-sur-Écaillon,59537,520,5.283,0.732,0.663,738,7014 -Forest-en-Cambrésis,59246,555,8.843,0.947,0.857,744,7004 -Hames-Boucres,62408,1475,13.272,1.160,1.050,620,7091 -Saint-Hilaire-en-Woëvre,55457,175,11.128,1.062,0.962,897,6891 -Saint-Remy-la-Calonne,55465,106,8.080,0.905,0.819,889,6883 -Gussainville,55222,33,10.516,1.032,0.934,893,6899 -Goupillières,78278,512,5.649,0.757,0.685,611,6866 -Braquis,55072,124,4.933,0.707,0.640,893,6899 -Épiez-sur-Meuse,55173,41,8.176,0.910,0.824,896,6830 -Vouthon-Bas,55574,51,7.120,0.849,0.769,896,6824 -Beuzeville-la-Guérard,76091,224,6.462,0.809,0.732,527,6957 -Neuville-lès-Vaucouleurs,55381,177,8.355,0.920,0.833,894,6834 -Audignies,59031,357,3.565,0.601,0.544,759,7019 -Wail,62868,269,9.149,0.963,0.872,639,7027 -Les Issards,9145,237,3.846,0.624,0.565,598,6220 -Vouthon-Haut,55575,81,13.379,1.164,1.054,895,6822 -Vendegies-au-Bois,59607,492,9.953,1.004,0.909,740,7008 -Nort-Leulinghem,62622,217,3.484,0.594,0.538,636,7078 -Villers-Pol,59626,1260,12.171,1.110,1.005,743,7024 -Frémeréville-sous-les-Côes,55196,145,6.737,0.826,0.748,895,6861 -Vaucouleurs,55533,1944,39.638,2.004,1.814,891,6837 -La Chapelle-Saint-Aubert,35063,432,9.992,1.006,0.911,382,6810 -Avricourt,54035,385,2.255,0.478,0.433,980,6844 -La Flamengrie,59232,410,2.015,0.452,0.409,752,7024 -Beaufay,72026,1484,23.993,1.559,1.412,500,6783 -Louvatange,39302,98,3.292,0.578,0.523,906,6679 -Aulnoye-Aymeries,59033,8856,8.665,0.937,0.848,758,7014 -Ville-au-Val,54569,200,5.741,0.763,0.691,932,6865 -Saint-Inglevert,62751,768,6.658,0.821,0.743,613,7086 -Houlle,62458,1107,6.506,0.812,0.735,639,7076 -Sebourg,59559,1966,14.192,1.199,1.086,746,7025 -Gomiécourt,62374,153,3.639,0.607,0.550,687,7005 -Gussignies,59277,337,3.441,0.590,0.534,755,7027 -Douriez,62275,337,8.804,0.944,0.855,618,7028 -Craywick,59159,711,7.761,0.887,0.803,643,7098 -Sars-le-Bois,62778,84,2.499,0.503,0.455,660,7023 -Buzy,64157,967,16.852,1.307,1.183,419,6235 -Valbonne,6152,13070,20.090,1.427,1.292,1027,6291 -Arlebosc,7014,330,12.494,1.125,1.019,832,6438 -Les Aulneaux,72015,119,8.245,0.914,0.828,505,6819 -Girauvoisin,55212,73,4.907,0.705,0.638,892,6860 -Sauclières,12260,159,38.492,1.975,1.788,728,6323 -Sombrin,62798,240,6.625,0.819,0.742,663,7016 -Labourse,62480,2769,4.655,0.687,0.622,676,7044 -Panon,72227,40,2.367,0.490,0.444,501,6808 -Feldbach,68087,435,5.050,0.715,0.647,1018,6723 -La Herlière,62434,148,5.406,0.740,0.670,668,7010 -Merck-Saint-Liévin,62569,654,11.971,1.101,0.997,634,7061 -Rodelinghem,62716,539,4.376,0.666,0.603,624,7084 -Pomayrols,12184,122,23.149,1.531,1.386,706,6380 -Rouvignies,59515,660,3.266,0.575,0.521,731,7025 -Montigny-lès-Vaucouleurs,55350,65,11.904,1.098,0.994,890,6833 -Taillancourt,55503,129,11.189,1.065,0.964,893,6826 -Saint-Merd-la-Breuille,23221,189,40.484,2.025,1.833,661,6515 -Origny,21470,52,5.221,0.727,0.658,821,6735 -Friville-Escarbotin,80368,4638,8.817,0.945,0.856,594,6998 -Burey-en-Vaux,55088,155,6.437,0.808,0.732,893,6832 -Sauvoy,55475,63,7.814,0.890,0.806,894,6842 -Saint-Laurent-sur-Sèvre,85238,3612,15.582,1.256,1.137,403,6660 -Vignot,55553,1303,16.068,1.276,1.155,892,6854 -Merceuil,21405,815,13.800,1.182,1.070,838,6652 -Fontaine-au-Bois,59242,691,7.692,0.883,0.799,744,7004 -Frasnoy,59251,379,5.840,0.769,0.696,746,7019 -Brévillers,80140,109,1.853,0.433,0.392,656,7014 -Troussey,55520,454,17.212,1.321,1.196,901,6851 -Bastanès,64099,99,5.275,0.731,0.662,398,6259 -Bermeries,59070,375,5.284,0.732,0.663,752,7021 -Salesches,59549,291,4.591,0.682,0.617,743,7011 -Sassegnies,59556,275,4.163,0.649,0.588,755,7007 -Curgies,59166,1159,6.070,0.784,0.710,743,7024 -Chalaines,55097,323,8.449,0.925,0.838,900,6836 -Courtagnon,51190,64,3.956,0.633,0.573,769,6895 -Burey-la-Côe,55089,88,4.265,0.657,0.595,897,6826 -Courcebœufs,72099,636,16.894,1.308,1.184,496,6782 -Geville,55258,623,34.298,1.864,1.688,903,6858 -Sepvigny,55485,75,6.387,0.804,0.728,900,6834 -Champougny,55100,93,5.905,0.773,0.700,900,6829 -Pougues-les-Eaux,58214,2405,13.031,1.149,1.040,706,6663 -Arâches-la-Frasse,74014,1921,37.609,1.952,1.767,989,6551 -Maxey-sur-Vaise,55328,302,10.908,1.051,0.952,894,6827 -Neugartheim-Ittlenheim,67228,797,4.202,0.652,0.590,1033,6849 -Viesly,59614,1552,10.637,1.038,0.940,732,7009 -Saint-Remy-Chaussée,59542,510,5.185,0.725,0.656,761,7011 -Louplande,72169,1467,18.499,1.369,1.240,483,6764 -Villers-aux-Nœuds,51631,176,6.471,0.810,0.733,771,6899 -Quérénaing,59480,905,4.262,0.657,0.595,738,7020 -Bischwihr,68038,1000,3.254,0.574,0.520,1030,6785 -Saint-Alyre-ès-Montagne,63313,134,41.274,2.045,1.852,696,6478 -Jenlain,59323,1134,5.910,0.774,0.701,745,7026 -Thièvres,80756,62,3.676,0.610,0.552,660,7002 -Broussey-Raulecourt,55085,278,21.178,1.465,1.326,903,6859 -Ménétréols-sous-Vatan,36116,118,28.175,1.690,1.530,608,6655 -Bermerain,59069,717,6.629,0.820,0.742,740,7019 -Goussaincourt,55217,120,10.344,1.024,0.927,900,6824 -Steinbourg,67478,2016,12.626,1.131,1.024,1024,6863 -Ourches-sur-Meuse,55396,218,10.317,1.022,0.925,898,6842 -Allichamps,52006,343,2.706,0.524,0.474,839,6832 -Le Buisson,51095,87,6.808,0.831,0.752,829,6850 -Saint-Gilles-Croix-de-Vie,85222,7570,10.160,1.015,0.919,327,6634 -Bassuet,51040,255,8.379,0.921,0.834,824,6859 -Baudonvilliers,55031,383,3.040,0.555,0.503,848,6844 -Sauxillanges,63415,1235,24.861,1.587,1.437,727,6494 -Les Rouges-Eaux,88398,89,5.981,0.778,0.704,979,6801 -Raucourt-au-Bois,59494,173,1.041,0.325,0.294,747,7012 -Solesmes,59571,4387,23.220,1.534,1.389,734,7008 -Fresnoy,62357,66,2.474,0.501,0.454,639,7032 -Noyelles-sur-Sambre,59439,288,6.544,0.814,0.737,759,7008 -Pont-sur-Sambre,59467,2542,11.322,1.071,0.970,761,7014 -Arleux-en-Gohelle,62039,841,6.296,0.799,0.723,689,7031 -Amfroipret,59006,228,1.539,0.395,0.358,754,7019 -Prix-lès-Mézières,8346,1353,5.076,0.717,0.649,821,6962 -Ventiseri,2B342,2480,47.023,2.183,1.977,1232,6111 -Rumilly,62729,248,7.061,0.846,0.766,630,7056 -Saint-Just-d'Avray,69217,752,17.594,1.335,1.209,816,6546 -Heiltz-l'Évêque,51290,302,9.508,0.982,0.889,825,6854 -Hargnies,59283,606,5.173,0.724,0.656,759,7017 -Coatréven,22042,492,9.287,0.970,0.878,238,6870 -Preux-au-Sart,59473,309,5.113,0.720,0.652,752,7022 -Sainte-Dode,32373,213,18.915,1.384,1.253,485,6264 -Mognéville,55340,376,18.516,1.370,1.240,844,6854 -Sermaize-les-Bains,51531,1967,17.652,1.337,1.211,843,6854 -Moëslains,52327,430,1.584,0.401,0.363,839,6837 -Crozon,29042,7539,80.574,2.857,2.587,142,6827 -Saint-Hilaire-Luc,19210,71,10.755,1.044,0.945,636,6470 -Arlempdes,43008,134,13.783,1.182,1.070,773,6418 -Potelle,59468,379,4.031,0.639,0.579,747,7017 -Locon,62520,2399,9.463,0.979,0.886,677,7051 -Neuvilly,59430,1125,12.544,1.127,1.020,736,7003 -Bellignies,59065,833,5.218,0.727,0.658,755,7027 -Romilly-sur-Seine,10323,14459,25.475,1.607,1.455,752,6826 -Remennecourt,55424,55,2.794,0.532,0.482,839,6857 -Vendegies-sur-Écaillon,59608,1075,6.561,0.815,0.738,738,7020 -Pommereuil,59465,774,6.468,0.810,0.733,741,7001 -Hénin-Beaumont,62427,25901,20.701,1.448,1.311,698,7040 -Taisnières-en-Thiérache,59583,464,8.537,0.930,0.842,756,7005 -Landrecies,59331,3491,21.674,1.482,1.342,748,7005 -Vuillery,2829,43,1.075,0.330,0.299,728,6925 -Hallignicourt,52235,284,11.791,1.093,0.990,837,6842 -Poix-du-Nord,59464,2199,8.651,0.936,0.847,745,7008 -Saint-Quentin-de-Caplong,33467,245,11.257,1.068,0.967,473,6413 -Abbeville,80001,23231,26.356,1.634,1.479,617,6998 -Outines,51419,134,15.455,1.251,1.133,824,6833 -Lovagny,74152,1301,5.431,0.742,0.672,935,6540 -Andernay,55011,254,4.300,0.660,0.598,845,6856 -Roussent,62723,240,5.189,0.725,0.656,614,7030 -Boussières-sur-Sambre,59103,523,3.279,0.576,0.522,763,7016 -Waziers,59654,7477,4.329,0.662,0.599,709,7032 -Wannehain,59638,1188,3.717,0.614,0.556,718,7054 -Rœulx,59504,3830,4.052,0.641,0.580,724,7024 -Hauteville,51286,243,10.856,1.049,0.950,831,6841 -Jussecourt-Minecourt,51311,210,9.055,0.958,0.867,829,6856 -Viré-en-Champagne,72379,202,11.367,1.073,0.972,455,6767 -Azincourt,62069,303,8.607,0.934,0.846,635,7038 -Lourches,59361,3942,2.663,0.519,0.470,724,7024 -Favresse,51246,224,10.314,1.022,0.925,824,6848 -Moncetz-l'Abbaye,51373,95,6.967,0.840,0.761,821,6839 -Marquette-en-Ostrevant,59387,1861,7.486,0.871,0.789,720,7022 -Roost-Warendin,59509,6191,7.160,0.852,0.771,707,7033 -Bilwisheim,67039,463,2.552,0.508,0.460,1044,6857 -Bruille-lez-Marchiennes,59113,1325,4.366,0.665,0.602,717,7027 -Aniche,59008,10303,6.526,0.813,0.736,720,7026 -Écaillon,59185,1942,4.021,0.638,0.578,715,7030 -Jettingen,68158,506,6.334,0.801,0.725,1028,6728 -Sars-et-Rosières,59554,574,2.583,0.512,0.464,723,7038 -Alsting,57013,2573,5.724,0.762,0.690,991,6904 -Vouillers,51654,255,8.278,0.916,0.829,834,6844 -Chepniers,17099,653,28.136,1.688,1.528,435,6468 -Pernes-lès-Boulogne,62653,434,7.817,0.890,0.806,607,7072 -Louvil,59364,828,2.522,0.506,0.458,712,7051 -Bouqueval,95094,308,2.824,0.535,0.484,659,6881 -Montagnieu,1255,609,6.213,0.793,0.718,890,6524 -Trois-Fontaines-l'Abbaye,51583,206,43.910,2.109,1.910,848,6851 -Dompremy,51215,155,3.661,0.609,0.551,827,6850 -Chartainvilliers,28084,730,9.152,0.963,0.872,594,6826 -Montenescourt,62586,457,5.147,0.722,0.654,673,7024 -Bréxent-Énocq,62176,688,7.280,0.859,0.778,608,7045 -Hendecourt-lès-Cagnicourt,62424,314,8.801,0.944,0.855,695,7014 -Humerœuille,62467,174,3.224,0.572,0.518,644,7034 -Somain,59574,12488,12.294,1.116,1.010,721,7027 -Huby-Saint-Leu,62461,886,12.555,1.128,1.021,633,7034 -Masny,59390,4132,7.113,0.849,0.769,715,7030 -Autingues,62059,287,2.982,0.550,0.498,628,7084 -Puisieulx,51450,413,9.066,0.958,0.867,781,6902 -Plœuc-L'Hermitage,22203,4054,84.124,2.920,2.644,268,6815 -Vauclerc,51598,500,6.141,0.789,0.714,825,6847 -Bailly-le-Franc,10026,39,6.050,0.783,0.709,823,6825 -Cordey,14180,153,4.576,0.681,0.617,465,6866 -Planques,62659,83,6.200,0.793,0.718,637,7042 -Peyreleau,12180,74,16.305,1.285,1.163,716,6339 -Vavray-le-Petit,51602,66,5.390,0.739,0.669,829,6856 -Les Trois-Moutiers,86274,1084,35.798,1.904,1.724,472,6663 -Bassu,51039,111,10.297,1.021,0.924,825,6860 -Isle-sur-Marne,51300,101,5.425,0.741,0.671,823,6838 -Villers-le-Sec,51635,121,5.843,0.769,0.696,836,6857 -Verchin,62843,243,10.705,1.041,0.943,643,7048 -Brousseval,52079,684,5.984,0.779,0.705,845,6822 -Orain,21468,97,13.578,1.173,1.062,886,6726 -Canchy,80167,324,6.448,0.808,0.732,618,7012 -Dourges,62274,5828,10.463,1.030,0.933,701,7040 -Villiers-au-Bouin,37279,758,30.418,1.756,1.590,497,6720 -Orconte,51417,400,13.745,1.180,1.068,831,6843 -Feillens,1159,3254,14.900,1.229,1.113,847,6582 -Écollemont,51223,54,2.822,0.535,0.484,829,6837 -Cheminon,51144,611,27.705,1.675,1.517,846,6852 -Nielles-lès-Calais,62615,278,2.521,0.505,0.457,615,7089 -Vassincourt,55531,269,7.974,0.899,0.814,847,6858 -Voillecomte,52543,540,14.476,1.211,1.096,838,6822 -Frampas,52206,163,10.283,1.021,0.924,837,6828 -Laissey,25323,440,2.834,0.536,0.485,945,6695 -Scrupt,51528,134,11.528,1.081,0.979,830,6847 -Tromarey,70509,95,6.091,0.786,0.712,906,6695 -Rives Dervoises,52411,1385,78.253,2.816,2.550,822,6820 -Ambrières,51008,227,10.020,1.008,0.913,833,6838 -Breconchaux,25088,96,3.325,0.580,0.525,946,6698 -Ponthion,51441,111,7.223,0.855,0.774,829,6850 -Troisfontaines-la-Ville,52497,435,38.091,1.965,1.779,853,6826 -Uzemain,88484,1061,27.657,1.674,1.516,951,6782 -Saint-Roman-de-Malegarde,84117,331,8.525,0.929,0.841,854,6353 -Heiltz-le-Maurupt,51289,413,16.346,1.287,1.165,834,6854 -Plichancourt,51433,241,5.964,0.777,0.704,824,6850 -Greuville,76327,382,2.990,0.550,0.498,548,6969 -Sin-le-Noble,59569,15446,11.527,1.081,0.979,707,7027 -Margerie-Chantagret,42137,802,7.838,0.891,0.807,780,6491 -Thiéblemont-Farémont,51567,549,9.204,0.966,0.875,825,6844 -Étrepy,51240,139,7.678,0.882,0.799,834,6852 -Raimbeaucourt,59489,4055,11.086,1.060,0.960,705,7036 -Oost-Cappel,59448,471,4.031,0.639,0.579,670,7092 -Antilly,57024,167,4.741,0.693,0.627,935,6905 -Lacres,62483,251,8.281,0.916,0.829,614,7058 -Cappelle-en-Pévèle,59129,2233,8.145,0.908,0.822,712,7043 -Wanquetin,62874,720,10.359,1.024,0.927,671,7021 -Perthes,52386,530,13.105,1.152,1.043,831,6841 -Châtillon-Guyotte,25132,127,4.454,0.672,0.608,940,6696 -Bignicourt-sur-Saulx,51060,191,11.059,1.059,0.959,833,6851 -Wandignies-Hamage,59637,1288,6.280,0.798,0.723,725,7034 -Marcq-en-Ostrevent,59379,727,6.222,0.794,0.719,718,7022 -Rieulay,59501,1360,7.358,0.863,0.781,718,7032 -Gœulzin,59263,1018,4.774,0.695,0.629,706,7024 -Harnes,62413,12524,10.823,1.047,0.948,694,7041 -Sapignicourt,51522,403,4.803,0.698,0.632,836,6840 -Matignicourt-Goncourt,51356,144,9.345,0.973,0.881,825,6844 -Humbécourt,52244,794,21.054,1.461,1.323,841,6835 -Maizicourt,80503,194,5.835,0.769,0.696,637,7010 -Magneux,52300,172,5.824,0.768,0.695,850,6826 -Saint-Corneille,72275,1404,11.188,1.065,0.964,503,6778 -Vavray-le-Grand,51601,166,6.968,0.840,0.761,827,6856 -Gilhoc-sur-Ormèze,7095,454,21.089,1.462,1.324,831,6436 -Bachy,59042,1690,6.441,0.808,0.732,718,7048 -Neuillé-Pont-Pierre,37167,1969,39.171,1.992,1.804,512,6720 -Mitzach,68211,399,6.364,0.803,0.727,998,6757 -Saint-Eulien,51478,452,8.272,0.915,0.828,837,6842 -Mérignies,59398,2998,8.662,0.937,0.848,709,7045 -Orgnac-l'Aven,7168,574,21.702,1.483,1.343,815,6355 -Sogny-en-l'Angle,51539,57,6.716,0.825,0.747,831,6859 -Abscon,59002,4440,7.253,0.857,0.776,720,7026 -Douvres-la-Délivrande,14228,5126,10.851,1.049,0.950,452,6918 -Muncq-Nieurlet,62598,719,11.480,1.079,0.977,637,7084 -Franleu,80345,543,8.431,0.924,0.837,604,7000 -Bournonville,62165,244,8.792,0.944,0.855,620,7066 -Arromanches-les-Bains,14021,503,1.357,0.371,0.336,438,6922 -Beurey-sur-Saulx,55049,412,11.555,1.082,0.980,846,6851 -Épécamps,80270,5,1.616,0.405,0.367,640,7002 -Campagnac,12047,453,41.818,2.058,1.863,705,6364 -Montigny-en-Ostrevent,59414,4786,5.443,0.743,0.673,711,7029 -Bouchain,59092,3998,12.433,1.122,1.016,721,7020 -Charenton-du-Cher,18052,1063,48.905,2.226,2.015,677,6627 -Fretin,59256,3379,13.304,1.161,1.051,712,7051 -Saint-Martin-de-Vaulserre,38420,266,3.964,0.634,0.574,908,6491 -Dechy,59170,5307,9.299,0.971,0.879,709,7025 -Cantin,59126,1549,9.293,0.970,0.878,709,7025 -Tilloy-lès-Mofflaines,62817,1438,7.695,0.883,0.799,689,7019 -Lewarde,59345,2422,3.902,0.629,0.570,713,7028 -Anhiers,59007,904,1.714,0.417,0.378,710,7035 -Caveirac,30075,4117,15.331,1.246,1.128,800,6303 -Coutiches,59158,3001,16.363,1.288,1.166,716,7039 -Villars-Saint-Georges,25616,270,5.206,0.726,0.657,915,6674 -Bouy-Luxembourg,10056,220,12.074,1.106,1.001,795,6809 -Erchin,59199,695,5.281,0.731,0.662,711,7024 -Magnicourt-en-Comte,62536,637,9.937,1.003,0.908,661,7035 -Alliancelles,51006,140,6.965,0.840,0.761,839,6857 -Combrailles,63115,217,20.532,1.442,1.306,675,6525 -Cobrieux,59150,525,2.841,0.537,0.486,718,7048 -Gratibus,80386,183,5.311,0.734,0.665,666,6954 -Sains-lès-Fressin,62738,165,6.757,0.827,0.749,634,7042 -Arleux,59015,3130,11.145,1.063,0.962,708,7019 -Saint-Didier-la-Forêt,3227,385,33.587,1.845,1.670,723,6571 -Lormes,58145,1296,52.000,2.295,2.078,760,6693 -Beaufort-Blavincourt,62092,399,8.146,0.908,0.822,661,7020 -Férin,59228,1472,5.521,0.748,0.677,707,7027 -Champcella,5031,185,30.404,1.755,1.589,976,6406 -Outrepont,51420,86,3.803,0.621,0.562,825,6854 -Saméon,59551,1641,8.847,0.947,0.857,726,7042 -Râches,59486,2738,4.859,0.702,0.636,711,7035 -L'Abergement-Sainte-Colombe,71002,1213,19.608,1.410,1.277,856,6628 -Planrupt,52391,306,8.383,0.922,0.835,832,6827 -Saint-Merd-de-Lapleau,19225,183,24.977,1.591,1.441,627,6459 -Pont-à-Marcq,59466,2895,2.241,0.477,0.432,707,7047 -Ogeu-les-Bains,64421,1295,23.082,1.529,1.384,418,6236 -Aix-Noulette,62019,3901,10.445,1.029,0.932,681,7037 -Notre-Dame-de-Livoye,50379,141,3.615,0.605,0.548,393,6858 -Auchy-lez-Orchies,59029,1532,7.772,0.887,0.803,712,7042 -Saint-Philibert,56233,1497,7.312,0.861,0.780,249,6735 -Saint-Vrain,51521,226,11.630,1.086,0.983,838,6846 -Val-de-Vière,51218,129,19.205,1.395,1.263,826,6862 -Rancourt-sur-Ornain,55414,197,9.918,1.002,0.907,842,6859 -Cysoing,59168,5033,13.634,1.175,1.064,713,7052 -Giffaumont-Champaubert,51269,270,28.193,1.690,1.530,825,6831 -Bousignies,59100,327,3.150,0.565,0.512,726,7038 -Courcelles-Sapicourt,51181,365,3.873,0.626,0.567,761,6909 -Estaires,59212,6406,13.415,1.166,1.056,678,7062 -La Ferté-Imbault,41084,977,51.411,2.282,2.066,624,6706 -Hornaing,59314,3553,8.938,0.952,0.862,725,7033 -Étalondes,76252,1069,4.608,0.683,0.618,584,6995 -Aubusson,23008,3400,19.196,1.395,1.263,635,6537 -Genouillac,23089,743,35.788,1.904,1.724,627,6583 -Revigny-sur-Ornain,55427,2860,19.372,1.401,1.268,847,6862 -Escaudain,59205,9588,10.254,1.019,0.923,722,7027 -Habsheim,68118,4833,15.665,1.260,1.141,1030,6745 -Fenain,59227,5323,5.832,0.769,0.696,722,7033 -Artix,64061,3411,9.044,0.957,0.866,409,6261 -Écriennes,51224,170,6.367,0.803,0.727,825,6846 -Saint-Barthélemy,50450,330,6.903,0.836,0.757,410,6851 -Chancenay,52104,1094,10.107,1.012,0.916,846,6845 -Tilques,62819,1107,7.261,0.858,0.777,641,7075 -Mortain-Bocage,50359,2955,63.018,2.527,2.288,405,6840 -Louvemont,52294,705,21.084,1.462,1.324,838,6826 -Rivolet,69167,578,16.146,1.279,1.158,826,6546 -Cantaing-sur-Escaut,59125,397,6.466,0.809,0.732,713,7007 -Robert-Espagne,55435,843,7.490,0.871,0.789,848,6847 -Changy,51122,119,6.252,0.796,0.721,823,6853 -Glux-en-Glenne,58128,94,21.976,1.492,1.351,777,6647 -Pont-de-l'Isère,26250,3415,10.518,1.032,0.934,850,6436 -Gérardmer,88196,8133,55.654,2.375,2.150,988,6786 -Senoncourt-les-Maujouy,55482,90,14.896,1.229,1.113,869,6887 -Lapenty,50263,374,15.068,1.236,1.119,404,6835 -Nixéville-Blercourt,55385,489,19.737,1.414,1.280,861,6894 -Hélesmes,59297,1975,7.323,0.861,0.780,724,7028 -Willencourt,62891,136,2.415,0.495,0.448,633,7015 -Auberchicourt,59024,4405,7.089,0.848,0.768,717,7024 -Cormont,62241,327,9.814,0.997,0.903,609,7051 -Pléhédel,22178,1301,12.713,1.135,1.028,260,6859 -Récourt-le-Creux,55420,78,14.377,1.207,1.093,873,6883 -Genech,59258,2685,7.482,0.871,0.789,718,7048 -Authie,80043,297,10.014,1.007,0.912,662,7004 -Beauchamps-sur-Huillard,45027,413,18.091,1.354,1.226,663,6761 -Palluel,62646,572,2.750,0.528,0.478,704,7019 -Saint-Urbain-Maconcourt,52456,649,26.054,1.625,1.471,860,6812 -Tilloy-lez-Marchiennes,59596,527,5.505,0.747,0.676,724,7036 -Pretz-en-Argonne,55409,76,9.891,1.001,0.906,859,6875 -Templeuve-en-Pévèle,59586,5930,15.869,1.268,1.148,711,7051 -Bersée,59071,2213,11.147,1.063,0.962,712,7040 -Neuville-en-Verdunois,55380,60,13.476,1.169,1.058,871,6877 -Rosult,59511,1908,8.122,0.907,0.821,724,7040 -Saint-Mard-sur-le-Mont,51500,120,13.724,1.179,1.067,839,6871 -Aix-en-Pévèle,59004,1185,6.549,0.815,0.738,721,7046 -Cucq,62261,5120,10.100,1.012,0.916,603,7047 -Forest-Montiers,80332,400,10.263,1.020,0.924,607,7017 -Saint-Josse,62752,1148,20.963,1.457,1.319,607,7042 -Pecquencourt,59456,5973,9.610,0.987,0.894,714,7032 -Villemaury,28330,1411,77.392,2.800,2.535,590,6766 -Fromeréville-les-Vallons,55200,210,20.268,1.433,1.297,865,6901 -Saint-Denis-d'Anjou,53210,1557,41.880,2.060,1.865,443,6751 -Féchain,59224,1746,5.152,0.723,0.655,715,7018 -Mastaing,59391,853,6.241,0.795,0.720,720,7024 -Lieu-Saint-Amand,59348,1325,5.133,0.721,0.653,723,7020 -Courouvre,55129,33,8.647,0.936,0.847,871,6876 -Mézy-Moulins,2484,523,4.527,0.677,0.613,737,6884 -Brillon,59109,721,2.847,0.537,0.486,724,7036 -Guchan,65211,136,2.628,0.516,0.467,482,6197 -Wallon-Cappel,59634,825,5.456,0.744,0.674,663,7071 -Villeperrot,89465,322,8.183,0.911,0.825,714,6794 -Guyans-Durnes,25300,275,9.149,0.963,0.872,948,6674 -Flirey,54200,149,15.768,1.264,1.144,911,6866 -Rembercourt-Sommaisne,55423,347,22.292,1.503,1.361,858,6873 -Sus-Saint-Léger,62804,374,7.386,0.865,0.783,659,7018 -Pommeret,22246,2070,13.578,1.173,1.062,283,6832 -Maizey,55312,166,15.028,1.234,1.117,883,6874 -Les Trois-Domaines,55254,127,16.641,1.298,1.175,865,6878 -Erre,59203,1594,5.862,0.771,0.698,721,7027 -Dompcevrin,55159,315,10.939,1.053,0.953,883,6872 -Tréflaouénan,29285,504,8.241,0.914,0.828,177,6859 -Beausite,55040,249,25.524,1.608,1.456,865,6879 -Bouquemont,55064,113,7.458,0.869,0.787,876,6877 -Vecqueville,52512,541,5.278,0.731,0.662,860,6819 -Rarécourt,55416,215,15.376,1.248,1.130,852,6887 -Nubécourt,55389,246,27.554,1.671,1.513,862,6882 -Reviers,14535,572,4.358,0.664,0.601,447,6917 -Fleurat,23082,305,12.255,1.114,1.009,601,6569 -Avelin,59034,2704,13.864,1.185,1.073,705,7051 -Armbouts-Cappel,59016,2296,10.184,1.016,0.920,652,7100 -Saint-Geniès-de-Varensal,34257,205,11.936,1.100,0.996,699,6286 -Kœur-la-Grande,55263,168,12.239,1.114,1.009,880,6867 -Mondicourt,62583,608,5.065,0.716,0.648,661,7009 -Carvin,62215,17167,20.975,1.458,1.320,697,7041 -Gouaux,65205,57,6.044,0.783,0.709,487,6199 -Moulle,62595,1110,5.455,0.743,0.673,644,7079 -Merris,59399,1025,10.140,1.014,0.918,674,7070 -Sommedieue,55492,965,33.447,1.841,1.667,881,6896 -Le Moutherot,25414,129,1.248,0.356,0.322,906,6686 -Rupt-devant-Saint-Mihiel,55448,56,6.311,0.800,0.724,878,6867 -Urville,14719,655,6.179,0.791,0.716,458,6885 -Campagne-lès-Boulonnais,62202,613,13.335,1.162,1.052,629,7060 -Champfleury,51115,540,3.990,0.636,0.576,775,6900 -Ennevelin,59197,2186,9.986,1.006,0.911,710,7047 -Houchin,62456,706,4.494,0.675,0.611,674,7041 -Buigny-Saint-Maclou,80149,515,7.314,0.861,0.780,614,7007 -Erquinghem-Lys,59202,5081,9.086,0.959,0.868,686,7064 -Loffre,59354,737,2.610,0.514,0.465,713,7029 -Courcelles-sur-Aire,55128,40,11.879,1.097,0.993,867,6874 -Ancemont,55009,562,13.320,1.162,1.052,872,6889 -Moutiers-au-Perche,61300,405,33.831,1.851,1.676,546,6826 -Clermont-en-Argonne,55117,1491,67.095,2.607,2.360,845,6894 -Hordain,59313,1408,5.572,0.751,0.680,722,7017 -Simencourt,62796,557,5.145,0.722,0.654,674,7019 -Kœur-la-Petite,55264,295,20.540,1.443,1.307,880,6862 -Warlaing,59642,570,3.943,0.632,0.572,724,7035 -Lissac-et-Mouret,46175,919,15.511,1.254,1.135,621,6392 -Peypin-d'Aigues,84090,656,17.280,1.323,1.198,905,6302 -Précilhon,64460,401,6.373,0.804,0.728,411,6241 -Raival,55442,256,19.133,1.392,1.260,867,6867 -Le Favril,59223,516,11.482,1.079,0.977,751,6997 -Jouy-en-Argonne,55257,49,6.356,0.802,0.726,864,6895 -Recques-sur-Course,62698,284,4.805,0.698,0.632,612,7046 -Ebblinghem,59184,681,9.210,0.966,0.875,661,7071 -La Berthenoux,36017,412,40.116,2.016,1.825,626,6627 -Les Paroches,55401,418,10.286,1.021,0.924,882,6870 -Virandeville,50643,797,8.255,0.915,0.828,359,6950 -Brabant-en-Argonne,55068,105,7.985,0.899,0.814,856,6891 -Ippécourt,55251,95,10.513,1.032,0.934,860,6885 -Mons-en-Pévèle,59411,2125,12.286,1.116,1.010,707,7044 -Grimaucourt-en-Woëvre,55219,105,5.657,0.757,0.685,888,6899 -Agenvillers,80006,218,5.972,0.778,0.704,623,7008 -Lacroix-sur-Meuse,55268,720,21.160,1.464,1.326,884,6876 -Faumont,59222,2148,9.567,0.985,0.892,711,7038 -Choisey,39150,1064,8.453,0.925,0.838,885,6667 -Sivry-la-Perche,55489,272,12.149,1.109,1.004,862,6897 -Dieue-sur-Meuse,55154,1447,15.926,1.270,1.150,876,6891 -Rousseloy,60551,315,3.908,0.629,0.570,657,6912 -Nicey-sur-Aire,55384,123,10.975,1.055,0.955,868,6866 -Longuevillette,80491,76,2.035,0.454,0.411,648,7004 -Flines-lez-Raches,59239,5544,19.186,1.394,1.262,710,7038 -Bourghelles,59096,1676,6.582,0.817,0.740,718,7049 -Hamel,59280,778,3.582,0.602,0.545,704,7019 -Bihucourt,62131,357,4.703,0.690,0.625,685,7005 -Lallaing,59327,6164,6.001,0.780,0.706,714,7032 -Aubigny-au-Bac,59026,1184,5.165,0.723,0.655,714,7018 -Beuvry-la-Forêt,59080,2743,12.603,1.130,1.023,719,7041 -Moncheaux,59408,1511,4.965,0.709,0.642,708,7041 -Bouvines,59106,691,2.711,0.524,0.474,714,7055 -Houplines,59317,7840,11.291,1.070,0.969,695,7063 -Sainghin-en-Mélantois,59523,2687,10.545,1.034,0.936,709,7054 -Villotte-devant-Louppy,55569,165,11.387,1.074,0.972,850,6867 -Saint-Sauveur-d'Émalleville,76650,1203,7.572,0.876,0.793,507,6948 -Bonzée,55060,353,21.259,1.468,1.329,885,6888 -Pouilly-sur-Serre,2617,513,9.795,0.996,0.902,744,6953 -Willems,59660,3014,5.819,0.768,0.695,714,7058 -Orcier,74206,943,9.403,0.976,0.884,970,6584 -Dombasle-en-Argonne,55155,415,11.576,1.083,0.981,862,6897 -Gruson,59275,1204,3.142,0.564,0.511,714,7056 -Annequin,62034,2239,3.979,0.635,0.575,681,7047 -Liebsdorf,68184,313,4.257,0.657,0.595,1016,6719 -Château-l'Hermitage,72072,263,9.415,0.977,0.885,491,6750 -Baisieux,59044,4750,8.695,0.939,0.850,719,7056 -Guemps,62393,1097,15.816,1.266,1.146,628,7092 -Magnicourt-sur-Canche,62537,119,4.522,0.677,0.613,657,7024 -Lavoye,55285,150,10.007,1.007,0.912,860,6885 -Brocourt-en-Argonne,55082,47,6.642,0.820,0.742,860,6892 -Lesquin,59343,7912,8.480,0.927,0.839,707,7053 -Leubringhen,62503,293,7.990,0.900,0.815,613,7085 -Oxelaëre,59454,528,4.709,0.691,0.626,662,7078 -Lille,59350,232440,34.791,1.878,1.700,698,7060 -Lahaymeix,55269,77,12.562,1.128,1.021,880,6874 -Séricourt,62791,55,2.457,0.499,0.452,651,7024 -Zudausques,62905,890,7.222,0.855,0.774,641,7075 -Queudes,51451,99,10.095,1.011,0.915,757,6842 -Verlincthun,62845,441,7.087,0.847,0.767,607,7061 -Bayencourt,80057,80,1.861,0.434,0.393,670,7005 -Lezennes,59346,3143,2.149,0.467,0.423,707,7058 -Malijai,4108,1984,26.863,1.650,1.494,948,6330 -Saigneville,80691,413,12.770,1.137,1.029,607,7003 -Estrées,59214,1119,5.809,0.767,0.694,704,7021 -Chéreng,59146,2989,4.194,0.652,0.590,716,7056 -Anstaing,59013,1432,2.305,0.483,0.437,712,7056 -Tilly-sur-Meuse,55512,293,13.754,1.180,1.068,879,6882 -Loos,59360,22076,6.908,0.837,0.758,702,7055 -Camphin-en-Pévèle,59124,2363,6.467,0.809,0.732,720,7054 -Lisle-en-Barrois,55295,39,29.025,1.715,1.553,852,6869 -Cabanac-et-Villagrains,33077,2375,69.479,2.653,2.402,418,6399 -Hermies,62440,1184,13.045,1.150,1.041,700,7001 -Colayrac-Saint-Cirq,47069,3042,21.492,1.476,1.336,509,6354 -Inchy-en-Artois,62469,622,11.146,1.063,0.962,702,7006 -Chocques,62224,2920,7.945,0.897,0.812,667,7050 -Ville-sur-Cousances,55567,139,9.692,0.991,0.897,858,6887 -Sauchy-Lestrée,62781,453,9.051,0.958,0.867,710,7013 -Mont-sur-Monnet,39366,248,20.254,1.433,1.297,915,6625 -Beaumont-Louestault,37021,1675,55.711,2.376,2.151,520,6721 -Landrecourt-Lempire,55276,208,14.609,1.217,1.102,869,6893 -Lisseuil,63197,118,6.906,0.836,0.757,693,6550 -Oisy-le-Verger,62638,1231,11.367,1.073,0.972,709,7019 -Bellinghem,62471,1073,7.787,0.888,0.804,646,7065 -Gosnay,62377,946,2.232,0.476,0.431,670,7045 -Noyelles-sur-Mer,80600,727,20.111,1.427,1.292,611,7013 -Marquion,62559,981,8.278,0.916,0.829,709,7012 -Chauvoncourt,55111,453,10.108,1.012,0.916,883,6867 -Gimécourt,55210,39,10.142,1.014,0.918,874,6862 -Hundsbach,68148,345,4.076,0.643,0.582,1026,6733 -La Tieule,48191,90,24.154,1.564,1.416,711,6368 -Havrincourt,62421,401,16.789,1.304,1.181,707,7001 -Bannoncourt,55027,153,8.794,0.944,0.855,883,6875 -Laboule,7118,133,17.531,1.333,1.207,790,6391 -Rumaucourt,62728,687,5.517,0.748,0.677,703,7015 -Sauchy-Cauchy,62780,365,4.102,0.645,0.584,705,7014 -Ribécourt-la-Tour,59500,375,8.794,0.944,0.855,708,6999 -Augères,23010,119,12.514,1.126,1.019,603,6554 -Seigneulles,55479,178,11.695,1.089,0.986,865,6864 -Pechbusque,31411,863,3.146,0.565,0.512,576,6269 -Rupt-en-Woëvre,55449,302,17.139,1.318,1.193,884,6891 -Albon-d'Ardèche,7006,159,9.153,0.963,0.872,815,6413 -Écourt-Saint-Quentin,62284,1668,9.465,0.979,0.886,704,7020 -Ménil-Annelles,8286,104,9.219,0.966,0.875,807,6926 -Génicourt-sur-Meuse,55204,285,8.016,0.901,0.816,880,6887 -Bavincourt,62086,382,7.646,0.880,0.797,671,7013 -Estrablin,38157,3332,20.757,1.450,1.313,850,6493 -Fresnes-au-Mont,55197,172,15.892,1.269,1.149,878,6871 -Sains-lès-Marquion,62739,319,6.261,0.796,0.721,704,7010 -Graincourt-lès-Havrincourt,62384,633,11.633,1.086,0.983,710,7005 -Anneux,59010,279,5.419,0.741,0.671,707,7007 -Saint-André-en-Barrois,55453,67,9.309,0.971,0.879,862,6882 -Seuil-d'Argonne,55517,518,25.540,1.609,1.457,850,6873 -Rambluzin-et-Benoite-Vaux,55411,100,18.380,1.365,1.236,871,6876 -Jeux-lès-Bard,21324,53,3.251,0.574,0.520,794,6714 -Boursies,59097,386,7.634,0.879,0.796,705,7003 -Lécluse,59336,1369,4.925,0.706,0.639,701,7019 -Récicourt,55419,170,13.482,1.169,1.058,860,6899 -Noyelles-lès-Seclin,59437,879,2.381,0.491,0.445,699,7054 -Baralle,62081,482,7.982,0.899,0.814,702,7014 -Haudiomont,55237,220,9.367,0.974,0.882,884,6891 -Préty,71359,544,12.404,1.121,1.015,851,6608 -Hallines,62403,1206,5.708,0.760,0.688,643,7065 -Aigné,72001,1631,12.675,1.133,1.026,483,6778 -Libercourt,62907,8396,6.542,0.814,0.737,701,7044 -Beurières,63039,301,16.264,1.284,1.163,758,6483 -Saint-Léger,62754,439,7.536,0.874,0.791,691,7008 -Brebières,62173,4908,10.766,1.044,0.945,704,7025 -Aix-en-Issart,62018,264,10.256,1.019,0.923,617,7044 -Èvres,55185,109,11.702,1.089,0.986,854,6879 -Calleville-les-Deux-Églises,76153,336,5.629,0.755,0.684,558,6958 -Souilly,55498,439,26.662,1.644,1.489,863,6883 -Haudainville,55236,960,11.176,1.064,0.963,875,6896 -Bours,62166,614,12.042,1.105,1.000,660,7040 -Louppy-le-Château,55304,157,18.908,1.384,1.253,852,6863 -Villotte-sur-Aire,55570,195,14.006,1.191,1.078,870,6862 -Boussay,44022,2632,26.503,1.639,1.484,388,6671 -Ambly-sur-Meuse,55007,255,6.357,0.803,0.727,881,6882 -Molring,57470,7,3.279,0.576,0.522,981,6872 -Grand-Failly,54236,320,22.162,1.498,1.356,878,6926 -Phalempin,59462,4757,8.014,0.901,0.816,701,7044 -Autrécourt-sur-Aire,55017,113,10.930,1.052,0.952,860,6885 -Consolation-Maisonnettes,25161,34,4.296,0.660,0.598,973,6681 -Luglon,40165,390,41.430,2.049,1.855,406,6339 -Évin-Malmaison,62321,4580,4.561,0.680,0.616,701,7038 -Cauvicourt,14145,498,9.737,0.993,0.899,463,6891 -Lemmes,55286,244,11.057,1.058,0.958,867,6889 -Thierville-sur-Meuse,55505,3076,11.552,1.082,0.980,869,6901 -Castelnau-de-Guers,34056,1191,22.607,1.513,1.370,740,6258 -Belleray,55042,496,5.071,0.717,0.649,871,6893 -Préfailles,44136,1223,5.170,0.724,0.656,308,6682 -Cuincy,59165,6454,7.004,0.842,0.762,700,7029 -Guémappe,62392,341,4.491,0.675,0.611,694,7017 -Rouvrois-sur-Meuse,55444,203,6.180,0.791,0.716,883,6875 -Fretterans,71207,286,10.485,1.031,0.933,876,6648 -Wahagnies,59630,2606,5.695,0.760,0.688,701,7042 -Journy,62478,283,3.380,0.585,0.530,628,7073 -Saint-Aignan-de-Couptrain,53196,374,17.274,1.323,1.198,457,6825 -Thillombois,55506,30,13.079,1.151,1.042,875,6877 -Béthelainville,55047,176,12.004,1.103,0.999,859,6898 -Corbehem,62240,2357,2.606,0.514,0.465,704,7026 -Pierrefitte-sur-Aire,55404,313,17.601,1.335,1.209,868,6867 -Seclin,59560,12463,17.443,1.329,1.203,703,7053 -Brêmes,62174,1290,7.308,0.860,0.779,625,7081 -Longchamps-sur-Aire,55301,123,15.773,1.264,1.144,867,6869 -Villers-sur-Meuse,55566,304,7.353,0.863,0.781,876,6882 -Neuvilly-en-Argonne,55383,218,18.288,1.361,1.232,848,6895 -Thumeries,59592,3915,7.068,0.846,0.766,705,7043 -Courchelettes,59156,2804,1.661,0.410,0.371,704,7026 -Chaumont-sur-Aire,55108,133,9.931,1.003,0.908,869,6872 -Saint-Amand-les-Eaux,59526,16147,33.984,1.856,1.680,735,7040 -Tortequesne,62825,809,3.412,0.588,0.532,703,7022 -Beaudéduit,60051,216,3.688,0.611,0.553,631,6955 -Gouy-sous-Bellonne,62383,1363,5.483,0.745,0.675,706,7024 -Bethoncourt,25057,5702,6.603,0.818,0.741,986,6725 -Les Monthairons,55347,390,12.326,1.118,1.012,873,6883 -Bertoncourt,8062,129,6.799,0.830,0.751,800,6938 -Froidos,55199,102,8.708,0.939,0.850,858,6887 -Carelles,53047,265,13.064,1.151,1.042,412,6815 -Nabringhen,62599,206,4.171,0.650,0.589,620,7073 -Dugny-sur-Meuse,55166,1294,19.321,1.399,1.267,869,6887 -Bislée,55054,61,5.027,0.714,0.646,883,6866 -Bourgeauville,14091,108,6.239,0.795,0.720,488,6910 -Machiel,80496,165,6.620,0.819,0.742,615,7019 -Le Fousseret,31193,1898,38.480,1.975,1.788,547,6244 -Foucaucourt-sur-Thabas,55194,57,9.921,1.003,0.908,856,6880 -Uhart-Mixe,64539,206,11.773,1.092,0.989,372,6253 -Attiches,59022,2268,6.746,0.827,0.749,703,7047 -Woimbey,55584,123,15.266,1.244,1.126,881,6879 -Bois-d'Amont,39059,1674,10.363,1.025,0.928,937,6608 -Chartèves,2166,350,8.877,0.948,0.858,736,6886 -Wimmenau,67535,1103,20.899,1.455,1.317,1021,6881 -Lambres-lez-Douai,59329,5152,8.807,0.945,0.856,703,7027 -Flers-en-Escrebieux,59234,5876,7.141,0.851,0.771,700,7033 -Blangy-sur-Ternoise,62138,722,11.616,1.085,0.982,640,7037 -Courcelles-lès-Lens,62249,7630,5.605,0.754,0.683,703,7036 -Monchy-au-Bois,62579,554,11.112,1.061,0.961,677,7009 -Orcines,63263,3364,42.825,2.083,1.886,696,6523 -Authieule,80044,410,4.607,0.683,0.618,656,7007 -Auby,59028,7285,7.138,0.850,0.770,705,7036 -Trézelles,3291,398,18.285,1.361,1.232,749,6583 -Leforest,62497,7112,6.201,0.793,0.718,706,7038 -Felluns,66076,70,6.703,0.824,0.746,656,6185 -Ostricourt,59452,5375,7.586,0.877,0.794,703,7039 -Wallers,59632,5494,21.021,1.459,1.321,726,7033 -Orville,62640,403,11.156,1.063,0.962,660,7006 -La Comté,62232,903,6.746,0.827,0.749,663,7037 -Ablainzevelle,62002,216,4.286,0.659,0.597,682,7005 -Staple,59577,665,9.993,1.006,0.911,659,7073 -Han-sur-Meuse,55229,280,17.217,1.321,1.196,885,6862 -Rollancourt,62719,310,11.613,1.085,0.982,639,7032 -Caours,80171,603,6.142,0.789,0.714,621,7003 -Neuvy,3200,1593,18.986,1.387,1.256,718,6609 -Mingoval,62574,230,3.854,0.625,0.566,668,7032 -Les Hauts-de-Chée,55123,739,50.120,2.253,2.040,862,6862 -Les Souhesmes-Rampont,55497,346,21.680,1.482,1.342,860,6892 -Châtillon-sous-les-Côes,55105,174,10.727,1.043,0.944,881,6897 -Saint-Léger-sur-Vouzance,3239,265,18.245,1.360,1.231,770,6592 -Maulde,59393,1016,5.157,0.723,0.655,731,7044 -Trith-Saint-Léger,59603,6261,6.880,0.835,0.756,737,7026 -Beaulieu-en-Argonne,55038,35,29.641,1.733,1.569,849,6882 -Brizeaux,55081,58,8.341,0.919,0.832,851,6882 -Le Chemin,51143,52,6.278,0.798,0.723,844,6880 -Saint-Mard-sur-Auve,51498,64,10.105,1.012,0.916,828,6881 -Vitry-en-Artois,62865,4636,18.788,1.380,1.249,700,7023 -Rive-de-Gier,42186,15156,7.387,0.865,0.783,826,6495 -Millonfosse,59403,708,3.475,0.593,0.537,725,7036 -Prouvy,59475,2290,4.389,0.667,0.604,732,7028 -Saint-Bris-le-Vineux,89337,1039,31.421,1.784,1.615,747,6740 -Vroil,51658,104,10.344,1.024,0.927,842,6863 -Quinson,4158,427,28.510,1.700,1.539,944,6290 -Douchy-les-Mines,59179,10717,9.197,0.965,0.874,729,7022 -Saint-Christophe-en-Boucherie,36186,256,26.997,1.654,1.498,635,6622 -Nivelle,59434,1301,5.905,0.773,0.700,731,7042 -Futeau,55202,167,1.694,0.414,0.375,847,6886 -Thiennes,59590,910,7.564,0.875,0.792,663,7060 -Le Claon,55116,60,7.278,0.859,0.778,843,6897 -Mons-en-Laonnois,2497,1173,4.203,0.653,0.591,742,6938 -Verrières,51610,412,5.691,0.759,0.687,837,6887 -Auve,51027,299,23.290,1.536,1.391,822,6878 -Vanault-le-Châtel,51589,178,34.800,1.878,1.700,822,6861 -Thiant,59589,2837,8.385,0.922,0.835,730,7021 -Bettignies,59076,310,4.630,0.685,0.620,770,7026 -Isques,62474,1149,7.005,0.842,0.762,605,7064 -Payssous,31408,91,4.143,0.648,0.587,513,6219 -Haspres,59285,2757,12.247,1.114,1.009,731,7018 -Nant-le-Grand,55373,77,11.140,1.062,0.962,862,6843 -Noyers-Auzécourt,55388,283,17.329,1.325,1.200,847,6869 -Méjannes-lès-Alès,30165,1236,6.683,0.823,0.745,793,6333 -Graffigny-Chemin,52227,231,17.337,1.325,1.200,899,6790 -Hérin,59302,4052,4.478,0.674,0.610,731,7027 -Noyelles-sur-Selle,59440,711,5.056,0.716,0.648,728,7019 -Virginy,51646,86,12.242,1.114,1.009,827,6899 -Noyelles-lès-Vermelles,62626,2407,2.536,0.507,0.459,681,7043 -Berzieux,51053,73,11.663,1.087,0.984,834,6898 -Samer,62773,4245,16.863,1.307,1.183,612,7058 -Verchain-Maugré,59610,970,9.627,0.988,0.895,734,7017 -Melesse,35173,6346,32.534,1.816,1.644,354,6800 -Vernancourt,51608,90,9.079,0.959,0.868,835,6861 -Bellaing,59064,1225,3.404,0.587,0.531,729,7030 -Somme-Bionne,51543,84,9.321,0.972,0.880,824,6887 -Campeaux,60122,520,11.366,1.073,0.972,612,6946 -Fromentières,53101,829,22.195,1.500,1.358,429,6758 -Nettancourt,55378,254,11.410,1.075,0.973,841,6868 -Gizaucourt,51274,114,7.837,0.891,0.807,832,6886 -Bérelles,59066,149,5.771,0.765,0.693,780,7014 -Charmont,51130,222,22.830,1.521,1.377,838,6863 -Château-l'Abbaye,59144,884,4.410,0.668,0.605,735,7043 -Brabant-le-Roi,55069,232,11.141,1.062,0.962,848,6863 -Trouley-Labarthe,65454,97,4.496,0.675,0.611,476,6249 -Blécourt,59085,305,3.597,0.604,0.547,716,7012 -Hautmont,59291,14548,12.366,1.119,1.013,768,7015 -Valmy,51588,292,24.252,1.568,1.420,824,6886 -Chastreix,63098,226,45.600,2.149,1.946,685,6492 -Notre-Dame-de-Bliquetuit,76473,749,9.916,1.002,0.907,539,6934 -Offekerque,62634,1160,13.360,1.163,1.053,633,7090 -Écuélin,59188,143,3.385,0.586,0.531,765,7011 -Colleret,59151,1620,18.838,1.382,1.251,777,7020 -Flêtre,59237,974,9.024,0.956,0.866,673,7072 -Esquelbecq,59210,2124,12.274,1.115,1.010,659,7091 -Recquignies,59495,2401,6.151,0.789,0.714,776,7021 -Neufchâtel-Hardelot,62604,3748,20.977,1.458,1.320,605,7056 -La Madelaine-sous-Montreuil,62535,163,2.459,0.499,0.452,611,7043 -Ferrières-en-Gâtinais,45145,3666,27.425,1.667,1.509,683,6774 -Fouquereuil,62349,1547,1.998,0.450,0.407,673,7047 -Bailleul-aux-Cornailles,62070,259,6.788,0.829,0.751,660,7029 -Bussy-le-Repos,51098,134,22.711,1.517,1.374,826,6870 -Solrinnes,59573,136,5.403,0.740,0.670,777,7010 -Cauneille,40077,808,15.235,1.242,1.125,369,6280 -Saint-Jean-devant-Possesse,51489,31,5.303,0.733,0.664,832,6865 -Halloy,62404,225,3.431,0.590,0.534,658,7009 -Marpent,59385,2758,4.829,0.699,0.633,777,7020 -Saint-Hilaire-sur-Helpe,59534,809,15.460,1.252,1.134,763,7001 -Tardinghen,62806,150,8.673,0.937,0.848,605,7085 -Behonne,55041,618,9.164,0.964,0.873,858,6858 -Bacilly,50027,932,16.374,1.288,1.166,375,6857 -Vimy,62861,4282,11.446,1.077,0.975,684,7031 -Olizy-sur-Chiers,55391,190,8.999,0.955,0.865,860,6940 -Saulvaux,55472,114,22.350,1.505,1.363,883,6851 -Bozas,7039,243,12.616,1.131,1.024,827,6441 -Damousies,59169,197,5.027,0.714,0.646,773,7015 -Saint-Remy-du-Nord,59543,1121,5.962,0.777,0.704,763,7014 -Quiévelon,59483,129,4.361,0.665,0.602,775,7016 -Bémécourt,27054,556,17.142,1.318,1.193,539,6860 -Chamouilley,52099,807,7.863,0.893,0.809,853,6835 -Cousances-lès-Triconville,55518,142,18.407,1.366,1.237,874,6853 -Garrebourg,57244,499,8.367,0.921,0.834,1010,6853 -Vron,80815,839,20.615,1.445,1.308,608,7026 -Ponches-Estruval,80631,106,7.175,0.853,0.772,621,7025 -Saint-Maime,4188,847,7.644,0.880,0.797,926,6315 -Ménilles,27397,1716,5.829,0.769,0.696,579,6884 -Villeroy-sur-Méholle,55559,32,6.410,0.806,0.730,891,6839 -Bazincourt-sur-Saulx,55035,147,10.279,1.021,0.924,856,6842 -Bois-Bernard,62148,827,3.961,0.634,0.574,694,7032 -Stainville,55501,434,21.148,1.464,1.326,862,6844 -Lavallée,55282,93,12.580,1.129,1.022,873,6858 -Camblain-l'Abbé,62199,652,5.631,0.755,0.684,675,7029 -Nant-le-Petit,55374,80,9.164,0.964,0.873,863,6840 -Autigny-le-Petit,52030,62,2.517,0.505,0.457,860,6823 -Fains-Véel,55186,2162,18.497,1.369,1.240,857,6859 -Sempy,62787,329,8.078,0.905,0.819,622,7044 -Cerfontaine,59142,669,3.885,0.627,0.568,773,7020 -Laimont,55272,463,10.757,1.044,0.945,850,6864 -Le Beausset,83016,9637,36.133,1.913,1.732,932,6240 -Fienvillers,80310,679,11.660,1.087,0.984,643,7002 -Longeville-en-Barrois,55302,1164,15.388,1.249,1.131,865,6852 -Fresne-le-Plan,76285,628,6.972,0.840,0.761,578,6925 -Sémeries,59562,546,13.494,1.169,1.058,772,7001 -Gognies-Chaussée,59264,765,7.985,0.899,0.814,767,7023 -Commercy,55122,5673,35.550,1.898,1.718,890,6850 -Saint-Savin,65396,379,3.890,0.628,0.569,447,6212 -Béthonsart,62118,151,4.246,0.656,0.594,668,7033 -Châteauneuf-de-Gadagne,84036,3304,13.487,1.169,1.058,855,6314 -Draguignan,83050,40053,54.005,2.339,2.118,978,6272 -Guéblange-lès-Dieuze,57266,163,4.864,0.702,0.636,972,6858 -Boisjean,62150,510,12.742,1.136,1.029,612,7033 -Vadonville,55526,261,5.253,0.730,0.661,883,6858 -Ramousies,59493,229,9.548,0.984,0.891,772,7001 -Ourton,62642,770,5.324,0.734,0.665,662,7039 -Frain,88180,131,7.642,0.880,0.797,913,6781 -Fampoux,62323,1165,8.598,0.933,0.845,691,7020 -Longuerue,76396,316,5.455,0.743,0.673,574,6940 -Commeaux,61114,152,6.386,0.804,0.728,471,6860 -Tilly-Capelle,62818,162,6.435,0.807,0.731,642,7040 -Saint-Gorgon-Main,25517,283,7.969,0.899,0.814,956,6663 -Felon,90044,245,4.105,0.645,0.584,999,6743 -Saudron,52463,47,9.162,0.963,0.872,870,6825 -Silmont,55488,161,3.791,0.620,0.561,866,6851 -Boffles,62143,52,3.460,0.592,0.536,642,7019 -Vieux-Reng,59618,853,11.707,1.089,0.986,772,7025 -Grimaucourt-près-Sampigny,55220,86,9.290,0.970,0.878,880,6858 -Guerpont,55221,250,6.064,0.784,0.710,865,6849 -Contault,51166,66,9.554,0.984,0.891,830,6868 -Amfreville-les-Champs,27012,459,6.547,0.814,0.737,579,6915 -Ferrière-la-Petite,59231,1069,5.396,0.739,0.669,775,7016 -Chevroz,25153,130,1.989,0.449,0.407,926,6698 -Cléty,62229,757,6.186,0.792,0.717,641,7060 -Steenvoorde,59580,4344,30.167,1.748,1.583,666,7081 -Eccles,59186,86,3.528,0.598,0.541,780,7012 -Torcy-le-Grand,10379,445,7.602,0.878,0.795,786,6822 -Dimechaux,59174,351,4.852,0.701,0.635,774,7012 -Rousies,59514,4015,5.791,0.766,0.694,770,7018 -Caugé,27132,853,11.591,1.084,0.981,558,6884 -Bonnet,55059,205,29.001,1.714,1.552,875,6829 -Pouilley-les-Vignes,25467,1967,9.384,0.975,0.883,919,6690 -Holque,59307,899,3.806,0.621,0.562,644,7083 -Longeaux,55300,228,7.492,0.871,0.789,870,6840 -Montreuil,62588,2075,2.804,0.533,0.483,615,7041 -Heuzecourt,80439,171,7.190,0.854,0.773,641,7010 -Haillicourt,62400,4942,4.468,0.673,0.609,668,7041 -Saint-Nazaire-de-Ladarez,34279,366,28.195,1.690,1.530,704,6271 -Dimont,59175,318,7.459,0.869,0.787,771,7011 -Cousolre,59157,2289,21.018,1.459,1.321,781,7013 -Choisies,59147,53,2.515,0.505,0.457,776,7013 -Saint-Amand-sur-Ornain,55452,55,6.066,0.784,0.710,876,6840 -Loisey,55298,303,13.478,1.169,1.058,871,6857 -Villers-Sire-Nicole,59627,980,8.516,0.929,0.841,772,7026 -L'Écouvotte,25215,93,2.095,0.461,0.417,946,6700 -Rebreuve-Ranchicourt,62693,1079,10.789,1.046,0.947,667,7035 -Avesnelles,59035,2496,12.751,1.137,1.029,768,7004 -Ménil-sur-Saulx,55335,263,11.897,1.098,0.994,862,6835 -Les Herbiers,85109,15972,89.105,3.005,2.721,400,6649 -Béthincourt,55048,36,13.226,1.158,1.048,864,6906 -Dammarie-sur-Saulx,55144,440,11.506,1.080,0.978,861,6835 -Landeleau,29102,926,30.327,1.753,1.587,204,6817 -Savonnières-devant-Bar,55476,479,5.183,0.725,0.656,859,6850 -Parcieux,1285,1188,3.165,0.566,0.512,840,6536 -Obrechies,59442,268,5.469,0.744,0.674,773,7012 -Neuilly-le-Dien,80589,96,4.893,0.704,0.637,633,7015 -Froyelles,80371,110,2.785,0.531,0.481,624,7014 -Wattignies-la-Victoire,59649,244,6.340,0.801,0.725,773,7012 -Clairfayts,59148,376,7.512,0.872,0.790,780,7004 -Laneuville-au-Rupt,55278,200,13.258,1.159,1.049,887,6849 -Rupt-aux-Nonains,55447,365,20.514,1.442,1.306,854,6840 -Tangry,62805,243,4.897,0.704,0.637,653,7041 -Port-Mort,27473,936,12.215,1.112,1.007,583,6898 -Couvonges,55134,158,4.633,0.685,0.620,851,6855 -Limont-Fontaine,59351,561,6.806,0.830,0.751,766,7016 -Saint-Venant,62770,2973,14.316,1.204,1.090,669,7059 -Saint-André-sur-Sèvre,79236,649,19.864,1.419,1.285,416,6639 -Saint-André-sur-Orne,14556,1817,3.844,0.624,0.565,453,6895 -Labeuvrière,62479,1665,5.947,0.776,0.703,670,7046 -Cattenom,57124,2694,25.684,1.613,1.460,938,6929 -Domesmont,80243,49,1.940,0.443,0.401,638,7003 -Brauvilliers,55075,166,9.121,0.961,0.870,858,6835 -Chonville-Malaumont,55114,215,18.874,1.383,1.252,883,6850 -Bully-les-Mines,62186,12299,7.827,0.891,0.807,682,7038 -Cassel,59135,2301,13.103,1.152,1.043,662,7079 -Haubourdin,59286,14934,5.392,0.739,0.669,699,7054 -Rachecourt-sur-Marne,52414,782,5.721,0.761,0.689,854,6825 -Saint-Pierre-Saint-Jean,7284,146,23.715,1.550,1.403,785,6379 -Montlignon,95426,2993,2.842,0.537,0.486,648,6878 -Osne-le-Val,52370,258,27.032,1.655,1.498,864,6821 -Baudrémont,55032,52,6.710,0.825,0.747,877,6863 -Savonnières-en-Perthois,55477,412,9.939,1.004,0.909,857,6833 -Gendreville,88195,106,8.154,0.909,0.823,901,6795 -Courcelles-en-Barrois,55127,37,7.195,0.854,0.773,877,6863 -Vavincourt,55541,507,15.945,1.271,1.151,865,6861 -Coutouvre,42074,1110,21.990,1.493,1.352,792,6551 -Lurcy-Lévis,3155,1906,72.164,2.704,2.448,688,6625 -Airon-Notre-Dame,62015,218,5.104,0.719,0.651,604,7040 -Châtillon-le-Duc,25133,2047,6.207,0.793,0.718,926,6694 -Reffroy,55421,71,9.504,0.981,0.888,880,6837 -Blignicourt,10047,39,4.310,0.661,0.598,813,6820 -Bure,55087,83,18.450,1.367,1.238,875,6822 -Tillenay,21639,762,6.106,0.787,0.713,878,6678 -Tannois,55504,397,13.417,1.166,1.056,865,6852 -Châteney,70140,59,2.623,0.516,0.467,950,6739 -Buigny-l'Abbé,80147,317,7.274,0.858,0.777,624,6999 -Broussey-en-Blois,55084,57,11.058,1.058,0.958,887,6839 -Lanthes,21340,277,9.959,1.005,0.910,868,6656 -Tréveray,55516,583,17.325,1.325,1.200,878,6839 -La Bosse-de-Bretagne,35030,648,10.631,1.038,0.940,357,6760 -Bayard-sur-Marne,52265,1341,15.370,1.248,1.130,855,6829 -Arpheuilles-Saint-Priest,3007,355,19.115,1.392,1.260,678,6570 -Lombard,25340,190,5.910,0.774,0.701,915,6670 -Boiry-Sainte-Rictrude,62147,404,5.875,0.772,0.699,682,7013 -Curel,52156,415,7.838,0.891,0.807,860,6823 -Watten,59647,2561,7.780,0.888,0.804,645,7085 -Le Souich,62802,156,5.054,0.716,0.648,656,7014 -Beaumetz-lès-Loges,62097,997,5.046,0.715,0.647,677,7017 -Bauzemont,54053,152,6.330,0.801,0.725,959,6848 -Mandres-en-Barrois,55315,121,17.761,1.341,1.214,875,6827 -Les Garennes sur Loire,49167,4495,25.288,1.601,1.450,439,6708 -Givrauval,55214,296,9.645,0.989,0.895,869,6840 -Dompierre-sur-Helpe,59177,865,13.278,1.160,1.050,763,7007 -Dagonville,55141,84,13.033,1.149,1.040,872,6857 -Villers-le-Sec,55562,124,7.003,0.842,0.762,870,6837 -Labroye,62481,170,8.247,0.914,0.828,628,7020 -Vermelles,62846,4718,10.437,1.028,0.931,683,7045 -Lévigny,10194,97,13.692,1.178,1.067,829,6802 -Étueffont,90041,1498,12.642,1.132,1.025,992,6745 -Vernay,69261,104,5.557,0.750,0.679,816,6563 -Saint-Joire,55459,235,18.238,1.359,1.230,880,6838 -Dompierre-les-Tilleuls,25202,267,13.069,1.151,1.042,938,6650 -Angomont,54017,80,17.373,1.327,1.201,991,6833 -Le Touquet-Paris-Plage,62826,4244,15.260,1.243,1.125,603,7047 -L'Isle-en-Rigault,55296,484,10.554,1.034,0.936,849,6845 -Coclois,10101,177,6.905,0.836,0.757,799,6822 -Velaines,55543,955,10.818,1.047,0.948,872,6848 -Pihem,62656,957,7.171,0.852,0.771,645,7067 -Thoiras,30329,441,23.099,1.530,1.385,772,6327 -Sains-Morainvillers,60564,276,12.447,1.123,1.017,659,6944 -Saint-Maurice-d'Ibie,7273,219,23.576,1.546,1.400,821,6380 -Regnière-Écluse,80665,127,9.589,0.986,0.893,613,7020 -Ronchaux,25500,88,5.193,0.725,0.656,921,6662 -Chardogne,55101,308,12.806,1.139,1.031,857,6859 -Rurey,25511,336,14.873,1.228,1.112,929,6668 -Bernos-Beaulac,33046,1124,36.534,1.924,1.742,440,6372 -Saint-Aubin-sur-Aire,55454,170,14.253,1.202,1.088,879,6846 -Rumont,55446,87,6.359,0.803,0.727,865,6861 -Warhem,59641,2051,27.793,1.678,1.519,665,7101 -Nortkerque,62621,1622,13.228,1.158,1.048,632,7089 -Lavincourt,55284,69,4.835,0.700,0.634,859,6843 -Lorgies,62529,1585,6.881,0.835,0.756,685,7050 -Neuvelle-lès-Voisey,52350,74,5.758,0.764,0.692,909,6754 -Effincourt,52184,62,12.301,1.116,1.010,870,6826 -Pelousey,25448,1511,6.199,0.793,0.718,921,6692 -Mazerolles-le-Salin,25371,203,4.205,0.653,0.591,917,6688 -Corcelles-Ferrières,25162,199,2.263,0.479,0.434,913,6684 -Samson,25528,92,1.958,0.445,0.403,918,6665 -Villers-Buzon,25622,255,3.217,0.571,0.517,917,6684 -Gorre,87073,396,16.499,1.293,1.171,546,6516 -Culey,55138,146,11.027,1.057,0.957,867,6851 -Dannemarie-sur-Crète,25195,1448,4.094,0.644,0.583,916,6681 -Fouchères-aux-Bois,55195,140,5.527,0.748,0.677,866,6841 -Banvillars,90007,284,4.634,0.685,0.620,985,6729 -Devecey,25200,1444,3.751,0.616,0.558,927,6697 -Monchiet,62578,97,2.753,0.528,0.478,674,7015 -Mauvages,55327,268,21.217,1.466,1.327,886,6838 -Saint-Mars-du-Désert,44179,4787,30.454,1.757,1.591,368,6703 -Rancenay,25477,322,3.649,0.608,0.550,924,6680 -Roche-lez-Beaupré,25495,2082,5.644,0.756,0.684,935,6690 -Vieil-Hesdin,62850,366,9.743,0.994,0.900,635,7030 -Ménil-la-Horgne,55334,171,16.483,1.292,1.170,884,6849 -Laval-Pradel,30142,1175,17.703,1.339,1.212,787,6348 -Naives-Rosières,55369,805,15.959,1.272,1.152,862,6856 -Beaumont-le-Hareng,76062,267,5.712,0.761,0.689,573,6952 -Moncley,25383,286,7.942,0.897,0.812,921,6692 -Conteville-en-Ternois,62238,96,2.333,0.486,0.440,653,7037 -Osselle-Routelle,25438,952,10.787,1.045,0.946,915,6674 -Soufflenheim,67472,4910,13.285,1.160,1.050,1065,6869 -Ferrières-les-Bois,25235,318,4.218,0.654,0.592,911,6683 -Abainville,55001,305,13.579,1.173,1.062,890,6828 -Brillon-en-Barrois,55079,659,11.272,1.069,0.968,853,6850 -Rouhe,25507,82,4.172,0.650,0.589,924,6669 -Bonnay,25073,841,7.706,0.884,0.800,931,6696 -Bovée-sur-Barboure,55066,150,13.335,1.162,1.052,886,6838 -Alboussière,7007,1035,18.308,1.362,1.233,837,6425 -Houdelaincourt,55248,306,16.072,1.276,1.155,883,6829 -Vregille,70578,173,4.423,0.669,0.606,919,6696 -Montrond-le-Château,25406,562,11.065,1.059,0.959,928,6678 -Grandfontaine,25287,1587,5.731,0.762,0.690,919,6680 -Thoraise,25561,358,3.975,0.635,0.575,919,6680 -Abbans-Dessus,25002,304,4.430,0.670,0.607,918,6672 -Paroy-sur-Saulx,52378,47,7.425,0.867,0.785,864,6827 -Morley,55359,205,24.781,1.585,1.435,869,6835 -Chemaudin et Vaux,25147,1890,12.558,1.128,1.021,919,6687 -Firfol,14270,419,5.088,0.718,0.650,505,6897 -Seyre,31546,131,3.913,0.630,0.570,593,6252 -Tronville-en-Barrois,55519,1480,12.706,1.135,1.028,868,6848 -La Chapelle-Thècle,71097,453,16.625,1.298,1.175,859,6611 -Artemare,1022,1227,3.325,0.580,0.525,909,6533 -Groffliers,62390,1492,8.038,0.902,0.817,602,7034 -Val-d'Ornain,55366,985,24.173,1.565,1.417,852,6862 -Neuville-sur-Ornain,55382,360,11.679,1.088,0.985,848,6861 -Capvern,65127,1303,22.060,1.495,1.354,484,6224 -Les Auxons,25035,2564,10.165,1.015,0.919,926,6694 -Brionne,27116,4325,16.874,1.308,1.184,530,6901 -Lérouville,55288,1449,14.343,1.206,1.092,886,6858 -Hévilliers,55246,141,10.541,1.033,0.935,869,6835 -Naives-en-Blois,55368,155,15.786,1.265,1.145,890,6842 -Ramouzens,32338,162,16.686,1.300,1.177,472,6308 -Fourg,25253,364,12.089,1.107,1.002,912,6671 -Mécrin,55329,222,10.225,1.018,0.922,886,6860 -Ménil-aux-Bois,55333,42,6.630,0.820,0.742,877,6858 -Vievy-le-Rayé,41273,461,45.152,2.139,1.937,568,6752 -Biencourt-sur-Orge,55051,122,12.430,1.122,1.016,873,6834 -Montiers-sur-Saulx,55348,404,44.603,2.126,1.925,870,6826 -Lavernay,25332,575,7.787,0.888,0.804,911,6685 -Badonvilliers-Gérauvilliers,55026,139,21.137,1.463,1.325,893,6832 -Juvigny-en-Perthois,55261,134,6.391,0.805,0.729,861,6834 -Sauvagney,25536,185,3.953,0.633,0.573,921,6694 -Boussières,25084,1102,5.605,0.754,0.683,920,6675 -Le Bouchon-sur-Saulx,55061,247,5.349,0.736,0.666,866,6836 -Roquebillière,6103,1822,25.681,1.613,1.460,1044,6338 -Ardres,62038,4427,13.653,1.176,1.065,628,7084 -Sampigny,55467,722,20.511,1.442,1.306,880,6858 -Pouilley-Français,25466,832,6.112,0.787,0.713,916,6684 -Groissiat,1181,1223,6.193,0.792,0.717,904,6572 -Salmagne,55466,302,16.714,1.301,1.178,874,6853 -Roset-Fluans,25502,514,8.317,0.918,0.831,913,6676 -Franey,25257,275,3.388,0.586,0.531,912,6689 -Banne,7024,666,32.883,1.825,1.652,788,6360 -Buire-au-Bois,62182,229,11.588,1.084,0.981,637,7020 -Saint-Michel-sur-Ternoise,62763,884,5.972,0.778,0.704,656,7033 -Cambrin,62200,1189,1.786,0.425,0.385,681,7045 -Rozier-Côes-d'Aurec,42192,455,13.813,1.183,1.071,790,6477 -Chevigney-sur-l'Ognon,25150,285,4.618,0.684,0.619,913,6692 -Chambornay-lès-Pin,70119,354,5.007,0.712,0.645,918,6698 -Charnay,25126,476,5.692,0.759,0.687,923,6673 -Chanteraine,55358,183,22.364,1.505,1.363,876,6841 -Émagny,25217,591,5.243,0.729,0.660,916,6694 -Chaucenne,25136,516,4.896,0.704,0.637,919,6690 -Bazinghen,62089,399,13.294,1.161,1.051,605,7085 -École-Valentin,25212,2542,3.225,0.572,0.518,926,6691 -Dietwiller,68072,1451,11.074,1.059,0.959,1029,6742 -Clerques,62228,320,6.416,0.806,0.730,626,7076 -Erneville-aux-Bois,55179,164,28.085,1.687,1.527,872,6851 -Gouise,3124,220,23.264,1.535,1.390,736,6587 -Montferrand-le-Château,25397,2108,7.503,0.872,0.790,922,6683 -Malans,25359,180,10.544,1.034,0.936,929,6667 -Canly,60125,795,8.088,0.905,0.819,679,6923 -Voray-sur-l'Ognon,70575,820,6.884,0.835,0.756,926,6698 -Neuilly-le-Vendin,53164,347,14.713,1.221,1.106,452,6826 -Tallenay,25557,409,2.369,0.490,0.444,929,6694 -Beure,25058,1364,4.010,0.637,0.577,926,6681 -Englos,59195,606,1.339,0.368,0.333,698,7060 -Marconne,62549,1105,4.213,0.653,0.591,632,7032 -Montplonne,55352,140,20.775,1.451,1.314,857,6849 -Eps,62299,249,6.930,0.838,0.759,649,7042 -Emmerin,59193,3174,4.954,0.708,0.641,701,7054 -Haironville,55224,595,9.737,0.993,0.899,856,6847 -Givenchy-lès-la-Bassée,62373,1011,3.874,0.627,0.568,683,7050 -Resson,55426,393,8.428,0.924,0.837,866,6857 -Saint-Léger-sous-la-Bussière,71441,261,8.659,0.937,0.848,818,6580 -Chevillon,52123,1334,37.357,1.946,1.762,855,6828 -Hesdigneul-lès-Boulogne,62446,667,3.350,0.583,0.528,605,7064 -Besançon,25056,116466,65.198,2.570,2.327,929,6694 -Bapaume,62080,3976,5.786,0.766,0.694,690,6998 -Jasseines,10175,178,16.433,1.290,1.168,802,6821 -Lisse-en-Champagne,51325,122,8.532,0.930,0.842,822,6861 -Quatre-Champs,8350,209,11.557,1.082,0.980,827,6928 -Buire-le-Sec,62183,786,13.419,1.166,1.056,619,7032 -Serre-les-Sapins,25542,1577,5.258,0.730,0.661,924,6686 -Miserey-Salines,25381,2442,6.196,0.792,0.717,924,6691 -Saint-Maurice-Thizouaille,89361,268,1.959,0.446,0.404,726,6748 -Bellebrune,62104,382,5.462,0.744,0.674,612,7070 -Vitry-le-François,51649,12552,6.378,0.804,0.728,816,6851 -Saint-Léger-sous-Margerie,10346,60,6.655,0.821,0.743,810,6825 -Volckerinckhove,59628,577,9.931,1.003,0.908,653,7083 -Meulers,76437,568,6.745,0.827,0.749,571,6972 -Marvejols,48092,4776,12.721,1.135,1.028,723,6381 -Quingey,25475,1425,8.663,0.937,0.848,920,6675 -Recologne,25482,650,6.806,0.830,0.751,915,6688 -Audeux,25030,432,1.755,0.422,0.382,916,6689 -Plufur,22238,538,17.513,1.332,1.206,215,6856 -Lizine,25338,87,7.301,0.860,0.779,925,6664 -Couvrot,51195,866,8.046,0.903,0.818,816,6851 -Noironte,25427,383,6.767,0.828,0.750,917,6691 -Beaurains,62099,5697,5.947,0.776,0.703,684,7016 -Gueschart,80396,317,12.941,1.145,1.037,627,7017 -Oblinghem,62632,372,1.262,0.358,0.324,671,7050 -Soulanges,51557,478,12.488,1.125,1.019,814,6854 -Recques-sur-Hem,62699,622,5.456,0.744,0.674,633,7082 -Sepmeries,59565,672,5.978,0.778,0.704,738,7020 -Songy,51552,265,15.145,1.239,1.122,804,6856 -Arrigas,30017,212,20.217,1.431,1.296,737,6325 -Byans-sur-Doubs,25105,543,9.949,1.004,0.909,917,6673 -Réchicourt-la-Petite,54446,60,5.480,0.745,0.675,962,6853 -Châteaudouble,83038,469,40.913,2.036,1.843,977,6280 -Saint-Amand-sur-Fion,51472,1025,28.313,1.694,1.534,815,6857 -Loisy-sur-Marne,51328,1095,14.193,1.199,1.086,814,6854 -Châtelraould-Saint-Louvent,51134,226,16.899,1.309,1.185,808,6840 -Norrois,51406,148,4.155,0.649,0.588,819,6841 -Istres,13047,42925,114.235,3.402,3.080,862,6265 -Brussey,70102,275,7.432,0.868,0.786,913,6692 -Vercourt,80787,93,4.709,0.691,0.626,607,7021 -Estrée,62312,289,4.418,0.669,0.606,617,7045 -Somsois,51551,197,21.317,1.470,1.331,811,6830 -Luxémont-et-Villotte,51334,445,9.223,0.967,0.876,821,6848 -Saint-Ouen-Domprot,51508,206,47.400,2.191,1.984,800,6834 -Capelle-Fermont,62211,215,2.983,0.550,0.498,673,7027 -Robecq,62713,1368,10.475,1.030,0.933,669,7057 -Senuc,8412,164,13.551,1.172,1.061,838,6912 -Montguyon,17241,1584,18.245,1.360,1.231,449,6460 -Ponsas,26247,521,2.877,0.540,0.489,846,6451 -Étaing,62317,444,5.221,0.727,0.658,701,7021 -Meurchin,62573,3805,4.648,0.686,0.621,693,7045 -Pin,70410,690,14.041,1.193,1.080,915,6700 -Cademène,25106,75,3.458,0.592,0.536,931,6672 -Pirey,25454,2049,6.753,0.827,0.749,924,6691 -Chouzelot,25154,269,6.345,0.802,0.726,921,6675 -Risoul,5119,641,29.856,1.739,1.575,989,6393 -Tours,37261,136565,33.379,1.839,1.665,525,6706 -Montbouton,90070,406,2.840,0.536,0.485,996,6714 -Vincelles,51644,297,3.549,0.600,0.543,747,6887 -Nédon,62600,154,4.940,0.707,0.640,655,7049 -Mesmay,25379,72,3.076,0.558,0.505,916,6667 -Saint-Julien,21555,1481,16.765,1.303,1.180,863,6705 -Linay,8255,264,7.358,0.863,0.781,863,6948 -Gouy-en-Ternois,62381,136,5.680,0.759,0.687,657,7026 -Inxent,62472,163,3.833,0.623,0.564,614,7051 -Camiers,62201,2685,15.952,1.271,1.151,599,7055 -Saint-Vit,25527,4854,16.527,1.294,1.172,911,6680 -Cheppes-la-Prairie,51148,177,19.989,1.423,1.288,804,6856 -Montmorency-Beaufort,10253,134,9.506,0.981,0.888,816,6819 -Lavans-Quingey,25330,200,5.914,0.774,0.701,921,6668 -Rorbach-lès-Dieuze,57595,54,4.281,0.659,0.597,983,6865 -Saint-Chéron,51475,62,9.178,0.964,0.873,816,6839 -Saint-Pardoux-la-Croisille,19231,176,17.381,1.327,1.201,621,6465 -Dampierre,10121,290,29.524,1.730,1.566,800,6834 -Bormes-les-Mimosas,83019,7982,96.779,3.131,2.835,967,6229 -Saint-Utin,51520,83,10.207,1.017,0.921,808,6831 -Pessans,25450,87,4.355,0.664,0.601,921,6668 -La Chaussée-sur-Marne,51141,796,22.396,1.506,1.364,810,6860 -Geneuille,25265,1342,6.429,0.807,0.731,926,6694 -Saint-Sauveur-de-Meilhan,47277,334,7.057,0.846,0.766,461,6378 -Cussey-sur-l'Ognon,25186,1029,7.478,0.870,0.788,921,6694 -Saint-Privat-du-Fau,48179,130,22.424,1.507,1.364,728,6428 -Saint-Georges-sur-l'Aa,59532,309,8.094,0.906,0.820,640,7095 -Courcelles,25171,108,3.630,0.606,0.549,924,6669 -Paillet,33311,1217,2.455,0.499,0.452,433,6404 -Franois,25258,2316,7.307,0.860,0.779,923,6685 -Chenecey-Buillon,25149,520,16.735,1.302,1.179,925,6677 -Souastre,62800,375,7.262,0.858,0.777,671,7006 -Fresnoy-Folny,76286,713,13.168,1.155,1.046,586,6978 -Rosey,70452,274,14.857,1.227,1.111,925,6720 -Avanne-Aveney,25036,2261,8.553,0.931,0.843,922,6683 -Usclades-et-Rieutord,7326,119,12.567,1.128,1.021,794,6406 -Sompuis,51550,302,43.496,2.099,1.900,798,6839 -Joncreuil,10180,90,10.640,1.038,0.940,821,6828 -Proverville,10306,239,7.039,0.845,0.765,823,6795 -Évans,39219,640,9.930,1.003,0.908,910,6677 -Lentilles,10192,126,17.282,1.323,1.198,821,6825 -Corcondray,25164,144,5.386,0.739,0.669,913,6685 -Mouchan,32292,411,13.225,1.158,1.048,485,6314 -Cloyes-sur-Marne,51156,133,6.290,0.798,0.723,821,6839 -Vellerot-lès-Vercel,25596,65,4.596,0.682,0.617,958,6688 -Humbauville,51296,79,16.932,1.310,1.186,798,6838 -Vitreux,39581,286,7.971,0.899,0.814,903,6689 -Hénon,22079,2237,42.088,2.065,1.870,283,6822 -Monteplain,39352,136,1.527,0.393,0.356,905,6677 -Salans,39498,580,6.634,0.820,0.742,913,6676 -Burey,27120,398,5.347,0.736,0.666,550,6877 -La Mazière-aux-Bons-Hommes,23129,67,10.188,1.016,0.920,656,6536 -Pringy,51446,409,15.371,1.248,1.130,805,6853 -Fraisans,39235,1228,16.770,1.304,1.181,910,6677 -Marolles,51352,900,4.431,0.670,0.607,820,6848 -Saint-Martin-de-Fontenay,14623,2603,10.814,1.047,0.948,454,6898 -Lisbourg,62519,588,17.939,1.348,1.220,646,7049 -Saint-Martin-de-Lansuscle,48171,188,18.151,1.356,1.228,762,6345 -Bignicourt-sur-Marne,51059,346,2.843,0.537,0.486,820,6844 -Bréban,51084,82,10.746,1.043,0.944,805,6829 -Bavinchove,59054,960,8.458,0.926,0.838,658,7075 -Drucat,80260,917,11.084,1.060,0.960,620,7008 -Berstett,67034,2425,18.391,1.365,1.236,1045,6851 -Les Ventes-de-Bourse,61499,161,20.967,1.458,1.320,495,6825 -Monfréville,14439,99,7.321,0.861,0.780,405,6921 -Marant,62547,73,3.889,0.628,0.569,616,7043 -Canappeville,27127,667,10.451,1.029,0.932,559,6895 -Hiermont,80440,151,5.044,0.715,0.647,634,7011 -Ranchot,39451,486,7.080,0.847,0.767,906,6679 -Pagney,39402,337,6.009,0.780,0.706,906,6686 -La Longueville,59357,2117,17.630,1.337,1.211,759,7019 -Saint-Étienne-de-Lugdarès,7232,415,50.828,2.269,2.054,771,6395 -Chevennes,2182,130,5.960,0.777,0.704,753,6971 -Brailly-Cornehotte,80133,243,11.534,1.081,0.979,626,7012 -Le Conquet,29040,2678,9.333,0.972,0.880,117,6831 -Auxi-le-Château,62060,2674,27.266,1.662,1.505,635,7014 -Zegerscappel,59666,1542,17.501,1.332,1.206,659,7086 -Bard-lès-Époisses,21047,70,3.585,0.603,0.546,794,6714 -Warneton,59643,239,4.188,0.651,0.589,699,7071 -Salles-sous-Bois,26335,187,9.695,0.991,0.897,853,6378 -Saint-Christo-en-Jarez,42208,1864,22.121,1.497,1.355,813,6496 -Hestrus,62450,241,7.893,0.894,0.809,653,7041 -Moutiers-en-Puisaye,89273,288,31.798,1.795,1.625,715,6720 -Faux-Vésigneul,51244,245,39.240,1.994,1.805,805,6853 -Bienvillers-au-Bois,62130,642,7.390,0.865,0.783,673,7010 -Combles,80204,782,9.841,0.999,0.905,693,6991 -Drosnay,51219,212,18.621,1.374,1.244,823,6833 -Chapelaine,51125,48,9.180,0.964,0.873,808,6833 -Virecourt,54585,459,5.094,0.718,0.650,944,6822 -Saint-Lumier-en-Champagne,51496,260,8.669,0.937,0.848,817,6855 -Bois-d'Arcy,89049,25,3.442,0.591,0.535,754,6718 -Pressigny-les-Pins,45257,498,11.935,1.100,0.996,680,6755 -Arrembécourt,10010,51,7.201,0.854,0.773,821,6829 -Frévent,62361,3582,15.280,1.244,1.126,649,7022 -Sillé-le-Guillaume,72334,2312,12.996,1.148,1.039,465,6791 -Marcoux,4113,482,32.853,1.824,1.651,966,6343 -Teissières-lès-Bouliès,15234,322,19.732,1.414,1.280,661,6416 -Lavardac,47143,2245,15.252,1.243,1.125,488,6346 -Allain,54008,474,16.572,1.296,1.173,913,6831 -Saint-Jacut-de-la-Mer,22302,906,3.043,0.555,0.503,317,6843 -Frignicourt,51262,1862,9.714,0.992,0.898,818,6847 -Les Rivières-Henruel,51463,178,12.029,1.104,1.000,811,6838 -Tramecourt,62828,60,2.245,0.477,0.432,639,7043 -Plouvain,62660,450,2.399,0.493,0.446,693,7024 -Blacy,51065,670,17.405,1.328,1.202,806,6846 -Saint-Maurice-près-Pionsat,63377,369,31.050,1.774,1.606,669,6548 -Corbigny,58083,1498,20.183,1.430,1.295,755,6687 -Rans,39452,538,6.108,0.787,0.713,905,6676 -Péronne-en-Mélantois,59458,903,1.145,0.341,0.309,713,7052 -Merlaut,51363,241,5.200,0.726,0.657,822,6854 -Terramesnil,80749,304,2.695,0.523,0.474,655,7001 -Le Meix-Tiercelin,51361,179,19.249,1.397,1.265,809,6836 -Brandonvillers,51080,181,11.711,1.089,0.986,814,6835 -Maisons-en-Champagne,51340,528,29.151,1.719,1.556,811,6849 -Almenêches,61002,713,20.388,1.437,1.301,485,6849 -Charmont-en-Beauce,45080,371,18.084,1.354,1.226,635,6791 -Aulnay-l'Aître,51022,170,8.315,0.918,0.831,816,6862 -Our,39400,139,13.771,1.181,1.069,901,6667 -Hernicourt,62442,559,9.897,1.001,0.906,648,7036 -Blaise-sous-Arzillières,51066,342,6.897,0.836,0.757,815,6843 -Le Vilhain,3313,268,26.460,1.637,1.482,687,6607 -Sornay,70494,333,6.325,0.801,0.725,903,6689 -Taxenne,39527,104,3.893,0.628,0.569,904,6683 -Romain,39464,205,5.892,0.773,0.700,906,6684 -Weckolsheim,68360,653,6.965,0.840,0.761,1037,6776 -Brévonnes,10061,695,20.169,1.430,1.295,806,6804 -La Neuville,59427,654,3.970,0.634,0.574,705,7043 -Ougney,39398,370,7.065,0.846,0.766,902,6684 -Gauchin-Légal,62366,322,5.853,0.770,0.697,671,7033 -Rouffange,39469,103,2.868,0.539,0.488,905,6685 -Chenevrey-et-Morogne,70150,304,8.956,0.953,0.863,907,6692 -Macheren,57428,2781,16.969,1.311,1.187,978,6893 -Offrethun,62636,267,2.626,0.516,0.467,608,7078 -Beaumetz-lès-Cambrai,62096,587,9.964,1.005,0.910,701,7002 -Xonrupt-Longemer,88531,1526,30.932,1.770,1.603,999,6779 -Saint-Nicodème,22320,168,17.250,1.322,1.197,231,6823 -Brechainville,88074,62,14.252,1.202,1.088,889,6810 -Étrepigney,39218,423,15.689,1.261,1.142,903,6675 -Radonvilliers,10313,378,23.473,1.542,1.396,806,6803 -Dienville,10123,878,20.569,1.444,1.307,812,6803 -Mathaux,10228,200,12.531,1.127,1.020,806,6808 -Élesmes,59190,983,6.261,0.796,0.721,772,7022 -Void-Vacon,55573,1641,35.542,1.898,1.718,892,6848 -Gendrey,39246,430,13.960,1.189,1.077,902,6684 -Étrabonne,25225,193,5.530,0.749,0.678,905,6685 -Givrycourt,57248,91,2.773,0.530,0.480,986,6878 -Affringues,62010,226,2.970,0.549,0.497,632,7066 -Plumont,39430,103,12.185,1.111,1.006,904,6674 -Neufchâteau,88321,6639,23.867,1.555,1.408,900,6807 -Parc-d'Anxtot,76494,571,5.836,0.769,0.696,510,6946 -Clenleu,62227,197,7.307,0.860,0.779,621,7047 -Outrebois,80614,309,9.643,0.988,0.895,646,7006 -Mesnil-Domqueur,80537,87,3.552,0.600,0.543,632,7004 -Orchamps,39396,1106,9.924,1.003,0.908,903,6678 -Avondance,62066,40,2.233,0.476,0.431,637,7042 -Maisnil,62539,244,5.206,0.726,0.657,656,7027 -Marquise,62560,5111,13.458,1.168,1.058,610,7082 -Spycker,59576,1807,9.475,0.980,0.887,652,7100 -Le Horps,53116,756,23.182,1.533,1.388,441,6816 -Saint-Didier-en-Donjon,3226,269,33.120,1.832,1.659,763,6590 -Conquereuil,44044,1109,32.997,1.828,1.655,345,6734 -Trébry,22345,817,25.524,1.608,1.456,291,6822 -Ronchin,59507,19074,5.439,0.742,0.672,707,7058 -Le Val,83143,4297,39.306,1.996,1.807,943,6268 -Bar-le-Duc,55029,15221,23.777,1.552,1.405,861,6853 -Ruffey-le-Château,25510,360,7.288,0.859,0.778,913,6689 -Mercey-le-Grand,25374,538,6.606,0.818,0.741,909,6681 -Saléon,5159,91,9.880,1.001,0.906,921,6360 -Villecien,89452,396,7.674,0.882,0.799,728,6769 -Vy-lès-Filain,70583,124,5.320,0.734,0.665,940,6715 -Lantenne-Vertière,25326,535,9.872,1.000,0.905,911,6686 -Hersin-Coupigny,62443,6236,12.656,1.132,1.025,675,7036 -Wylder,59665,295,2.561,0.509,0.461,663,7091 -Drincham,59182,250,3.378,0.585,0.530,653,7091 -Grand,88212,370,36.673,1.928,1.746,877,6813 -Domrémy-la-Pucelle,88154,115,8.986,0.954,0.864,894,6820 -Félines,43093,311,20.556,1.443,1.307,760,6459 -Villeret,10424,64,3.289,0.577,0.522,818,6820 -Courchapon,25172,205,5.408,0.740,0.670,909,6687 -La Bretenière,39076,220,1.620,0.405,0.367,901,6674 -Vanault-les-Dames,51590,366,20.094,1.427,1.292,834,6860 -Vaudeville-le-Haut,55534,56,9.686,0.991,0.897,891,6818 -Greux,88219,159,8.121,0.907,0.821,895,6822 -Avesnes-lès-Bapaume,62064,159,3.104,0.561,0.508,689,7002 -Jallerange,25317,254,5.538,0.749,0.678,904,6688 -Blois,41018,45687,37.644,1.953,1.768,575,6726 -Carville-la-Folletière,76160,435,4.350,0.664,0.601,543,6941 -Hantay,59281,1303,2.107,0.462,0.418,692,7049 -Frebécourt,88183,302,10.565,1.035,0.937,898,6810 -Galametz,62365,201,4.197,0.652,0.590,637,7026 -Aubers,59025,1610,10.114,1.012,0.916,686,7054 -Trampot,88477,92,13.191,1.156,1.047,880,6806 -Maison-Ponthieu,80501,266,11.011,1.056,0.956,630,7014 -Pargny-sous-Mureau,88344,183,17.878,1.346,1.219,889,6811 -Corbas,69273,11209,11.875,1.097,0.993,847,6509 -Orquevaux,52369,86,15.633,1.259,1.140,876,6804 -Chassey-Beaupré,55104,93,14.276,1.203,1.089,882,6820 -Avranville,88025,71,10.899,1.051,0.952,889,6819 -Dainville-Bertheléville,55142,119,40.282,2.020,1.829,884,6824 -Burgille,25101,550,9.312,0.971,0.879,908,6689 -Les Roises,55436,30,3.789,0.620,0.561,895,6822 -Hugier,70286,126,7.175,0.853,0.772,903,6691 -Liffol-le-Grand,88270,2154,34.157,1.860,1.684,888,6806 -Étuz,70224,661,5.284,0.732,0.663,922,6702 -Montagney,70353,519,9.305,0.971,0.879,902,6690 -Venère,70542,222,8.076,0.905,0.819,904,6698 -Charcenne,70130,339,7.162,0.852,0.771,911,6701 -Villécloye,55554,266,7.143,0.851,0.771,876,6938 -Aillianville,52003,172,23.803,1.553,1.406,882,6804 -Cérilly,89065,40,7.244,0.857,0.776,744,6787 -Avrigney-Virey,70045,426,22.325,1.504,1.362,912,6696 -Cugney,70192,196,11.474,1.078,0.976,903,6700 -Coussey,88118,730,16.248,1.283,1.162,899,6818 -Capestang,34052,3194,40.508,2.026,1.834,699,6247 -Prez-sous-Lafauche,52407,305,22.629,1.514,1.371,890,6798 -Blye,39058,163,10.935,1.053,0.953,908,6619 -Maisons-lès-Soulaines,10219,60,6.094,0.786,0.712,832,6803 -Brienne-la-Vieille,10063,435,16.337,1.287,1.165,818,6811 -Châteaurenard,13027,15440,34.896,1.880,1.702,845,6314 -Escoubès-Pouts,65164,106,2.751,0.528,0.478,459,6228 -Volon,70574,61,5.677,0.758,0.686,905,6731 -Soulaines-Dhuys,10372,415,20.235,1.432,1.297,830,6809 -Chancey,70126,202,7.764,0.887,0.803,901,6697 -Marnay,70334,1485,10.409,1.027,0.930,907,6693 -Poids-de-Fiole,39431,330,6.537,0.814,0.737,900,6612 -Socx,59570,934,8.036,0.902,0.817,661,7091 -Thors,10378,73,8.363,0.921,0.834,834,6800 -Pont-de-Poitte,39435,653,7.635,0.880,0.797,904,6611 -Trémilly,52495,80,10.913,1.052,0.952,830,6809 -Trannes,10384,245,9.761,0.994,0.900,820,6804 -Obervisse,57519,159,4.385,0.667,0.604,961,6902 -Coyron,39175,74,7.476,0.870,0.788,905,6603 -Flers-sur-Noye,80315,512,4.665,0.688,0.623,645,6959 -Nully,52359,159,17.781,1.342,1.215,836,6806 -Landas,59330,2402,11.979,1.102,0.998,722,7040 -Arnancourt,52019,91,9.410,0.976,0.884,840,6805 -Perthes-lès-Brienne,10285,81,3.832,0.623,0.564,813,6816 -Le Clapier,12067,79,19.653,1.411,1.278,718,6302 -Patornay,39408,139,1.859,0.434,0.393,907,6613 -Morvilliers,10258,309,15.649,1.259,1.140,818,6809 -Largillay-Marsonnay,39278,163,7.549,0.875,0.792,903,6611 -Châtillon,39122,113,16.885,1.308,1.184,906,6620 -La Chaise,10072,39,8.803,0.944,0.855,824,6805 -Bailly-aux-Forges,52034,140,10.691,1.041,0.943,840,6817 -Chalmoux,71075,639,38.779,1.982,1.795,762,6612 -Courcemain,51182,110,9.928,1.003,0.908,767,6834 -Écrille,39207,85,5.250,0.729,0.660,903,6602 -Lamancine,52260,124,4.525,0.677,0.613,857,6791 -Publy,39445,285,15.320,1.246,1.128,901,6616 -Plaisia,39423,111,5.334,0.735,0.665,903,6603 -Verges,39550,192,6.430,0.807,0.731,907,6623 -Verchocq,62844,661,15.644,1.259,1.140,632,7054 -Waben,62866,430,8.749,0.942,0.853,602,7034 -Thil,10377,123,19.500,1.406,1.273,829,6808 -Rances,10315,44,3.820,0.622,0.563,816,6819 -Juzanvigny,10184,127,7.679,0.882,0.799,817,6813 -Oudrenne,57531,736,20.390,1.437,1.301,941,6927 -Mont-Saint-Éloi,62589,1028,15.835,1.267,1.147,676,7025 -Chaumesnil,10093,100,11.096,1.060,0.960,816,6808 -Boufflers,80118,125,5.638,0.756,0.684,631,7020 -Montpeyroux,24292,441,23.805,1.553,1.406,465,6426 -Daillancourt,52160,69,7.953,0.898,0.813,841,6801 -Bouzancourt,52065,65,11.877,1.097,0.993,847,6803 -Montaren-et-Saint-Médiers,30174,1442,19.371,1.401,1.268,813,6332 -Vaux-sur-Blaise,52510,375,7.131,0.850,0.770,843,6820 -Saint-Cyr-en-Arthies,95543,246,3.930,0.631,0.571,608,6884 -Mesnois,39326,192,11.489,1.079,0.977,904,6611 -Mérona,39324,9,2.916,0.544,0.493,903,6611 -Courcelles-sur-Voire,10105,26,4.922,0.706,0.639,813,6820 -Crosey-le-Grand,25177,152,10.298,1.021,0.924,969,6701 -Champoux,25117,91,3.032,0.554,0.502,935,6698 -Randevillers,25478,118,4.351,0.664,0.601,966,6697 -Provenchère,25471,134,6.992,0.842,0.762,976,6693 -Surmont,25554,124,7.390,0.865,0.783,972,6690 -Guillos,33197,450,22.806,1.520,1.376,417,6389 -Chazot,25145,118,5.264,0.730,0.661,965,6698 -Rahon,25476,128,5.713,0.761,0.689,969,6697 -Servin,25544,201,10.186,1.016,0.920,964,6693 -Warluzel,62879,231,4.066,0.642,0.581,661,7015 -Villeneuve-d'Amont,25621,240,14.286,1.203,1.089,934,6652 -Belleherbe,25051,607,16.157,1.279,1.158,980,6694 -Sancey,25529,1322,30.444,1.756,1.590,967,6692 -Torcy,62823,160,5.285,0.732,0.663,631,7042 -Silley-Bléfond,25546,53,4.331,0.662,0.599,952,6698 -Alette,62021,386,13.987,1.190,1.077,619,7046 -Vellevans,25597,226,13.724,1.179,1.067,967,6693 -Beaumetz,80068,230,6.211,0.793,0.718,634,7004 -Bezinghem,62127,355,13.249,1.159,1.049,622,7056 -Beurville,52047,104,23.029,1.528,1.383,840,6801 -Coquelles,62239,2503,8.783,0.943,0.854,620,7092 -Saint-Maclou-la-Brière,76603,485,4.962,0.709,0.642,519,6954 -Rosières-sur-Barbèche,25503,124,5.343,0.736,0.666,977,6695 -Belvoir,25053,108,9.289,0.970,0.878,972,6699 -Sérézin-de-la-Tour,38481,1034,9.425,0.977,0.885,886,6498 -Dammartin-les-Templiers,25189,206,10.007,1.007,0.912,949,6692 -Occoches,80602,125,7.132,0.850,0.770,648,7008 -Coisy,80202,331,6.123,0.788,0.713,652,6988 -Guillon-les-Bains,25299,104,4.771,0.695,0.629,956,6697 -Adam-lès-Passavant,25006,91,9.526,0.982,0.889,955,6696 -Thise,25560,3069,8.937,0.952,0.862,931,6690 -Guindrecourt-sur-Blaise,52232,54,5.536,0.749,0.678,848,6801 -Attin,62044,730,6.604,0.818,0.741,611,7043 -Thilleux,52487,79,9.766,0.995,0.901,834,6817 -Ville-sur-Terre,10428,106,16.085,1.277,1.156,829,6808 -Ciré-d'Aunis,17107,1335,25.873,1.619,1.466,398,6560 -Fuligny,10163,48,10.301,1.022,0.925,826,6803 -Saint-Lon-les-Mines,40269,1195,21.818,1.487,1.346,368,6291 -Plémy,22184,1564,39.983,2.013,1.823,276,6823 -Plouescat,29185,3453,14.926,1.230,1.114,174,6867 -Petit-Mesnil,10286,221,14.767,1.223,1.107,821,6804 -Rachecourt-Suzémont,52413,104,3.633,0.607,0.550,844,6819 -Vieilley,25612,703,9.561,0.984,0.891,933,6700 -Passavant,25446,230,14.964,1.231,1.115,957,6689 -Amagney,25014,807,13.100,1.152,1.043,941,6695 -Fourbanne,25251,173,1.986,0.449,0.407,949,6698 -Bretigney-Notre-Dame,25094,111,5.786,0.766,0.694,949,6697 -Mérey-Vieilley,25376,145,3.388,0.586,0.531,930,6699 -Lomont-sur-Crête,25341,167,9.867,1.000,0.905,960,6700 -Champlive,25116,253,8.262,0.915,0.828,943,6693 -Persac,86190,770,60.403,2.474,2.240,530,6587 -Conchil-le-Temple,62233,1132,16.462,1.291,1.169,604,7028 -Blumeray,52057,109,14.753,1.223,1.107,836,6810 -Vennans,25599,261,1.382,0.374,0.339,944,6698 -Léouville,45181,81,4.299,0.660,0.598,634,6791 -Estréelles,62315,357,3.120,0.562,0.509,613,7044 -Maizières-lès-Brienne,10221,166,9.483,0.980,0.887,822,6815 -Vautebis,79341,115,7.265,0.858,0.777,461,6608 -Brienne-le-Château,10064,2868,21.729,1.484,1.344,816,6815 -Bresnay,3039,378,23.243,1.535,1.390,717,6595 -Campagne-lès-Hesdin,62204,1901,15.695,1.261,1.142,620,7032 -Dommartin-le-Franc,52171,246,10.020,1.008,0.913,847,6814 -Luc,48086,220,46.026,2.159,1.955,771,6394 -Pouligney-Lusans,25468,848,11.674,1.088,0.985,941,6695 -Baume-les-Dames,25047,5149,24.973,1.591,1.441,957,6702 -Saint-Léger,47250,141,5.754,0.764,0.692,487,6360 -Moca-Croce,2A160,245,27.606,1.672,1.514,1196,6097 -Hampigny,10171,242,9.523,0.982,0.889,817,6821 -Braillans,25086,198,1.962,0.446,0.404,932,6695 -Dommartin-le-Saint-Père,52172,276,14.910,1.229,1.113,840,6817 -Lanans,25324,167,10.217,1.017,0.921,960,6691 -Crespy-le-Neuf,10117,152,10.158,1.015,0.919,818,6811 -Torcheville,57675,114,6.176,0.791,0.716,983,6873 -Lederzeele,59337,667,8.683,0.938,0.849,648,7081 -Lucmau,33255,243,67.116,2.608,2.361,436,6370 -Ouve-Wirquin,62644,509,5.382,0.738,0.668,640,7061 -Cirey-sur-Blaise,52129,117,16.627,1.298,1.175,839,6805 -Baudrecourt,52039,94,8.805,0.945,0.856,847,6814 -Belley,1034,9133,22.550,1.512,1.369,912,6521 -Épothémont,10139,179,10.436,1.028,0.931,822,6814 -Doulevant-le-Château,52178,367,22.337,1.504,1.362,846,6810 -La Rothière,10327,109,7.228,0.856,0.775,817,6804 -Morancourt,52341,136,14.013,1.192,1.079,848,6813 -Mertrud,52321,176,12.141,1.109,1.004,838,6818 -Montigny-les-Jongleurs,80563,94,4.961,0.709,0.642,637,7010 -Unienville,10389,129,11.770,1.092,0.989,815,6805 -Hendecourt-lès-Ransart,62425,134,2.259,0.478,0.433,679,7012 -Zaessingue,68382,380,5.113,0.720,0.652,1028,6735 -Myon,25416,187,15.871,1.268,1.148,925,6664 -Busson,52084,38,9.969,1.005,0.910,875,6805 -La Romagne,49260,1835,16.039,1.275,1.154,397,6670 -Marchaux-Chaudefontaine,25368,1463,16.379,1.288,1.166,935,6694 -La Chapelle-Neuve,22037,404,24.128,1.564,1.416,225,6836 -Rouécourt,52436,48,7.845,0.892,0.808,856,6805 -Le Bois-Hellain,27071,231,3.190,0.569,0.515,510,6913 -Estrée-Blanche,62313,968,5.331,0.735,0.665,652,7057 -Hondeghem,59308,970,12.647,1.132,1.025,664,7072 -Chigny-les-Roses,51152,560,4.354,0.664,0.601,778,6893 -Ambonville,52007,79,14.488,1.212,1.097,852,6803 -Cerisières,52091,81,10.023,1.008,0.913,851,6803 -Les Planches-près-Arbois,39425,100,1.374,0.373,0.338,914,6645 -Pansey,52376,93,9.075,0.959,0.868,869,6820 -Autigny-le-Grand,52029,150,3.556,0.600,0.543,860,6822 -Leurville,52286,87,10.440,1.028,0.931,876,6804 -Crachier,38136,501,3.714,0.613,0.555,875,6497 -Mirbel,52326,42,6.150,0.789,0.714,849,6801 -Donjeux,52175,383,12.949,1.145,1.037,858,6809 -Mathons,52316,68,13.447,1.167,1.057,851,6817 -Rougemontot,25506,94,4.201,0.652,0.590,946,6702 -Borre,59091,603,5.982,0.779,0.705,670,7069 -Festubert,62330,1315,7.724,0.885,0.801,680,7051 -Lapugnoy,62489,3452,8.602,0.934,0.846,665,7046 -Levier,25334,2169,44.392,2.121,1.920,932,6657 -Aiglepierre,39006,426,7.109,0.849,0.769,914,6653 -Romagnieu,38343,1571,17.281,1.323,1.198,905,6497 -Ferrière-et-Lafolie,52199,51,7.961,0.898,0.813,855,6813 -Doulaincourt-Saucourt,52177,836,43.958,2.110,1.910,869,6807 -Béchamps,54058,86,9.405,0.976,0.884,899,6906 -Ivrey,39268,63,6.862,0.834,0.755,922,6661 -Rouvroy-sur-Marne,52440,387,8.422,0.924,0.837,854,6808 -Dournon,39202,137,6.576,0.816,0.739,925,6651 -Déservillers,25199,341,13.982,1.190,1.077,933,6658 -Tréveneuc,22377,785,6.712,0.825,0.747,269,6856 -Thonnance-lès-Joinville,52490,748,11.495,1.079,0.977,861,6822 -Ravilloles,39453,488,7.719,0.884,0.800,914,6598 -Montot-sur-Rognon,52335,128,7.825,0.890,0.806,871,6802 -Châtelus,38092,87,12.579,1.129,1.022,885,6443 -Wamin,62872,238,7.145,0.851,0.771,634,7034 -Germay,52218,46,11.931,1.099,0.995,878,6813 -Ajoux,7004,79,12.394,1.121,1.015,815,6407 -Wavrans-sur-Ternoise,62883,199,4.761,0.695,0.629,648,7036 -Sibiril,29276,1213,11.542,1.081,0.979,181,6864 -Échenay,52181,94,9.511,0.982,0.889,872,6819 -Cussangy,10120,235,21.376,1.472,1.333,781,6766 -Fleurbaix,62338,2685,12.927,1.144,1.036,688,7058 -Courcelles-le-Comte,62248,451,7.946,0.897,0.812,683,7005 -Crotenay,39183,654,12.042,1.105,1.000,912,6631 -Saint-Privé,89365,537,41.528,2.051,1.857,701,6738 -Censeau,39083,293,9.796,0.996,0.902,936,6640 -Landricourt,51315,154,5.844,0.769,0.696,833,6835 -Chârost,18055,986,10.957,1.054,0.954,631,6654 -Sainte-Foy-la-Grande,33402,2484,0.579,0.242,0.219,480,6420 -Carly,62214,555,6.331,0.801,0.725,609,7064 -Hénin-sur-Cojeul,62428,532,6.770,0.828,0.750,689,7011 -Mondement-Montgivroux,51374,33,7.378,0.865,0.783,754,6854 -Estrébœuf,80287,244,6.238,0.795,0.720,601,7007 -Cambernon,50092,722,17.090,1.316,1.192,381,6899 -Buysscheure,59119,580,6.187,0.792,0.717,652,7078 -Reugney,25489,316,8.276,0.916,0.829,940,6663 -Oudezeele,59453,685,9.437,0.978,0.885,664,7082 -Thonnance-les-Moulins,52491,114,21.580,1.479,1.339,870,6818 -Mons-Boubert,80556,558,9.573,0.985,0.892,605,7002 -Penin,62651,474,9.249,0.968,0.876,665,7024 -Flammerécourt,52201,68,10.644,1.038,0.940,854,6809 -Soveria,2B289,118,12.121,1.108,1.003,1211,6160 -Salins-les-Bains,39500,2652,24.750,1.584,1.434,923,6655 -Monnet-la-Ville,39344,347,6.218,0.794,0.719,913,6628 -Lefaux,62496,240,8.291,0.917,0.830,604,7054 -Virlet,63462,271,17.395,1.328,1.202,679,6560 -Tingry,62821,287,11.336,1.072,0.971,609,7060 -Joinville,52250,3177,19.080,1.390,1.259,856,6814 -Charmes-la-Grande,52110,157,11.482,1.079,0.977,846,6808 -Roches-Bettaincourt,52044,575,41.485,2.050,1.856,863,6797 -Ney,39389,566,7.407,0.866,0.784,918,6630 -Beaugeay,17036,769,14.577,1.215,1.100,387,6537 -Clucy,39155,81,5.195,0.726,0.657,922,6653 -Lesmont,10193,308,10.051,1.009,0.914,804,6817 -Wulverdinghe,59664,310,2.919,0.544,0.493,648,7081 -Saint-Laurent-du-Tencement,27556,63,2.807,0.533,0.483,515,6869 -Barlin,62083,7720,6.298,0.799,0.723,672,7039 -Balinghem,62078,1191,5.803,0.767,0.694,625,7083 -Saint-Aubin,62742,262,4.447,0.671,0.608,607,7040 -Fronville,52212,335,11.156,1.063,0.962,859,6815 -Lablachère,7117,2111,26.738,1.646,1.490,797,6378 -Mussey-sur-Marne,52346,367,9.986,1.006,0.911,860,6811 -Suzannecourt,52484,375,4.498,0.675,0.611,862,6816 -Chatonrupt-Sommermont,52118,306,16.751,1.303,1.180,852,6820 -Yèvres-le-Petit,10445,59,8.243,0.914,0.828,810,6823 -Humberville,52245,70,6.461,0.809,0.732,875,6802 -Brachay,52066,58,7.467,0.870,0.788,850,6813 -Gudmont-Villiers,52230,297,16.771,1.304,1.181,854,6807 -Thérouanne,62811,1135,8.653,0.936,0.847,646,7057 -Noncourt-sur-le-Rongeant,52357,175,9.321,0.972,0.880,867,6813 -Elnes,62292,935,6.391,0.805,0.729,636,7064 -Froncles,52211,1558,20.445,1.439,1.303,861,6800 -Leschères-sur-le-Blaiseron,52284,101,14.858,1.227,1.111,854,6807 -Montaigut-le-Blanc,23132,407,17.420,1.329,1.203,602,6561 -Marigny,39313,200,12.002,1.103,0.999,914,6625 -Cirfontaines-en-Ornois,52131,76,13.965,1.190,1.077,877,6822 -Domremy-Landéville,52173,79,18.586,1.372,1.242,868,6808 -Allonne,79007,665,23.160,1.532,1.387,444,6616 -Poissons,52398,685,15.626,1.258,1.139,864,6819 -Boiry-Notre-Dame,62145,458,6.204,0.793,0.718,697,7020 -Reynel,52420,120,18.717,1.377,1.247,875,6805 -Mouriez,62596,250,15.803,1.265,1.145,625,7031 -Saint-Folquin,62748,2220,17.883,1.346,1.219,640,7095 -Molins-sur-Aube,10243,107,6.246,0.796,0.721,803,6817 -Rosnay-l'Hôpital,10326,197,12.687,1.134,1.027,812,6821 -Hachan,65214,42,1.847,0.433,0.392,493,6247 -Frasne,25259,1950,33.023,1.829,1.656,942,6641 -Unieux,42316,8786,8.551,0.931,0.843,798,6481 -Conteville-lès-Boulogne,62237,465,2.124,0.464,0.420,610,7074 -Bourg-de-Sirod,39070,91,4.437,0.670,0.607,925,6630 -Braux,10059,104,15.350,1.247,1.129,808,6819 -Précy-Saint-Martin,10304,188,6.441,0.808,0.732,809,6815 -Pel-et-Der,10283,136,13.341,1.163,1.053,807,6809 -Molain,39336,108,11.659,1.087,0.984,914,6642 -Brillecourt,10065,93,5.791,0.766,0.694,802,6822 -Épagne,10138,132,4.042,0.640,0.579,808,6812 -Hontanx,40127,595,30.790,1.766,1.599,434,6306 -Aulnay,10017,129,10.415,1.027,0.930,803,6820 -Saint-Christophe-Dodinicourt,10337,34,5.008,0.712,0.645,809,6815 -Achiet-le-Petit,62006,299,7.305,0.860,0.779,682,7005 -Bois-Grenier,59088,1603,7.419,0.867,0.785,693,7061 -Montgobert,2506,192,11.168,1.064,0.963,710,6912 -Châtelneuf,39120,139,13.180,1.156,1.047,925,6622 -Val-Mont,21327,258,19.953,1.422,1.287,822,6662 -Bailleulmont,62072,244,5.314,0.734,0.665,670,7013 -La Favière,39221,26,2.753,0.528,0.478,931,6632 -Mouzon,8311,2346,42.076,2.065,1.870,849,6942 -Troisvaux,62831,270,6.212,0.793,0.718,653,7037 -Vaudricourt,62836,944,2.989,0.550,0.498,674,7046 -Eringhem,59200,473,11.636,1.086,0.983,650,7087 -Amancey,25015,679,13.816,1.183,1.071,935,6666 -Bâgé-le-Châtel,1026,915,0.876,0.298,0.270,848,6580 -Gauchin-Verloingt,62367,846,5.942,0.776,0.703,652,7031 -Hesdin,62447,2224,0.939,0.308,0.279,631,7031 -Englesqueville-la-Percée,14239,101,8.066,0.904,0.818,413,6925 -Chalette-sur-Voire,10073,136,5.694,0.760,0.688,804,6817 -Le Pasquier,39406,256,7.904,0.895,0.810,923,6637 -Magnicourt,10214,78,7.821,0.890,0.806,801,6818 -Peuplingues,62654,775,10.526,1.033,0.935,611,7089 -Saint-Vallier,16357,137,18.251,1.360,1.231,456,6467 -Bajus,62077,368,2.982,0.550,0.498,661,7036 -Duisans,62279,1285,10.760,1.044,0.945,676,7024 -Saint-Senier-sous-Avranches,50554,1398,8.618,0.934,0.846,385,6851 -Beugin,62120,473,5.042,0.715,0.647,664,7040 -Saint-Bouize,18200,312,15.021,1.234,1.117,695,6685 -Bierne,59082,1817,11.088,1.060,0.960,657,7097 -Joigny,89206,9850,47.225,2.187,1.980,734,6770 -Bracon,39072,270,6.402,0.805,0.729,918,6653 -Poisat,38309,2208,2.530,0.506,0.458,917,6454 -Saint-Léger-sous-Brienne,10345,387,13.455,1.168,1.058,810,6813 -Baignes-Sainte-Radegonde,16025,1275,31.312,1.781,1.613,442,6482 -Quernes,62676,465,2.763,0.529,0.479,657,7057 -Blaincourt-sur-Aube,10046,108,5.839,0.769,0.696,809,6810 -Volnay,21712,240,7.551,0.875,0.792,833,6659 -Roussillon-en-Morvan,71376,268,30.594,1.761,1.594,779,6656 -Ambrières-les-Vallées,53003,2812,38.435,1.973,1.786,435,6821 -Laval-sur-Tourbe,51317,60,14.706,1.221,1.106,827,6896 -Regnévelle,88377,125,8.665,0.937,0.848,921,6767 -Joudreville,54284,1165,5.602,0.753,0.682,901,6912 -Oignies,62637,9692,5.498,0.746,0.675,699,7040 -Selles,62786,333,6.358,0.803,0.727,623,7067 -Héninel,62426,181,5.379,0.738,0.668,692,7016 -Conte,39165,59,3.345,0.582,0.527,929,6633 -Rix,39461,72,5.390,0.739,0.669,931,6633 -Bertrimont,76086,224,4.772,0.695,0.629,556,6953 -Saint-Michel-l'Observatoire,4192,1239,28.205,1.690,1.530,916,6317 -Saint-Remy-sur-Bussy,51515,343,34.644,1.874,1.697,818,6889 -Courcelles-au-Bois,80217,82,2.035,0.454,0.411,671,7001 -Pont-d'Héry,39436,236,13.616,1.175,1.064,922,6642 -La Croix-en-Champagne,51197,78,16.642,1.299,1.176,824,6887 -Chilly-sur-Salins,39147,112,12.014,1.103,0.999,917,6642 -Montaut,40191,635,14.118,1.196,1.083,404,6301 -Arnèke,59018,1641,13.428,1.166,1.056,659,7085 -Port-Lesney,39439,538,10.913,1.052,0.952,913,6661 -Royon,62725,133,7.462,0.870,0.788,629,7044 -Montigny-sur-l'Ain,39356,195,7.956,0.898,0.813,912,6625 -La Chapelle-sur-Furieuse,39103,318,8.949,0.952,0.862,916,6655 -Saint-Germain-en-Montagne,39481,423,5.393,0.739,0.669,926,6634 -Gillois,39254,131,9.725,0.993,0.899,933,6629 -La Courtine,23067,740,41.856,2.059,1.864,641,6511 -Bimont,62134,116,6.829,0.832,0.753,623,7048 -Yébleron,76751,1301,10.265,1.020,0.924,522,6949 -Saint-Jean-sur-Tourbe,51491,96,17.138,1.318,1.193,827,6895 -Chapois,39105,220,10.123,1.013,0.917,923,6641 -Foncine-le-Haut,39228,1055,29.045,1.715,1.553,936,6620 -Lalandusse,47132,220,9.438,0.978,0.885,503,6397 -Le Vaudioux,39545,176,6.061,0.784,0.710,925,6624 -Saisseval,80723,240,7.353,0.863,0.781,635,6979 -Somme-Vesle,51548,428,35.541,1.898,1.718,816,6882 -Saint-Jean-des-Échelles,72292,254,10.623,1.037,0.939,533,6784 -Lebiez,62492,249,9.680,0.990,0.896,629,7039 -Thésy,39529,67,4.992,0.711,0.644,924,6647 -Crouzet-Migette,25180,118,5.611,0.754,0.683,930,6657 -Chaux-Champagny,39133,73,7.488,0.871,0.789,920,6643 -Villers-en-Argonne,51632,229,9.577,0.985,0.892,844,6882 -Le Fresne,51260,75,17.884,1.346,1.219,825,6870 -Ivory,39267,94,9.332,0.972,0.880,916,6650 -Blingel,62142,162,3.212,0.570,0.516,640,7033 -Cernans,39084,139,5.513,0.747,0.676,926,6654 -Willer,68371,316,6.310,0.800,0.724,1023,6729 -Valempoulières,39540,203,16.277,1.284,1.163,920,6643 -Plénisette,39428,24,2.721,0.525,0.475,929,6639 -Rebergues,62692,379,4.805,0.698,0.632,625,7075 -Coupéville,51179,164,30.489,1.758,1.592,818,6873 -Wargemoulin-Hurlus,51659,46,15.129,1.238,1.121,819,6896 -Louroux-de-Bouble,3152,243,16.715,1.301,1.178,699,6568 -Loulle,39301,172,10.917,1.052,0.952,920,6624 -Somme-Suippe,51546,468,31.532,1.787,1.618,819,6891 -Chaux-des-Crotenay,39129,406,11.693,1.088,0.985,925,6620 -Droisy,74107,162,4.557,0.680,0.616,923,6543 -Les Planches-en-Montagne,39424,165,13.494,1.169,1.058,927,6624 -Poix,51438,72,14.681,1.220,1.105,819,6873 -Pretin,39444,62,5.441,0.742,0.672,917,6651 -Saraz,25533,12,5.908,0.774,0.701,924,6658 -Buffard,25098,159,8.115,0.907,0.821,914,6662 -Saint-Jean-sur-Moivre,51490,206,15.088,1.236,1.119,818,6863 -Somme-Tourbe,51547,144,19.278,1.398,1.266,818,6889 -Septèmes-les-Vallons,13106,10848,17.700,1.339,1.212,893,6260 -Lemuy,39291,237,21.429,1.474,1.335,924,6647 -La Chapelle-Erbrée,35061,695,11.907,1.098,0.994,397,6792 -Attignat,1024,3270,18.951,1.386,1.255,871,6579 -Bolandoz,25070,379,12.162,1.110,1.005,937,6663 -Dampierre-sur-Moivre,51208,112,11.504,1.080,0.978,814,6869 -Lent,39292,146,4.184,0.651,0.589,927,6631 -Marnoz,39315,407,4.921,0.706,0.639,916,6655 -Mesnay,39325,579,8.355,0.920,0.833,916,6650 -Billy-Montigny,62133,8166,2.728,0.526,0.476,695,7035 -Suippes,51559,3931,42.386,2.072,1.876,808,6889 -Saint-Germain-la-Ville,51482,669,11.840,1.095,0.991,810,6868 -Lillers,62516,10058,26.621,1.642,1.487,667,7052 -Chennebrun,27155,110,2.933,0.545,0.493,536,6846 -Équevillon,39210,582,4.812,0.698,0.632,926,6634 -Landrethun-le-Nord,62487,1299,7.740,0.886,0.802,612,7083 -Mourmelon-le-Grand,51388,5183,23.514,1.544,1.398,797,6894 -Vésigneul-sur-Marne,51616,240,7.927,0.896,0.811,810,6867 -Sainte-Austreberthe,62743,406,3.692,0.612,0.554,632,7028 -Caillouet-Orgeville,27123,470,7.884,0.894,0.809,575,6880 -Billy-Berclau,62132,4562,7.361,0.864,0.782,692,7046 -Andelot-en-Montagne,39009,528,12.632,1.131,1.024,924,6647 -Syam,39523,190,6.992,0.842,0.762,926,6628 -Les Nans,39381,89,8.442,0.925,0.838,926,6635 -La Cheppe,51147,334,24.024,1.560,1.412,808,6889 -Châlons-en-Champagne,51108,44980,26.049,1.625,1.471,798,6872 -Saint-Thiébaud,39495,60,8.046,0.903,0.818,921,6658 -Saint-Étienne-au-Temple,51476,813,12.049,1.105,1.000,804,6883 -Saint-Hilaire-au-Temple,51485,337,6.151,0.789,0.714,800,6884 -Moncetz-Longevas,51372,541,7.243,0.857,0.776,803,6868 -Dampierre-au-Temple,51205,274,10.234,1.018,0.922,801,6880 -Doye,39203,103,3.602,0.604,0.547,929,6635 -Bussy-le-Château,51097,169,23.925,1.557,1.410,813,6889 -Gilles,28180,526,7.285,0.859,0.778,589,6867 -Mairy-sur-Marne,51339,548,20.863,1.454,1.316,804,6867 -Arzillières-Neuville,51017,328,12.254,1.114,1.009,819,6841 -Preures,62670,603,15.944,1.271,1.151,621,7051 -Sapois,39503,368,3.584,0.603,0.546,926,6632 -Saint-Memmie,51506,5548,12.630,1.131,1.024,806,6874 -Lottinghen,62530,549,10.473,1.030,0.933,624,7063 -Fournes-en-Weppes,59250,2216,8.328,0.919,0.832,691,7056 -Clairmarais,62225,634,18.070,1.353,1.225,658,7075 -La Latette,39282,70,5.887,0.772,0.699,938,6633 -Exincourt,25230,3230,3.498,0.595,0.539,990,6718 -Pogny,51436,920,14.083,1.195,1.082,810,6861 -Saint-Hilaire-le-Grand,51486,352,42.395,2.073,1.877,808,6902 -Tubersent,62832,498,6.964,0.840,0.761,607,7046 -Pommera,62663,311,4.419,0.669,0.606,659,7009 -Francheville,51259,210,9.398,0.976,0.884,815,6864 -Courboin,2223,299,14.062,1.194,1.081,734,6879 -La Capelle-lès-Boulogne,62908,1604,6.527,0.813,0.736,611,7070 -Vauchelles-les-Quesnoy,80779,847,6.210,0.793,0.718,619,7002 -Grattery,70278,213,6.305,0.799,0.723,932,6733 -Cuperly,51203,232,20.795,1.452,1.315,806,6882 -Pont-du-Navoy,39437,267,9.695,0.991,0.897,916,6630 -Fontenu,39230,74,9.314,0.971,0.879,915,6625 -Vitray-en-Beauce,28419,357,10.939,1.053,0.953,583,6801 -Champagnole,39097,7928,20.137,1.428,1.293,922,6630 -Crans,39178,74,9.105,0.960,0.869,929,6625 -Fontaine-lès-Boulans,62342,97,5.669,0.758,0.686,649,7047 -Arsure-Arsurette,39020,100,12.711,1.135,1.028,938,6628 -Notre-Dame-de-Monts,85164,2066,20.841,1.453,1.316,315,6652 -Billecul,39055,45,4.354,0.664,0.601,934,6631 -Neuwiller,68232,469,3.791,0.620,0.561,1038,6723 -Bilia,2A038,45,7.394,0.866,0.784,1194,6078 -Pillemoine,39419,57,4.736,0.693,0.627,922,6628 -Maresquel-Ecquemicourt,62552,966,7.994,0.900,0.815,626,7034 -Saint-Augustin-des-Bois,49266,1214,27.594,1.672,1.514,411,6715 -Malbouhans,70328,347,7.688,0.883,0.799,968,6742 -Jonchery-sur-Suippe,51307,224,24.606,1.579,1.430,804,6892 -L'Épine,51231,622,30.500,1.758,1.592,802,6879 -Beuvrequen,62125,451,4.741,0.693,0.627,606,7078 -Notre-Dame-des-Landes,44111,2144,37.522,1.950,1.766,340,6705 -Pagnoz,39403,234,3.301,0.578,0.523,913,6657 -Houeillès,47119,576,67.735,2.620,2.372,471,6348 -Éternoz,25223,337,29.113,1.717,1.555,931,6659 -Rupt-sur-Moselle,88408,3491,45.846,2.155,1.951,969,6769 -Roye,70455,1570,10.506,1.032,0.934,964,6738 -Gergy,71215,2530,39.261,1.994,1.805,844,6642 -Brenoux,48030,379,11.233,1.067,0.966,740,6378 -Magnivray,70314,169,4.797,0.697,0.631,958,6749 -Corravillers,70176,188,11.319,1.071,0.970,975,6761 -Boujailles,25079,422,28.190,1.690,1.530,931,6644 -San-Lorenzo,2B304,142,10.144,1.014,0.918,1221,6163 -Nozeroy,39391,436,3.745,0.616,0.558,931,6633 -Onglières,39393,65,8.973,0.953,0.863,930,6636 -Le Temple-de-Bretagne,44203,1928,1.729,0.419,0.379,338,6704 -Esboz-Brest,70216,439,9.708,0.992,0.898,959,6752 -Le Larderet,39277,76,6.115,0.787,0.713,926,6640 -Cize,39153,785,4.168,0.650,0.589,923,6627 -Nans-sous-Sainte-Anne,25420,147,8.778,0.943,0.854,927,6656 -La Châtelaine,39116,134,13.020,1.149,1.040,917,6641 -Montmahoux,25404,94,6.714,0.825,0.747,931,6659 -Saint-Sauveur,70473,1922,12.114,1.108,1.003,951,6749 -La Bruyère,70103,214,6.285,0.798,0.723,960,6749 -Damrémont,52164,208,4.787,0.696,0.630,896,6764 -Les Chalesmes,39091,92,9.367,0.974,0.882,933,6625 -Loudes,43124,908,25.032,1.593,1.442,761,6443 -Ardon,39015,115,5.142,0.722,0.654,919,6632 -Vannoz,39543,203,5.836,0.769,0.696,922,6636 -Marchéville-en-Woëvre,55320,69,5.616,0.754,0.683,894,6890 -Clairegoutte,70157,382,10.462,1.030,0.933,971,6735 -Montmarlon,39359,31,3.408,0.588,0.532,924,6646 -Mollans,70351,237,13.619,1.175,1.064,953,6732 -Amont-et-Effreney,70016,166,16.886,1.308,1.184,967,6757 -La Rosière,70453,80,8.975,0.954,0.864,970,6766 -Longcochon,39298,62,3.628,0.606,0.549,934,6633 -Saint-Aubin-d'Aubigné,35251,3691,23.375,1.539,1.393,362,6804 -Ailloncourt,70007,304,9.447,0.978,0.885,952,6742 -Neuville-sous-Montreuil,62610,655,8.805,0.945,0.856,611,7043 -Froideconche,70258,1975,16.057,1.276,1.155,956,6751 -Tilloy-lès-Hermaville,62816,224,2.921,0.544,0.493,669,7024 -Sailly-Labourse,62735,2295,6.095,0.786,0.712,678,7045 -Visoncourt,70571,40,4.536,0.678,0.614,946,6743 -Courset,62251,517,10.241,1.019,0.923,621,7062 -Ramecourt,62686,374,8.061,0.904,0.818,650,7031 -Bief-du-Fourg,39053,196,10.138,1.014,0.918,936,6643 -Floringhem,62340,905,4.629,0.685,0.620,658,7045 -Breuchotte,70094,303,4.389,0.667,0.604,958,6753 -Bailleul-Sir-Berthoult,62073,1402,9.328,0.972,0.880,689,7025 -Mélisey,70339,1680,21.213,1.466,1.327,966,6743 -Quers,70432,356,9.977,1.005,0.910,961,6741 -Boisdinghem,62149,247,3.160,0.566,0.512,635,7073 -Beauvoir-Wavans,62881,382,9.532,0.983,0.890,639,7011 -Bief-des-Maisons,39052,73,5.806,0.767,0.694,932,6628 -Balleroy-sur-Drôme,14035,1399,12.014,1.103,0.999,419,6903 -Thiéfosse,88467,606,7.694,0.883,0.799,976,6769 -Abergement-lès-Thésy,39004,63,4.616,0.684,0.619,924,6648 -Vy-lès-Lure,70581,662,15.934,1.271,1.151,961,6731 -Beussent,62123,552,16.011,1.274,1.153,613,7054 -Mournans-Charbonny,39372,92,5.348,0.736,0.666,926,6633 -Cuvier,39187,259,10.575,1.035,0.937,932,6643 -Haisnes,62401,4336,5.626,0.755,0.684,684,7042 -La Garde,38177,98,9.128,0.962,0.871,938,6450 -Besain,39050,162,13.027,1.149,1.040,911,6633 -Bellefontaine,39047,545,24.383,1.572,1.423,936,6614 -Saint-Jean-de-Chevelu,73245,808,12.695,1.134,1.027,921,6518 -Charcier,39107,123,12.994,1.147,1.039,908,6619 -Côebrune,25166,77,3.260,0.575,0.521,952,6689 -Oye-Plage,62645,5260,34.108,1.859,1.683,633,7097 -Sermaize,60617,247,5.132,0.721,0.653,696,6945 -Ivergny,62475,260,7.375,0.864,0.782,656,7014 -Méricourt,62570,11688,7.668,0.881,0.798,692,7036 -La Gorgue,59268,5673,15.050,1.235,1.118,682,7057 -Adelans-et-le-Val-de-Bithaine,70004,296,17.274,1.323,1.198,950,6739 -Foncine-le-Bas,39227,198,9.194,0.965,0.874,934,6617 -Andornay,70021,206,1.470,0.386,0.349,970,6736 -Ternuay-Melay-et-Saint-Hilaire,70498,505,25.904,1.620,1.467,968,6751 -Widehem,62887,245,7.199,0.854,0.773,605,7056 -Crêches-sur-Saône,71150,2980,9.466,0.979,0.886,839,6572 -Arfeuille-Châtain,23005,187,20.546,1.443,1.307,655,6548 -Le Ménil,88302,1073,20.327,1.435,1.299,982,6764 -Rozès,32352,124,10.851,1.049,0.950,490,6303 -Dambenoît-lès-Colombe,70195,279,8.740,0.941,0.852,951,6741 -Moffans-et-Vacheresse,70348,627,14.076,1.194,1.081,966,6729 -Le Poinçonnet,36159,5870,45.575,2.149,1.946,607,6624 -Saint-Maurice-Crillat,39493,239,20.675,1.447,1.310,915,6614 -Les Rousses,39470,3544,38.071,1.964,1.778,932,6603 -Beulotte-Saint-Laurent,70071,58,14.360,1.206,1.092,976,6760 -Saint-Pierre,39494,341,16.599,1.297,1.174,924,6611 -Châtel-de-Joux,39118,51,14.292,1.203,1.089,912,6604 -La Bollène-Vésubie,6020,579,35.345,1.892,1.713,1055,6332 -La Voivre,70573,144,12.056,1.105,1.000,966,6751 -Bugny,25099,217,4.782,0.696,0.630,955,6659 -Wavrin,59653,7628,13.605,1.174,1.063,694,7055 -Croisilles,28118,447,5.749,0.763,0.691,591,6845 -Crosville-sur-Scie,76205,246,3.508,0.596,0.540,561,6970 -Sainghin-en-Weppes,59524,5640,7.804,0.889,0.805,693,7048 -Éterpigny,62319,257,3.537,0.599,0.542,698,7019 -La Proiselière-et-Langle,70425,145,7.072,0.846,0.766,961,6753 -Gennes,25267,680,7.246,0.857,0.776,936,6689 -Lomont,70306,442,11.392,1.074,0.972,972,6730 -Lignières-Orgères,53133,761,41.199,2.043,1.850,466,6827 -Frotey-lès-Lure,70260,695,7.310,0.861,0.780,965,6733 -Lure,70310,8247,24.686,1.582,1.432,965,6733 -Saulxures-sur-Moselotte,88447,2636,31.905,1.798,1.628,982,6764 -Magny-Danigon,70318,442,7.698,0.883,0.799,972,6739 -Ruitz,62727,1601,4.887,0.704,0.637,671,7040 -Saint-Laurent-en-Grandvaux,39487,1819,17.586,1.335,1.209,927,6615 -Luxeuil-les-Bains,70311,6726,22.018,1.494,1.353,948,6753 -Auchy-les-Mines,62051,4667,5.093,0.718,0.650,685,7047 -Saint-Tricat,62769,762,7.408,0.866,0.784,615,7089 -Meussia,39328,424,13.679,1.177,1.066,912,6604 -Beutin,62124,467,2.964,0.548,0.496,611,7046 -Calonne-sur-la-Lys,62195,1565,10.922,1.052,0.952,674,7056 -La Chapelle-lès-Luxeuil,70128,386,7.841,0.891,0.807,957,6748 -Crozes-Hermitage,26110,651,5.670,0.758,0.686,844,6444 -Franchevelle,70250,417,10.398,1.026,0.929,961,6743 -Genevreuille,70262,169,6.376,0.804,0.728,952,6736 -Granges-le-Bourg,70277,380,10.353,1.024,0.927,969,6724 -Fays,88169,229,4.871,0.703,0.637,971,6796 -Thoiria,39531,198,12.365,1.119,1.013,913,6605 -Biarritz,64122,24777,11.679,1.088,0.985,331,6276 -Ducey-Les Chéris,50168,2757,17.229,1.321,1.196,384,6845 -Écromagny,70210,156,6.905,0.836,0.757,968,6751 -Audinghen,62054,579,13.404,1.165,1.055,602,7087 -Hauts de Bienne,39368,5370,23.534,1.544,1.398,924,6604 -Hocquinghen,62455,112,1.969,0.447,0.405,625,7075 -Étival,39216,307,14.091,1.195,1.082,916,6605 -Le Val-d'Ajol,88487,3884,73.293,2.725,2.467,956,6766 -La Neuvelle-lès-Lure,70385,333,4.858,0.702,0.636,967,6742 -Looberghe,59358,1183,19.528,1.407,1.274,652,7090 -Halinghen,62402,331,5.647,0.756,0.684,607,7056 -Ribeaucourt,80671,257,5.459,0.744,0.674,638,7003 -Fort-du-Plasne,39232,442,13.030,1.149,1.040,927,6615 -Zonza,2A362,2698,134.116,3.686,3.337,1231,6081 -Piève,2B230,109,19.610,1.410,1.277,1217,6189 -Pressy,62669,315,4.381,0.666,0.603,655,7042 -Vertamboz,39556,92,6.753,0.827,0.749,910,6614 -Saint-Maurice-sur-Moselle,88426,1379,36.568,1.925,1.743,984,6755 -Songeson,39518,69,8.597,0.933,0.845,919,6619 -Monchy-Breton,62580,456,6.839,0.832,0.753,660,7032 -Citers,70155,767,15.188,1.241,1.124,955,6742 -La Chaumusse,39126,407,10.716,1.042,0.943,925,6613 -Lac-des-Rouges-Truites,39271,396,19.617,1.410,1.277,931,6619 -Vaudrecourt,52505,36,2.625,0.516,0.467,898,6793 -Magny-Vernois,70321,1348,6.523,0.813,0.736,959,6737 -Escœuilles,62308,478,5.897,0.773,0.700,627,7070 -Bernieulles,62116,185,5.853,0.770,0.697,613,7054 -Burbure,62188,2925,5.530,0.749,0.678,663,7047 -Les Fessey,70233,139,5.546,0.750,0.679,962,6750 -Linexert,70304,131,1.961,0.446,0.404,961,6743 -Lain,89215,181,10.336,1.023,0.926,726,6721 -Entre-deux-Monts,39208,145,5.399,0.740,0.670,926,6619 -Vecoux,88498,874,13.931,1.188,1.076,976,6769 -Cogna,39156,252,6.667,0.822,0.744,913,6612 -Ventron,88500,841,24.448,1.574,1.425,992,6765 -Houdilcourt,8229,139,11.280,1.069,0.968,781,6923 -Gouhenans,70271,395,8.533,0.930,0.842,960,6728 -Lacroix-Barrez,12118,502,28.009,1.685,1.526,670,6404 -Moringhem,62592,550,9.933,1.003,0.908,638,7073 -Crécy-en-Ponthieu,80222,1469,57.127,2.406,2.178,619,7012 -Longevelle,70307,128,4.245,0.656,0.594,958,6728 -Liévans,70303,144,4.174,0.650,0.589,950,6732 -Morbier,39367,2306,42.716,2.080,1.883,927,6609 -Saint-Germain,70464,1340,14.286,1.203,1.089,961,6742 -Saint-Gervais-sur-Couches,71424,202,20.484,1.441,1.305,821,6650 -La Chaux-du-Dombief,39131,530,21.731,1.484,1.344,924,6619 -Chabanière,69228,4174,34.902,1.881,1.703,829,6495 -Saint-Anthot,21539,65,4.101,0.645,0.584,823,6693 -Bouvigny-Boyeffles,62170,2428,9.135,0.962,0.871,675,7035 -Manin,62544,189,4.084,0.643,0.582,664,7024 -Saulchoy,62783,315,5.367,0.737,0.667,618,7028 -Villeneuve-Loubet,6161,14672,19.907,1.420,1.286,1027,6291 -Watronville,55579,108,6.554,0.815,0.738,888,6897 -Pillac,16260,267,19.612,1.410,1.277,476,6473 -Saint-Floris,62747,578,4.069,0.642,0.581,669,7057 -Cerelles,37047,1190,12.332,1.118,1.012,524,6712 -Cornimont,88116,3238,40.276,2.020,1.829,987,6766 -Villers-Sir-Simon,62860,117,2.501,0.503,0.455,665,7024 -Fresse-sur-Moselle,88188,1749,18.512,1.370,1.240,987,6762 -Belmont,70062,135,4.553,0.679,0.615,962,6750 -Servon-Melzicourt,51533,109,25.537,1.609,1.457,834,6898 -Charézier,39109,172,9.325,0.972,0.880,908,6619 -Bussang,88081,1405,27.630,1.673,1.515,993,6763 -Paray-Douaville,78478,258,10.208,1.017,0.921,617,6816 -Boviolles,55067,95,8.179,0.910,0.824,878,6839 -Eurville-Bienville,52194,2094,20.870,1.454,1.316,853,6835 -Soucia,39519,192,12.472,1.124,1.018,909,6608 -Montessaux,70361,164,3.246,0.573,0.519,967,6742 -Breuches,70093,705,9.232,0.967,0.876,951,6750 -Zoteux,62903,602,7.341,0.862,0.780,622,7056 -Linzeux,62518,156,4.764,0.695,0.629,642,7028 -La Longine,70308,227,11.906,1.098,0.994,965,6762 -Courmont,70182,129,6.423,0.807,0.731,972,6729 -Bouhans-lès-Lure,70081,322,9.023,0.956,0.866,960,6737 -Charchilla,39106,275,6.931,0.838,0.759,908,6598 -Sampigny-lès-Maranges,71496,142,2.677,0.521,0.472,825,6646 -Saugeot,39505,65,4.469,0.673,0.609,914,6616 -Oricourt,70396,38,3.738,0.615,0.557,954,6728 -Lieucourt,70302,79,4.799,0.697,0.631,896,6699 -Saint-Léonard,88423,1355,14.456,1.210,1.096,989,6797 -Vouhenans,70577,366,8.386,0.922,0.835,965,6732 -Ham-en-Artois,62407,1009,3.315,0.580,0.525,662,7056 -Bergues,59067,3729,1.340,0.368,0.333,660,7097 -Palante,70403,236,3.537,0.599,0.542,968,6736 -Blesme,51068,220,6.685,0.823,0.745,829,6850 -Lumbres,62534,3685,10.058,1.009,0.914,636,7068 -Ferdrupt,88170,720,14.831,1.226,1.110,976,6760 -Bonlieu,39063,258,12.954,1.146,1.038,918,6616 -Lanvellec,22119,598,18.938,1.385,1.254,218,6858 -Allouagne,62023,2939,7.830,0.891,0.807,663,7047 -Cherves,86073,594,26.202,1.629,1.475,468,6623 -Boissia,39061,123,5.912,0.774,0.701,908,6611 -Saint-Sornin,17406,374,13.598,1.174,1.063,391,6529 -Amblans-et-Velotte,70014,393,9.848,0.999,0.905,959,6737 -Saint-Didier-en-Velay,43177,3424,26.381,1.635,1.480,799,6465 -Bradiancourt,76139,220,4.098,0.644,0.583,583,6953 -Pierrefitte-en-Cinglais,14501,260,10.823,1.047,0.948,450,6874 -La Montagne,70352,38,12.570,1.129,1.022,966,6764 -Fresse,70256,733,27.793,1.678,1.519,979,6748 -Moussages,15137,272,19.475,1.405,1.272,659,6461 -Faymont,70229,261,7.984,0.899,0.814,972,6729 -Rousset-les-Vignes,26285,293,15.617,1.258,1.139,868,6373 -Thol-lès-Millières,52489,35,6.917,0.837,0.758,886,6787 -Licques,62506,1631,18.483,1.368,1.239,626,7076 -Arry,80030,208,7.442,0.868,0.786,609,7023 -Le Frasnois,39240,158,14.728,1.222,1.106,924,6619 -Roclincourt,62714,771,5.943,0.776,0.703,687,7026 -Uxelles,39538,53,5.319,0.734,0.665,915,6614 -Nonac,16246,291,21.048,1.460,1.322,469,6481 -Chapelle-des-Bois,25121,253,39.910,2.011,1.821,934,6618 -Saint-Étienne-sous-Barbuise,10338,161,11.045,1.058,0.958,779,6819 -Grand'Combe-des-Bois,25286,138,11.895,1.098,0.994,984,6674 -Bief,25061,110,3.791,0.620,0.561,984,6699 -Maîche,25356,4296,17.456,1.330,1.204,984,6688 -Brères,25090,60,2.160,0.468,0.424,918,6665 -Liebvillers,25335,170,3.113,0.562,0.509,987,6699 -Verquières,13116,826,4.605,0.683,0.618,855,6308 -Plancher-les-Mines,70414,991,25.637,1.612,1.460,984,6754 -Tharot,89410,93,2.405,0.494,0.447,765,6717 -Raddon-et-Chapendu,70435,867,12.604,1.130,1.023,958,6754 -Échassières,3108,390,23.291,1.536,1.391,695,6569 -Servance-Miellin,70489,828,53.095,2.319,2.100,979,6749 -Monchy-Cayeux,62581,306,6.240,0.795,0.720,650,7039 -Cleyrac,33129,159,6.076,0.785,0.711,458,6408 -Ly-Fontaine,2446,123,3.528,0.598,0.541,722,6960 -Thumeréville,54524,76,8.028,0.902,0.817,906,6906 -Thiébouhans,25559,254,5.809,0.767,0.694,989,6692 -Charquemont,25127,2656,21.718,1.483,1.343,990,6688 -Borey,70077,235,14.534,1.214,1.099,954,6725 -Écluzelles,28136,166,3.268,0.575,0.521,585,6847 -Campagne-lès-Guines,62203,446,5.733,0.762,0.690,623,7084 -Saint-Louis-lès-Bitche,57619,499,4.550,0.679,0.615,1017,6886 -Valoreille,25584,129,7.638,0.880,0.797,985,6694 -Cézac,46069,171,17.543,1.333,1.207,567,6366 -Bagnols,63028,440,42.912,2.085,1.888,673,6483 -Cour-Saint-Maurice,25173,158,4.518,0.677,0.613,979,6692 -Quercamps,62675,263,1.994,0.449,0.407,631,7074 -Montandon,25387,408,12.729,1.136,1.029,989,6693 -Châtillon-sur-Broué,51135,75,6.680,0.823,0.745,825,6831 -Athesans-Étroitefontaine,70031,657,12.905,1.143,1.035,966,6729 -Le Thillot,88468,3454,15.207,1.241,1.124,979,6758 -Saint-Hippolyte,25519,904,11.173,1.064,0.963,987,6698 -Fleurey,25244,84,8.137,0.908,0.822,986,6693 -Harville,55232,118,5.576,0.752,0.681,900,6890 -Orgeans-Blanchefontaine,25433,47,4.848,0.701,0.635,984,6694 -Blasimon,33057,905,29.768,1.737,1.573,454,6414 -Montjustin-et-Velotte,70364,123,7.565,0.875,0.792,954,6728 -Douains,27203,508,11.336,1.072,0.971,587,6882 -Les Écorces,25213,714,9.576,0.985,0.892,989,6683 -Dampjoux,25192,176,2.358,0.489,0.443,984,6701 -Ramonchamp,88369,2035,15.567,1.256,1.137,981,6765 -Wittes,62901,937,4.170,0.650,0.589,659,7064 -Les Terres-de-Chaux,25138,142,14.506,1.212,1.097,980,6694 -Aillevans,70005,154,5.825,0.768,0.695,956,6728 -Froidevaux,25261,72,4.016,0.638,0.578,979,6694 -Marquillies,59388,1986,6.821,0.831,0.752,692,7049 -Belonchamp,70063,201,7.040,0.845,0.765,970,6746 -Lignereuil,62511,136,2.975,0.549,0.497,661,7022 -Courtefontaine,25174,248,7.750,0.886,0.802,997,6699 -Les Aynans,70046,338,7.892,0.894,0.809,958,6728 -Rebreuviette,62695,271,8.560,0.931,0.843,654,7020 -Plombières-les-Bains,88351,1687,27.284,1.663,1.506,963,6771 -Charmauvillers,25124,250,10.871,1.050,0.951,996,6691 -Pancé,35212,1163,19.781,1.416,1.282,355,6767 -Girmont-Val-d'Ajol,88205,246,16.715,1.301,1.178,969,6767 -Mézerolles,80544,189,6.529,0.813,0.736,644,7008 -Ferfay,62328,915,3.956,0.633,0.573,659,7046 -Saint-Barthélemy,70459,1113,13.811,1.183,1.071,968,6742 -Saponcourt,70476,63,4.901,0.705,0.638,925,6757 -Auterive,82006,77,3.686,0.611,0.553,535,6309 -Damprichard,25193,1886,21.821,1.487,1.346,996,6691 -Sotteville-sur-Mer,76683,382,8.101,0.906,0.820,545,6979 -Rang-du-Fliers,62688,4118,10.720,1.042,0.943,607,7036 -Ferques,62329,1805,9.073,0.959,0.868,611,7082 -La Lanterne-et-les-Armonts,70295,210,9.956,1.004,0.909,964,6751 -Bommiers,36019,301,28.571,1.701,1.540,626,6627 -Vauclusotte,25589,91,7.680,0.882,0.799,981,6692 -Belfays,25049,140,3.239,0.573,0.519,994,6692 -Cernay-l'Église,25108,303,5.986,0.779,0.705,991,6690 -Caumont,62219,169,9.557,0.984,0.891,629,7024 -Lyoffans,70313,380,4.502,0.675,0.611,968,6733 -Lémeré,37125,512,19.701,1.413,1.279,500,6671 -Soulaires,28379,447,6.000,0.780,0.706,598,6825 -Les Plains-et-Grands-Essarts,25458,222,10.463,1.030,0.933,997,6696 -Brotte-lès-Luxeuil,70098,208,6.964,0.840,0.761,951,6741 -Saint-Luc,27560,254,5.070,0.717,0.649,570,6878 -Pittefaux,62658,125,2.423,0.495,0.448,606,7074 -Merckeghem,59397,586,10.738,1.043,0.944,649,7088 -Bedenac,17038,683,40.255,2.020,1.829,444,6461 -Fouquières-lès-Lens,62351,6353,4.143,0.648,0.587,692,7036 -Villafans,70552,210,6.382,0.804,0.728,960,6724 -Surques,62803,645,6.923,0.838,0.759,623,7070 -Bellefontaine,88048,997,39.352,1.997,1.808,961,6776 -Saint-Pée-sur-Nivelle,64495,6721,65.516,2.576,2.332,333,6266 -Angres,62032,4439,4.837,0.700,0.634,681,7034 -Dommartin-lès-Remiremont,88148,1893,21.064,1.461,1.323,969,6769 -Les Salles,42295,527,25.596,1.610,1.458,760,6526 -Huriel,3128,2664,35.310,1.891,1.712,662,6583 -Saint-Amé,88409,2166,8.048,0.903,0.818,974,6777 -Limon,58143,151,8.073,0.904,0.818,727,6653 -Zouafques,62904,625,3.913,0.630,0.570,635,7081 -Sarrogna,39504,233,19.857,1.418,1.284,903,6598 -Maisod,39307,328,10.397,1.026,0.929,907,6598 -Cuges-les-Pins,13030,5043,39.624,2.004,1.814,924,6245 -Pupillin,39446,240,6.637,0.820,0.742,908,6646 -La Bresse,88075,4198,58.060,2.425,2.196,999,6778 -Rochesson,88391,698,21.551,1.478,1.338,986,6778 -La Roquette,27495,238,5.863,0.771,0.698,580,6910 -Fuans,25262,492,11.089,1.060,0.960,974,6677 -Aujeurres,52027,88,12.998,1.148,1.039,865,6740 -Habarcq,62399,684,7.087,0.847,0.767,672,7026 -Loze,82100,141,11.113,1.061,0.961,594,6356 -Lecey,52280,215,7.833,0.891,0.807,880,6755 -Saint-Nabord,88429,4087,38.140,1.966,1.780,961,6776 -Courcelles-en-Montagne,52147,91,15.369,1.248,1.130,863,6749 -Esnans,25221,66,3.538,0.599,0.542,950,6697 -Chichery,89105,477,6.816,0.831,0.752,739,6758 -Coiffy-le-Bas,52135,92,11.426,1.076,0.974,901,6762 -Mareil-Marly,78367,3486,1.775,0.424,0.384,633,6865 -Le Bizot,25062,309,7.914,0.895,0.810,979,6679 -Chevigney-lès-Vercel,25151,127,5.386,0.739,0.669,956,6680 -Montlebon,25403,2052,27.334,1.664,1.507,975,6667 -Cleurie,88109,656,11.046,1.058,0.958,976,6780 -Le Val-de-Gouhenans,70515,64,3.912,0.630,0.570,963,6732 -Crannes-en-Champagne,72107,352,12.050,1.105,1.000,476,6767 -Saint-Martin-des-Tilleuls,85247,1062,14.065,1.194,1.081,389,6662 -Wildenstein,68370,180,9.851,0.999,0.905,997,6775 -Hadol,88225,2377,49.216,2.233,2.022,951,6780 -Chézeaux,52124,70,10.762,1.044,0.945,900,6755 -Les Combes,25160,731,17.806,1.343,1.216,967,6670 -Guyans-Vennes,25301,822,19.736,1.414,1.280,975,6678 -Bannes,52037,376,10.105,1.012,0.916,879,6757 -Gerbamont,88197,367,9.766,0.995,0.901,978,6773 -Flagey,52200,82,8.318,0.918,0.831,867,6747 -Chatenay-Vaudin,52116,53,3.722,0.614,0.556,884,6754 -Basse-sur-le-Rupt,88037,868,13.703,1.178,1.067,984,6772 -Fleury-sur-Andelle,27246,1848,3.775,0.618,0.560,580,6918 -Sapois,88442,643,17.064,1.315,1.191,982,6780 -Plaimbois-Vennes,25457,102,10.878,1.050,0.951,973,6684 -Mittlach,68210,339,11.266,1.068,0.967,1001,6771 -Saint-Julien-lès-Russey,25522,171,10.045,1.009,0.914,980,6687 -Saint-Bard,23184,106,9.259,0.969,0.877,652,6535 -Aisey-et-Richecourt,70009,105,7.909,0.895,0.810,922,6760 -Perrancey-les-Vieux-Moulins,52383,292,17.286,1.323,1.198,871,6755 -Poiseul,52397,73,4.502,0.675,0.611,887,6760 -Battenans-Varin,25046,78,6.297,0.799,0.723,982,6687 -Grand'Combe-Châteleu,25285,1492,21.617,1.480,1.340,967,6660 -Senaide,88450,179,12.059,1.105,1.000,907,6768 -Lavernoy,52275,76,4.565,0.680,0.616,891,6761 -Murles,34177,302,23.828,1.554,1.407,761,6285 -Morteau,25411,6970,14.294,1.203,1.089,969,6670 -Corre,70177,590,9.156,0.963,0.872,922,6760 -Sigonce,4206,429,20.310,1.435,1.299,925,6326 -Le Barboux,25042,244,11.362,1.073,0.972,981,6674 -Ainvelle,88004,151,9.091,0.960,0.869,912,6771 -Guyonvelle,52233,107,5.366,0.737,0.667,901,6753 -Les Thons,88471,106,10.145,1.014,0.918,916,6771 -Bousseraucourt,70091,50,7.610,0.878,0.795,920,6768 -Pervenchères,61327,340,28.579,1.702,1.541,505,6819 -Pierrefontaine-les-Varans,25453,1414,29.143,1.718,1.556,973,6688 -Varennes-sur-Amance,52504,273,12.757,1.137,1.029,893,6759 -Aubermesnil-aux-Érables,76029,205,8.421,0.924,0.837,598,6967 -Le Luhier,25351,217,5.218,0.727,0.658,978,6679 -Hégenheim,68126,3446,6.955,0.839,0.760,1039,6728 -Isches,88248,159,13.548,1.172,1.061,908,6769 -Rochetaillée,52431,165,28.256,1.692,1.532,856,6751 -Germaines,52216,36,8.688,0.938,0.849,852,6748 -Vaucluse,25588,120,5.076,0.717,0.649,980,6687 -Raincourt,70436,124,8.299,0.917,0.830,917,6757 -Saint-Bonnet-de-Four,3219,210,18.773,1.379,1.249,690,6583 -Beauchemin,52042,103,12.127,1.108,1.003,870,6759 -Rançonnières,52415,108,8.266,0.915,0.828,890,6762 -Rivières-le-Bois,52424,75,7.204,0.854,0.773,885,6740 -Sartes,88443,101,6.899,0.836,0.757,899,6795 -Colmier-le-Haut,52138,55,19.603,1.409,1.276,846,6745 -Villars-le-Pautel,70554,193,12.293,1.116,1.010,916,6760 -Enquin-sur-Baillons,62296,280,4.989,0.711,0.644,617,7054 -Le Bélieu,25050,443,10.832,1.048,0.949,974,6674 -Givenchy-le-Noble,62372,151,2.609,0.514,0.465,664,7022 -Mont-de-Laval,25391,175,8.499,0.928,0.840,974,6678 -Le Mémont,25373,41,3.171,0.567,0.513,979,6679 -Foussemagne,90049,923,5.075,0.717,0.649,1001,6733 -Bonnecourt,52059,130,10.800,1.046,0.947,884,6766 -Segré-en-Anjou Bleu,49331,17577,244.308,4.975,4.504,421,6743 -Longevelle-lès-Russey,25344,44,2.562,0.509,0.461,977,6688 -Lironcourt,88272,73,4.873,0.703,0.637,916,6768 -La Marche,58155,559,10.847,1.048,0.949,706,6674 -Brennes,52070,140,9.980,1.006,0.911,872,6744 -Charmes,52108,146,6.100,0.786,0.712,876,6759 -Poinsenot,52393,49,7.257,0.857,0.776,852,6736 -Vausseroux,79340,330,19.276,1.398,1.266,458,6610 -Bourbévelle,70086,82,5.369,0.738,0.668,922,6760 -Saint-Calais-du-Désert,53204,386,17.248,1.322,1.197,459,6824 -Lagorce,33218,1669,28.289,1.693,1.533,455,6448 -Charnas,7056,920,5.500,0.747,0.676,835,6474 -Ormoy,70399,219,19.726,1.414,1.280,927,6761 -Martinvelle,88291,120,24.999,1.592,1.441,929,6773 -Charmoille,25125,332,9.977,1.005,0.910,976,6685 -Roches-lès-Blamont,25497,640,5.488,0.746,0.675,990,6709 -Minihy-Tréguier,22152,1274,12.217,1.113,1.008,238,6870 -Domeyrot,23072,220,24.863,1.587,1.437,638,6570 -Les Fins,25240,3075,25.694,1.613,1.460,975,6673 -Marcilly-en-Bassigny,52311,212,19.684,1.412,1.278,887,6759 -Bonnétage,25074,887,17.909,1.347,1.220,987,6681 -La Chenalotte,25148,487,4.936,0.707,0.640,979,6673 -Laviron,25333,334,20.208,1.431,1.296,966,6688 -La Bosse,25077,74,5.164,0.723,0.655,975,6678 -Coiffy-le-Haut,52136,120,9.642,0.988,0.895,898,6757 -Saint-Julien-Puy-Lavèze,63370,358,28.980,1.714,1.552,678,6510 -Lantenot,70294,352,8.388,0.922,0.835,964,6744 -Valbeleix,63440,129,22.783,1.519,1.375,702,6486 -Betaucourt,70066,166,7.194,0.854,0.773,920,6755 -Quevillon,76513,608,10.770,1.045,0.946,550,6926 -Fournets-Luisans,25288,684,27.799,1.678,1.519,969,6670 -Saint-Vallier-sur-Marne,52457,177,6.609,0.818,0.741,881,6750 -Grand-Charmont,25284,5641,4.507,0.676,0.612,987,6723 -Bretonvillers,25095,276,13.801,1.183,1.071,976,6686 -Prâlon,21504,88,3.107,0.561,0.508,835,6691 -Fresnes-sur-Apance,52208,151,16.581,1.296,1.173,913,6767 -Jonvelle,70291,126,12.518,1.126,1.019,917,6765 -Serqueux,52470,435,25.591,1.610,1.458,907,6773 -Enfonvelle,52185,70,12.334,1.118,1.012,915,6762 -Malavillers,54337,136,4.378,0.666,0.603,909,6921 -Rosureux,25504,78,6.185,0.792,0.717,979,6687 -Montrodat,48103,1231,20.620,1.445,1.308,729,6386 -Blondefontaine,70074,282,13.366,1.164,1.054,913,6759 -Plaimbois-du-Miroir,25456,235,11.837,1.095,0.991,973,6684 -Le Fied,39225,204,8.407,0.923,0.836,907,6636 -Sommaing,59575,421,3.589,0.603,0.546,734,7017 -Voisines,52545,95,19.122,1.392,1.260,866,6755 -Verseilles-le-Haut,52516,47,2.835,0.536,0.485,872,6742 -Burcy,77056,160,6.996,0.842,0.762,664,6791 -Ounans,39399,367,12.257,1.114,1.009,903,6656 -Siccieu-Saint-Julien-et-Carisieu,38488,591,14.244,1.201,1.087,883,6518 -Molamboz,39337,89,7.143,0.851,0.771,905,6653 -Bourg,52062,153,7.195,0.854,0.773,872,6748 -Grignoncourt,88220,37,5.373,0.738,0.668,918,6765 -Chaussenans,39127,96,4.406,0.668,0.605,909,6638 -Montmeyran,26206,2877,23.573,1.545,1.399,856,6420 -Melay,52318,264,13.952,1.189,1.077,912,6761 -Saint-Plaisir,3251,384,52.876,2.315,2.096,692,6615 -Châtillon-sur-Saône,88096,141,9.267,0.969,0.877,915,6762 -Godoncourt,88208,131,11.651,1.087,0.984,916,6770 -Barges,70049,90,8.008,0.901,0.816,912,6754 -Mouchard,39370,1116,6.154,0.790,0.715,914,6656 -Novacelles,63256,141,14.424,1.209,1.095,749,6481 -Écleux,39206,222,6.241,0.795,0.720,909,6657 -Matour,71289,1094,28.078,1.687,1.527,815,6578 -Arbot,52016,72,13.208,1.157,1.048,849,6748 -Altillac,19007,867,25.491,1.607,1.455,614,6432 -Ettendorf,67135,775,6.323,0.800,0.724,1035,6868 -Saint-Joseph-des-Bancs,7251,183,12.920,1.144,1.036,813,6404 -Dolleren,68073,470,8.330,0.919,0.832,993,6749 -Masevaux-Niederbruck,68201,3800,26.976,1.653,1.497,1000,6755 -Vadans,39539,274,11.352,1.072,0.971,907,6649 -Montbarrey,39350,317,9.839,0.998,0.904,899,6659 -Mazaugues,83076,899,53.700,2.333,2.112,929,6255 -Moisdon-la-Rivière,44099,1960,50.994,2.273,2.058,370,6737 -Abergement-le-Grand,39002,56,4.193,0.652,0.590,904,6649 -Urbès,68344,434,12.639,1.132,1.025,992,6760 -Les Arcs,83004,7104,54.366,2.347,2.125,979,6266 -Saint-Lothain,39489,473,12.336,1.118,1.012,902,6642 -Roubaix,59512,96412,13.135,1.154,1.045,715,7066 -Mollau,68213,354,8.754,0.942,0.853,998,6757 -Blois-sur-Seille,39057,109,5.412,0.741,0.671,904,6632 -Cramans,39176,524,8.150,0.909,0.823,910,6661 -Rouvres-sur-Aube,52439,106,20.467,1.440,1.304,848,6750 -La Bazouge-de-Chemeré,53022,514,25.113,1.595,1.444,440,6769 -Montcourt,70359,55,4.952,0.708,0.641,920,6764 -Meaulne-Vitray,3168,889,49.909,2.249,2.036,669,6613 -Maing,59369,4074,11.683,1.088,0.985,733,7022 -Grandchamp,52228,70,4.831,0.700,0.634,885,6740 -Neuilly-l'Évêque,52348,602,23.945,1.558,1.411,883,6758 -Saint-Cyr-Montmalin,39479,228,10.341,1.024,0.927,909,6654 -Scye,70483,134,5.801,0.767,0.694,931,6734 -Sickert,68308,325,5.135,0.721,0.653,998,6750 -Santans,39502,305,16.598,1.297,1.174,904,6660 -Wegscheid,68361,325,10.186,1.016,0.920,998,6756 -Couthenans,70184,741,1.672,0.412,0.373,981,6727 -Vitry-en-Montagne,52540,24,9.738,0.993,0.899,858,6748 -Villerserine,39568,52,3.006,0.552,0.500,900,6642 -Poligny,39434,4079,50.809,2.269,2.054,910,6643 -La Grigonnais,44224,1657,21.450,1.474,1.335,348,6721 -Villegusien-le-Lac,52529,1001,40.260,2.020,1.829,872,6742 -Barretaine,39040,177,9.217,0.966,0.875,907,6635 -Château-Chalon,39114,148,10.207,1.017,0.921,900,6632 -Sury-en-Vaux,18258,708,15.909,1.270,1.150,684,6695 -Husseren-Wesserling,68151,1025,5.344,0.736,0.666,996,6761 -Buissy,62184,258,6.891,0.836,0.757,702,7013 -Oderen,68247,1277,19.220,1.395,1.263,1001,6769 -Oberbruck,68239,394,4.257,0.657,0.595,991,6755 -Saint-Martin-de-Connée,53239,417,19.473,1.405,1.272,457,6794 -Mathenay,39319,140,3.449,0.591,0.535,903,6650 -Terranjou,49086,3959,57.712,2.418,2.189,437,6690 -Praslay,52403,72,11.341,1.072,0.971,856,6741 -Kirchberg,68167,782,6.748,0.827,0.749,994,6749 -Géry,55207,56,4.840,0.700,0.634,869,6858 -Ormancey,52366,80,17.285,1.323,1.198,863,6757 -Vaillant,52499,44,7.589,0.877,0.794,860,6738 -Aumont,39028,460,8.159,0.909,0.823,902,6650 -Renédale,25487,40,2.814,0.534,0.483,948,6662 -Humes-Jorquenay,52246,567,15.705,1.261,1.142,874,6760 -Noidant-le-Rocheux,52355,161,16.528,1.294,1.172,868,6747 -Saints-Geosmes,52449,1137,27.491,1.669,1.511,877,6747 -Buvilly,39081,386,5.994,0.779,0.705,907,6646 -Ladoye-sur-Seille,39272,54,3.742,0.616,0.558,906,6632 -Grozon,39263,428,14.153,1.197,1.084,906,6649 -Menétru-le-Vignoble,39321,152,5.800,0.767,0.694,903,6635 -Montigny-lès-Arsures,39355,264,10.716,1.042,0.943,913,6653 -Oberhaslach,67342,1771,25.242,1.599,1.448,1021,6837 -L'Hôme-Chamondot,61206,263,16.064,1.276,1.155,531,6836 -Ferrières-lès-Scey,70232,125,6.259,0.796,0.721,926,6736 -La Ferté,39223,193,11.848,1.096,0.992,901,6656 -Villers-Farlay,39569,669,10.087,1.011,0.915,909,6661 -Abergement-le-Petit,39003,38,1.592,0.402,0.364,905,6650 -Picarreau,39418,103,9.135,0.962,0.871,909,6630 -Villette-lès-Arbois,39572,383,5.459,0.744,0.674,908,6653 -Gréning,57258,137,2.756,0.528,0.478,980,6880 -Rimbach-près-Masevaux,68275,468,16.517,1.294,1.172,998,6757 -Brainans,39073,168,7.069,0.846,0.766,900,6642 -Galéria,2B121,341,136.014,3.712,3.361,1169,6156 -Arbois,39013,3350,45.588,2.149,1.946,913,6641 -Navenne,70378,1670,4.006,0.637,0.577,939,6726 -Vivey,52542,55,13.003,1.148,1.039,853,6739 -Offemont,90075,3995,5.532,0.749,0.678,992,6736 -Auxon,70044,422,12.664,1.133,1.026,939,6736 -Varages,83145,1172,34.805,1.878,1.700,934,6283 -Peigney,52380,372,8.325,0.918,0.831,880,6755 -Cubry-lès-Faverney,70190,177,5.575,0.752,0.681,935,6753 -Chamole,39094,166,5.864,0.771,0.698,908,6641 -Andilly-en-Bassigny,52009,109,8.581,0.932,0.844,887,6762 -Tourmont,39535,471,9.718,0.992,0.898,902,6642 -Vaivre-et-Montoille,70513,2417,8.504,0.928,0.840,935,6731 -Frontenay,39244,178,8.208,0.912,0.826,904,6634 -Chissey-sur-Loue,39149,324,38.855,1.984,1.796,911,6668 -Yvignac-la-Tour,22391,1184,36.390,1.920,1.738,321,6816 -Servigney,70490,124,5.804,0.767,0.694,948,6744 -Melincourt,70338,238,14.890,1.228,1.112,932,6760 -Grandvelle-et-le-Perrenot,70275,368,10.521,1.032,0.934,924,6717 -Boursières,70090,58,2.257,0.478,0.433,929,6729 -Bourguignon-lès-Conflans,70087,139,7.958,0.898,0.813,935,6749 -Saint-Genis-Pouilly,1354,11892,9.809,0.997,0.903,933,6580 -Saint-Péray,7281,7645,23.814,1.553,1.406,843,6431 -Fougeré,85093,1182,27.218,1.661,1.504,379,6628 -Menoux,70341,304,14.797,1.224,1.108,933,6748 -Aroz,70028,152,6.616,0.819,0.742,927,6728 -Champigny-sous-Varennes,52103,117,5.827,0.768,0.695,898,6754 -Palaiseul,52375,61,5.040,0.715,0.647,882,6744 -La Marre,39317,331,10.731,1.043,0.944,905,6632 -Noidant-Chatenoy,52354,82,5.252,0.729,0.660,879,6745 -Villers-lès-Luxeuil,70564,304,9.084,0.959,0.868,945,6744 -Cathervielle,31125,37,3.623,0.606,0.549,495,6196 -Dampvalley-Saint-Pancras,70200,34,4.679,0.689,0.624,939,6764 -La Ferté-Vidame,28149,703,40.367,2.022,1.831,541,6834 -Chamblay,39093,423,13.861,1.185,1.073,904,6660 -Adam-lès-Vercel,25007,102,3.116,0.562,0.509,956,6678 -Breurey-lès-Faverney,70095,632,19.539,1.407,1.274,936,6746 -Les Arsures,39019,237,4.495,0.675,0.611,913,6653 -Varaville,14724,956,16.625,1.298,1.175,468,6910 -Miéry,39330,153,7.789,0.888,0.804,903,6635 -Nevy-sur-Seille,39388,212,6.465,0.809,0.732,905,6629 -Frotey-lès-Vesoul,70261,1435,7.771,0.887,0.803,942,6731 -Le Bouchage,38050,624,11.282,1.069,0.968,895,6512 -Flagy,70235,155,9.672,0.990,0.896,940,6739 -Plasne,39426,224,7.701,0.883,0.799,907,6636 -Fay-en-Montagne,39222,86,6.353,0.802,0.726,908,6633 -Nancray,25418,1259,16.642,1.299,1.176,943,6689 -Bonnefontaine,39065,102,8.859,0.947,0.857,913,6632 -Saint-Germain-près-Herment,63351,84,17.185,1.320,1.195,668,6512 -Passavant-la-Rochère,70404,612,29.691,1.734,1.570,930,6773 -Schirrhoffen,67450,700,0.659,0.258,0.234,1061,6867 -Arc-et-Senans,25021,1630,14.973,1.232,1.115,913,6664 -Hurecourt,70287,41,4.978,0.710,0.643,927,6760 -Vilory,70569,68,3.877,0.627,0.568,943,6740 -Vred,59629,1381,3.433,0.590,0.534,718,7033 -Chassigny,52113,248,16.017,1.274,1.153,881,6740 -Villeneuve-d'Aval,39565,87,3.935,0.631,0.571,910,6655 -Saint-Fraimbault,61387,549,28.967,1.713,1.551,429,6827 -Montholier,39354,354,8.116,0.907,0.821,899,6648 -Colombier-Fontaine,25159,1300,7.758,0.887,0.803,976,6712 -Ornans,25434,4385,35.868,1.906,1.726,937,6666 -L'ÃŽle-d'Yeu,85113,4789,23.915,1.557,1.410,288,6637 -Perrogney-les-Fontaines,52384,118,14.959,1.231,1.115,863,6749 -Éhuns,70213,240,5.589,0.753,0.682,949,6747 -Granges-Narboz,25293,1194,16.288,1.285,1.163,950,6649 -Le Cannet,6030,41612,7.696,0.883,0.799,1026,6284 -Montigny-lès-Vesoul,70363,667,6.521,0.813,0.736,931,6734 -La Villeneuve-Bellenoye-et-la-Maize,70558,138,9.320,0.972,0.880,942,6744 -Jasney,70290,248,13.054,1.150,1.041,940,6755 -Auberive,52023,181,70.804,2.678,2.425,860,6738 -Vuillafans,25633,748,6.256,0.796,0.721,944,6670 -Chatenay-Mâcheron,52115,109,6.034,0.782,0.708,877,6754 -Plesnoy,52392,112,9.176,0.964,0.873,885,6760 -Orbigny-au-Mont,52362,135,9.226,0.967,0.876,885,6754 -Verseilles-le-Bas,52515,103,1.561,0.398,0.360,871,6742 -Bulle,25100,427,14.206,1.200,1.086,940,6651 -Champigny-lès-Langres,52102,426,6.386,0.804,0.728,875,6759 -Arbigny-sous-Varennes,52015,92,9.725,0.993,0.899,898,6754 -Fontenois-la-Ville,70242,136,12.357,1.119,1.013,936,6767 -Le Castellard-Mélan,4040,64,25.963,1.622,1.469,947,6347 -Montbenoît,25390,395,5.069,0.717,0.649,961,6659 -Francalmont,70249,121,6.917,0.837,0.758,944,6756 -Auflance,8029,85,6.099,0.786,0.712,867,6948 -Courthiézy,51192,367,5.997,0.780,0.706,745,6882 -Montperreux,25405,847,11.621,1.085,0.982,957,6641 -Saint-Quentin-les-Chardonnets,61451,350,8.971,0.953,0.863,422,6861 -Corfélix,51170,111,8.388,0.922,0.835,750,6858 -Conches-en-Ouche,27165,5033,16.673,1.300,1.177,547,6874 -Pusy-et-Épenoux,70429,551,10.081,1.011,0.915,938,6733 -Champs-sur-Marne,77083,24780,7.684,0.882,0.799,670,6863 -Port-sur-Saône,70421,2999,24.627,1.580,1.431,926,6736 -Saint-Thiébault,52455,238,0.601,0.247,0.224,892,6792 -Baissey,52035,193,10.014,1.007,0.912,868,6744 -Saint-Maurice,52453,137,3.571,0.602,0.545,879,6755 -Montfaucon,25395,1527,7.256,0.857,0.776,931,6686 -Désandans,25198,740,5.509,0.747,0.676,975,6723 -Mouthier-Haute-Pierre,25415,328,12.230,1.113,1.008,948,6662 -Montflovin,25398,104,3.383,0.585,0.530,959,6662 -Malpas,25362,279,5.763,0.764,0.692,952,6644 -Cohons,52134,238,12.492,1.125,1.019,875,6749 -L'Hôpital-du-Grosbois,25305,593,7.771,0.887,0.803,940,6681 -La Vôge-les-Bains,88029,1662,44.574,2.125,1.924,940,6779 -Les Fourgs,25254,1345,27.956,1.683,1.524,957,6641 -Vauvillers,70526,676,9.521,0.982,0.889,932,6761 -Metting,57462,385,5.207,0.726,0.657,1007,6864 -Fontenoy-le-Château,88176,539,38.224,1.968,1.782,944,6766 -Vercel-Villedieu-le-Camp,25601,1566,30.422,1.756,1.590,951,6683 -Amathay-Vésigneux,25016,163,12.158,1.110,1.005,944,6661 -Lama,2B136,156,19.952,1.422,1.287,1204,6187 -La Prétière,25470,159,2.737,0.527,0.477,973,6714 -Loray,25349,498,14.359,1.206,1.092,967,6678 -Trépot,25569,530,14.747,1.222,1.106,938,6679 -Chantrans,25120,399,14.315,1.204,1.090,941,6663 -Demangevelle,70202,289,14.675,1.219,1.104,930,6764 -Vauchoux,70524,115,4.703,0.690,0.625,928,6731 -Saint-Vaast-en-Cambrésis,59547,906,4.386,0.667,0.604,733,7012 -Mailleroncourt-Saint-Pancras,70323,191,15.024,1.234,1.117,935,6767 -Conflandey,70167,364,5.364,0.737,0.667,928,6743 -Passonfontaine,25447,323,19.595,1.409,1.276,960,6673 -Mellionnec,22146,410,24.450,1.574,1.425,230,6806 -Avoudrey,25039,900,12.990,1.147,1.039,962,6680 -Craménil,61137,156,8.154,0.909,0.823,450,6856 -La Roche-sur-le-Buis,26278,292,28.126,1.688,1.528,885,6353 -Velleminfroy,70537,301,6.106,0.787,0.713,950,6732 -Nébouzat,63248,834,21.853,1.488,1.347,692,6512 -Roussas,26284,365,16.008,1.274,1.153,843,6376 -Bay-sur-Aube,52040,51,9.717,0.992,0.898,855,6752 -Thénésol,73292,307,5.455,0.743,0.673,965,6518 -Saône,25532,3361,20.659,1.447,1.310,936,6681 -Roulans,25508,1123,8.317,0.918,0.831,947,6697 -La Cluse-et-Mijoux,25157,1312,22.759,1.519,1.375,957,6641 -Vernierfontaine,25605,464,13.575,1.173,1.062,949,6670 -Le Châtelet-sur-Meuse,52400,154,21.458,1.474,1.335,895,6764 -Chariez,70134,210,7.584,0.877,0.794,929,6729 -Champenoux,54113,1361,11.123,1.062,0.962,948,6853 -Saules,25535,225,7.673,0.882,0.799,945,6674 -Villiers-lès-Aprey,52536,46,7.480,0.871,0.789,867,6740 -Loisia,39295,166,11.510,1.080,0.978,888,6604 -La Vèze,25611,443,5.314,0.734,0.665,934,6682 -Bians-les-Usiers,25060,670,14.042,1.193,1.080,952,6657 -Lods,25339,221,6.336,0.801,0.725,949,6668 -La Rivière-Drugeon,25493,893,19.117,1.392,1.260,949,6645 -La Couture-Boussey,27183,2322,10.965,1.054,0.954,583,6870 -Bouligney,70083,416,14.236,1.201,1.087,942,6764 -Bouclans,25078,1079,24.430,1.573,1.424,941,6684 -La Chevillotte,25152,143,7.674,0.882,0.799,941,6684 -Longeau-Percey,52292,742,7.580,0.876,0.793,872,6744 -Baulay,70056,299,8.294,0.917,0.830,926,6749 -Fertans,25236,259,8.249,0.914,0.828,935,6666 -Cholonge,38106,328,9.748,0.994,0.900,920,6436 -Maizières,70325,351,11.655,1.087,0.984,924,6715 -Comberjon,70166,167,3.547,0.599,0.542,940,6733 -Ormoiche,70398,66,5.787,0.766,0.694,946,6752 -Dombasle-devant-Darney,88138,82,8.835,0.946,0.857,931,6785 -Giey-sur-Aujon,52220,123,30.525,1.759,1.593,851,6755 -Clessé,79094,954,29.329,1.724,1.561,439,6626 -Dampierre-lès-Conflans,70196,266,10.421,1.028,0.931,936,6755 -Étalans,25222,1532,41.246,2.044,1.851,941,6677 -Rancourt,88370,60,5.581,0.752,0.681,930,6797 -Montmotier,88311,48,4.251,0.656,0.594,935,6771 -Challes-la-Montagne,1077,193,7.765,0.887,0.803,890,6563 -Arc-sous-Cicon,25025,670,28.605,1.702,1.541,961,6668 -Voires,25630,97,4.868,0.702,0.636,947,6673 -Aïssey,25009,175,10.760,1.044,0.945,953,6690 -Bremondans,25089,85,7.243,0.857,0.776,958,6688 -Saint-Martin-lès-Langres,52452,109,3.639,0.607,0.550,871,6757 -Sigale,6135,201,5.549,0.750,0.679,1018,6315 -Septfontaines,25541,367,18.505,1.369,1.240,943,6655 -Noidans-lès-Vesoul,70388,1999,8.545,0.930,0.842,936,6729 -Orchamps-Vennes,25432,2134,24.796,1.585,1.435,965,6676 -Saint-Benin,59531,338,4.664,0.687,0.622,736,6997 -Pontcey,70417,301,5.944,0.776,0.703,929,6730 -La Chapelle-Geneste,43059,110,18.067,1.353,1.225,754,6476 -Épenouse,25218,148,5.708,0.760,0.688,959,6685 -Chavigny,2175,142,5.241,0.729,0.660,724,6926 -Gilley,25271,1636,17.472,1.331,1.205,965,6670 -Verrières-de-Joux,25609,435,10.133,1.013,0.917,962,6647 -Oye-et-Pallet,25442,731,10.524,1.033,0.935,953,6644 -Ouhans,25440,375,15.882,1.269,1.149,947,6662 -Calmoutier,70111,262,14.089,1.195,1.082,944,6735 -Les Alliés,25012,150,5.327,0.735,0.665,960,6656 -Chemilly,70148,88,3.834,0.623,0.564,925,6730 -Recologne-lès-Rioz,70441,249,10.226,1.018,0.922,922,6710 -Saint-Sorlin-d'Arves,73280,336,44.420,2.121,1.920,950,6457 -Betoncourt-Saint-Pancras,70069,50,6.372,0.804,0.728,939,6765 -Camps-la-Source,83030,1876,22.769,1.519,1.375,957,6258 -Remollon,5115,441,6.177,0.791,0.716,951,6381 -Bretoncelles,61061,1476,40.430,2.024,1.833,547,6821 -Torcenay,52492,550,8.458,0.926,0.838,885,6746 -Aups,83007,2181,64.848,2.563,2.321,959,6291 -Colombier,70163,449,14.108,1.196,1.083,940,6733 -Chauffourt,52120,204,9.691,0.991,0.897,884,6767 -Nanteuil-Notre-Dame,2538,62,3.735,0.615,0.557,729,6898 -Vicq,52520,152,13.797,1.182,1.070,893,6763 -Violay,42334,1233,27.120,1.658,1.501,808,6530 -Aulnoy-sur-Aube,52028,50,9.421,0.977,0.885,852,6752 -Raze,70439,348,10.059,1.010,0.914,924,6724 -Quincey,70433,1397,13.013,1.148,1.039,940,6725 -Courtetain-et-Salans,25175,84,6.897,0.836,0.757,960,6691 -Fondremand,70239,197,16.675,1.300,1.177,930,6716 -Gommegnies,59265,2289,15.814,1.266,1.146,754,7019 -Pontarlier,25462,17284,41.357,2.047,1.853,960,6656 -Saint-Rémy-en-Comté,70472,570,9.145,0.963,0.872,935,6754 -Celsoy,52090,108,5.488,0.746,0.675,885,6755 -Équevilley,70214,124,9.483,0.980,0.887,937,6745 -Gamaches-en-Vexin,27276,299,8.680,0.938,0.849,601,6908 -Ville-du-Pont,25620,304,15.192,1.241,1.124,967,6664 -Silley-Amancey,25545,136,5.217,0.727,0.658,937,6666 -Anchenoncourt-et-Chazel,70017,236,14.123,1.196,1.083,935,6754 -Orbigny-au-Val,52363,96,7.463,0.870,0.788,881,6757 -Alaincourt,70010,116,5.910,0.774,0.701,933,6767 -Dampvalley-lès-Colombe,70199,110,6.273,0.797,0.722,942,6731 -Polaincourt-et-Clairefontaine,70415,734,21.677,1.482,1.342,930,6760 -Horville-en-Ornois,55247,58,7.637,0.880,0.797,882,6826 -Les Essarts-lès-Sézanne,51235,259,16.812,1.305,1.182,744,6854 -Mont-le-Vernois,70367,165,7.815,0.890,0.806,929,6729 -Villers-Bouton,70560,160,5.262,0.730,0.661,922,6710 -Flangebouche,25243,774,23.014,1.527,1.383,965,6670 -Osse,25437,326,8.316,0.918,0.831,941,6691 -Amoncourt,70015,292,4.146,0.648,0.587,931,6741 -Monthelie,21428,162,3.186,0.568,0.514,833,6658 -Aubonne,25029,238,15.267,1.244,1.126,950,6663 -Vatilieu,38526,367,9.356,0.974,0.882,887,6463 -Violot,52539,71,4.294,0.660,0.598,882,6744 -Grandfontaine-sur-Creuse,25289,72,5.970,0.778,0.704,962,6680 -Orsans,25435,164,8.378,0.921,0.834,958,6688 -La Chaussée,76173,557,8.092,0.905,0.819,565,6972 -Pusey,70428,1490,8.208,0.912,0.826,932,6733 -Eybens,38158,10391,4.529,0.677,0.613,917,6455 -Chaux-lès-Passavant,25141,139,8.546,0.931,0.843,952,6689 -Muscourt,2534,56,2.071,0.458,0.415,754,6917 -Montdoré,70360,72,7.823,0.890,0.806,931,6760 -Neufchef,57498,2568,16.799,1.305,1.182,922,6917 -Épenoy,25219,631,13.323,1.162,1.052,959,6676 -Eysson,25231,114,5.988,0.779,0.705,961,6684 -Ainvelle,70008,148,6.829,0.832,0.753,941,6755 -Hauterive-la-Fresse,25303,222,7.501,0.872,0.790,961,6656 -Senoncourt,70488,206,11.411,1.075,0.973,930,6751 -Clans,70158,108,4.420,0.669,0.606,929,6726 -Doubs,25204,2968,8.953,0.952,0.862,955,6655 -Chaffois,25110,974,16.379,1.288,1.166,944,6653 -Fallerans,25233,282,10.553,1.034,0.936,948,6674 -Orsinval,59451,545,3.342,0.582,0.527,746,7020 -Saulx,70478,908,15.196,1.241,1.124,946,6735 -Fleurey-lès-Faverney,70236,462,11.314,1.071,0.970,928,6743 -Monlezun-d'Armagnac,32274,201,6.500,0.812,0.735,446,6310 -Bougnon,70079,544,9.219,0.966,0.875,935,6737 -La Milesse,72198,2652,10.571,1.035,0.937,486,6776 -La Chaux,25139,528,16.997,1.312,1.188,956,6663 -Mérey-sous-Montrond,25375,424,10.725,1.042,0.943,933,6681 -Thoiry,1419,6094,28.774,1.707,1.546,927,6579 -Saint-Loup-sur-Aujon,52450,149,19.588,1.409,1.276,854,6752 -Jardres,86114,1262,20.530,1.442,1.306,511,6612 -Villers-Chief,25623,125,7.961,0.898,0.813,960,6688 -Neurey-en-Vaux,70380,176,5.308,0.733,0.664,942,6744 -Pont-du-Bois,70419,109,8.467,0.926,0.838,933,6766 -Méry,73155,1706,8.999,0.955,0.865,927,6509 -Briaucourt,70097,243,9.804,0.997,0.903,941,6753 -Cutry,2254,127,4.812,0.698,0.632,715,6915 -Trésilley,70507,223,11.243,1.067,0.966,927,6707 -Les Grangettes,25295,274,5.468,0.744,0.674,953,6641 -Heuilley-le-Grand,52240,217,12.217,1.113,1.008,879,6745 -Landresse,25325,233,14.438,1.209,1.095,967,6692 -Valdahon,25578,5605,25.395,1.604,1.452,951,6677 -Vulvoz,39585,19,4.440,0.671,0.608,915,6585 -Villers-la-Combe,25625,51,5.863,0.771,0.698,962,6687 -Chalèze,25111,374,5.674,0.758,0.686,934,6691 -Vauxbons,52507,62,12.554,1.128,1.021,860,6757 -Valcabrère,31564,144,1.613,0.404,0.366,504,6217 -Charmoille,70136,481,4.979,0.710,0.643,932,6733 -Meurcourt,70344,325,11.883,1.097,0.993,943,6743 -Longeville,25346,171,9.372,0.974,0.882,947,6662 -Bettencourt-Rivière,80099,224,7.332,0.862,0.780,628,6990 -Aprey,52014,190,15.836,1.267,1.147,864,6742 -Moulin-Mage,81188,308,15.235,1.242,1.125,682,6289 -La Selle-Guerchaise,35325,159,2.199,0.472,0.427,390,6770 -La Villedieu-en-Fontenette,70555,175,9.739,0.993,0.899,940,6749 -Le Pailly,52374,285,7.169,0.852,0.771,883,6744 -Guercheville,77220,274,9.218,0.966,0.875,669,6795 -Mailleroncourt-Charette,70322,274,10.565,1.035,0.937,945,6743 -Busnes,62190,1291,9.537,0.983,0.890,668,7053 -Saint-François-de-Sales,73234,153,14.396,1.208,1.094,940,6516 -Dammartin-sur-Meuse,52162,200,15.838,1.267,1.147,895,6770 -Badevel,25040,827,3.743,0.616,0.558,996,6720 -Velorcey,70541,215,6.184,0.792,0.717,944,6750 -Ardoix,7013,1249,12.317,1.117,1.011,840,6458 -Chanoy,52106,135,2.091,0.460,0.416,870,6761 -Lachapelle-Saint-Pierre,60334,917,4.238,0.655,0.593,645,6909 -Ambiévillers,70013,75,12.039,1.104,1.000,935,6772 -Marigny-Saint-Marcel,74165,685,7.368,0.864,0.782,934,6530 -Cléron,25155,315,14.507,1.212,1.097,935,6668 -Changey,52105,302,6.635,0.820,0.742,877,6762 -Longemaison,25343,153,9.929,1.003,0.908,962,6668 -Arcens,7012,368,18.543,1.371,1.241,807,6424 -Flagey,25241,159,7.666,0.881,0.798,935,6666 -Évillers,25229,356,13.013,1.148,1.039,942,6661 -Cuve,70194,145,8.055,0.903,0.818,940,6764 -Buthiers,70109,305,5.679,0.759,0.687,930,6699 -Altenheim,67006,210,2.706,0.524,0.474,1027,6855 -Saint-Broingt-les-Fosses,52446,230,12.488,1.125,1.019,868,6738 -Orcevaux,52364,98,4.376,0.666,0.603,870,6742 -Selles,70485,213,14.516,1.213,1.098,929,6766 -La Pisseure,70411,36,2.270,0.480,0.435,942,6756 -Sénas,13105,7005,30.645,1.762,1.595,866,6294 -Crandelles,15056,828,12.474,1.124,1.018,652,6428 -Saint-Jean-du-Bruel,12231,686,37.342,1.945,1.761,736,6325 -Plainemont,70412,70,3.300,0.578,0.523,941,6753 -Vesoul,70550,14998,9.160,0.963,0.872,937,6728 -Maltot,14396,1056,4.275,0.658,0.596,451,6899 -Anjeux,70023,143,8.806,0.945,0.856,942,6758 -Drugeac,15063,346,18.289,1.361,1.232,654,6450 -Darois,21227,481,8.093,0.906,0.820,846,6700 -Berson,33047,1791,17.945,1.348,1.220,422,6453 -Noroy-le-Bourg,70390,490,31.771,1.794,1.624,951,6731 -Dieffenbach-lès-Wœrth,67093,352,3.621,0.606,0.549,1053,6880 -Villiers-Saint-Benoît,89472,499,34.276,1.864,1.688,713,6742 -Magnoncourt,70315,424,6.673,0.822,0.744,945,6763 -Scey-Maisières,25537,295,12.629,1.131,1.024,931,6674 -Trémonzey,88479,248,9.161,0.963,0.872,945,6767 -Vyans-le-Val,70579,466,3.265,0.575,0.521,983,6722 -Égletons,19073,4287,16.802,1.305,1.182,627,6480 -Bouverans,25085,360,18.565,1.372,1.242,948,6641 -Val-Suzon,21651,210,19.042,1.389,1.258,847,6708 -Aulnois,88017,158,4.433,0.670,0.607,906,6801 -Mardor,52312,49,7.482,0.871,0.789,863,6757 -Conflans-sur-Lanterne,70168,622,13.175,1.155,1.046,941,6749 -Fontaines-d'Ozillac,17163,516,13.935,1.188,1.076,436,6479 -Lemmecourt,88265,30,1.845,0.432,0.391,903,6800 -Belmont-sur-Vair,88051,122,6.180,0.791,0.716,918,6801 -Chassagne-Saint-Denis,25129,116,9.161,0.963,0.872,937,6667 -Éloie,90037,951,5.544,0.749,0.678,989,6740 -Natzwiller,67314,548,7.426,0.867,0.785,1017,6825 -Gonsans,25278,572,17.361,1.326,1.201,949,6689 -Villars-Santenoge,52526,89,19.785,1.416,1.282,850,6742 -Grainville-sur-Odon,14311,1027,5.251,0.729,0.660,443,6901 -Morre,25410,1354,5.302,0.733,0.664,931,6684 -La Longeville,25347,797,15.612,1.258,1.139,966,6666 -Naisey-les-Granges,25417,798,25.182,1.597,1.446,941,6684 -Poncins,42174,1053,20.605,1.445,1.308,787,6515 -Ouainville,76488,532,7.103,0.848,0.768,526,6967 -Trets,13110,10919,70.110,2.665,2.413,926,6262 -Bourg-Sainte-Marie,52063,102,9.269,0.969,0.877,891,6790 -Celles-en-Bassigny,52089,82,8.925,0.951,0.861,893,6759 -Autrechêne,90082,282,2.994,0.551,0.499,999,6729 -Champigneulles-en-Bassigny,52101,46,6.848,0.833,0.754,898,6784 -Mignerette,45207,393,6.210,0.793,0.718,670,6771 -Sainte-Colombe,25515,394,10.518,1.032,0.934,949,6649 -Bannans,25041,371,11.656,1.087,0.984,942,6652 -Roncey,50437,805,12.329,1.118,1.012,382,6883 -Froidefontaine,90051,454,4.532,0.678,0.614,996,6726 -Dampierre-les-Bois,25190,1654,4.772,0.695,0.629,995,6721 -Bessoncourt,90012,1225,7.918,0.896,0.811,993,6734 -Arçon,25024,839,21.508,1.476,1.336,960,6656 -Damblain,88123,254,13.308,1.161,1.051,897,6782 -Villers-sous-Montrond,25628,211,6.418,0.806,0.730,933,6675 -Malbrans,25360,152,8.715,0.940,0.851,932,6674 -Cunelières,90031,348,2.017,0.452,0.409,1001,6733 -Riervescemont,90085,103,8.540,0.930,0.842,989,6750 -Saudoy,51526,360,12.873,1.142,1.034,749,6842 -Maisons-du-Bois-Lièvremont,25357,788,15.850,1.267,1.147,961,6659 -Rochejean,25494,676,24.340,1.570,1.422,949,6632 -Grosmagny,90054,535,8.900,0.950,0.860,991,6746 -Roumagne,47226,551,10.630,1.038,0.940,490,6397 -Saint-Germain-le-Châtelet,90091,645,3.398,0.587,0.531,998,6740 -Pontmain,53181,848,5.913,0.774,0.701,400,6825 -Brey-et-Maison-du-Bois,25096,99,6.129,0.788,0.713,949,6632 -Le Planquay,27462,156,4.010,0.637,0.577,511,6892 -Huilliécourt,52243,118,8.870,0.948,0.858,886,6787 -Cuves,52159,24,5.452,0.743,0.673,881,6782 -Ninville,52352,85,9.072,0.959,0.868,879,6779 -Malaincourt-sur-Meuse,52304,59,3.826,0.623,0.564,894,6786 -Frais,90050,209,2.824,0.535,0.484,998,6734 -Saint-Point-Lac,25525,281,4.548,0.679,0.615,951,6641 -Fraroz,39237,48,6.202,0.793,0.718,939,6629 -Étupes,25228,3729,9.986,1.006,0.911,989,6720 -Grandvillars,90053,2974,15.287,1.245,1.127,997,6720 -Bourg-sous-Châtelet,90016,113,0.847,0.293,0.265,996,6740 -Villemanoche,89456,667,14.593,1.216,1.101,713,6803 -Bonnevaux,25075,379,16.568,1.296,1.173,940,6640 -Métabief,25380,1184,5.824,0.768,0.695,954,6635 -Moiremont,51370,205,17.128,1.317,1.192,841,6894 -Charmois,90021,325,4.212,0.653,0.591,997,6727 -Andelnans,90001,1211,4.195,0.652,0.590,991,6731 -Recouvrance,90083,105,1.494,0.389,0.352,999,6726 -Ecot-la-Combe,52183,36,20.906,1.455,1.317,877,6795 -Vallon-en-Sully,3297,1578,37.996,1.962,1.776,667,6602 -Hâcourt,52234,38,3.066,0.557,0.504,893,6788 -Capelle,59127,156,5.077,0.717,0.649,740,7017 -Fontenelle,90048,131,1.745,0.420,0.380,998,6731 -Saint-Denis-de-Méré,14572,837,11.380,1.074,0.972,446,6869 -Outremécourt,52372,95,9.154,0.963,0.872,900,6796 -Phaffans,90080,457,3.246,0.573,0.519,995,6737 -Denney,90034,767,3.586,0.603,0.546,992,6736 -Danjoutin,90032,3719,5.622,0.755,0.684,991,6733 -Roppe,90087,1036,7.520,0.873,0.790,995,6737 -Paule,22163,716,38.034,1.963,1.777,222,6807 -Jougne,25318,1839,29.077,1.716,1.554,956,6633 -Gaillefontaine,76295,1228,26.465,1.638,1.483,600,6949 -Germainvilliers,52217,91,6.654,0.821,0.743,899,6782 -Petite-Chaux,25451,145,9.766,0.995,0.901,940,6627 -Mouthe,25413,1083,38.826,1.983,1.795,944,6630 -Longevilles-Mont-d'Or,25348,566,13.201,1.157,1.048,952,6634 -Nantes,44109,306694,65.765,2.581,2.337,361,6690 -Malbuisson,25361,860,6.714,0.825,0.747,954,6638 -Chèvremont,90026,1615,8.789,0.944,0.855,994,6734 -Châtelblanc,25131,125,20.888,1.455,1.317,937,6627 -Esnouveaux,52190,298,17.068,1.315,1.191,878,6786 -Blevaincourt,88062,106,8.710,0.939,0.850,900,6782 -Boisemont,95074,752,2.009,0.451,0.408,627,6879 -Bassoncourt,52038,68,6.578,0.816,0.739,890,6776 -Montcharvot,52328,34,3.501,0.596,0.540,904,6758 -Nogent,52353,3834,55.145,2.364,2.140,880,6772 -Vaux-et-Chantegrue,25592,565,13.979,1.190,1.077,944,6635 -Chaumont-la-Ville,52122,115,11.284,1.069,0.968,898,6784 -Les Hôpitaux-Neufs,25307,885,6.572,0.816,0.739,957,6636 -Vézelois,90104,951,9.378,0.975,0.883,991,6731 -Romagny-sous-Rougemont,90086,217,2.520,0.505,0.457,999,6743 -Trévenans,90097,1231,5.926,0.775,0.702,990,6723 -Germigney,39249,79,5.535,0.749,0.678,905,6661 -Brebotte,90018,375,3.784,0.619,0.560,999,6728 -Larivière,90062,313,4.793,0.697,0.631,998,6737 -Vivaise,2821,709,9.019,0.956,0.866,740,6945 -Montcresson,45212,1285,21.072,1.461,1.323,683,6760 -Anjoutey,90003,610,7.736,0.885,0.801,992,6740 -Bourogne,90017,1904,13.582,1.173,1.062,992,6724 -Bavilliers,90008,4772,4.761,0.695,0.629,987,6731 -Menoncourt,90067,393,4.711,0.691,0.626,997,6740 -Lavau,10191,966,5.750,0.763,0.691,782,6806 -Bétracq,64118,52,4.675,0.688,0.623,454,6274 -Saint-Paul-en-Forêt,83117,1718,20.394,1.437,1.301,993,6280 -Luze,70312,708,10.653,1.039,0.941,976,6730 -Bourdons-sur-Rognon,52061,279,39.848,2.009,1.819,870,6786 -Vescemont,90102,760,7.475,0.870,0.788,989,6748 -Coisevaux,70160,332,4.319,0.662,0.599,980,6727 -Étobon,70221,298,12.257,1.114,1.009,976,6736 -Noyers,45230,769,18.066,1.353,1.225,668,6756 -Millières,52325,112,14.099,1.195,1.082,884,6787 -Silly-en-Saulnois,57653,31,2.339,0.487,0.441,940,6883 -Lanques-sur-Rognon,52271,188,13.186,1.156,1.047,878,6781 -Échenans-sous-Mont-Vaudois,70206,506,5.472,0.745,0.675,985,6730 -Rangecourt,52416,64,6.960,0.840,0.761,886,6772 -Lachapelle-sous-Chaux,90057,730,10.959,1.054,0.954,985,6739 -Hermaville,62438,546,6.357,0.803,0.727,671,7026 -Chenebier,70149,697,9.124,0.961,0.870,978,6736 -Sainte-Suzanne,25526,1533,1.578,0.400,0.362,983,6719 -Éclaires,51222,94,10.925,1.052,0.952,846,6878 -Longué-Jumelles,49180,6813,96.703,3.130,2.834,470,6712 -Jars,18117,511,38.105,1.965,1.779,678,6703 -Brevilliers,70096,626,6.493,0.811,0.734,986,6725 -Chagey,70116,643,7.111,0.849,0.769,980,6733 -Échavanne,70205,205,3.260,0.575,0.521,980,6734 -Fourcatier-et-Maison-Neuve,25252,107,2.757,0.529,0.479,954,6635 -Auxelles-Bas,90005,466,9.316,0.972,0.880,986,6743 -Reignac,33351,1555,37.239,1.942,1.758,422,6463 -Perrusse,52385,31,5.713,0.761,0.689,886,6779 -Touillon-et-Loutelet,25565,257,4.753,0.694,0.628,954,6639 -Chaux-Neuve,25142,312,28.303,1.693,1.533,939,6620 -Saint-Antoine,25514,339,4.516,0.676,0.612,955,6636 -Fieux,47098,349,14.914,1.229,1.113,496,6338 -Montjoie-le-Château,25402,28,5.456,0.744,0.674,994,6700 -Sommerécourt,52476,81,7.727,0.885,0.801,895,6794 -Rougegoutte,90088,983,8.392,0.922,0.835,989,6742 -Varaire,46328,315,25.423,1.605,1.453,601,6364 -Sermamagny,90093,832,8.021,0.901,0.816,985,6739 -Migné-Auxances,86158,6015,28.988,1.714,1.552,496,6621 -Gellin,25263,241,4.832,0.700,0.634,949,6632 -Évette-Salbert,90042,2065,9.170,0.964,0.873,983,6737 -Mignovillard,39331,804,54.095,2.341,2.120,934,6637 -Nicey,21454,109,23.862,1.555,1.408,797,6750 -Saint-Julien-lès-Montbéliard,25521,166,3.802,0.621,0.562,980,6719 -Sarrageois,25534,193,13.329,1.162,1.052,944,6631 -Métigny,80543,121,6.747,0.827,0.749,620,6983 -Les Hôpitaux-Vieux,25308,441,14.297,1.204,1.090,957,6641 -Beuvry,62126,9587,16.837,1.306,1.182,680,7047 -Messac,17231,105,7.270,0.858,0.777,440,6479 -Montbéliard,25388,25304,15.013,1.233,1.116,983,6722 -Errevet,70215,250,3.319,0.580,0.525,983,6739 -Laire,25322,401,3.189,0.568,0.514,980,6724 -Lacanche,21334,566,7.271,0.858,0.777,818,6664 -Clefmont,52132,179,19.565,1.408,1.275,886,6779 -Botans,90015,252,2.292,0.482,0.436,990,6728 -Vroncourt-la-Côe,52549,24,4.244,0.656,0.594,886,6785 -Vieux-Charmont,25614,2725,2.538,0.507,0.459,990,6720 -Frahier-et-Chatebier,70248,1357,17.443,1.329,1.203,982,6732 -Saint-Martin-aux-Arbres,76611,328,5.176,0.724,0.656,546,6952 -Bocquegney,88063,134,4.582,0.681,0.617,945,6799 -Audeloncourt,52025,87,11.704,1.089,0.986,887,6785 -Saint-Paul-la-Coste,30291,283,19.169,1.394,1.262,781,6337 -Remoray-Boujeons,25486,429,15.220,1.242,1.125,944,6631 -Rimaucourt,52423,671,20.380,1.437,1.301,871,6798 -Clavette,17109,1357,6.309,0.800,0.724,391,6567 -Chessenaz,74071,211,5.232,0.728,0.659,923,6552 -Lepuix,90065,1155,28.417,1.697,1.536,988,6754 -Ageville,52001,309,19.689,1.412,1.278,879,6782 -Champey,70121,869,11.203,1.065,0.964,978,6726 -Tournoisis,45326,414,15.220,1.242,1.125,599,6768 -Chaux,90023,1128,9.446,0.978,0.885,990,6740 -Issans,25316,241,2.714,0.524,0.474,982,6722 -Remoncourt,88385,610,14.715,1.221,1.106,927,6798 -Levécourt,52287,87,6.779,0.829,0.751,890,6784 -Vougeot,21716,180,0.888,0.300,0.272,849,6677 -Sans-Vallois,88441,136,4.477,0.674,0.610,929,6790 -Valleroy,54542,2346,12.272,1.115,1.010,908,6905 -Les Villedieu,25619,206,14.992,1.232,1.115,949,6627 -Clinchamp,52133,78,16.192,1.281,1.160,882,6793 -La Haye,88236,110,7.427,0.867,0.785,936,6779 -Morangles,60429,406,5.970,0.778,0.704,651,6899 -Provenchères-lès-Darney,88360,160,9.070,0.959,0.868,919,6787 -Chambroncourt,52097,49,10.207,1.017,0.921,879,6809 -Talissieu,1415,448,4.940,0.707,0.640,912,6531 -Chanay,1082,633,18.408,1.366,1.237,917,6549 -Légéville-et-Bonfays,88264,43,5.199,0.726,0.657,936,6792 -Bainville-aux-Saules,88030,132,5.661,0.757,0.685,932,6793 -Étercy,74117,805,4.535,0.678,0.614,934,6536 -Clérac,17110,984,43.554,2.101,1.902,444,6461 -Plouguin,29196,2141,30.373,1.754,1.588,141,6855 -Montanges,1257,341,13.684,1.177,1.066,918,6569 -Dingy-en-Vuache,74101,662,7.183,0.853,0.772,929,6559 -Ceyrat,63070,6372,9.520,0.982,0.889,703,6516 -Léaz,1209,719,11.427,1.076,0.974,924,6562 -Colombotte,70164,85,4.357,0.664,0.601,948,6735 -Begnécourt,88047,162,4.545,0.679,0.615,935,6793 -Poisy,74213,7859,11.398,1.075,0.973,939,6538 -Présilly,74216,868,8.619,0.934,0.846,942,6558 -Saint-Vincent-de-Tyrosse,40284,7630,20.847,1.453,1.316,351,6293 -Vioménil,88515,145,23.523,1.544,1.398,940,6779 -Plouguerneau,29195,6549,44.191,2.116,1.916,143,6860 -Giron,1174,180,9.440,0.978,0.885,913,6571 -Forcey,52204,66,5.361,0.737,0.667,877,6787 -Saint-Blin,52444,395,22.485,1.509,1.366,882,6793 -Tillières-sur-Avre,27643,1080,16.807,1.305,1.182,558,6853 -Romain-sur-Meuse,52433,114,16.567,1.296,1.173,885,6792 -Lerrain,88267,473,12.684,1.134,1.027,933,6787 -Odos,65331,3231,8.829,0.946,0.857,459,6237 -Semilly,52468,106,14.510,1.213,1.098,882,6793 -Valfroicourt,88488,244,13.895,1.187,1.075,929,6790 -Usinens,74285,395,7.480,0.871,0.789,921,6548 -Madonne-et-Lamerey,88281,391,7.039,0.845,0.765,940,6798 -Échallon,1152,760,28.159,1.689,1.529,914,6575 -Malataverne,26169,1988,16.602,1.297,1.174,841,6376 -Giberville,14301,4984,5.005,0.712,0.645,461,6904 -Gorhey,88210,181,6.351,0.802,0.726,947,6793 -Noyers,52358,81,7.334,0.862,0.780,887,6775 -Consigny,52142,68,11.049,1.058,0.958,879,6790 -Trèves,30332,136,27.055,1.656,1.499,736,6325 -Mennouveaux,52319,70,7.890,0.894,0.809,879,6779 -Les Vallois,88491,120,5.292,0.732,0.663,933,6789 -Domèvre-sous-Montfort,88144,58,3.265,0.575,0.521,928,6801 -Rochefort-du-Gard,30217,7498,34.136,1.860,1.684,831,6326 -Ozières,52373,42,9.611,0.987,0.894,884,6787 -Mazères-Lezons,64373,1845,3.974,0.635,0.575,429,6248 -Loc-Eguiner,29128,400,12.091,1.107,1.002,178,6843 -Choiseul,52127,78,8.652,0.936,0.847,893,6778 -Chalvraines,52095,186,26.259,1.631,1.477,887,6793 -Saint-Martin-des-Bois,41225,586,37.139,1.940,1.757,536,6734 -Mandres-la-Côe,52305,526,11.521,1.080,0.978,873,6775 -Longchamp,52291,75,6.093,0.786,0.712,882,6782 -Vabres,30335,112,4.821,0.699,0.633,769,6325 -Laveissière,15101,534,35.244,1.890,1.711,682,6447 -Illoud,52247,227,13.854,1.185,1.073,891,6792 -Daillecourt,52161,75,7.411,0.867,0.785,885,6778 -Courcelles-sous-Châtenois,88117,81,2.380,0.491,0.445,909,6808 -Chaumousey,88098,899,10.155,1.014,0.918,944,6792 -Esley,88162,189,11.130,1.062,0.962,927,6793 -Maisoncelles,52301,56,4.090,0.644,0.583,890,6784 -Doncourt-sur-Meuse,52174,41,6.006,0.780,0.706,893,6784 -Barmainville,28025,122,6.449,0.808,0.732,624,6796 -Damas-et-Bettegney,88122,367,15.069,1.236,1.119,943,6794 -Lavilleneuve,52277,62,5.117,0.720,0.652,886,6772 -Maroncourt,88288,11,2.269,0.479,0.434,934,6799 -Rozerotte,88403,193,6.425,0.807,0.731,929,6796 -Chantraines,52107,218,10.451,1.029,0.932,868,6791 -Saint-Hilaire-de-la-Côe,38393,1467,13.694,1.178,1.067,883,6482 -Chirols,7065,249,6.921,0.837,0.758,802,6401 -Verbiesles,52514,324,11.391,1.074,0.972,861,6776 -Buxières-lès-Villiers,52087,190,4.959,0.709,0.642,850,6780 -Andonville,45005,235,12.010,1.103,0.999,625,6799 -Gillancourt,52221,118,15.095,1.237,1.120,846,6787 -Saint-Germain-de-Joux,1357,507,11.479,1.078,0.976,909,6567 -Chaufour-lès-Bonnières,78147,463,3.053,0.556,0.503,588,6881 -Le Poizat-Lalleyriat,1204,712,33.207,1.834,1.661,912,6566 -Clarafond-Arcine,74077,1017,16.845,1.306,1.182,921,6558 -Dommartin-aux-Bois,88147,397,15.845,1.267,1.147,946,6785 -Villes,1448,365,9.015,0.956,0.866,910,6558 -La Roque-en-Provence,6107,77,23.814,1.553,1.406,1021,6317 -Marac,52307,213,22.022,1.494,1.353,860,6761 -Dompaire,88151,1168,16.765,1.303,1.180,938,6794 -Vittel,88516,5192,24.174,1.565,1.417,917,6797 -Signéville,52473,93,8.198,0.911,0.825,870,6799 -Plagne,1298,123,6.053,0.783,0.709,909,6567 -Billiat,1044,611,14.043,1.193,1.080,910,6557 -Esquennoy,60221,723,9.853,0.999,0.905,645,6948 -Gruey-lès-Surance,88221,257,27.075,1.656,1.499,935,6772 -Thizy,89412,203,5.562,0.751,0.680,780,6724 -Hennecourt,88237,359,7.183,0.853,0.772,946,6795 -Éloise,74109,832,8.928,0.951,0.861,921,6558 -Leucamp,15103,234,13.649,1.176,1.065,666,6409 -Frénois,88187,51,4.922,0.706,0.639,932,6790 -Amance,70012,656,17.720,1.340,1.213,926,6745 -Velotte-et-Tatignécourt,88499,156,5.393,0.739,0.669,934,6801 -Les Voivres,88520,315,12.862,1.142,1.034,944,6777 -Bergères,10039,124,5.896,0.773,0.700,823,6790 -Pierrefitte,88347,130,8.854,0.947,0.857,936,6792 -Harol,88233,626,27.372,1.665,1.508,940,6784 -La Cropte,53087,216,14.236,1.201,1.087,438,6766 -Cherbourg-en-Cotentin,50129,80076,68.376,2.632,2.383,369,6962 -Bologne,52058,1909,31.309,1.781,1.613,863,6790 -Ormoy-lès-Sexfontaines,52367,45,5.578,0.752,0.681,854,6792 -Ville-sur-Illon,88508,567,17.908,1.347,1.220,937,6787 -Lupcourt,54330,458,6.885,0.835,0.756,936,6838 -Jésonville,88252,127,7.015,0.843,0.763,931,6787 -Ramoulu,45260,253,12.031,1.104,1.000,651,6791 -Hagécourt,88226,114,7.633,0.879,0.796,932,6796 -Senonges,88452,125,5.868,0.771,0.698,926,6786 -Chavannaz,74066,233,3.179,0.568,0.514,933,6556 -Chaumont,74065,481,12.265,1.115,1.010,928,6551 -Valleroy-aux-Saules,88489,264,5.069,0.717,0.649,932,6799 -Plorec-sur-Arguenon,22205,412,13.882,1.186,1.074,308,6833 -Champfromier,1081,729,31.933,1.799,1.629,917,6575 -Farges,1158,1013,14.201,1.200,1.086,921,6566 -Boisseaux,45037,495,7.269,0.858,0.777,623,6794 -Pont-lès-Bonfays,88353,101,4.474,0.673,0.609,933,6789 -Ouville-l'Abbaye,76491,680,7.417,0.867,0.785,544,6957 -Blamont,25063,1226,9.943,1.004,0.909,989,6707 -Cliousclat,26097,643,9.582,0.985,0.892,847,6404 -Vandoncourt,25586,837,8.638,0.936,0.847,994,6715 -Richebourg,52422,281,21.258,1.468,1.329,852,6773 -Treix,52494,233,15.601,1.257,1.138,868,6782 -Bricon,52076,452,9.863,1.000,0.905,848,6776 -Cavaillon,84035,26492,45.913,2.157,1.953,861,6307 -Villeneuve-de-Marc,38555,1152,26.297,1.632,1.478,869,6487 -Forcalqueiret,83059,2871,10.683,1.040,0.942,948,6254 -Fyé,72139,1004,16.349,1.287,1.165,482,6805 -Écurcey,25216,270,7.524,0.873,0.790,985,6706 -Laval-le-Prieuré,25329,34,5.401,0.740,0.670,973,6680 -Soncourt-sur-Marne,52480,373,13.743,1.180,1.068,856,6795 -Bénaménil,54061,580,9.424,0.977,0.885,971,6837 -Seloncourt,25539,5823,8.001,0.900,0.815,992,6715 -Beaucourt,90009,5048,4.911,0.705,0.638,994,6718 -Autechaux-Roide,25033,528,6.601,0.818,0.741,986,6704 -Gignac,46118,661,40.975,2.038,1.845,584,6434 -Valentigney,25580,10381,9.757,0.994,0.900,987,6713 -Thulay,25562,219,2.255,0.478,0.433,991,6710 -Péron,1288,2584,25.999,1.623,1.469,928,6567 -Injoux-Génissiat,1189,1147,29.623,1.732,1.568,910,6551 -Hérimoncourt,25304,3640,7.307,0.860,0.779,993,6713 -Neuilly-sur-Suize,52349,314,14.786,1.224,1.108,856,6773 -Cirey-lès-Mareilles,52128,136,14.651,1.218,1.103,870,6787 -Audincourt,25031,13582,8.786,0.944,0.855,991,6717 -Banteux,59047,341,6.172,0.791,0.716,713,6995 -Euffigneix,52193,305,8.995,0.955,0.865,851,6782 -Abbévillers,25004,1031,11.218,1.066,0.965,994,6712 -Bourguignon,25082,930,5.582,0.752,0.681,986,6707 -Gondrexange,57253,483,29.599,1.732,1.568,990,6853 -Chézery-Forens,1104,460,46.619,2.173,1.967,923,6580 -Corbonod,1118,1255,32.070,1.803,1.632,919,6545 -Cernex,74052,987,12.724,1.135,1.028,933,6556 -Dasle,25196,1423,5.616,0.754,0.683,995,6716 -Saint-Dizier-l'Évêque,90090,426,10.921,1.052,0.952,997,6717 -Arc-en-Barrois,52017,766,50.419,2.260,2.046,850,6758 -Bondeval,25071,473,4.687,0.689,0.624,989,6712 -Puy-Saint-Gulmier,63292,156,20.150,1.429,1.294,668,6521 -Nonglard,74202,644,4.133,0.647,0.586,934,6539 -Louvières,52295,99,8.711,0.939,0.850,869,6771 -Annéville-la-Prairie,52011,82,5.157,0.723,0.655,854,6792 -Mandeure,25367,4833,15.209,1.241,1.124,989,6709 -Daubensand,67086,389,4.032,0.639,0.579,1049,6817 -Pougny,1308,815,7.573,0.876,0.793,928,6567 -Bargème,83010,206,27.980,1.684,1.525,991,6295 -Confort,1114,620,11.296,1.070,0.969,921,6566 -Marolles-les-Buis,28237,213,13.211,1.157,1.048,548,6807 -Ferrières-lès-Ray,70231,34,3.985,0.635,0.575,911,6723 -Collonges,1109,2223,16.338,1.287,1.165,924,6562 -La Romaine,70418,510,21.222,1.466,1.327,916,6719 -Cultures,48055,156,3.928,0.631,0.571,732,6376 -Membrey,70340,213,11.086,1.060,0.960,906,6721 -Villiers-sur-Suize,52538,268,17.697,1.339,1.212,866,6768 -Groix,56069,2276,15.237,1.243,1.125,212,6747 -Anglefort,1010,1124,29.557,1.731,1.567,918,6541 -Onay,70394,59,6.785,0.829,0.751,904,6701 -Citey,70156,101,5.812,0.767,0.694,908,6707 -Chamarandes-Choignes,52125,1035,19.021,1.388,1.257,864,6779 -Bucey-lès-Gy,70104,601,21.340,1.470,1.331,914,6707 -Vy-le-Ferroux,70580,156,5.785,0.766,0.694,925,6726 -Fresne-Saint-Mamès,70255,509,9.996,1.006,0.911,914,6718 -Rompon,7198,1076,22.352,1.505,1.363,840,6410 -Condé-sur-Aisne,2210,358,3.753,0.617,0.559,733,6921 -Cordonnet,70174,143,10.417,1.027,0.930,922,6702 -Beaujeu-Saint-Vallier-Pierrejux-et-Quitteur,70058,930,35.463,1.896,1.717,905,6712 -Mellé,35174,652,15.827,1.266,1.146,392,6829 -Mijoux,1247,340,22.069,1.495,1.354,935,6592 -Fontaine-lès-Croisilles,62343,285,6.221,0.794,0.719,695,7012 -La Pesse,39413,349,24.285,1.569,1.421,918,6577 -Les Chapelles,73077,559,17.339,1.325,1.200,985,6513 -Rogna,39463,226,10.635,1.038,0.940,909,6586 -Montbras,55344,17,5.481,0.745,0.675,900,6829 -Brethenay,52072,361,8.961,0.953,0.863,858,6787 -Cieurac,46070,535,18.664,1.375,1.245,583,6365 -Ray-sur-Saône,70438,208,8.015,0.901,0.816,913,6723 -Suzette,84130,122,6.785,0.829,0.751,866,6345 -Villefrancon,70557,138,5.727,0.762,0.690,907,6703 -Pfulgriesheim,67375,1292,4.800,0.697,0.631,1046,6848 -Traves,70504,359,12.249,1.114,1.009,923,6730 -Velloreille-lès-Choye,70540,78,4.136,0.647,0.586,904,6701 -Laville-aux-Bois,52276,205,13.132,1.153,1.044,868,6782 -Saint-Julien-en-Saint-Alban,7255,1507,10.436,1.028,0.931,837,6405 -Briaucourt,52075,185,9.563,0.984,0.891,865,6791 -Apchon,15009,187,12.540,1.127,1.020,679,6461 -Tincey-et-Pontrebeau,70502,85,6.870,0.834,0.755,909,6724 -Blaisy,52053,76,5.634,0.756,0.684,851,6788 -Poinson-lès-Nogent,52396,147,10.790,1.046,0.947,878,6770 -Bugnières,52082,152,18.509,1.369,1.240,858,6761 -Les Bâties,70053,79,7.669,0.881,0.798,917,6713 -Poulangy,52401,400,17.410,1.328,1.202,867,6773 -Viry,39579,938,25.747,1.615,1.462,910,6577 -Mareilles,52313,162,22.161,1.498,1.356,870,6787 -Canettemont,62208,70,1.777,0.424,0.384,655,7020 -Monteynard,38254,492,11.275,1.069,0.968,911,6434 -Sauvigney-lès-Gray,70479,105,10.498,1.031,0.933,904,6710 -Lélex,1210,225,17.735,1.340,1.213,926,6583 -Aumeville-Lestre,50022,120,2.516,0.505,0.457,389,6946 -Soing-Cubry-Charentenay,70492,557,28.978,1.714,1.552,913,6723 -La Chapelle-Saint-Quillain,70129,150,10.384,1.026,0.929,910,6716 -Montboillon,70356,263,8.502,0.928,0.840,919,6704 -Oiselay-et-Grachaux,70393,423,23.244,1.535,1.390,919,6704 -Vaux-le-Moncelot,70527,71,7.020,0.843,0.763,921,6711 -Darmannes,52167,257,18.356,1.364,1.235,863,6790 -Vignes-la-Côe,52523,62,3.139,0.564,0.511,870,6799 -Vellefrey-et-Vellefrange,70533,120,7.206,0.854,0.773,911,6710 -Dampierre,52163,389,16.268,1.284,1.163,876,6766 -Choye,70152,447,14.414,1.208,1.094,907,6707 -Saint-Gand,70463,135,16.077,1.276,1.155,911,6716 -Mailly-le-Château,89238,561,37.435,1.948,1.764,747,6724 -Riaucourt,52421,471,10.789,1.046,0.947,863,6790 -La Poterie-Mathieu,27475,172,6.471,0.810,0.733,517,6909 -Vaite,70511,215,9.426,0.977,0.885,906,6722 -Pietroso,2B229,258,25.882,1.619,1.466,1229,6131 -Les Bouchoux,39068,318,21.535,1.477,1.337,916,6585 -Badonviller,54040,1554,22.416,1.507,1.364,985,6830 -Amfreville-sous-les-Monts,27013,501,7.495,0.871,0.789,571,6914 -Vesancy,1436,490,10.741,1.043,0.944,939,6588 -Vitry-lès-Nogent,52541,176,8.144,0.908,0.822,876,6767 -Woincourt,80827,1297,4.228,0.655,0.593,595,6996 -Fresnay,10161,45,7.554,0.875,0.792,832,6804 -Villiers-le-Sec,52535,710,15.788,1.265,1.145,854,6782 -Pontenx-les-Forges,40229,1559,80.839,2.862,2.591,377,6354 -Fretigney-et-Velloreille,70257,736,22.357,1.505,1.363,921,6711 -Duhort-Bachen,40091,663,34.237,1.863,1.687,429,6296 -Bellecombe,39046,64,12.266,1.115,1.010,924,6580 -Créhen,22049,1639,18.235,1.359,1.230,316,6836 -Luzy-sur-Marne,52297,258,15.998,1.273,1.153,866,6778 -Sainte-Scolasse-sur-Sarthe,61454,622,14.245,1.201,1.087,510,6835 -Saint-Claude,39478,9526,70.364,2.670,2.417,917,6588 -Ferney-Voltaire,1160,9637,4.782,0.696,0.630,939,6578 -Ornex,1281,4400,5.690,0.759,0.687,937,6581 -Divonne-les-Bains,1143,9465,33.888,1.853,1.678,934,6595 -Vouécourt,52547,209,13.523,1.171,1.060,858,6797 -Balgau,68016,966,9.500,0.981,0.888,1035,6767 -Chaumont,52121,22367,55.179,2.364,2.140,860,6777 -Vanne,70520,97,9.708,0.992,0.898,912,6727 -Saint-Georges-de-Pointindoux,85218,1652,15.609,1.258,1.139,343,6626 -Autet,70037,264,11.336,1.072,0.971,900,6718 -Allègre,43003,929,23.957,1.558,1.411,752,6451 -Angirey,70022,137,8.931,0.951,0.861,911,6711 -Neuvelle-lès-la-Charité,70384,224,13.287,1.160,1.050,921,6721 -Condes,52141,307,5.164,0.723,0.655,857,6784 -Neuviller-la-Roche,67321,349,9.198,0.965,0.874,1018,6822 -Corcieux,88115,1557,17.603,1.335,1.209,987,6794 -Rouez,72256,775,33.637,1.846,1.671,473,6787 -Frasne-le-Château,70253,288,12.536,1.127,1.020,917,6714 -Dampierre-sur-Salon,70198,1276,18.856,1.382,1.251,900,6719 -Vellexon-Queutrey-et-Vaudey,70539,463,25.022,1.592,1.441,908,6723 -Villanova,2A351,357,11.413,1.075,0.973,1173,6112 -Feule,25239,180,3.825,0.623,0.564,981,6702 -Crozet,1135,2126,27.263,1.662,1.505,933,6578 -Igny,70289,192,10.152,1.014,0.918,905,6712 -Pulney,54438,59,4.449,0.671,0.608,924,6816 -Le Puid,88362,96,5.406,0.740,0.670,999,6817 -Montpensier,63240,445,7.278,0.859,0.778,716,6549 -Sarcey,52459,113,7.237,0.856,0.775,871,6777 -Noirefontaine,25426,377,3.394,0.586,0.531,984,6699 -Leffonds,52282,345,36.782,1.930,1.747,861,6763 -Sergy,1401,2045,9.798,0.996,0.902,928,6580 -Avignon-lès-Saint-Claude,39032,393,7.749,0.886,0.802,916,6592 -Faverolles,52196,103,17.585,1.335,1.209,864,6764 -Villards-d'Héria,39561,425,9.913,1.002,0.907,909,6593 -Gondrecourt-le-Château,55215,1087,51.359,2.281,2.065,878,6821 -Neuchâtel-Urtière,25422,194,6.175,0.791,0.716,982,6703 -Criel-sur-Mer,76192,2704,20.971,1.458,1.320,582,6991 -Doussay,86096,657,27.244,1.661,1.504,496,6640 -Sarrey,52461,378,14.193,1.199,1.086,880,6768 -Montbert,44102,3097,29.068,1.716,1.554,359,6670 -Montécheroux,25393,569,13.250,1.159,1.049,987,6703 -Septmoncel les Molunes,39510,843,40.322,2.021,1.830,922,6587 -Chamesol,25114,377,10.255,1.019,0.923,993,6701 -Semoutiers-Montsaon,52469,783,27.420,1.667,1.509,849,6777 -Ségny,1399,2016,3.265,0.575,0.521,937,6583 -Villars-lès-Blamont,25615,448,6.976,0.841,0.761,990,6703 -Bretigney,25093,71,1.806,0.428,0.388,973,6716 -Noyal-sur-Brutz,44112,592,7.809,0.890,0.806,375,6753 -Marbéville,52310,97,17.806,1.343,1.216,848,6801 -Fontaines-Saint-Clair,55192,54,6.264,0.797,0.722,865,6922 -Vaufrey,25591,159,9.378,0.975,0.883,999,6700 -Crucey-Villages,28120,470,44.494,2.123,1.922,566,6842 -Versonnex,1435,2186,5.860,0.771,0.698,938,6582 -Germs-sur-l'Oussouet,65200,109,13.175,1.155,1.046,461,6221 -Coteaux du Lizon,39491,2390,15.556,1.255,1.136,913,6597 -Grilly,1180,808,7.518,0.873,0.790,938,6585 -Chevry,1103,1643,5.823,0.768,0.695,935,6582 -Tignécourt,88473,104,19.011,1.388,1.257,918,6779 -Cessy,1071,4836,6.405,0.806,0.730,936,6582 -Sainte-Colombe-sur-Gand,42209,418,13.585,1.173,1.062,801,6532 -Bleurville,88061,323,20.447,1.439,1.303,923,6778 -Étalante,21253,152,39.357,1.997,1.808,835,6724 -Rozières-sur-Mouzon,88404,62,4.736,0.693,0.627,900,6783 -Pugey,25473,748,7.439,0.868,0.786,926,6681 -Coiserette,39157,53,5.904,0.773,0.700,917,6588 -Martigna,39318,199,8.748,0.941,0.852,905,6590 -Villard-Saint-Sauveur,39560,618,9.011,0.956,0.866,919,6587 -Morizécourt,88314,109,10.558,1.034,0.936,910,6779 -Monceaux-l'Abbaye,60407,230,4.550,0.679,0.615,612,6951 -Les Rairies,49257,1006,8.503,0.928,0.840,460,6732 -Sandaucourt,88440,177,10.834,1.048,0.949,913,6798 -Les Moussières,39373,171,17.068,1.315,1.191,922,6583 -Saint-Baslemont,88411,80,12.661,1.133,1.026,922,6790 -Quilen,62682,58,4.057,0.641,0.580,626,7049 -Foulain,52205,701,26.754,1.646,1.490,866,6774 -Larivière-Arnoncourt,52273,114,20.312,1.435,1.299,907,6774 -Geay,79131,319,19.326,1.399,1.267,446,6644 -Lamoura,39275,630,22.280,1.502,1.360,931,6598 -Audignon,40017,389,9.375,0.975,0.883,409,6297 -Romain-aux-Bois,88394,48,8.114,0.907,0.821,901,6779 -Chevrières,42062,1097,14.603,1.216,1.101,809,6497 -Chasseneuil-du-Poitou,86062,4721,17.569,1.334,1.208,498,6617 -Contrexéville,88114,3232,15.049,1.235,1.118,917,6793 -La Chapelle-Montlinard,18049,478,17.021,1.313,1.189,700,6678 -Couesmes-Vaucé,53079,366,19.146,1.393,1.261,427,6825 -Prévessin-Moëns,1313,7991,12.093,1.107,1.002,936,6579 -Averton,53013,596,40.572,2.028,1.836,467,6810 -Sauverny,1397,1025,1.868,0.435,0.394,938,6584 -Coyrière,39174,65,4.120,0.646,0.585,919,6587 -Aingeville,88003,62,5.731,0.762,0.690,907,6792 -Échenevex,1153,2172,16.450,1.291,1.169,935,6584 -Nances,73184,479,9.893,1.001,0.906,920,6500 -Blessonville,52056,200,9.735,0.993,0.899,852,6773 -Mandres-sur-Vair,88285,464,12.018,1.103,0.999,914,6797 -Jonchery,52251,1022,28.962,1.713,1.551,852,6784 -Saint-Alban-Leysse,73222,5891,8.367,0.921,0.834,929,6504 -Marnay-sur-Marne,52315,317,10.819,1.047,0.948,867,6768 -Serocourt,88456,92,11.121,1.062,0.962,913,6784 -Verrens-Arvey,73312,899,10.724,1.042,0.943,958,6510 -Billième,73042,272,5.983,0.779,0.705,920,6518 -Ruffieux,73218,847,13.683,1.177,1.066,917,6531 -Bourdeau,73050,546,7.220,0.855,0.774,923,6514 -Wangenbourg-Engenthal,67122,1368,31.482,1.786,1.617,1014,6841 -Mouxy,73182,2241,6.275,0.797,0.722,931,6514 -Blessac,23024,534,17.858,1.345,1.218,628,6541 -Vornay,18289,595,26.797,1.648,1.492,667,6649 -Biesles,52050,1356,24.141,1.564,1.416,868,6783 -Puceul,44138,1119,20.268,1.433,1.297,350,6721 -Bassens,73031,4306,3.097,0.560,0.507,930,6501 -Saint-Parthem,12240,408,18.807,1.380,1.249,647,6391 -Chirat-l'Église,3077,128,18.389,1.365,1.236,701,6570 -Ladirat,46146,99,8.873,0.948,0.858,619,6415 -Essertines-en-Châtelneuf,42089,689,15.138,1.238,1.121,780,6502 -Thuillières,88472,123,7.534,0.874,0.791,925,6785 -Beaumont-les-Autels,28031,402,21.413,1.473,1.334,547,6798 -Hagnéville-et-Roncourt,88227,88,8.561,0.931,0.843,908,6799 -Courniou,34086,596,30.306,1.752,1.586,674,6268 -Pugny-Chatenod,73208,950,5.324,0.734,0.665,932,6514 -Bosc-le-Hard,76125,1455,10.593,1.036,0.938,567,6947 -Tours-en-Savoie,73298,971,15.270,1.244,1.126,972,6515 -Argent-sur-Sauldre,18011,2122,67.584,2.617,2.369,653,6721 -Gignéville,88199,79,5.605,0.754,0.683,916,6785 -Chimilin,38104,1473,9.705,0.992,0.898,901,6502 -Haréville,88231,481,6.570,0.816,0.739,922,6795 -Duesme,21235,53,13.385,1.165,1.055,829,6727 -Soulaucourt-sur-Mouzon,52482,98,9.320,0.972,0.880,899,6790 -Médonville,88296,93,7.362,0.864,0.782,904,6792 -Thivet,52488,273,15.476,1.252,1.134,874,6766 -Montcel,73164,982,15.173,1.240,1.123,933,6513 -Tresserve,73300,3045,8.167,0.910,0.824,924,6511 -Saint-Paul,73269,667,13.228,1.158,1.048,920,6511 -Rondefontaine,25501,32,2.782,0.531,0.481,944,6630 -Saint-Ours,73265,654,4.595,0.682,0.617,933,6523 -Mont-lès-Lamarche,88307,99,7.108,0.849,0.769,908,6771 -Erstein,67130,10669,36.504,1.923,1.741,1042,6823 -Champagneux,73070,681,10.651,1.039,0.941,906,6507 -Bronvaux,57111,557,1.571,0.399,0.361,925,6904 -Lucey,73149,317,6.167,0.790,0.715,916,6523 -Monthureux-le-Sec,88309,158,11.436,1.076,0.974,927,6788 -Saint-Jean-d'Arvey,73243,1683,12.959,1.146,1.038,933,6502 -Norroy,88332,225,7.255,0.857,0.776,916,6796 -Castelmoron-sur-Lot,47054,1739,23.263,1.535,1.390,499,6367 -Tancarville,76684,1292,7.403,0.866,0.784,517,6934 -Vesaignes-sur-Marne,52518,106,8.597,0.933,0.845,868,6767 -Saint-Pierre-de-Curtille,73273,493,18.453,1.367,1.238,921,6524 -Vaugines,84140,566,15.540,1.255,1.136,895,6305 -La Chapelle-du-Mont-du-Chat,73076,254,12.192,1.111,1.006,920,6518 -Graçay,18103,1454,31.738,1.793,1.623,610,6674 -Bloye,74035,617,4.436,0.670,0.607,930,6528 -Soudan,79316,434,23.410,1.540,1.394,460,6599 -Entrelacs,73010,6091,54.441,2.349,2.127,924,6530 -Trévignin,73301,777,6.851,0.833,0.754,931,6518 -Serrières-en-Chautagne,73286,1228,18.807,1.380,1.249,922,6538 -Juzennecourt,52253,210,12.183,1.111,1.006,848,6787 -Vignory,52524,248,19.677,1.412,1.278,852,6798 -Cour-l'Évêque,52151,168,19.404,1.402,1.269,846,6763 -Viviers-du-Lac,73328,2225,5.443,0.743,0.673,927,6509 -Mauvilly,21396,67,14.379,1.207,1.093,831,6735 -Vaux-Saules,21659,168,28.384,1.696,1.536,841,6711 -Villers-Agron-Aiguizy,2809,77,13.142,1.154,1.045,755,6896 -Thoiry,73293,461,17.668,1.338,1.211,939,6501 -Leschaux,74148,278,12.422,1.122,1.016,944,6523 -Meulson,21410,33,7.812,0.890,0.806,826,6732 -Forstfeld,67140,728,4.908,0.705,0.638,1068,6874 -Lamarche,88258,939,33.685,1.847,1.672,910,6779 -Martigny-les-Bains,88289,799,29.275,1.722,1.559,913,6782 -Grésy-sur-Aix,73128,4520,12.669,1.133,1.026,930,6519 -Jonquières,60326,612,7.340,0.862,0.780,680,6920 -Viviers-le-Gras,88517,198,9.141,0.962,0.871,917,6785 -Montbrison,42147,15569,16.275,1.284,1.163,785,6498 -Baigneux-les-Juifs,21043,243,12.577,1.129,1.022,824,6726 -Brison-Saint-Innocent,73059,2126,15.777,1.264,1.144,926,6518 -Verel-Pragondran,73310,466,6.525,0.813,0.736,930,6509 -Verrey-sous-Salmaise,21670,289,8.225,0.913,0.827,827,6704 -Pellerey,21479,104,12.598,1.130,1.023,834,6716 -Sainte-Suzanne-et-Chammes,53255,1314,43.981,2.111,1.911,451,6787 -Ballore,71017,89,10.790,1.046,0.947,805,6603 -Villy-en-Auxois,21707,218,16.085,1.277,1.156,825,6702 -Flaviac,7090,1218,13.014,1.148,1.039,831,6408 -Marey,88287,70,7.906,0.895,0.810,915,6784 -Curienne,73097,679,8.546,0.931,0.843,933,6502 -La Neuveville-sous-Montfort,88325,178,10.353,1.024,0.927,926,6794 -Saint-Offenge,73263,1082,15.662,1.260,1.141,933,6521 -Saint-Remimont,88434,229,4.625,0.685,0.620,917,6797 -Bettancourt-la-Longue,51057,79,6.152,0.790,0.715,839,6859 -Robécourt,88390,108,8.801,0.944,0.855,902,6787 -Serécourt,88455,100,13.755,1.181,1.069,910,6779 -Liocourt,57406,136,3.172,0.567,0.513,944,6872 -Conjux,73091,201,4.885,0.704,0.637,919,6527 -Oigny,21466,36,14.831,1.226,1.110,832,6723 -They-sous-Montfort,88466,127,10.324,1.023,0.926,923,6795 -Saint-Amand-en-Puisaye,58227,1282,41.728,2.056,1.862,709,6720 -Malaincourt,88283,88,6.028,0.782,0.708,904,6797 -Vions,73327,402,5.754,0.764,0.692,917,6529 -Jongieux,73140,300,6.453,0.809,0.732,916,6520 -Bellenod-sur-Seine,21061,79,14.628,1.217,1.102,825,6733 -Méziré,90069,1353,3.950,0.633,0.573,994,6723 -Dombrot-le-Sec,88140,380,18.998,1.387,1.256,915,6784 -Lignéville,88271,316,12.542,1.127,1.020,920,6787 -Barby,73030,3399,2.487,0.502,0.455,933,6501 -Vrécourt,88524,380,12.505,1.126,1.019,900,6788 -Brévillers,62175,159,3.051,0.556,0.503,631,7029 -Voglans,73329,1885,4.618,0.684,0.619,926,6506 -Grendelbruch,67167,1209,14.996,1.233,1.116,1016,6826 -Bourg-Saint-Maurice,73054,7265,182.213,4.297,3.891,995,6527 -Billy-lès-Chanceaux,21075,58,22.260,1.502,1.360,832,6721 -Landry,73142,834,10.564,1.035,0.937,997,6502 -La Roche-Rigault,86079,549,25.717,1.614,1.461,484,6652 -Saint-Julien,88421,110,14.243,1.201,1.087,915,6771 -Montilliers,49211,1225,26.587,1.641,1.486,432,6685 -Beaufremont,88045,92,8.988,0.954,0.864,904,6797 -Renauvoid,88388,116,9.334,0.972,0.880,952,6786 -Les Contamines-Montjoie,74085,1193,81.385,2.872,2.600,984,6529 -Saint-Gervais-les-Bains,74236,5556,86.701,2.964,2.684,1000,6533 -Gabian,34109,841,16.077,1.276,1.155,722,6272 -Noceta,2B177,60,18.592,1.373,1.243,1210,6142 -Boisbergues,80108,80,4.316,0.661,0.598,643,7005 -Lalanne,32184,141,5.487,0.746,0.675,515,6303 -Lévignen,60358,944,13.944,1.189,1.077,691,6900 -Dogneville,88136,1486,11.442,1.077,0.975,958,6794 -Loupes,33252,775,4.969,0.710,0.643,432,6419 -Meillerie,74175,322,3.917,0.630,0.570,985,6596 -Tox,2B328,96,14.563,1.215,1.100,1235,6147 -Bogève,74038,1079,6.982,0.841,0.761,966,6571 -Champrenault,21141,34,4.221,0.654,0.592,825,6702 -Crantenoy,54142,148,5.194,0.725,0.656,940,6825 -La Bretenière,25092,71,4.191,0.652,0.590,947,6702 -Chanteloup,35054,1830,17.991,1.350,1.222,353,6773 -Villotte-Saint-Seine,21705,74,7.613,0.878,0.795,829,6706 -Vauvillers,80781,257,6.203,0.793,0.718,678,6973 -Boux-sous-Salmaise,21098,127,14.625,1.217,1.102,823,6707 -Jailly-les-Moulins,21321,88,9.264,0.969,0.877,819,6706 -Genevrey,70263,246,12.081,1.106,1.001,951,6740 -La Bridoire,73058,1260,6.186,0.792,0.717,915,6497 -Châteauneuf-en-Thymerais,28089,2641,4.095,0.644,0.583,570,6836 -Sainte-Marie-d'Alvey,73254,119,2.608,0.514,0.465,911,6503 -Traize,73299,315,9.470,0.980,0.887,912,6513 -Arches,88011,1639,17.643,1.337,1.211,962,6782 -Guichen,35126,8400,43.057,2.089,1.891,343,6778 -Labrousse,15085,505,19.957,1.422,1.287,664,6420 -Herpelmont,88240,281,5.668,0.758,0.686,977,6790 -Aizecourt-le-Haut,80015,68,3.707,0.613,0.555,700,6986 -Domfaing,88145,216,3.921,0.630,0.570,979,6801 -Poëzat,3209,146,2.179,0.470,0.426,718,6552 -Ban-sur-Meurthe-Clefcy,88106,951,45.035,2.136,1.934,998,6786 -Biffontaine,88059,416,8.886,0.949,0.859,984,6796 -Saint-Paul-sur-Isère,73268,516,20.801,1.452,1.315,963,6501 -Roumoules,4172,742,26.187,1.629,1.475,952,6305 -Plancherine,73202,431,6.771,0.828,0.750,954,6514 -Saint-Mards,76604,201,6.596,0.818,0.741,556,6963 -Meria,2B159,107,20.611,1.445,1.308,1224,6226 -Cherrueix,35078,1121,12.782,1.138,1.030,356,6845 -Rehaupal,88380,211,4.800,0.697,0.631,980,6785 -Ferrières,17158,877,7.607,0.878,0.795,403,6578 -Morand,37160,352,14.751,1.223,1.107,549,6722 -Léry,21345,201,14.770,1.223,1.107,838,6721 -Jeuxey,88253,689,8.561,0.931,0.843,960,6796 -Gilette,6066,1566,10.585,1.036,0.938,1037,6313 -Villeberny,21690,91,12.902,1.143,1.035,823,6707 -Saint-Martin-du-Mont,21561,441,38.258,1.969,1.783,840,6702 -Méménil,88297,150,9.213,0.966,0.875,970,6794 -Pessines,17275,745,9.133,0.962,0.871,412,6522 -Grosbreuil,85103,2151,36.774,1.930,1.747,344,6617 -Le Mesnil-Simon,28247,593,9.229,0.967,0.876,593,6865 -La Chapelle-Saint-Martin,73078,152,2.588,0.512,0.464,914,6508 -Bligny-le-Sec,21085,152,16.775,1.304,1.181,832,6703 -Peyrieu,1294,862,14.145,1.197,1.084,910,6515 -Uriménil,88481,1356,15.715,1.262,1.143,952,6786 -La Roche-Vanneau,21528,147,13.264,1.159,1.049,815,6708 -Castella,47053,362,12.617,1.131,1.024,512,6359 -Izieu,1193,242,7.770,0.887,0.803,905,6508 -Viménil,88512,243,8.163,0.909,0.823,972,6796 -Deyvillers,88132,1446,8.706,0.939,0.850,964,6795 -Surville,14682,433,4.861,0.702,0.636,500,6915 -Échigey,21242,286,5.447,0.743,0.673,865,6679 -Brégnier-Cordon,1058,849,11.262,1.068,0.967,904,6505 -Mazeley,88294,269,10.602,1.036,0.938,945,6798 -Les Poulières,88356,238,3.019,0.553,0.501,982,6795 -La Balme,73028,311,9.239,0.968,0.876,910,6516 -Domèvre-sur-Avière,88142,396,9.211,0.966,0.875,950,6798 -La Houssière,88244,592,19.745,1.414,1.280,987,6799 -Segonzac,24529,205,3.937,0.632,0.572,498,6458 -Loisieux,73147,201,9.352,0.973,0.881,911,6508 -Orret,21471,16,11.472,1.078,0.976,826,6725 -Virazeil,47326,1714,19.953,1.422,1.287,481,6386 -Marchiennes,59375,4593,21.481,1.475,1.335,714,7032 -Saint-Laurent,22310,490,8.974,0.954,0.864,238,6853 -Avressieux,73025,520,8.073,0.904,0.818,912,6499 -La Neuveville-devant-Lépanges,88322,502,8.823,0.945,0.856,971,6789 -Berthen,59073,551,5.142,0.722,0.654,677,7077 -Fontenay,88175,477,6.537,0.814,0.737,968,6794 -Granieu,38183,491,3.767,0.618,0.560,901,6505 -La Bâthie,73032,2193,22.352,1.505,1.363,968,6506 -Échalot,21237,97,27.710,1.676,1.517,839,6721 -Lépanges-sur-Vologne,88266,875,7.681,0.882,0.799,970,6794 -Boueilh-Boueilho-Lasque,64141,335,17.379,1.327,1.201,429,6279 -Champdray,88085,179,9.587,0.986,0.893,978,6788 -Guébestroff,57265,44,3.852,0.625,0.566,971,6868 -Novalaise,73191,2058,16.256,1.283,1.162,919,6500 -Marcieux,73152,177,4.384,0.666,0.603,919,6505 -Le Lac-d'Issarlès,7119,300,13.817,1.183,1.071,786,6418 -Drumettaz-Clarafond,73103,2677,11.346,1.072,0.971,931,6509 -Massingy-lès-Vitteaux,21395,99,9.416,0.977,0.885,819,6703 -Courcuire,70181,132,7.130,0.850,0.770,914,6697 -Dampierre-en-Montagne,21224,76,10.368,1.025,0.928,816,6705 -Attancourt,52021,254,12.372,1.120,1.014,843,6830 -Saint-Marc-sur-Seine,21557,106,8.455,0.926,0.838,821,6736 -Saonnet,14668,298,5.338,0.735,0.665,419,6917 -Sainte-Marie-du-Lac-Nuisement,51277,268,17.549,1.333,1.207,829,6837 -Archettes,88012,1094,13.905,1.187,1.075,965,6786 -Golbey,88209,8606,9.482,0.980,0.887,956,6796 -Semoussac,17424,343,9.563,0.984,0.891,418,6484 -Artemps,2025,369,6.330,0.801,0.725,716,6963 -Villars,84145,773,30.205,1.749,1.584,896,6327 -Cordemais,44045,3692,37.795,1.957,1.772,332,6701 -Aoste,38012,2873,10.010,1.007,0.912,904,6506 -Ayn,73027,368,7.440,0.868,0.786,913,6502 -Docelles,88135,889,8.686,0.938,0.849,971,6789 -Goussancourt,2351,120,8.581,0.932,0.844,748,6898 -Groslée-Saint-Benoit,1338,1193,28.686,1.705,1.544,901,6511 -Ruffieu,1330,184,13.936,1.188,1.076,904,6549 -Apremont,1011,383,15.075,1.236,1.119,904,6572 -Saint-Martin-de-Castillon,84112,774,38.354,1.971,1.785,906,6310 -Vienville,88505,127,3.370,0.584,0.529,987,6794 -Pouxeux,88358,1987,14.392,1.208,1.094,964,6785 -Villaines-en-Duesmois,21685,251,34.504,1.870,1.693,815,6737 -Puydaniel,31442,493,7.408,0.866,0.784,571,6248 -Jarménil,88250,465,5.233,0.728,0.659,969,6786 -Thenissey,21627,113,10.336,1.023,0.926,821,6710 -Magny-Châtelard,25355,60,4.121,0.646,0.585,951,6688 -Darnieulles,88126,1451,10.115,1.012,0.916,946,6795 -Corpoyer-la-Chapelle,21197,28,4.157,0.649,0.588,820,6716 -Nantua,1269,3482,14.531,1.213,1.098,904,6565 -Ampilly-les-Bordes,21011,85,14.695,1.220,1.105,824,6726 -Bièvres,2088,84,2.685,0.522,0.473,751,6932 -Charix,1087,285,18.616,1.373,1.243,909,6567 -Chevannay,21168,45,7.256,0.857,0.776,825,6702 -Montréal-la-Cluse,1265,3409,12.460,1.124,1.018,898,6566 -Les Neyrolles,1274,636,9.581,0.985,0.892,904,6560 -Vantoux-et-Longevelle,70521,176,9.801,0.997,0.903,915,6711 -Château-sur-Epte,27152,584,4.595,0.682,0.617,602,6903 -Chanceaux,21142,224,21.299,1.469,1.330,836,6717 -Lucenay-le-Duc,21358,185,28.970,1.713,1.551,816,6726 -Marthod,73153,1373,14.657,1.219,1.104,961,6520 -Frôlois,21288,171,34.859,1.879,1.701,821,6720 -Oyonnax,1283,22559,36.141,1.914,1.733,908,6572 -Cintrey,70153,95,6.219,0.794,0.719,908,6742 -Saint-Geniès-de-Malgoirès,30255,2991,12.022,1.104,1.000,799,6316 -Frontenex,73121,1861,1.705,0.416,0.377,958,6510 -Gries,67169,2861,12.252,1.114,1.009,1054,6864 -Notre-Dame-des-Millières,73188,1020,10.353,1.024,0.927,959,6508 -Grandvillers,88216,764,17.513,1.332,1.206,973,6801 -Aillon-le-Vieux,73005,178,21.478,1.475,1.335,940,6514 -Laval-sur-Vologne,88261,637,3.689,0.611,0.553,974,6793 -Albertville,73011,19055,17.401,1.328,1.202,965,6510 -Tourves,83140,4983,65.833,2.583,2.339,936,6266 -Lescheraines,73146,764,8.187,0.911,0.825,940,6514 -Le Creusot,71153,21752,18.140,1.356,1.228,807,6637 -Tournon-Saint-Pierre,37259,455,14.988,1.232,1.115,546,6630 -Girancourt,88201,903,17.726,1.340,1.213,950,6790 -Saint-Just-Malmont,43205,4165,24.202,1.566,1.418,800,6474 -Moncy,61281,249,7.833,0.891,0.807,432,6865 -Fomerey,88174,158,5.122,0.720,0.652,950,6795 -Bussy-le-Grand,21122,316,29.709,1.735,1.571,811,6720 -Xamontarupt,88528,153,5.013,0.713,0.646,970,6785 -Aydius,64085,112,34.869,1.880,1.702,414,6221 -Beaunotte,21055,21,8.569,0.932,0.844,831,6735 -Cheniménil,88101,1205,9.391,0.975,0.883,965,6789 -Rolleboise,78528,397,3.042,0.555,0.503,598,6882 -Jussarupt,88256,272,6.596,0.818,0.741,978,6789 -Villages du Lac de Paladru,38292,2463,23.171,1.532,1.387,901,6493 -Quimper,29232,63405,84.585,2.927,2.650,169,6787 -La Forge,88177,531,4.688,0.689,0.624,975,6781 -Replonges,1320,3702,16.685,1.300,1.177,842,6582 -Sainte-Marie-Outre-l'Eau,14619,122,5.895,0.773,0.700,406,6877 -Saint-Nicolas-la-Chapelle,73262,445,23.666,1.549,1.402,967,6532 -Mercury,73154,3080,22.342,1.505,1.363,960,6519 -La Motte-en-Bauges,73178,495,9.875,1.000,0.905,945,6518 -Prémeyzel,1310,247,7.626,0.879,0.796,904,6511 -Chaume-lès-Baigneux,21160,90,13.156,1.155,1.046,817,6725 -Le Crouzet,25179,57,3.784,0.619,0.560,938,6628 -Arnay-sous-Vitteaux,21024,110,12.224,1.113,1.008,815,6705 -Folgensbourg,68094,903,6.818,0.831,0.752,1033,6723 -Aydoilles,88026,1044,10.093,1.011,0.915,966,6794 -Deux-Jumeaux,14224,58,4.107,0.645,0.584,413,6925 -Gerbépal,88198,586,19.317,1.399,1.267,990,6789 -Aubignas,7020,475,15.742,1.263,1.144,828,6389 -Fraize,88181,2902,15.526,1.254,1.135,1003,6794 -Allondaz,73014,266,4.050,0.641,0.580,963,6517 -Mandray,88284,593,12.492,1.125,1.019,995,6799 -Crest-Voland,73094,358,9.976,1.005,0.910,971,6528 -Hauteluce,73132,762,62.689,2.520,2.282,980,6528 -Bluffy,74036,398,3.734,0.615,0.557,951,6534 -Serley,71516,605,22.655,1.515,1.372,874,6634 -Balanod,39035,352,4.905,0.705,0.638,878,6598 -Rouvres-les-Bois,36175,291,31.037,1.773,1.605,602,6663 -Le Valtin,88492,75,19.660,1.411,1.278,1002,6784 -Villarodin-Bourget,73322,525,33.053,1.830,1.657,989,6470 -Ver,50626,375,13.855,1.185,1.073,381,6874 -Roquebrune,32346,213,18.355,1.364,1.235,483,6291 -Correns,83045,905,37.075,1.938,1.755,952,6268 -Ménonval,76424,214,5.302,0.733,0.664,589,6962 -Anould,88009,3340,24.549,1.577,1.428,995,6796 -Poiseul-la-Grange,21489,58,23.105,1.530,1.385,832,6723 -Poiseul-la-Ville-et-Laperrière,21490,163,21.607,1.480,1.340,827,6717 -Velles,52513,69,4.241,0.656,0.594,904,6750 -Marcilly-et-Dracy,21381,105,8.653,0.936,0.847,813,6704 -Sarrant,32416,368,20.089,1.427,1.292,535,6301 -Plaisance,32319,1474,13.752,1.180,1.068,460,6280 -Valzin en Petite Montagne,39290,493,26.676,1.644,1.489,895,6597 -Mont-Saint-Léger,70369,53,4.951,0.708,0.641,910,6731 -Rossillon,1329,153,8.084,0.905,0.819,899,6529 -Brieulles-sur-Meuse,55078,325,24.104,1.563,1.415,857,6913 -Rupt-sur-Saône,70457,113,10.423,1.028,0.931,921,6730 -Grésigny-Sainte-Reine,21307,142,7.061,0.846,0.766,814,6716 -La Giettaz,73123,416,35.371,1.893,1.714,977,6538 -Quemigny-sur-Seine,21514,94,20.121,1.428,1.293,825,6725 -Montrollet,16231,307,22.115,1.497,1.355,537,6549 -Bellegarde-en-Forez,42013,1981,19.091,1.391,1.259,804,6508 -Cemboing,70112,183,10.394,1.026,0.929,911,6753 -Doucy-en-Bauges,73101,96,12.397,1.121,1.015,948,6518 -Jours-lès-Baigneux,21326,83,11.340,1.072,0.971,822,6723 -Poilcourt-Sydney,8340,184,7.910,0.895,0.810,779,6923 -La Neuville-en-Beine,2546,201,3.821,0.622,0.563,712,6954 -Trouhaut,21646,114,9.539,0.983,0.890,834,6699 -Champagny,21136,27,7.151,0.851,0.771,832,6710 -Étormay,21257,68,12.674,1.133,1.026,819,6725 -Jazeneuil,86116,811,32.239,1.807,1.636,476,6603 -Thoiré-sous-Contensor,72355,86,6.067,0.784,0.710,492,6803 -Saint-Broing-les-Moines,21543,192,20.012,1.424,1.289,841,6736 -Chargey-lès-Port,70133,237,13.077,1.151,1.042,926,6740 -Marmagne,18138,1982,37.711,1.955,1.770,643,6669 -Beaufort,73034,2061,152.765,3.934,3.562,972,6514 -Montay,59412,306,5.534,0.749,0.678,739,7004 -Chauvirey-le-Vieil,70144,33,3.322,0.580,0.525,906,6744 -Les Clefs,74079,643,18.460,1.368,1.239,955,6530 -Magny-Lambert,21364,85,12.915,1.144,1.036,818,6730 -Saint-Thomé,7300,445,19.795,1.416,1.282,829,6376 -Saint-Seine-l'Abbaye,21573,372,3.879,0.627,0.568,833,6705 -Corny-Machéroménil,8132,189,10.513,1.032,0.934,806,6942 -Césarches,73061,426,2.858,0.538,0.487,966,6516 -Gissey-sous-Flavigny,21299,89,10.308,1.022,0.925,817,6715 -Montureux-lès-Baulay,70372,154,6.398,0.805,0.729,924,6749 -Voncourt,52546,17,3.506,0.596,0.540,900,6737 -Laferté-sur-Amance,52257,108,7.999,0.900,0.815,903,6750 -Chambon-la-Forêt,45069,939,17.168,1.319,1.194,646,6774 -Fréchou-Fréchet,65181,163,2.999,0.551,0.499,469,6234 -Aignay-le-Duc,21004,288,24.731,1.583,1.433,828,6731 -Vernois-sur-Mance,70548,149,8.005,0.901,0.816,906,6755 -Vy-lès-Rupt,70582,97,8.268,0.915,0.828,919,6729 -Chassey-lès-Scey,70138,135,4.444,0.671,0.608,924,6733 -Posanges,21498,62,5.873,0.771,0.698,813,6704 -Lavoncourt,70299,314,5.618,0.754,0.683,907,6729 -Gilly-sur-Isère,73124,2997,7.044,0.845,0.765,961,6510 -Mélecey,70336,149,3.335,0.581,0.526,962,6720 -Saint-Vital,73283,688,3.596,0.604,0.547,957,6507 -Praz-sur-Arly,74215,1247,22.648,1.515,1.372,974,6535 -Moitron,21418,63,15.486,1.253,1.134,833,6735 -Rosières-sur-Mance,70454,50,5.327,0.735,0.665,912,6754 -Saint-Pons,4195,640,32.075,1.803,1.632,988,6372 -Cornot,70175,140,11.187,1.065,0.964,912,6738 -La Quarte,70430,64,3.162,0.566,0.512,904,6744 -Ouge,70400,104,13.595,1.174,1.063,901,6749 -Nuillé-le-Jalais,72224,535,5.775,0.765,0.693,512,6774 -Haramont,2368,581,12.241,1.114,1.009,701,6909 -La Chapelle-Saint-Maurice,74060,124,6.417,0.806,0.730,944,6523 -Sarnois,60605,348,5.555,0.750,0.679,623,6955 -Vitrey-sur-Mance,70572,271,13.706,1.178,1.067,904,6750 -La Neuvelle-lès-Scey,70386,185,6.527,0.813,0.736,919,6737 -Francourt,70251,104,7.088,0.847,0.767,906,6733 -Theuley,70499,108,7.491,0.871,0.789,910,6729 -Condamine,39162,269,3.631,0.607,0.550,886,6621 -Lagraulet-du-Gers,32180,543,27.383,1.666,1.508,475,6310 -École,73106,281,29.453,1.727,1.564,952,6510 -Cendrecourt,70114,208,9.351,0.973,0.881,922,6753 -Bellecombe-en-Bauges,73036,666,22.758,1.519,1.375,941,6523 -Pallud,73196,768,5.224,0.728,0.659,963,6517 -Grignon,73130,2122,9.260,0.969,0.877,962,6512 -Flumet,73114,810,17.174,1.319,1.194,974,6535 -Gourgeon,70272,225,13.775,1.181,1.069,916,6738 -Villemagne-l'Argentière,34335,448,7.997,0.900,0.815,711,6281 -Venthon,73308,635,2.477,0.501,0.454,965,6516 -Médière,25372,291,5.741,0.763,0.691,972,6714 -Renaucourt,70442,104,6.148,0.789,0.714,909,6730 -Aubiac,33017,274,5.565,0.751,0.680,443,6380 -Fleurey-lès-Lavoncourt,70237,100,9.368,0.974,0.882,907,6732 -La Bloutière,50060,425,9.380,0.975,0.883,386,6873 -La Roche-Morey,70373,274,29.682,1.734,1.570,911,6735 -Esserts-Blay,73110,808,15.324,1.246,1.128,964,6508 -Semmadon,70486,121,10.846,1.048,0.949,916,6740 -Fouchécourt,70244,109,4.511,0.676,0.612,923,6749 -Monthion,73170,559,6.330,0.801,0.725,961,6510 -Bourgoin-Jallieu,38053,27651,24.648,1.580,1.431,876,6506 -Darcey,21226,335,18.959,1.386,1.255,821,6720 -Grosbois,25298,235,2.946,0.546,0.494,949,6698 -Fouvent-Saint-Andoche,70247,221,35.015,1.884,1.706,899,6734 -Oigney,70392,48,8.107,0.906,0.820,912,6743 -Fontaines-en-Duesmois,21276,120,18.017,1.351,1.223,818,6730 -Salmaise,21580,136,13.218,1.157,1.048,823,6706 -Bourguignon-lès-Morey,70089,48,9.759,0.994,0.900,901,6739 -Confracourt,70169,214,19.563,1.408,1.275,919,6738 -Fréterive,73120,563,11.003,1.056,0.956,953,6504 -Ménil-Froger,61264,56,5.241,0.729,0.660,498,6853 -Sivignon,71524,167,12.609,1.130,1.023,815,6596 -Sergenon,39512,53,3.819,0.622,0.563,889,6647 -Sapogne-sur-Marche,8399,138,5.483,0.745,0.675,866,6945 -Saint-Cergues,74229,3601,12.487,1.125,1.019,958,6576 -Gevigney-et-Mercey,70267,476,19.532,1.407,1.274,922,6747 -Grésy-sur-Isère,73129,1248,8.993,0.955,0.865,955,6504 -Chamery,51112,411,5.322,0.734,0.665,769,6895 -Megève,74173,3123,43.947,2.110,1.910,977,6535 -Roche-et-Raucourt,70448,165,13.419,1.166,1.056,903,6726 -Armaillé,49010,313,16.908,1.309,1.185,387,6741 -Massingy,21393,155,9.514,0.982,0.889,820,6759 -Colomieu,1110,131,5.885,0.772,0.699,903,6518 -Les Petites-Loges,51428,490,4.893,0.704,0.637,791,6892 -Les Goulles,21303,13,8.850,0.947,0.857,843,6757 -Maisey-le-Duc,21372,85,12.659,1.133,1.026,829,6754 -Mouilleron,52344,38,5.216,0.727,0.658,860,6736 -Pressigny,52406,201,22.396,1.506,1.364,902,6740 -Arboys en Bugey,1015,640,22.606,1.513,1.370,908,6514 -Buncey,21115,381,27.391,1.666,1.508,822,6745 -Innimond,1190,98,13.250,1.159,1.049,900,6527 -Armix,1019,26,6.970,0.840,0.761,901,6533 -Le Mas,6081,157,32.263,1.808,1.637,1014,6315 -Panissières,42165,2948,26.528,1.639,1.484,802,6518 -Belan-sur-Ource,21058,259,20.459,1.440,1.304,825,6764 -Lavigney,70298,123,10.184,1.016,0.920,912,6738 -Lavours,1208,127,6.215,0.794,0.719,916,6529 -Preigney,70423,108,12.274,1.115,1.010,910,6743 -Lambrey,70293,86,6.090,0.786,0.712,918,6746 -Conzieu,1117,146,7.133,0.850,0.770,901,6519 -Brens,1061,1169,6.886,0.835,0.756,910,6515 -Puilly-et-Charbeaux,8347,238,18.368,1.364,1.235,864,6948 -Chauvirey-le-Châtel,70143,122,12.098,1.107,1.002,904,6744 -Cuzieu,1141,436,4.865,0.702,0.636,907,6529 -Saint-Martin-de-Bavel,1372,438,8.587,0.933,0.845,906,6533 -Augicourt,70035,176,9.184,0.965,0.874,914,6745 -Marignieu,1234,173,3.506,0.596,0.540,911,6525 -Étrochey,21258,225,3.221,0.571,0.517,814,6757 -Ville-la-Grand,74305,8609,4.473,0.673,0.609,949,6572 -Saint-Georges-de-la-Couée,72279,158,11.810,1.094,0.991,519,6747 -Molay,70350,68,7.756,0.886,0.802,903,6742 -Massignieu-de-Rives,1239,613,9.165,0.964,0.873,916,6520 -Bougey,70078,94,8.490,0.927,0.839,916,6747 -Échandelys,63142,260,23.674,1.549,1.402,739,6491 -Obtrée,21465,76,5.215,0.727,0.658,815,6759 -Euville,55184,1673,29.836,1.739,1.575,900,6853 -Saint-Germain-les-Paroisses,1358,434,16.378,1.288,1.166,901,6525 -Larringes,74146,1387,8.054,0.903,0.818,977,6593 -Cheignieu-la-Balme,1100,136,5.962,0.777,0.704,900,6527 -Éclance,10135,101,11.459,1.078,0.976,824,6801 -Andert-et-Condon,1009,336,7.008,0.843,0.763,906,6522 -Marville,55324,497,19.559,1.408,1.275,879,6932 -Virignin,1454,1089,7.871,0.893,0.809,912,6516 -Laifour,8242,460,3.176,0.567,0.513,821,6980 -Fleury-la-Montagne,71200,685,8.822,0.945,0.856,787,6565 -Sonnaz,73288,1829,6.786,0.829,0.751,929,6506 -Bréhéville,55076,173,18.411,1.366,1.237,869,6921 -Courcival,72102,95,9.001,0.955,0.865,504,6797 -Purgerot,70427,345,14.248,1.202,1.088,926,6745 -Arbecey,70025,263,16.526,1.294,1.172,923,6739 -La Guerche-sur-l'Aubois,18108,3322,53.600,2.330,2.110,691,6654 -Courban,21202,178,17.682,1.338,1.211,829,6754 -Boudreville,21090,70,8.034,0.902,0.817,835,6759 -Condes,39163,111,3.584,0.603,0.546,903,6585 -Gurgy-la-Ville,21312,36,12.763,1.137,1.029,844,6754 -Sainte-Maure,10352,1620,20.947,1.457,1.319,778,6804 -Ceyzérieu,1073,1012,19.864,1.419,1.285,915,6530 -Ovanches,70401,132,6.755,0.827,0.749,921,6728 -Bouloire,72042,2068,27.041,1.655,1.498,512,6766 -Aubepierre-sur-Aube,52022,189,43.168,2.091,1.893,844,6754 -Branne,25087,172,6.485,0.811,0.734,960,6702 -Contrevoz,1116,500,14.239,1.201,1.087,901,6525 -Beutal,25059,284,5.915,0.774,0.701,972,6714 -Mont-devant-Sassey,55345,92,8.283,0.916,0.829,859,6928 -Cressin-Rochefort,1133,393,7.799,0.889,0.805,916,6524 -Cernon,39086,258,17.023,1.313,1.189,901,6597 -Mézidon Vallée d'Auge,14431,9817,103.975,3.246,2.939,473,6896 -Morillon,74190,647,14.519,1.213,1.098,985,6561 -Saint-Lambert-et-Mont-de-Jeux,8384,144,10.792,1.046,0.947,820,6937 -Villard-Léger,73315,483,6.794,0.830,0.751,946,6493 -Monterfil,35187,1310,17.312,1.324,1.199,324,6785 -Vaux-lès-Mouzon,8466,78,7.585,0.877,0.794,856,6944 -Lect,39289,353,13.743,1.180,1.068,907,6594 -Villers-sur-Saulnot,70567,135,2.335,0.486,0.440,975,6722 -Escombres-et-le-Chesnois,8153,357,8.317,0.918,0.831,854,6956 -Les Bréseux,25091,483,7.462,0.870,0.788,988,6694 -Beveuge,70072,83,5.244,0.729,0.660,963,6725 -Lucey,21359,61,18.745,1.378,1.248,836,6752 -Bart,25043,2015,3.800,0.621,0.562,982,6717 -Courchaton,70180,450,13.707,1.178,1.067,965,6720 -Étrappe,25226,213,2.874,0.540,0.489,971,6714 -Georfans,70264,60,2.955,0.547,0.495,965,6720 -Mouzay,55364,705,35.850,1.906,1.726,867,6929 -Mathay,25370,2166,14.893,1.228,1.112,986,6714 -Bournois,25083,191,10.462,1.030,0.933,961,6715 -Milly-sur-Bradon,55338,173,10.574,1.035,0.937,860,6927 -Revest-du-Bion,4163,568,43.789,2.106,1.907,900,6338 -Saint-Clair-de-Halouze,61376,865,11.918,1.099,0.995,434,6847 -La Tour-de-Sçay,25566,296,8.898,0.950,0.860,945,6702 -Rémondans-Vaivre,25485,235,9.115,0.961,0.870,980,6706 -Onoz,39394,74,17.103,1.316,1.192,906,6599 -Saulnot,70477,739,26.697,1.645,1.489,971,6728 -Auzelles,63023,354,33.319,1.837,1.663,737,6504 -Mancenans,25365,312,11.989,1.102,0.998,966,6711 -Valonne,25583,248,8.385,0.922,0.835,975,6700 -Appenans,25019,377,4.126,0.647,0.586,970,6713 -Casterets,65134,13,1.855,0.434,0.393,503,6250 -Chancia,39102,222,3.136,0.564,0.511,904,6585 -Montenois,25394,1510,8.134,0.908,0.822,975,6716 -Vescles,39557,196,20.316,1.435,1.299,903,6588 -Écot,25214,506,10.954,1.054,0.954,983,6708 -Pompierre-sur-Doubs,25461,307,8.176,0.910,0.824,966,6711 -Vellechevreux-et-Courbenans,70530,130,9.195,0.965,0.874,969,6720 -Maubec,84071,1914,9.186,0.965,0.874,873,6310 -Berche,25054,481,3.135,0.564,0.511,983,6715 -Fresné-la-Mère,14289,619,8.239,0.914,0.828,473,6870 -Noyant-Villages,49228,5680,300.928,5.522,5.000,474,6717 -Recey-sur-Ource,21519,366,26.915,1.651,1.495,838,6740 -Bavans,25048,3661,8.874,0.948,0.858,983,6716 -Voulaines-les-Templiers,21717,291,23.163,1.532,1.387,836,6752 -Peyrolles-en-Provence,13074,5041,35.029,1.884,1.706,909,6280 -Dortan,1148,1846,18.783,1.380,1.249,903,6585 -Trungy,14716,218,7.206,0.854,0.773,428,6905 -Villers-Patras,21700,104,6.374,0.804,0.728,815,6759 -Faimbe,25232,110,1.978,0.448,0.406,973,6716 -Chamesson,21134,287,15.962,1.272,1.152,815,6741 -Douchy-Montcorbon,45129,1431,50.160,2.254,2.041,709,6766 -Rochefort-sur-Brévon,21526,40,12.047,1.105,1.000,831,6740 -Saint-Ferjeux,70462,78,1.761,0.422,0.382,964,6723 -Onans,25431,356,14.189,1.199,1.086,970,6715 -Geney,25266,120,4.391,0.667,0.604,968,6716 -Goux-lès-Dambelin,25281,285,8.877,0.948,0.858,976,6704 -Saint-Georges-Armont,25516,119,4.728,0.692,0.627,966,6707 -Arbent,1014,3379,23.675,1.549,1.402,907,6583 -Montcusel,39351,163,9.644,0.989,0.895,904,6585 -Saint-Germain-le-Rocheux,21549,79,7.662,0.881,0.798,825,6739 -Vellerot-lès-Belvoir,25595,98,6.067,0.784,0.710,972,6699 -Pont-de-Roide-Vermondans,25463,4200,13.515,1.170,1.059,986,6704 -L'Isle-sur-le-Doubs,25315,3061,10.768,1.045,0.946,970,6713 -Lanthenans,25327,67,3.326,0.581,0.526,973,6707 -Cusance,25183,69,4.049,0.641,0.580,962,6698 -Dambelin,25187,490,12.500,1.125,1.019,976,6701 -Grammont,70273,64,5.902,0.773,0.700,963,6718 -Gémonval,25264,84,3.438,0.590,0.534,969,6722 -Saussy,21589,102,9.339,0.973,0.881,847,6710 -Bonifacio,2A041,3048,140.020,3.767,3.411,1224,6047 -Blussans,25067,195,8.188,0.911,0.825,973,6709 -Hyémondans,25311,198,6.914,0.837,0.758,975,6707 -Fontaine-lès-Clerval,25246,292,11.472,1.078,0.976,959,6705 -Annœullin,59011,10490,8.985,0.954,0.864,693,7048 -Lumeau,28221,160,15.287,1.245,1.127,611,6777 -Pont-sur-l'Ognon,70420,69,4.126,0.647,0.586,955,6717 -Verchaix,74294,737,15.894,1.269,1.149,983,6561 -Saint-Pierre-le-Chastel,63385,430,17.533,1.333,1.207,687,6519 -Peuvillers,55403,54,4.832,0.700,0.634,873,6920 -Aime-la-Plagne,73006,4431,94.236,3.090,2.798,979,6497 -Mondrainville,14438,502,3.189,0.568,0.514,444,6897 -Chamousset,73068,582,6.347,0.802,0.726,951,6503 -Herbeuval,8223,116,7.340,0.862,0.780,869,6946 -Sérignan,34299,6934,27.428,1.667,1.509,722,6245 -Châtel,74063,1246,32.156,1.805,1.634,991,6581 -Combloux,74083,2092,17.220,1.321,1.196,982,6541 -Villersexel,70561,1443,13.290,1.160,1.050,958,6726 -Sancy-les-Cheminots,2698,100,4.500,0.675,0.611,734,6928 -Sainte-Marie,35294,2259,25.062,1.594,1.443,324,6742 -Chassey-lès-Montbozon,70137,215,15.622,1.258,1.139,952,6717 -Saint-Régis-du-Coin,42280,380,20.475,1.440,1.304,814,6463 -Velle-le-Châtel,70536,137,3.069,0.558,0.505,931,6724 -Meilleray,77287,506,7.779,0.888,0.804,729,6857 -Saint-Sulpice,70474,133,3.552,0.600,0.543,960,6724 -Neurey-lès-la-Demie,70381,331,9.692,0.991,0.897,939,6721 -Mailley-et-Chazelot,70324,649,24.996,1.591,1.441,930,6716 -Novel,74203,46,9.415,0.977,0.885,989,6590 -Aignes,31002,250,22.042,1.494,1.353,584,6253 -Villers-la-Ville,70562,142,5.875,0.772,0.699,962,6720 -Les Magny,70317,139,11.585,1.083,0.981,960,6718 -Saint-Saturnin-de-Lenne,12247,302,34.096,1.859,1.683,700,6371 -La Chapelle-d'Abondance,74058,901,37.768,1.956,1.771,989,6586 -Le Magnoray,70316,92,3.646,0.608,0.550,932,6717 -Dampierre-sur-Linotte,70197,803,33.041,1.830,1.657,940,6721 -Esprels,70219,727,15.031,1.234,1.117,950,6722 -Le Bar-sur-Loup,6010,2976,14.457,1.210,1.096,1016,6299 -Gurgy-le-Château,21313,42,17.684,1.339,1.212,843,6748 -Villers-le-Sec,70563,529,11.136,1.062,0.962,943,6723 -Puessans,25472,31,3.550,0.600,0.543,951,6708 -Girgols,15075,77,12.793,1.139,1.031,662,6440 -Échenoz-le-Sec,70208,301,15.459,1.252,1.134,933,6720 -Sainte-Colombe-sur-Seine,21545,944,16.092,1.277,1.156,815,6756 -Brion-sur-Ource,21109,238,14.083,1.195,1.082,825,6754 -Andelarre,70019,133,4.180,0.651,0.589,932,6727 -La Chaume,21159,103,33.060,1.830,1.657,837,6758 -Quiers-sur-Bézonde,45259,1156,16.611,1.297,1.174,655,6767 -Romain,25499,130,4.943,0.708,0.641,955,6712 -Ormenans,70397,75,3.589,0.603,0.546,940,6711 -Beaurecueil,13012,578,10.061,1.010,0.914,904,6274 -Mesnil-Raoul,76434,989,6.620,0.819,0.742,576,6923 -Longchaumois,39297,1179,57.870,2.421,2.192,922,6599 -Malintrat,63204,1132,8.271,0.915,0.828,716,6525 -Les Crozets,39184,202,7.692,0.883,0.799,916,6598 -Leschères,39293,211,8.194,0.911,0.825,916,6598 -Traitiéfontaine,70503,162,6.001,0.780,0.706,932,6709 -Moncey,25382,563,4.984,0.711,0.644,934,6700 -Barly,62084,223,6.142,0.789,0.714,666,7015 -Ruhans,70456,158,4.977,0.710,0.643,935,6710 -Thoires,21628,63,10.325,1.023,0.926,824,6760 -Corcelle-Mieslot,25163,108,6.463,0.809,0.732,941,6701 -Viéthorey,25613,93,7.980,0.899,0.814,959,6707 -Quenoche,70431,250,9.735,0.993,0.899,935,6715 -Fahy-lès-Autrey,70225,112,6.198,0.792,0.717,886,6717 -Prémanon,39441,1182,28.227,1.691,1.531,935,6595 -Moirans-en-Montagne,39333,2092,27.963,1.683,1.524,906,6595 -Vovray-en-Bornes,74313,458,6.514,0.812,0.735,942,6558 -La Malachère,70326,306,5.473,0.745,0.675,930,6712 -Beaumotte-Aubertans,70059,444,13.662,1.177,1.066,941,6707 -Fontenotte,25249,62,5.734,0.762,0.690,948,6703 -Rougemont,25505,1168,18.259,1.360,1.231,954,6718 -Dancevoir,52165,192,25.618,1.611,1.459,839,6757 -Bellevaux,74032,1288,48.846,2.225,2.015,978,6572 -Mésandans,25377,219,5.630,0.755,0.684,953,6709 -Hyèvre-Magny,25312,73,3.390,0.586,0.531,960,6700 -Fontenelle-Montby,25247,93,6.712,0.825,0.747,958,6711 -Beaumont-sur-Sarthe,72029,1957,6.629,0.820,0.742,484,6796 -Sainte-Savine,10362,10301,7.602,0.878,0.795,779,6799 -Thiénans,70501,94,4.217,0.654,0.592,948,6712 -Avilley,25038,166,5.638,0.756,0.684,946,6707 -Puxieux,54441,258,5.612,0.754,0.683,912,6891 -Chaumont-le-Bois,21161,81,7.269,0.858,0.777,819,6759 -Saint-Pierre-à-Arnes,8393,68,8.440,0.925,0.838,808,6910 -Chaugey,21157,18,6.789,0.829,0.751,845,6742 -Nommay,25428,1655,3.253,0.574,0.520,990,6722 -Seytroux,74271,500,18.516,1.370,1.240,977,6574 -Bouhans-lès-Montbozon,70082,140,5.061,0.716,0.648,946,6717 -Mondon,25384,95,4.565,0.680,0.616,949,6709 -Cuiseaux,71157,1850,21.445,1.474,1.335,886,6601 -Battenans-les-Mines,25045,57,2.856,0.538,0.487,948,6704 -Aix-les-Bains,73008,29799,15.870,1.268,1.148,923,6516 -Brémur-et-Vaurois,21104,49,9.469,0.979,0.886,818,6737 -Gouhelans,25279,114,6.194,0.792,0.717,954,6713 -Rillans,25492,93,3.473,0.593,0.537,952,6707 -Loulans-Verchamp,70309,455,8.222,0.913,0.827,944,6710 -Colmier-le-Bas,52137,22,6.082,0.785,0.711,844,6744 -Gondenans-les-Moulins,25277,75,3.940,0.632,0.572,955,6712 -Choisy-la-Victoire,60152,232,10.116,1.012,0.916,669,6919 -Louesme,21357,105,19.113,1.392,1.260,830,6753 -Gondenans-Montby,25276,175,11.844,1.095,0.991,958,6710 -Rutali,2B265,381,17.479,1.331,1.205,1224,6183 -Nâves-Parmelan,74198,975,5.381,0.738,0.668,947,6541 -Villers-Grélot,25624,153,7.143,0.851,0.771,945,6702 -Ollans,25430,38,2.232,0.476,0.431,945,6708 -Moutonne,39375,131,4.009,0.637,0.577,896,6605 -Hyèvre-Paroisse,25313,188,8.782,0.943,0.854,960,6702 -Authoison,70038,318,16.090,1.277,1.156,939,6715 -Cromary,70189,242,5.427,0.742,0.672,933,6701 -Buxerolles,21123,29,11.852,1.096,0.992,849,6748 -Lay,42118,742,12.614,1.131,1.024,798,6541 -Saint-Pourçain-sur-Sioule,3254,5142,35.752,1.903,1.723,724,6574 -Albon,26002,1933,26.071,1.625,1.471,848,6459 -Veuxhaulles-sur-Aube,21674,217,19.251,1.397,1.265,839,6762 -Saint-Saturnin-du-Bois,17394,873,25.313,1.601,1.450,418,6570 -Lapenne,9153,131,22.011,1.493,1.352,601,6230 -Tétaigne,8444,126,5.812,0.767,0.694,852,6953 -Rioz,70447,2236,17.242,1.322,1.197,935,6710 -Vix,21711,108,3.574,0.602,0.545,814,6759 -Monnetier-Mornex,74185,2311,11.399,1.075,0.973,950,6568 -Chalezeule,25112,1291,3.975,0.635,0.575,932,6688 -Prusly-sur-Ource,21510,162,16.064,1.276,1.155,820,6755 -Levesville-la-Chenard,28210,217,14.046,1.193,1.080,611,6799 -Montbozon,70357,597,8.663,0.937,0.848,948,6710 -Cubrial,25181,131,5.833,0.769,0.696,955,6717 -Martinet,85138,1119,18.389,1.365,1.236,343,6626 -Sorans-lès-Breurey,70493,436,14.437,1.209,1.095,929,6702 -Cirey,70154,363,12.931,1.145,1.037,935,6710 -Chanonat,63084,1671,12.722,1.135,1.028,708,6509 -Évrecy,14257,2016,8.395,0.922,0.835,444,6896 -Uzelle,25574,171,11.784,1.093,0.990,962,6714 -Rigney,25490,398,9.487,0.980,0.887,938,6704 -Remoiville,55425,134,9.733,0.993,0.899,873,6932 -Montagney-Servigney,25385,129,6.627,0.819,0.742,948,6714 -Juvigny,74145,645,2.706,0.524,0.474,955,6574 -Saint-Pal-de-Chalencon,43212,1016,29.091,1.717,1.555,772,6472 -Neuvelle-lès-Cromary,70383,387,6.324,0.800,0.724,932,6703 -Fontenois-lès-Montbozon,70243,324,14.435,1.209,1.095,941,6715 -La Côe,70178,518,6.893,0.836,0.757,970,6739 -Faverolles-lès-Lucey,21262,32,10.167,1.015,0.919,842,6747 -Abelcourt,70001,352,7.599,0.877,0.794,945,6751 -Valleroy,25582,163,3.042,0.555,0.503,935,6704 -Larians-et-Munans,70296,252,2.501,0.503,0.455,943,6709 -Lyaud,74157,1713,9.211,0.966,0.875,969,6588 -La Vernaz,74295,337,7.746,0.886,0.802,976,6587 -Travaillan,84134,728,17.878,1.346,1.219,855,6346 -Cenans,70113,121,5.023,0.713,0.646,942,6708 -Mosson,21444,73,7.432,0.868,0.786,822,6757 -Bissey-la-Côe,21077,124,20.000,1.424,1.289,827,6763 -Chambornay-lès-Bellevaux,70118,183,6.069,0.784,0.710,935,6702 -Bonne,74040,3231,8.575,0.932,0.844,956,6568 -Germondans,25269,59,3.719,0.614,0.556,940,6706 -Joigny-sur-Meuse,8237,682,3.894,0.628,0.569,826,6972 -Ponteilla,66145,2767,13.897,1.187,1.075,684,6173 -Murvaux,55365,141,14.150,1.197,1.084,862,6925 -Zehnacker,67555,245,2.193,0.471,0.426,1029,6851 -Budos,33076,780,21.246,1.467,1.328,433,6388 -Othe,54412,32,3.010,0.552,0.500,876,6935 -Verneuil-Grand,55546,201,6.265,0.797,0.722,877,6938 -Boureuilles,55065,119,21.515,1.476,1.336,848,6899 -Essey-la-Côe,54183,82,6.687,0.823,0.745,958,6819 -Haulmé,8217,91,3.642,0.607,0.550,830,6974 -Montcy-Notre-Dame,8298,1620,6.094,0.786,0.712,827,6967 -Fontaine-Uterte,2323,127,5.808,0.767,0.694,727,6979 -Lusignan,86139,2655,38.092,1.965,1.779,479,6603 -Beaufort-en-Argonne,55037,144,11.040,1.058,0.958,851,6934 -Laneuveville-derrière-Foug,54298,147,1.125,0.338,0.306,907,6848 -Ablancourt,51001,162,7.180,0.853,0.772,810,6858 -Leuglay,21346,310,24.744,1.583,1.433,836,6744 -Montholon,89003,2888,49.763,2.245,2.033,720,6757 -Aillevillers-et-Lyaumont,70006,1579,36.694,1.928,1.746,943,6765 -Lacelle,19095,134,21.016,1.459,1.321,605,6504 -Manre,8271,100,18.438,1.367,1.238,823,6908 -Busseaut,21117,48,10.632,1.038,0.940,821,6739 -Aiglemont,8003,1653,8.857,0.947,0.857,828,6965 -La Grandville,8199,814,9.988,1.006,0.911,829,6965 -La Biolle,73043,2473,13.048,1.150,1.041,929,6522 -Souain-Perthes-lès-Hurlus,51553,236,52.872,2.315,2.096,821,6900 -Bouligny,55063,2605,11.056,1.058,0.958,900,6916 -Briou,41027,148,10.205,1.017,0.921,586,6745 -Charrey-sur-Seine,21149,147,12.918,1.144,1.036,816,6764 -Arinthod,39016,1125,27.404,1.666,1.508,896,6591 -Rouvres-en-Woëvre,55443,610,16.870,1.307,1.183,900,6907 -Curzon,85077,503,5.939,0.776,0.703,371,6605 -Nouan-le-Fuzelier,41161,2326,87.814,2.983,2.701,624,6721 -Montliot-et-Courcelles,21435,305,8.812,0.945,0.856,817,6754 -Champanges,74057,979,3.699,0.612,0.554,972,6591 -Buzy-Darmont,55094,564,13.968,1.190,1.077,898,6903 -Avillers,54033,121,5.191,0.725,0.656,900,6916 -Saint-Vincent-sur-Jard,85278,1303,14.664,1.219,1.104,349,6604 -Bors (Canton de Tude-et-Lavalette),16052,264,16.169,1.280,1.159,479,6477 -Montmoyen,21438,81,19.272,1.397,1.265,831,6737 -Lanhères,55280,65,4.588,0.682,0.617,899,6906 -Spincourt,55500,846,27.413,1.667,1.509,899,6920 -Estagel,66071,2028,20.851,1.453,1.316,679,6186 -Chambain,21129,31,9.741,0.993,0.899,842,6747 -Vannaire,21653,55,3.588,0.603,0.546,817,6759 -Boinville-en-Woëvre,55057,70,5.654,0.757,0.685,896,6903 -Marbeuf,27389,455,8.533,0.930,0.842,550,6896 -Villotte-sur-Ource,21706,120,9.499,0.981,0.888,825,6754 -Landrévarzec,29106,1836,20.500,1.441,1.305,171,6798 -La Baume,74030,308,16.957,1.311,1.187,980,6586 -Menesble,21402,10,5.541,0.749,0.678,844,6744 -Soudeilles,19263,306,20.427,1.439,1.303,629,6484 -Saint-Supplet,54489,145,7.380,0.865,0.783,897,6924 -Terrefondrée,21626,62,13.809,1.183,1.071,841,6737 -Éton,55182,208,11.185,1.065,0.964,895,6913 -Le Mesnil-Simon,14425,187,9.583,0.985,0.892,492,6892 -Dommary-Baroncourt,55158,751,12.673,1.133,1.026,899,6916 -Vanvey,21655,232,16.776,1.304,1.181,826,6750 -Montigny-sur-Aube,21432,272,19.884,1.419,1.285,828,6765 -Montégut-Arros,32283,297,15.527,1.254,1.135,471,6258 -Mazille,71290,388,9.549,0.984,0.891,823,6587 -La Francheville,8180,1687,6.646,0.821,0.743,825,6960 -Chardeny,8104,50,4.995,0.711,0.644,817,6927 -Essarois,21250,89,18.272,1.361,1.232,831,6739 -Beaulieu,21052,28,6.585,0.817,0.740,832,6738 -Lignerolles,21350,48,13.550,1.172,1.061,842,6759 -Daigny,8136,350,2.803,0.533,0.483,845,6957 -Ville-sur-Lumes,8483,520,3.120,0.562,0.509,830,6962 -Canouville,76156,326,4.507,0.676,0.612,525,6969 -Saulcy,10366,71,11.301,1.070,0.969,837,6796 -Ognéville,54407,102,4.137,0.647,0.586,927,6823 -Quincieu,38330,103,4.753,0.694,0.628,889,6467 -Remilly-Aillicourt,8357,779,13.342,1.163,1.053,842,6952 -Reyvroz,74222,513,9.797,0.996,0.902,973,6589 -Dannelbourg,57169,495,2.946,0.546,0.494,1011,6857 -Illy,8232,411,15.589,1.257,1.138,840,6961 -Les Ayvelles,8040,902,5.428,0.742,0.672,825,6959 -Bantanges,71018,555,10.963,1.054,0.954,863,6616 -Bligny,10048,163,22.975,1.526,1.382,820,6784 -Le Boullay-les-Deux-Églises,28053,271,13.865,1.185,1.073,578,6840 -Issancourt-et-Rumel,8235,387,5.471,0.745,0.675,833,6963 -Boischampré,61375,1208,47.266,2.188,1.981,478,6848 -La Forclaz,74129,236,4.003,0.637,0.577,977,6587 -Jaucourt,10176,167,6.624,0.819,0.742,824,6796 -Vrigne-Meuse,8492,300,4.433,0.670,0.607,833,6957 -Vivier-au-Court,8488,2979,9.375,0.975,0.883,830,6962 -Villy-le-Pelloux,74307,910,2.952,0.547,0.495,942,6549 -Bar-sur-Aube,10033,4950,15.876,1.268,1.148,825,6792 -Fournès,30116,1078,17.716,1.340,1.213,829,6313 -Cheveuges,8119,417,8.933,0.951,0.861,836,6955 -Hannogne-Saint-Martin,8209,466,4.716,0.691,0.626,833,6956 -Thyez,74278,6105,9.777,0.995,0.901,973,6559 -Voigny,10440,164,7.088,0.847,0.767,831,6796 -Courcelles-sous-Moyencourt,80218,133,6.787,0.829,0.751,632,6969 -Monthenault,2508,154,2.950,0.547,0.495,746,6933 -Couptrain,53080,127,0.693,0.265,0.240,456,6825 -Villers-Semeuse,8480,3591,6.937,0.838,0.759,827,6961 -Spoy,10374,173,10.486,1.031,0.933,817,6793 -La Clusaz,74080,1754,40.794,2.033,1.841,964,6540 -Saint-Marceau,8388,347,4.821,0.699,0.633,825,6956 -Besse-sur-Issole,83018,3050,37.476,1.949,1.765,956,6250 -Noyers-Pont-Maugis,8331,694,9.227,0.967,0.876,841,6955 -Étrépigny,8158,285,4.203,0.653,0.591,827,6954 -Donchery,8142,2144,27.381,1.666,1.508,833,6957 -Marfaux,51348,131,6.693,0.823,0.745,765,6895 -Montheries,52330,62,16.655,1.299,1.176,841,6785 -Bagneux,2043,71,2.174,0.469,0.425,721,6929 -Jessains,10178,276,10.910,1.051,0.952,817,6797 -Ratte,71367,365,9.084,0.959,0.868,878,6617 -Lignol-le-Château,10197,200,21.796,1.486,1.345,838,6790 -Ampus,83003,944,83.648,2.911,2.636,976,6293 -Restigné,37193,1264,20.297,1.434,1.298,488,6691 -Francheval,8179,611,19.738,1.414,1.280,849,6956 -Dognen,64201,215,6.787,0.829,0.751,396,6248 -Sapogne-et-Feuchères,8400,516,10.691,1.041,0.943,832,6952 -Nouvion-sur-Meuse,8327,2255,9.058,0.958,0.867,829,6959 -Chevenoz,74073,579,10.489,1.031,0.933,977,6588 -Chalandry-Elaire,8096,649,5.175,0.724,0.656,829,6960 -Saint-Christoly-Médoc,33383,288,24.162,1.565,1.417,401,6478 -Roscoff,29239,3363,6.468,0.810,0.733,185,6869 -Saint-Pierre-d'Aurillac,33463,1329,6.592,0.817,0.740,448,6390 -Marin,74166,1758,5.573,0.751,0.680,972,6593 -Meurville,10242,180,16.428,1.290,1.168,822,6789 -Gernelle,8187,315,4.824,0.699,0.633,830,6964 -Montmartin-le-Haut,10252,49,1.647,0.409,0.370,816,6791 -Arsonval,10012,330,7.631,0.879,0.796,820,6796 -Fravaux,10160,54,3.623,0.606,0.549,821,6795 -Saint-Laurent,8385,1134,4.302,0.660,0.598,827,6963 -Glaire,8194,904,6.530,0.813,0.736,837,6957 -Saint-Germain-d'Esteuil,33412,1218,44.851,2.132,1.930,392,6464 -Urville,10390,136,12.263,1.115,1.010,827,6787 -Lesparre-Médoc,33240,5794,36.855,1.932,1.749,396,6474 -Bazeilles,8053,2426,35.935,1.908,1.728,843,6958 -Rouvres-les-Vignes,10330,106,8.261,0.915,0.828,836,6796 -Lumes,8263,1155,6.120,0.787,0.713,829,6959 -Caullery,59140,448,2.505,0.504,0.456,726,6997 -Saint-Aignan,8377,147,7.726,0.885,0.801,833,6954 -Beaumont-en-Verdunois,55039,0,7.806,0.889,0.805,876,6912 -Ailleville,10002,258,4.925,0.706,0.639,825,6795 -Dom-le-Mesnil,8140,1092,7.907,0.895,0.810,833,6957 -Carignan,8090,2908,14.115,1.196,1.083,856,6949 -Sainte-Hélène-sur-Isère,73241,1184,14.452,1.210,1.096,964,6505 -Couvignon,10113,204,13.436,1.167,1.057,826,6788 -Vergies,80788,158,8.030,0.902,0.817,615,6982 -Villers-sur-Bar,8481,243,5.433,0.742,0.672,833,6954 -Colombey les Deux Églises,52140,723,84.511,2.926,2.649,849,6794 -Cléry-le-Grand,55118,90,7.205,0.854,0.773,854,6918 -Haumont-près-Samogneux,55239,0,10.931,1.052,0.952,873,6909 -Les Mureaux,78440,32575,12.378,1.120,1.014,621,6875 -Fleury-devant-Douaumont,55189,0,10.347,1.024,0.927,880,6902 -Rousset,13087,4811,19.531,1.407,1.274,910,6270 -Queyrac,33348,1369,30.915,1.770,1.603,391,6482 -Pioggiola,2B235,86,18.621,1.374,1.244,1194,6178 -Jau-Dignac-et-Loirac,33208,986,94.205,3.089,2.797,387,6489 -Ornes,55394,6,18.560,1.371,1.241,877,6910 -Montbré,51375,258,3.077,0.558,0.505,775,6899 -Gaillan-en-Médoc,33177,2295,42.277,2.070,1.874,383,6475 -Talais,33521,731,39.327,1.996,1.807,384,6492 -Crupies,26111,98,13.347,1.163,1.053,876,6387 -Peumerit,29159,800,19.674,1.412,1.278,159,6786 -Ordonnac,33309,509,10.138,1.014,0.918,396,6474 -Champneuville,55099,120,11.929,1.099,0.995,873,6909 -Naujac-sur-Mer,33300,1073,97.958,3.150,2.852,383,6475 -Brabant-sur-Meuse,55070,125,6.870,0.834,0.755,870,6910 -Bras-sur-Meuse,55073,705,13.749,1.180,1.068,876,6904 -Barzan,17034,471,26.441,1.637,1.482,393,6497 -Couquèques,33134,267,6.507,0.812,0.735,399,6478 -Civrac-en-Médoc,33128,678,18.461,1.368,1.239,392,6478 -Cuguron,31158,187,7.061,0.846,0.766,496,6227 -Bégadan,33038,915,31.418,1.784,1.615,391,6481 -Soulac-sur-Mer,33514,2716,40.637,2.029,1.837,389,6501 -Rennepont,52419,138,12.175,1.111,1.006,838,6784 -Moirey-Flabas-Crépion,55341,131,14.569,1.215,1.100,876,6912 -Chemillé-sur-Dême,37068,720,33.693,1.848,1.673,521,6731 -Villers-en-Cauchies,59622,1278,8.945,0.952,0.862,727,7013 -Vauquois,55536,18,8.120,0.907,0.821,853,6902 -Noyelles-sous-Bellonne,62627,813,4.268,0.658,0.596,700,7023 -Valeyrac,33538,552,29.169,1.719,1.556,402,6486 -Saint-Vivien-de-Médoc,33490,1766,53.247,2.323,2.103,393,6496 -Palise,25444,141,2.077,0.459,0.416,933,6700 -Marre,55321,162,10.197,1.016,0.920,866,6902 -Dercé,86093,154,12.349,1.119,1.013,484,6652 -Baroville,10032,313,17.426,1.329,1.203,831,6786 -Eix,55171,254,12.007,1.103,0.999,877,6899 -Charny-sur-Meuse,55102,522,12.638,1.132,1.025,869,6905 -Ambérac,16008,327,12.121,1.108,1.003,470,6531 -Esnes-en-Argonne,55180,136,14.798,1.224,1.108,861,6905 -Stuckange,57767,1051,4.519,0.677,0.613,934,6919 -Colombé-le-Sec,10103,147,8.818,0.945,0.856,833,6794 -Montier-en-l'Isle,10250,240,10.606,1.037,0.939,824,6796 -Arconville,10007,107,14.913,1.229,1.113,826,6785 -Argançon,10008,105,8.191,0.911,0.825,820,6796 -Balazé,35015,2249,36.455,1.922,1.740,387,6799 -La Grande-Résie,70443,83,4.724,0.692,0.627,894,6695 -Messincourt,8289,615,8.157,0.909,0.823,856,6955 -La Cambe,14124,569,11.262,1.068,0.967,406,6925 -Bossancourt,10050,207,6.970,0.840,0.761,821,6799 -Vertheuil,33545,1272,21.835,1.487,1.346,401,6468 -Cheppy,55113,146,14.882,1.228,1.112,854,6903 -Vacherauville,55523,175,7.225,0.856,0.775,873,6908 -Consenvoye,55124,306,16.180,1.280,1.159,865,6913 -Forges-sur-Meuse,55193,121,15.903,1.269,1.149,867,6908 -Montzéville,55355,156,17.702,1.339,1.212,857,6901 -Dannevoux,55146,227,14.413,1.208,1.094,865,6913 -Stenay,55502,2673,27.477,1.669,1.511,859,6940 -Malancourt,55313,62,16.567,1.296,1.173,859,6909 -Ville-devant-Chaumont,55556,50,4.219,0.654,0.592,876,6911 -Albières,11007,116,17.374,1.327,1.201,653,6204 -Montfaucon-d'Argonne,55346,315,23.603,1.546,1.400,857,6909 -Épinonville,55174,70,14.101,1.195,1.082,849,6909 -Buffignécourt,70106,119,6.432,0.807,0.731,924,6751 -Belleville-sur-Meuse,55043,3092,10.150,1.014,0.918,878,6900 -Bayel,10035,765,23.062,1.529,1.384,829,6791 -Avocourt,55023,110,14.695,1.220,1.105,858,6901 -Engente,10137,38,5.115,0.720,0.652,831,6801 -Azannes-et-Soumazannes,55024,166,18.470,1.368,1.239,882,6916 -Curmont,52157,12,2.974,0.549,0.497,846,6796 -Rizaucourt-Buchey,52426,124,15.192,1.241,1.124,837,6801 -Radinghem-en-Weppes,59487,1365,6.844,0.833,0.754,695,7059 -Chattancourt,55106,182,10.276,1.020,0.924,867,6905 -La Ferté-Milon,2307,2100,18.979,1.387,1.256,709,6894 -Sainte-Marie,8390,81,5.542,0.749,0.678,820,6920 -Mévouillon,26181,241,29.331,1.724,1.561,896,6349 -Arrentières,10011,219,13.937,1.188,1.076,831,6796 -Fontaine,10150,259,5.718,0.761,0.689,829,6793 -Véry,55549,94,11.804,1.094,0.991,849,6908 -Bressolles,3040,1099,23.612,1.547,1.401,721,6605 -Massiges,51355,48,8.059,0.904,0.818,829,6899 -Kerbors,22085,314,7.035,0.844,0.764,247,6878 -Le Porge,33333,3030,148.781,3.883,3.516,381,6425 -Minaucourt-le-Mesnil-lès-Hurlus,51368,50,23.081,1.529,1.384,820,6899 -Lachapelle-en-Blaisy,52254,78,16.734,1.302,1.179,844,6788 -Hourtin,33203,3487,221.803,4.741,4.293,390,6466 -Saint-Jean-d'Illac,33422,8156,120.894,3.500,3.169,394,6425 -Longchamp-sur-Aujon,10203,422,16.611,1.297,1.174,834,6783 -Marcheprime,33555,4663,24.668,1.581,1.431,391,6408 -Lanton,33229,6725,137.705,3.735,3.382,383,6423 -Le Temple,33528,605,72.330,2.707,2.451,381,6427 -Lège-Cap-Ferret,33236,8303,95.580,3.112,2.818,380,6422 -Mézières-sur-Ponthouin,72196,693,18.067,1.353,1.225,498,6795 -Saint-Thomas-en-Argonne,51519,38,4.430,0.670,0.607,837,6902 -Arcachon,33009,11121,7.705,0.884,0.800,372,6404 -Valcourt,52500,617,3.676,0.610,0.552,840,6837 -Ville-sur-Tourbe,51640,232,11.213,1.066,0.965,829,6899 -Cissac-Médoc,33125,2101,23.574,1.545,1.399,402,6465 -Alzonne,11009,1538,22.239,1.501,1.359,630,6238 -Pertuis,84089,20135,59.351,2.452,2.220,910,6288 -Bouin,85029,2155,52.155,2.299,2.082,323,6665 -Dontrien,51216,263,12.676,1.133,1.026,805,6909 -Hecq,59296,357,1.361,0.371,0.336,746,7008 -Saumos,33503,538,57.771,2.419,2.190,390,6430 -Brach,33070,628,28.790,1.708,1.546,385,6445 -Château-Renard,45083,2227,40.448,2.024,1.833,693,6754 -Salaunes,33494,996,43.544,2.100,1.901,393,6428 -Val-et-Châtillon,54540,601,18.324,1.363,1.234,1001,6834 -Sainte-Marie-à-Py,51501,198,26.819,1.648,1.492,813,6903 -Siersthal,57651,669,10.594,1.036,0.938,1016,6891 -Les Achards,85152,5001,30.602,1.761,1.594,346,6625 -Saint-Dizier-les-Domaines,23188,190,15.928,1.270,1.150,628,6579 -Soullans,85284,4220,41.502,2.051,1.857,331,6644 -Nouzonville,8328,5887,10.989,1.055,0.955,828,6969 -Sormonne,8429,547,4.766,0.695,0.629,812,6971 -Saint-Souplet-sur-Py,51517,128,21.086,1.462,1.324,805,6903 -Le Tremblay-Omonville,27658,337,5.402,0.740,0.670,547,6892 -Saint-Martin-l'Heureux,51503,84,13.738,1.180,1.068,805,6909 -Tannay,8439,157,13.964,1.189,1.077,831,6935 -Les Premiers Sapins,25424,1561,52.472,2.306,2.088,950,6668 -Larnod,25328,772,4.090,0.644,0.583,926,6677 -Flaignes-Havys,8169,120,13.780,1.182,1.070,803,6969 -Villeneuve-en-Retz,44021,4931,74.433,2.746,2.486,328,6667 -Coëx,85070,3146,39.930,2.011,1.821,342,6634 -Sallertaine,85280,3070,49.852,2.247,2.034,317,6652 -Courtisols,51193,2441,65.725,2.581,2.337,817,6873 -Saint-Maixent-sur-Vie,85239,1055,10.792,1.046,0.947,329,6638 -Montigny-lès-Cherlieu,70362,157,21.256,1.468,1.329,913,6745 -Renwez,8361,1700,16.258,1.283,1.162,815,6976 -Vairé,85298,1660,28.282,1.693,1.533,335,6625 -Ghissignies,59259,525,4.499,0.675,0.611,744,7016 -Noiron-sur-Bèze,21459,239,11.823,1.094,0.991,875,6708 -Lux,21361,532,23.069,1.529,1.384,870,6712 -Bourdainville,76132,462,5.348,0.736,0.666,552,6956 -Selongey,21599,2413,46.536,2.171,1.966,864,6730 -Bois-de-Céné,85024,1991,42.723,2.081,1.884,327,6666 -Haimps,17188,465,18.609,1.373,1.243,451,6532 -Cernion,8094,58,6.665,0.822,0.744,801,6967 -Notre-Dame-de-Riez,85189,2071,14.766,1.223,1.107,326,6637 -Montigny-Mornay-Villeneuve-sur-Vingeanne,21433,394,30.950,1.771,1.603,887,6721 -Véronnes,21667,395,19.291,1.398,1.266,869,6720 -Spoy,21614,369,12.016,1.103,0.999,863,6705 -Vraignes-lès-Hornoy,80813,94,5.709,0.761,0.689,622,6969 -La Bernerie-en-Retz,44012,2944,6.037,0.782,0.708,320,6677 -Deville,8139,1041,7.843,0.891,0.807,823,6975 -Harcy,8212,505,19.158,1.393,1.261,813,6970 -Brunémont,59115,712,2.030,0.454,0.411,710,7019 -Commequiers,85071,3444,40.745,2.032,1.840,331,6644 -Villamée,35357,317,10.903,1.051,0.952,387,6824 -Sécheval,8408,552,13.833,1.184,1.072,820,6976 -Étalle,8155,102,4.400,0.668,0.605,804,6972 -Bourg-Fidèle,8078,866,14.799,1.225,1.109,814,6976 -Chaource,10080,1077,31.121,1.776,1.608,787,6770 -Haudrecy,8216,302,3.319,0.580,0.525,817,6965 -Broye-les-Loups-et-Verfontaine,70100,124,6.782,0.829,0.751,884,6704 -Tournes,8457,1076,8.216,0.912,0.826,819,6970 -Nieul-le-Dolent,85161,2468,28.064,1.686,1.527,353,6620 -Broissia,39080,66,3.015,0.553,0.501,888,6586 -Charleville-Mézières,8105,46682,31.669,1.791,1.622,823,6971 -Notre-Dame-d'Épine,27441,81,1.720,0.417,0.378,524,6902 -Cheuge,21167,125,8.850,0.947,0.857,880,6700 -Le Perrier,85172,1989,33.032,1.829,1.656,320,6645 -Orléans,45234,114782,27.656,1.674,1.516,619,6748 -Cliron,8125,361,6.211,0.793,0.718,818,6971 -Maubert-Fontaine,8282,1036,10.210,1.017,0.921,803,6980 -Le Girouard,85099,1026,25.513,1.608,1.456,345,6619 -L'Échelle,8149,134,9.917,1.002,0.907,805,6967 -Ouville,50389,449,11.457,1.077,0.975,379,6890 -Aizenay,85003,9314,82.101,2.884,2.611,353,6635 -Chef-Haut,88100,46,3.187,0.568,0.514,922,6809 -Blombay,8071,137,9.453,0.979,0.886,806,6970 -Tournon-sur-Rhône,7324,10234,21.442,1.474,1.335,845,6439 -Givrand,85100,2129,11.800,1.093,0.990,325,6631 -Montcornet,8297,297,11.475,1.078,0.976,822,6972 -Talmont-Saint-Hilaire,85288,7510,90.443,3.027,2.741,349,6613 -La Barre,70050,102,1.985,0.448,0.406,939,6706 -Somloire,49336,897,31.841,1.796,1.626,424,6666 -La Barre-de-Monts,85012,2193,28.225,1.691,1.531,311,6657 -Occey,52360,153,16.957,1.311,1.187,871,6723 -Saint-Hilaire-la-Forêt,85231,817,10.983,1.055,0.955,351,6607 -Doulevant-le-Petit,52179,29,3.020,0.553,0.501,842,6818 -La Creuse,70186,75,5.127,0.721,0.653,952,6736 -Ham-les-Moines,8206,378,3.113,0.562,0.509,813,6967 -Dommarien,52170,159,17.962,1.349,1.221,880,6735 -Cussey-sur-Lison,25185,66,5.678,0.758,0.686,923,6666 -Murtin-et-Bogny,8312,179,7.026,0.844,0.764,810,6971 -La Limouzinière,44083,2401,29.615,1.732,1.568,352,6664 -Fontenelle,21281,163,10.185,1.016,0.920,876,6714 -Cours,69066,4519,33.808,1.851,1.676,805,6561 -Saint-Gervais,85221,2621,42.418,2.073,1.877,318,6660 -Éteignières,8156,519,11.807,1.094,0.991,801,6976 -Beaumont-sur-Vingeanne,21053,198,11.775,1.092,0.989,875,6708 -Maché,85130,1483,18.224,1.359,1.230,344,6642 -Sainte-Flaive-des-Loups,85211,2373,36.336,1.919,1.737,353,6620 -Saint-Nectaire,63380,728,33.493,1.842,1.668,703,6501 -Choilley-Dardenay,52126,163,17.773,1.342,1.215,880,6732 -Melleran,79175,516,20.032,1.425,1.290,468,6561 -Saint-Geneys-près-Saint-Paulien,43187,313,16.844,1.306,1.182,768,6452 -La Chaize-Giraud,85045,1061,2.813,0.534,0.483,333,6628 -Fumay,8185,3476,37.575,1.951,1.766,822,6990 -Villey-sur-Tille,21702,265,12.747,1.136,1.029,861,6724 -Landevieille,85120,1370,13.831,1.184,1.072,335,6629 -La Chapelle-Hermier,85054,887,18.136,1.356,1.228,335,6630 -La Guérinière,85106,1359,7.816,0.890,0.806,306,6664 -Menomblet,85141,662,21.289,1.469,1.330,418,6635 -Beaulieu-sous-la-Roche,85016,2199,25.754,1.615,1.462,345,6628 -Vireux-Molhain,8486,1523,8.380,0.921,0.834,824,7000 -Taillette,8436,401,15.209,1.241,1.124,803,6980 -Anchamps,8011,220,2.218,0.474,0.429,820,6981 -Saint-Mathurin,85250,2245,23.954,1.558,1.411,337,6619 -Escobecques,59208,299,1.849,0.433,0.392,694,7058 -Venansault,85300,4657,44.753,2.129,1.928,349,6634 -Landeronde,85118,2272,18.226,1.359,1.230,353,6625 -Sainte-Foy,85214,2115,15.767,1.264,1.144,337,6616 -Poiroux,85179,1082,25.806,1.617,1.464,351,6607 -Plan-d'Aups-Sainte-Baume,83093,2113,24.692,1.582,1.432,925,6252 -Vals-des-Tilles,52094,161,37.309,1.944,1.760,858,6733 -Igon,64270,964,5.388,0.739,0.669,436,6236 -Monthermé,8302,2337,32.536,1.816,1.644,827,6984 -Marsannay-le-Bois,21391,836,12.116,1.108,1.003,856,6705 -Les Moutiers-en-Retz,44106,1576,9.783,0.996,0.902,323,6671 -Saint-Révérend,85268,1425,15.805,1.265,1.145,333,6633 -Maresches,59381,828,4.802,0.698,0.632,740,7023 -Revin,8363,6433,38.680,1.980,1.793,826,6985 -Crécey-sur-Tille,21211,147,10.919,1.052,0.952,860,6719 -Vétrigne,90103,636,2.450,0.498,0.451,991,6738 -Sorbiers,42302,8009,12.121,1.108,1.003,814,6487 -Poinson-lès-Grancey,52395,41,11.624,1.085,0.982,848,6739 -Jeu-les-Bois,36089,392,38.891,1.985,1.797,605,6624 -Saint-Jean-de-Monts,85234,8636,62.464,2.516,2.278,317,6651 -Le Fenouiller,85088,4668,17.934,1.348,1.220,328,6634 -Haybes,8222,1892,28.237,1.691,1.531,824,6994 -Gué-d'Hossus,8202,533,5.241,0.729,0.660,813,6987 -Tessel,14684,247,5.587,0.752,0.681,439,6900 -Saint-Urbain,85273,1788,16.552,1.295,1.173,324,6655 -Châteauneuf,85062,1027,16.104,1.277,1.156,324,6661 -Montigny-sur-Meuse,8304,80,8.024,0.902,0.817,824,6994 -Monoblet,30172,711,21.366,1.471,1.332,773,6320 -Vireux-Wallerand,8487,1990,21.152,1.464,1.326,825,6993 -Gesnes-en-Argonne,55208,59,7.050,0.845,0.765,848,6915 -Ambutrix,1008,750,5.184,0.725,0.656,881,6541 -Renève,21522,441,14.381,1.207,1.093,881,6701 -Marcilly-sur-Tille,21383,1665,7.257,0.857,0.776,858,6713 -Narcy,58189,531,29.616,1.732,1.568,703,6683 -Saint-Hilaire-de-Riez,85226,11049,48.792,2.223,2.013,320,6645 -Brognard,25097,481,2.902,0.542,0.491,990,6721 -Avelanges,21039,34,6.033,0.782,0.708,851,6723 -Trédion,56254,1252,25.900,1.620,1.467,278,6758 -Monthois,8303,368,12.089,1.107,1.002,825,6916 -Roquepine,32350,40,3.782,0.619,0.560,498,6315 -Frédéric-Fontaine,70254,260,3.438,0.590,0.534,972,6733 -Condé-lès-Autry,8128,71,7.973,0.899,0.814,833,6905 -Lançon,8245,34,8.231,0.913,0.827,836,6912 -Passenans,39407,350,4.960,0.709,0.642,902,6637 -Saint-Jean-de-Boiseau,44166,5692,11.499,1.079,0.977,345,6689 -Beneuvre,21063,95,15.549,1.255,1.136,847,6736 -Cornay,8131,62,11.020,1.057,0.957,842,6916 -Labastide-Villefranche,64291,349,15.322,1.246,1.128,373,6267 -Corsept,44046,2684,34.483,1.869,1.692,319,6700 -Curtil-Saint-Seine,21218,116,12.188,1.111,1.006,847,6708 -Landres-et-Saint-Georges,8246,81,20.486,1.441,1.305,844,6917 -Bouvignies,59105,1540,8.705,0.939,0.850,715,7037 -Brains,44024,2790,15.477,1.252,1.134,340,6687 -Paimbœuf,44116,3144,5.658,0.757,0.685,322,6701 -Jancigny,21323,144,6.959,0.840,0.761,883,6699 -Frossay,44061,3227,59.560,2.457,2.225,332,6693 -Chaumes-en-Retz,44005,6691,77.647,2.805,2.540,329,6686 -Colombier-le-Vieux,7069,661,15.718,1.262,1.143,837,6443 -Bézouotte,21072,205,1.107,0.335,0.303,877,6701 -Saint-Étienne-de-Montluc,44158,6952,57.554,2.415,2.187,344,6697 -Cusey,52158,281,23.452,1.541,1.395,878,6725 -Mousseaux-Neuville,27421,651,14.258,1.202,1.088,580,6871 -Autainville,41006,440,25.242,1.599,1.448,582,6759 -Chambry,2157,840,8.932,0.951,0.861,750,6946 -Sautron,44194,7915,17.695,1.339,1.212,343,6697 -Brécy-Brières,8082,74,8.754,0.942,0.853,829,6915 -Saint-Père-en-Retz,44187,4553,64.020,2.547,2.306,312,6695 -Champvoux,58056,312,10.804,1.046,0.947,704,6670 -Gratreuil,51280,30,4.808,0.698,0.632,824,6907 -Exermont,8161,41,18.237,1.359,1.230,849,6910 -Ansauville,54019,84,6.938,0.838,0.759,909,6861 -Indre,44074,3915,4.755,0.694,0.628,348,6687 -Essé,35108,1108,23.523,1.544,1.398,369,6773 -Chémery-Chéhéry,8115,581,27.901,1.681,1.522,833,6947 -Imécourt,8233,49,8.539,0.930,0.842,843,6923 -Sepvret,79313,608,17.069,1.315,1.191,463,6579 -Le Pellerin,44120,5050,31.059,1.774,1.606,328,6699 -Belverne,70064,145,6.238,0.795,0.720,976,6731 -Biron,64131,669,4.031,0.639,0.579,397,6271 -Saint-Sernin-sur-Rance,12248,628,11.166,1.064,0.963,670,6311 -Marvaux-Vieux,8280,73,11.563,1.082,0.980,820,6910 -Urcerey,90098,222,3.370,0.584,0.529,985,6729 -Germont,8186,47,4.891,0.704,0.637,838,6927 -Le Louverot,39304,213,1.743,0.420,0.380,898,6629 -La Thieuloye,62813,493,4.115,0.646,0.585,661,7035 -Mouron,8310,77,6.402,0.805,0.729,830,6913 -Areines,41003,616,4.861,0.702,0.636,559,6746 -Rivière-les-Fosses,52425,200,18.243,1.360,1.231,868,6727 -Saint-Paul-sur-Ubaye,4193,193,206.078,4.569,4.137,992,6385 -Goult,84051,1113,23.837,1.554,1.407,877,6310 -Orvault,44114,25931,27.841,1.680,1.521,349,6695 -La Neuville-à-Maire,8317,129,7.305,0.860,0.779,833,6943 -Fontaine-Française,21277,897,30.646,1.762,1.595,881,6718 -Autrey-lès-Gray,70041,372,32.085,1.803,1.632,884,6714 -Falaise,8164,329,9.501,0.981,0.888,825,6921 -Roy-Boissy,60557,323,10.981,1.055,0.955,619,6942 -Notre-Dame-du-Pré,73190,250,18.203,1.358,1.230,983,6494 -Marsas,65300,71,2.700,0.523,0.474,473,6220 -Cheix-en-Retz,44039,1047,8.362,0.920,0.833,340,6687 -Teilhède,63427,443,12.037,1.104,1.000,703,6542 -Saint-Seine-sur-Vingeanne,21574,395,18.793,1.380,1.249,881,6714 -Saint-Paul-Mont-Penit,85260,811,16.883,1.308,1.184,346,6644 -Corbie,80212,6288,16.343,1.287,1.165,661,6981 -Arceau,21016,869,21.643,1.481,1.341,869,6697 -Palluau,85169,1089,7.561,0.875,0.792,347,6644 -Saint-Étienne-de-Mer-Morte,44157,1715,27.542,1.671,1.513,340,6657 -La Chapelle-Palluau,85055,952,13.034,1.149,1.040,351,6643 -Reims-la-Brûlée,51455,232,6.487,0.811,0.734,821,6848 -Legé,44081,4493,61.724,2.501,2.264,357,6652 -Savigny,50569,446,10.311,1.022,0.925,383,6895 -Champigneulle,8098,62,7.712,0.884,0.800,842,6919 -Saint-Fulgent,85215,3787,36.859,1.933,1.750,384,6646 -Poisvilliers,28301,443,10.656,1.039,0.941,585,6822 -Saint-Philbert-de-Bouaine,85262,3375,50.485,2.262,2.048,354,6665 -Percey-le-Grand,70406,88,13.979,1.190,1.077,878,6725 -Hermanville-sur-Mer,14325,3064,8.188,0.911,0.825,457,6912 -Viévigne,21682,246,13.532,1.171,1.060,871,6706 -Apremont,8017,118,12.775,1.138,1.030,846,6910 -Lagnicourt-Marcel,62484,335,8.468,0.926,0.838,695,7005 -Boussenois,21096,123,12.516,1.126,1.019,868,6726 -Breux,55077,257,13.034,1.149,1.040,871,6944 -Longechaux,25342,77,5.106,0.719,0.651,962,6680 -Vaux-en-Dieulet,8463,53,10.957,1.054,0.954,842,6933 -Saint-Morel,8392,213,11.993,1.102,0.998,823,6919 -Saint-Pierre-d'Eyraud,24487,1785,26.233,1.630,1.476,489,6428 -Marcq,8274,101,10.586,1.036,0.938,839,6916 -Mussy-la-Fosse,21448,86,4.408,0.668,0.605,808,6713 -Bourberain,21094,389,30.837,1.768,1.601,870,6712 -La Planche,44127,2610,24.486,1.575,1.426,361,6665 -Saint-André-Goule-d'Oie,85196,1818,20.469,1.440,1.304,379,6650 -Étouvans,25224,822,6.573,0.816,0.739,979,6714 -Saint-Juvin,8383,105,9.332,0.972,0.880,842,6916 -Chazeuil,21163,200,18.631,1.374,1.244,874,6721 -Juvignies,60328,322,8.132,0.908,0.822,633,6938 -Challans,85047,20303,65.448,2.575,2.331,335,6645 -Condette,62235,2523,16.460,1.291,1.169,604,7065 -Saint-Julien-de-la-Liègue,27553,409,4.684,0.689,0.624,575,6896 -Oisilly,21467,131,5.993,0.779,0.705,879,6706 -Sacquenay,21536,284,22.161,1.498,1.356,871,6723 -Vallet,44212,8953,58.312,2.431,2.201,383,6682 -Steene,59579,1335,10.325,1.023,0.926,656,7093 -Fêche-l'Église,90045,780,3.961,0.634,0.574,998,6720 -Abidos,64003,232,3.162,0.566,0.512,406,6263 -Séchault,8407,63,10.960,1.054,0.954,825,6907 -Foucrainville,27259,73,5.243,0.729,0.660,578,6872 -Yoncq,8502,107,15.660,1.260,1.141,844,6944 -Oudincourt,52371,145,7.558,0.875,0.792,856,6795 -Baulny,55033,15,3.925,0.631,0.571,846,6910 -Omicourt,8334,42,7.397,0.866,0.784,833,6951 -Lœuilley,70305,107,5.639,0.756,0.684,882,6709 -Bouconville,8074,52,15.421,1.250,1.132,827,6906 -Heucourt-Croquoison,80437,122,4.984,0.711,0.644,621,6981 -Autry,8036,119,16.468,1.292,1.170,833,6906 -Montcheutin,8296,138,9.641,0.988,0.895,829,6911 -Authe,8033,90,9.589,0.986,0.893,838,6933 -Le Mont-Dieu,8300,16,18.729,1.378,1.248,832,6941 -Voillans,25629,208,10.199,1.017,0.921,957,6702 -Cugand,85076,3466,13.769,1.181,1.069,376,6674 -Villeneuve-la-Comptal,11430,1278,15.521,1.254,1.135,612,6241 -Sommauthe,8424,115,9.864,1.000,0.905,846,6935 -Saint-Remy-en-Bouzemont-Saint-Genest-et-Isson,51513,519,21.991,1.493,1.352,821,6834 -Autrecourt-et-Pourron,8034,344,11.910,1.099,0.995,845,6946 -Geneston,44223,3638,8.335,0.919,0.832,359,6670 -Bayenghem-lès-Éperlecques,62087,1013,4.544,0.679,0.615,637,7079 -Chavagnes-en-Paillers,85065,3543,40.396,2.023,1.832,382,6655 -Chepoix,60146,416,9.054,0.958,0.867,659,6946 -Mouzillon,44108,2810,16.405,1.289,1.167,379,6676 -La Marne,44090,1479,17.985,1.350,1.222,338,6666 -Montgon,8301,64,8.198,0.911,0.825,823,6937 -Nouart,8326,151,17.801,1.343,1.216,852,6931 -Boulaincourt,88066,71,2.548,0.508,0.460,928,6813 -Vendresse,8469,509,43.368,2.096,1.898,833,6945 -La Boissière,14082,192,2.046,0.455,0.412,491,6895 -Essertenne-et-Cecey,70220,411,11.569,1.083,0.981,884,6704 -L'Herbergement,85108,3145,16.980,1.312,1.188,367,6659 -Savigny-sur-Aisne,8406,373,10.337,1.023,0.926,823,6919 -Le Montsaugeonnais,52405,1277,33.695,1.848,1.673,870,6734 -La Bruffière,85039,3921,40.742,2.032,1.840,381,6670 -Raucourt-et-Flaba,8354,857,21.815,1.487,1.346,844,6948 -Boisné-La Tude,16082,708,34.497,1.870,1.693,481,6485 -Artaise-le-Vivier,8023,63,8.455,0.926,0.838,836,6942 -Charpentry,55103,22,4.364,0.665,0.602,850,6908 -La Haie-Fouassière,44070,4648,11.881,1.097,0.993,369,6684 -Villeneuve-sur-Verberie,60680,640,8.103,0.906,0.820,679,6908 -Saint-Colomban,44155,3333,35.886,1.907,1.727,359,6670 -Saint-Léger-les-Vignes,44171,1776,6.778,0.829,0.751,344,6681 -Froidfond,85095,1831,21.819,1.487,1.346,340,6657 -La Chevrolière,44041,5490,32.551,1.816,1.644,354,6673 -Saint-Denis-la-Chevasse,85208,2299,40.031,2.014,1.824,362,6645 -Saint-Aubin-des-Ormeaux,85198,1341,12.669,1.133,1.026,390,6665 -Les Hermaux,48073,102,17.632,1.337,1.211,712,6375 -Challerange,8097,450,11.055,1.058,0.958,827,6912 -Landébia,22096,493,3.568,0.601,0.544,306,6839 -Bar-lès-Buzancy,8049,126,9.267,0.969,0.877,844,6931 -Sy,8434,52,7.956,0.898,0.813,836,6935 -Chassignolles,36043,567,30.277,1.751,1.585,616,6608 -Verpel,8470,70,15.294,1.245,1.127,839,6920 -Saint-Pierremont,8394,74,19.929,1.421,1.287,841,6931 -Chaume-et-Courchamp,21158,180,8.182,0.910,0.824,877,6724 -Les Ressuintes,28314,124,7.482,0.871,0.789,548,6834 -Nielles-lès-Bléquin,62613,826,12.748,1.137,1.029,628,7065 -Angecourt,8013,387,3.742,0.616,0.558,841,6951 -Les Lucs-sur-Boulogne,85129,3427,53.354,2.325,2.105,362,6651 -Méligny-le-Petit,55331,81,8.410,0.923,0.836,883,6841 -Chatel-Chéhéry,8109,150,16.104,1.277,1.156,843,6913 -Saint-Ouen-sous-Bailly,76630,219,5.346,0.736,0.666,579,6979 -Balâtre,80053,77,3.313,0.579,0.524,689,6957 -Binarville,51062,102,16.693,1.301,1.178,842,6906 -Haraucourt,8211,738,11.656,1.087,0.984,840,6950 -Villeneuve-sur-Yonne,89464,5259,40.380,2.023,1.832,727,6773 -La Berlière,8061,42,10.442,1.029,0.932,841,6940 -Vendrennes,85301,1711,17.127,1.317,1.192,385,6646 -Belval-Bois-des-Dames,8059,33,17.451,1.330,1.204,851,6934 -Saint-Maurice-sur-Vingeanne,21562,221,17.465,1.330,1.204,878,6720 -Pluherlin,56171,1526,35.358,1.893,1.714,294,6748 -Clisson,44043,7035,11.383,1.074,0.972,376,6677 -La Motte-Servolex,73179,11680,29.672,1.734,1.570,920,6502 -Falleron,85086,1576,29.078,1.716,1.554,340,6654 -Vertou,44215,23581,38.173,1.967,1.781,360,6680 -Aigrefeuille-sur-Maine,44002,3763,14.682,1.220,1.105,363,6675 -Gercy,2341,284,6.390,0.805,0.729,761,6969 -Montceau-et-Écharnant,21427,174,18.695,1.376,1.246,828,6661 -Pouilly-sur-Vingeanne,21503,116,10.574,1.035,0.937,886,6717 -La Rabatelière,85186,975,8.263,0.915,0.828,378,6648 -Buzancy,8089,337,22.788,1.520,1.376,844,6923 -Tiffauges,85293,1597,9.879,1.000,0.905,390,6665 -Montblainville,55343,62,12.208,1.112,1.007,842,6906 -Poyans,70422,143,12.127,1.108,1.003,888,6707 -Grand'Landes,85102,658,20.393,1.437,1.301,345,6652 -Val-du-Layon,49292,3397,30.093,1.746,1.581,420,6696 -Sainte-Montaine,18227,183,53.617,2.331,2.111,643,6710 -Château-Thébaud,44037,3007,17.689,1.339,1.212,363,6675 -Montréverd,85197,3638,48.826,2.224,2.014,368,6659 -Remouillé,44142,1899,21.819,1.487,1.346,370,6670 -Grandpré,8198,554,42.362,2.072,1.876,836,6922 -Bacouël,60039,485,5.490,0.746,0.675,656,6949 -Bellou-en-Houlme,61040,1116,39.031,1.989,1.801,450,6849 -Maisdon-sur-Sèvre,44088,2908,17.427,1.329,1.203,369,6680 -Saint-Martin-du-Tilleul,27569,240,5.197,0.726,0.657,520,6891 -Champien,80185,268,8.630,0.935,0.847,692,6954 -La Copechagnière,85072,988,9.876,1.000,0.905,369,6646 -Vieillevigne,44216,3961,52.143,2.299,2.082,360,6658 -Attricourt,70032,43,6.091,0.786,0.712,883,6713 -Sauzet,26338,1846,19.025,1.388,1.257,843,6387 -Champtocé-sur-Loire,49068,1870,37.225,1.942,1.758,412,6711 -Saint-Pastous,65393,131,7.865,0.893,0.809,454,6218 -Étrembières,74118,2439,5.405,0.740,0.670,950,6569 -Vouziers,8490,4359,42.624,2.078,1.881,820,6929 -Thieffrans,70500,175,9.391,0.975,0.883,949,6715 -Tailly,8437,174,39.305,1.996,1.807,847,6927 -Fontaine-en-Dormois,51255,17,5.279,0.731,0.662,827,6906 -Dampierre-et-Flée,21225,140,9.488,0.980,0.887,877,6712 -Corcoué-sur-Logne,44156,2873,50.721,2.267,2.053,355,6661 -Sainte-Eulalie-d'Olt,12219,376,17.544,1.333,1.207,692,6374 -Tanay,21619,233,12.701,1.134,1.027,875,6705 -Nouvion-le-Vineux,2561,164,3.494,0.595,0.539,744,6933 -Isômes,52249,152,10.753,1.044,0.945,873,6726 -Orville,21472,171,2.244,0.477,0.432,869,6720 -Cantigny,80170,116,4.022,0.638,0.578,662,6951 -Saint-Lumine-de-Coutais,44174,2128,17.785,1.342,1.215,340,6670 -Ligny-Saint-Flochel,62514,268,5.133,0.721,0.653,658,7028 -Rouvroy-Ripont,51470,10,11.728,1.090,0.987,827,6905 -Fléville,8171,98,7.845,0.892,0.808,845,6912 -Oyrières,70402,386,14.031,1.192,1.079,896,6718 -Guillonville,28190,443,27.432,1.667,1.509,602,6776 -La Gaubretière,85097,3034,30.281,1.752,1.586,387,6657 -Varennes-en-Argonne,55527,663,11.786,1.093,0.990,847,6908 -Saint-Aignan-Grandlieu,44150,3912,18.177,1.357,1.229,351,6679 -Sainte-Pazanne,44186,6659,41.902,2.060,1.865,331,6674 -Stonne,8430,42,7.331,0.862,0.780,841,6940 -Gorges,44064,4543,16.349,1.287,1.165,372,6678 -Autrey-le-Vay,70042,90,2.846,0.537,0.486,955,6722 -Beaufou,85015,1505,28.012,1.685,1.526,352,6643 -Saint-Hilaire-de-Clisson,44165,2268,18.827,1.381,1.250,375,6672 -Rocheservière,85190,3299,28.298,1.693,1.533,361,6660 -Rigny-sur-Arroux,71370,647,48.059,2.207,1.998,782,6602 -Corancy,58082,309,30.149,1.748,1.583,769,6667 -Briquenay,8086,102,14.523,1.213,1.098,833,6922 -Sainte-Marie,25523,695,7.313,0.861,0.780,978,6716 -Tourrettes,83138,2898,34.053,1.857,1.681,1003,6292 -Lametz,8244,73,9.271,0.969,0.877,825,6939 -Thénorgues,8446,87,9.298,0.971,0.879,839,6926 -Monnières,44100,2179,9.824,0.998,0.904,369,6677 -Uxegney,88483,2291,9.003,0.955,0.865,949,6795 -Bayonville,8052,98,16.207,1.281,1.160,847,6921 -Licey-sur-Vingeanne,21348,104,3.425,0.589,0.533,880,6712 -Villasavary,11418,1219,34.194,1.861,1.685,625,6238 -Verrières,8471,27,6.367,0.803,0.727,839,6935 -La Boissière-de-Montaigu,85025,2261,29.207,1.720,1.557,384,6661 -La Besace,8063,138,13.852,1.185,1.073,843,6939 -Vaux-Villaine,8468,195,10.003,1.007,0.912,804,6967 -Goux-sous-Landet,25283,77,5.439,0.742,0.672,921,6668 -Machecoul-Saint-Même,44087,7393,85.771,2.948,2.669,333,6661 -Warcq,8497,1281,9.229,0.967,0.876,820,6966 -Alland'Huy-et-Sausseuil,8006,245,8.716,0.940,0.851,813,6937 -Dommery,8141,177,10.656,1.039,0.941,808,6952 -Saint-Père-Marc-en-Poulet,35306,2280,18.776,1.379,1.249,334,6844 -Saint-Fiacre-sur-Maine,44159,1186,5.917,0.774,0.701,367,6681 -Comprégnac,12072,258,11.277,1.069,0.968,697,6334 -Le Val-d'Esnoms,52189,382,33.084,1.831,1.658,870,6735 -Saint-Mars-de-Coutais,44178,2630,34.685,1.875,1.698,342,6676 -Coublanc,52145,116,19.328,1.399,1.267,886,6741 -Calvignac,46049,208,17.702,1.339,1.212,605,6375 -Bort-les-Orgues,19028,2699,14.850,1.227,1.111,663,6476 -Huiron,51295,302,13.343,1.163,1.053,806,6843 -Bazoges-en-Paillers,85013,1393,11.610,1.085,0.982,383,6654 -Saint-Marcel-lès-Sauzet,26312,1247,3.916,0.630,0.570,843,6392 -Saint-Étienne-du-Bois,85210,2102,29.637,1.733,1.569,351,6645 -Saint-Christophe-du-Bois,49269,2699,21.751,1.485,1.345,396,6667 -La Sauzière-Saint-Jean,81279,270,15.936,1.271,1.151,590,6321 -Neuviller-sur-Moselle,54399,225,6.914,0.837,0.758,943,6827 -Maâtz,52298,76,10.804,1.046,0.947,881,6738 -Saint-Christophe-du-Ligneron,85204,2539,42.355,2.072,1.876,335,6642 -Chauché,85064,2483,41.950,2.062,1.867,380,6643 -Clans,6042,614,37.640,1.953,1.768,1039,6333 -Penguily,22165,611,10.764,1.044,0.945,291,6824 -La Bazoque,14050,184,10.417,1.027,0.930,415,6900 -Magny-Saint-Médard,21369,309,10.943,1.053,0.953,870,6699 -Champagne-sur-Vingeanne,21135,314,13.344,1.163,1.053,879,6706 -Touvois,44206,1794,37.033,1.937,1.754,345,6652 -Courtivron,21208,171,15.671,1.260,1.141,847,6714 -Ambly-Fleury,8010,131,5.796,0.766,0.694,809,6934 -Villaines-sous-Lucé,72376,706,25.522,1.608,1.456,516,6754 -Jandun,8236,279,12.635,1.131,1.024,814,6957 -Saint-Hilaire-de-Chaléons,44164,2265,35.293,1.891,1.712,335,6680 -Amagne,8008,724,9.382,0.975,0.883,811,6937 -Oussoy-en-Gâtinais,45239,411,23.293,1.536,1.391,675,6755 -Neufmaison,8315,66,7.046,0.845,0.765,811,6965 -Saint-Philbert-de-Grand-Lieu,44188,8851,97.996,3.151,2.853,348,6677 -Fraignot-et-Vesvrotte,21283,58,11.773,1.092,0.989,846,6732 -Bouaye,44018,7620,14.038,1.193,1.080,344,6681 -Épagny,21245,316,12.271,1.115,1.010,851,6708 -Gruyères,8201,99,5.428,0.742,0.672,814,6957 -Frénois,21286,84,22.215,1.500,1.358,844,6713 -Saint-Vincent-Sterlanges,85276,788,4.531,0.678,0.614,387,6635 -Sigournais,85282,884,18.484,1.369,1.240,398,6633 -Mouchamps,85153,2865,54.983,2.360,2.137,395,6641 -Hirel,35132,1380,9.956,1.004,0.909,345,6840 -Tarsul,21620,145,9.549,0.984,0.891,849,6717 -Saint-Germain-de-Prinçay,85220,1503,24.841,1.586,1.436,388,6636 -Brunvillers-la-Motte,60112,340,6.459,0.809,0.732,663,6940 -Montendre,17240,3231,25.813,1.617,1.464,436,6474 -Barjon,21049,38,4.599,0.683,0.618,847,6725 -Castéra-Lanusse,65132,45,0.857,0.295,0.267,480,6233 -Thin-le-Moutier,8449,626,39.647,2.004,1.814,813,6961 -Minot,21415,181,36.193,1.915,1.734,845,6732 -Saulces-Champenoises,8401,238,22.710,1.517,1.374,807,6928 -Sury,8432,107,3.356,0.583,0.528,816,6965 -Creuse,80225,188,5.068,0.717,0.649,641,6972 -Le Meix,21400,52,10.692,1.041,0.943,846,6721 -Charmes-la-Côe,54120,339,6.287,0.798,0.723,907,6840 -Suzanne,8433,66,6.408,0.806,0.730,820,6938 -Corpe,85073,1053,17.121,1.317,1.192,378,6608 -Remilly-les-Pothées,8358,249,9.935,1.003,0.908,811,6965 -Chemillé-sur-Indrois,37069,215,25.025,1.592,1.441,561,6678 -Chêne-Sec,39140,35,0.819,0.288,0.261,887,6642 -Cussey-les-Forges,21220,135,23.475,1.542,1.396,859,6727 -Attigny,8025,1138,11.640,1.086,0.983,817,6931 -Grancey-le-Château-Neuvelle,21304,251,27.755,1.677,1.518,847,6733 -Saint-Martin-Lars-en-Sainte-Hermine,85248,409,18.887,1.383,1.252,395,6615 -Saint-Marcel,8389,372,10.938,1.053,0.953,814,6962 -Charmoy,71103,249,39.474,2.000,1.811,803,6627 -Brognon,21111,301,6.346,0.802,0.726,864,6705 -Brain-sur-Allonnes,49041,1973,33.580,1.845,1.670,482,6696 -Saint-Prouant,85266,1585,12.955,1.146,1.038,396,6638 -Wagnon,8496,129,15.270,1.244,1.126,803,6952 -Novion-Porcien,8329,493,17.263,1.323,1.198,802,6942 -Givry,8193,272,11.897,1.098,0.994,812,6931 -Andelot-Blancheville,52008,874,33.260,1.836,1.662,863,6795 -Avot,21041,188,21.820,1.487,1.346,854,6726 -Lucquy,8262,587,5.073,0.717,0.649,808,6939 -Saint-Hilaire-le-Vouhis,85232,1050,29.194,1.720,1.557,379,6630 -Saint-Juire-Champgillon,85235,404,20.734,1.449,1.312,391,6618 -Salives,21579,212,48.080,2.207,1.998,839,6728 -Thugny-Trugny,8452,263,13.407,1.166,1.056,802,6929 -FAUX,8165,56,3.275,0.576,0.522,808,6938 -Monsireigne,85145,979,20.914,1.456,1.318,398,6629 -Lieffrans,70301,59,4.446,0.671,0.608,924,6719 -Chantonnay,85051,8291,83.930,2.916,2.640,388,6622 -Galan,65183,723,13.755,1.181,1.069,489,6242 -Le Langon,85121,1046,23.871,1.555,1.408,397,6597 -Puiseux,8348,120,3.463,0.592,0.536,812,6944 -Drouilly,51220,137,2.468,0.500,0.453,811,6853 -Saint-Aubin-la-Plaine,85199,532,11.642,1.086,0.983,390,6608 -Le Grand-Pressigny,37113,937,40.408,2.023,1.832,530,6648 -Launois-sur-Vence,8248,693,13.720,1.179,1.067,812,6951 -Saint-Christol-lès-Alès,30243,7021,20.231,1.432,1.297,785,6335 -Sainte-Hermine,85223,2899,34.930,1.881,1.703,391,6618 -Savigny-le-Sec,21591,834,9.330,0.972,0.880,856,6706 -Sainte-Pexine,85261,246,16.023,1.274,1.153,383,6617 -Moloy,21421,229,19.220,1.395,1.263,846,6719 -Pouillé,85181,616,17.247,1.322,1.197,396,6610 -La Caillère-Saint-Hilaire,85040,1114,15.435,1.251,1.133,397,6622 -Saint-Benoît,4174,152,20.941,1.457,1.319,996,6325 -Épinoy,62298,546,8.122,0.907,0.821,713,7015 -Bernadets-Dessus,65086,157,7.843,0.891,0.807,478,6241 -La Jaudonnière,85115,613,8.299,0.917,0.830,395,6622 -Bègles,33039,27713,10.913,1.052,0.952,421,6418 -Varenguebec,50617,321,21.440,1.474,1.335,375,6928 -Voncq,8489,218,19.821,1.417,1.283,822,6930 -Touligny,8454,86,7.270,0.858,0.777,815,6956 -Asnières-lès-Dijon,21027,1147,4.581,0.681,0.617,855,6699 -Chuffilly-Roche,8123,76,7.713,0.884,0.800,817,6927 -Champigneul-sur-Vence,8099,121,4.514,0.676,0.612,820,6958 -Étaules,21255,283,16.738,1.302,1.179,844,6703 -Charmes-en-l'Angle,52109,10,7.381,0.865,0.783,847,6806 -Pludual,22236,732,9.598,0.986,0.893,257,6859 -Rochetrejoux,85192,942,11.123,1.062,0.962,396,6638 -Pichanges,21483,290,10.089,1.011,0.915,860,6708 -Rouziers-de-Touraine,37204,1292,18.046,1.352,1.224,523,6714 -Chalancey,52092,105,13.674,1.177,1.066,862,6733 -Autechaux,25032,416,6.596,0.818,0.741,957,6702 -Viel-Saint-Remy,8472,308,22.583,1.513,1.370,810,6950 -Lourenties,64352,358,9.031,0.957,0.866,444,6250 -Novy-Chevrières,8330,708,17.295,1.324,1.199,805,6942 -Fay-sur-Lignon,43092,368,13.360,1.163,1.053,797,6431 -Doux,8144,97,6.526,0.813,0.736,804,6934 -Lodève,34142,7426,23.255,1.535,1.390,720,6293 -Bellegarde-en-Diois,26047,83,25.677,1.613,1.460,894,6389 -Bessay,85023,420,10.741,1.043,0.944,383,6612 -Saint-Jean-de-Beugné,85233,599,13.338,1.163,1.053,382,6611 -Marcoux,42136,737,15.469,1.252,1.134,777,6510 -Fagnon,8162,333,10.145,1.014,0.918,813,6957 -Tabanac,33518,1082,7.815,0.890,0.806,428,6406 -Rilly-sur-Aisne,8364,137,3.433,0.590,0.534,817,6932 -Neuvizy,8324,120,8.559,0.931,0.843,810,6950 -Aubigny-les-Pothées,8026,318,14.823,1.226,1.110,804,6967 -Wignicourt,8500,59,4.470,0.673,0.609,815,6945 -Saulces-Monclin,8402,802,20.232,1.432,1.297,811,6941 -Cavillon,80180,103,5.483,0.745,0.675,634,6979 -Aboncourt-Gesincourt,70002,215,10.734,1.043,0.944,921,6745 -Feugarolles,47097,984,24.006,1.560,1.412,491,6347 -Bussières,21119,42,6.374,0.804,0.728,848,6728 -Seuil,8416,149,11.773,1.092,0.989,803,6929 -Saulx-le-Duc,21587,240,28.977,1.713,1.551,849,6717 -Saint-Pierre-sur-Vence,8395,124,4.664,0.687,0.622,822,6959 -Coucy,8133,507,6.439,0.808,0.732,807,6937 -Passy,89291,341,5.677,0.758,0.686,725,6779 -Mazerny,8283,124,12.583,1.129,1.022,817,6945 -Til-Châtel,21638,1087,26.299,1.632,1.478,864,6720 -Belval,8058,222,4.957,0.709,0.642,818,6963 -Nalliers,85159,2316,32.839,1.824,1.651,387,6602 -Sainte-Cécile,85202,1605,32.146,1.805,1.634,386,6629 -Saint-Pierre-des-Échaubrognes,79289,1408,29.329,1.724,1.561,412,6663 -Courlon,21207,81,9.833,0.998,0.904,849,6728 -Saint-Valérien,85274,525,14.607,1.217,1.102,396,6610 -Foncegrive,21275,135,10.213,1.017,0.921,858,6726 -Soucy,2729,105,5.225,0.728,0.659,710,6913 -Le Boupère,85031,3126,43.746,2.105,1.906,395,6642 -Séchin,25538,118,1.087,0.332,0.301,949,6698 -Norges-la-Ville,21462,954,11.004,1.056,0.956,856,6705 -Saint-Claud,16308,1057,26.717,1.645,1.489,503,6539 -La Heunière,27336,328,3.079,0.559,0.506,585,6887 -Saint-Étienne-de-Brillouet,85209,606,18.980,1.387,1.256,395,6611 -Nullemont,76479,137,5.737,0.762,0.690,601,6963 -Vesvres-sous-Chalancey,52519,47,7.179,0.853,0.772,863,6733 -Villetritouls,11440,39,4.830,0.700,0.634,658,6222 -Cuvry,57162,839,5.434,0.742,0.672,932,6885 -Velosnes,55544,172,4.372,0.666,0.603,876,6938 -Metz,57463,117890,41.804,2.058,1.863,938,6893 -Thonne-les-Près,55510,139,5.396,0.739,0.669,869,6941 -Sachy,8375,185,5.803,0.767,0.694,852,6956 -Saint-Perdon,40280,1706,30.283,1.752,1.586,409,6319 -Moncel-sur-Vair,88305,204,7.306,0.860,0.779,901,6815 -Villers-sur-Coudun,60689,1399,6.472,0.810,0.733,686,6934 -Vigneul-sous-Montmédy,55552,91,4.624,0.684,0.619,870,6935 -Autricourt,21034,130,26.663,1.644,1.489,818,6764 -Rogécourt,2651,103,5.519,0.748,0.677,731,6949 -Sailly,8376,250,12.993,1.147,1.039,856,6949 -Vittarville,55572,74,8.247,0.914,0.828,873,6925 -Luçon,85128,9467,31.451,1.785,1.616,379,6607 -Saint-Pierre-du-Chemin,85264,1340,29.824,1.738,1.574,414,6628 -Thiré,85290,570,11.613,1.085,0.982,394,6614 -Wiseppe,55582,102,5.687,0.759,0.687,858,6932 -Authevernes,27026,397,8.135,0.908,0.822,602,6903 -Damvillers,55145,652,18.392,1.365,1.236,875,6917 -Montain,39349,518,2.318,0.485,0.439,898,6628 -Argelos,64043,271,6.016,0.781,0.707,428,6269 -Étraye,55183,40,8.080,0.905,0.819,873,6918 -Balsièges,48016,544,32.965,1.828,1.655,734,6370 -Gouves,62378,197,2.684,0.521,0.472,675,7021 -Mouzeuil-Saint-Martin,85158,1233,26.116,1.627,1.473,397,6604 -Saint-Laurent-de-la-Salle,85237,363,19.382,1.401,1.268,398,6613 -Saint-Martin-de-Londres,34274,2720,38.535,1.976,1.789,757,6296 -Euilly-et-Lombut,8159,116,10.140,1.014,0.918,855,6949 -Brettnach,57110,447,5.904,0.773,0.700,957,6912 -Malandry,8269,85,6.733,0.826,0.748,856,6943 -Margny,8275,182,6.707,0.824,0.746,868,6948 -Poligny,10294,65,1.443,0.382,0.346,801,6787 -Came,64161,956,34.156,1.860,1.684,372,6273 -Phalsbourg,57540,4725,13.160,1.155,1.046,1015,6863 -Marpaps,40173,137,6.907,0.837,0.758,404,6281 -Riel-les-Eaux,21524,93,25.775,1.616,1.463,827,6770 -Bantheville,55028,122,14.382,1.207,1.093,854,6918 -Aveize,69014,1136,16.871,1.307,1.183,815,6513 -Bouillon,64143,155,3.330,0.581,0.526,415,6273 -Merles-sur-Loison,55336,153,11.428,1.076,0.974,878,6920 -Épiez-sur-Chiers,54178,182,5.250,0.729,0.660,883,6938 -Moulins-Saint-Hubert,55362,174,8.115,0.907,0.821,853,6946 -Montbouy,45210,742,26.804,1.648,1.492,690,6756 -Menars,41134,629,4.520,0.677,0.613,579,6729 -Blagny,8067,1225,7.404,0.866,0.784,861,6951 -Anvéville,76023,295,4.267,0.658,0.596,537,6957 -Liny-devant-Dun,55292,191,11.265,1.068,0.967,859,6921 -Barbaira,11027,736,9.354,0.974,0.882,661,6234 -Flassigny,55188,48,6.679,0.823,0.745,879,6934 -Blémerey,88060,26,2.504,0.504,0.456,926,6812 -Vilosnes-Haraumont,55571,218,15.438,1.251,1.133,859,6915 -Juvigny-sur-Loison,55262,264,16.515,1.294,1.172,867,6929 -Givonne,8191,1053,14.020,1.192,1.079,845,6959 -Margut,8276,775,7.507,0.872,0.790,866,6946 -Doulcon,55165,455,8.649,0.936,0.847,855,6923 -Laneuville-sur-Meuse,55279,432,22.934,1.524,1.380,854,6932 -Amettes,62029,487,6.881,0.835,0.756,658,7047 -Vaux,57701,803,6.530,0.813,0.736,926,6892 -Sivry-sur-Meuse,55490,341,22.242,1.501,1.359,863,6920 -Tramont-Lassus,54530,88,5.761,0.764,0.692,919,6814 -Harprich,57297,167,8.732,0.941,0.852,966,6878 -Baudricourt,88039,325,3.464,0.592,0.536,926,6807 -Le Cateau-Cambrésis,59136,6983,27.255,1.662,1.505,740,7003 -Létanne,8252,130,7.544,0.874,0.791,851,6938 -Bistroff,57088,310,19.323,1.399,1.267,972,6887 -Pouilly,57552,620,5.123,0.720,0.652,932,6887 -Cubjac-Auvézère-Val d'Ans,24147,1080,40.858,2.035,1.843,544,6460 -Peltre,57534,1861,8.318,0.918,0.831,937,6892 -Saffais,54468,117,4.062,0.642,0.581,946,6833 -Iré-le-Sec,55252,155,8.276,0.916,0.829,874,6931 -Genod,39247,69,3.209,0.570,0.516,895,6586 -Bournezeau,85034,3326,61.253,2.491,2.255,379,6624 -Thonne-le-Thil,55509,268,11.341,1.072,0.971,867,6942 -Pure,8349,621,6.504,0.812,0.735,857,6954 -Saint-Nazaire,44184,69719,50.229,2.256,2.043,309,6702 -Saint-Michel-Chef-Chef,44182,4813,25.302,1.601,1.450,312,6690 -Bellevigny,85019,5932,39.071,1.990,1.802,362,6645 -Saulmory-Villefranche,55471,91,6.903,0.836,0.757,858,6930 -La Genétouze,85098,1905,13.286,1.160,1.050,359,6635 -Wavrille,55580,48,5.373,0.738,0.668,874,6917 -Essarts en Bocage,85084,8804,100.763,3.195,2.893,374,6642 -Matton-et-Clémency,8281,460,18.292,1.361,1.232,858,6954 -Cramont,80221,304,9.709,0.992,0.898,633,7005 -Le Champ-Saint-Père,85050,1839,24.790,1.585,1.435,371,6607 -Damas-aux-Bois,88121,268,29.927,1.741,1.576,955,6818 -Saint-Cyr-en-Talmondais,85206,376,13.978,1.190,1.077,368,6603 -Saint-Vincent-du-Boulay,27613,378,6.593,0.817,0.740,518,6891 -Lairoux,85117,619,13.331,1.162,1.052,370,6601 -Fraisnes-en-Saintois,54207,106,6.471,0.810,0.733,927,6811 -Narbief,25421,66,3.491,0.595,0.539,981,6677 -Lion-devant-Dun,55293,169,15.628,1.258,1.139,867,6927 -Vernois-lès-Vesvres,21665,177,11.659,1.087,0.984,859,6730 -Château-Guibert,85061,1537,35.258,1.890,1.711,372,6615 -Beauclair,55036,91,4.866,0.702,0.636,852,6931 -Grange-de-Vaivre,39259,37,1.730,0.419,0.379,916,6660 -Brévilly,8083,375,7.217,0.855,0.774,849,6955 -La Merlatière,85142,989,15.091,1.237,1.120,374,6634 -La Couture,85074,216,7.135,0.850,0.770,373,6609 -Breteau,45052,83,16.391,1.289,1.167,691,6734 -Chauvency-le-Château,55109,249,9.213,0.966,0.875,865,6937 -Saint-Perreux,56232,1182,6.191,0.792,0.717,316,6744 -Diénay,21230,373,15.546,1.255,1.136,854,6712 -La Chaize-le-Vicomte,85046,3756,49.731,2.245,2.033,368,6625 -Boutencourt,60097,227,7.615,0.878,0.795,621,6915 -Saint-Jean-lès-Longuyon,54476,422,4.227,0.654,0.592,880,6930 -La Jonchère,85116,440,11.525,1.081,0.979,361,6600 -Ouessant,29155,842,16.225,1.282,1.161,101,6847 -Aubigny-Les Clouzeaux,85008,6430,52.612,2.309,2.091,362,6623 -Sauvagnon,64511,3296,16.753,1.303,1.180,427,6264 -Clénay,21179,848,5.523,0.748,0.677,858,6704 -Égliseneuve-près-Billom,63146,803,16.839,1.306,1.182,732,6516 -Busserotte-et-Montenaille,21118,25,6.690,0.823,0.745,849,6729 -Villers-le-Rond,54576,103,4.480,0.674,0.610,879,6933 -Vaudeville,54553,165,9.094,0.960,0.869,939,6822 -Saint-Maur-des-Bois,50521,150,4.970,0.710,0.643,395,6867 -Jametz,55255,255,17.384,1.327,1.201,873,6925 -Cambes,33084,1537,5.343,0.736,0.666,427,6412 -Avrillé,85010,1400,25.503,1.607,1.455,356,6610 -Voimhaut,57728,253,4.010,0.637,0.577,950,6885 -Bièvres,8065,50,7.262,0.858,0.777,867,6943 -Poiseul-lès-Saulx,21491,65,15.259,1.243,1.125,849,6719 -Flacey,21266,179,6.749,0.827,0.749,860,6707 -Châtillon-le-Roi,45086,276,4.586,0.682,0.617,634,6786 -Velle-sur-Moselle,54559,285,4.494,0.675,0.611,942,6829 -Villers-le-Tourneur,8479,195,7.860,0.892,0.808,813,6950 -Magny-Fouchard,10215,270,15.087,1.236,1.119,812,6794 -Longeville-sur-Mer,85127,2495,38.211,1.968,1.782,361,6600 -Nesmy,85160,2857,24.701,1.582,1.432,360,6620 -Romagne-sous-les-Côes,55437,114,14.266,1.202,1.088,882,6918 -Puits-et-Nuisement,10310,211,12.155,1.110,1.005,814,6791 -La Loge-aux-Chèvres,10200,85,2.872,0.539,0.488,804,6798 -Avioth,55022,142,6.493,0.811,0.734,871,6944 -Vendeuvre-sur-Barse,10401,2334,52.401,2.304,2.086,806,6791 -Tournan,32451,182,12.431,1.122,1.016,522,6258 -Péault,85171,607,9.115,0.961,0.870,378,6609 -Tromborn,57681,372,6.128,0.788,0.713,961,6910 -Moutiers-les-Mauxfaits,85156,2121,9.345,0.973,0.881,361,6611 -Vadenay,51587,246,19.658,1.411,1.278,803,6885 -Fralignes,10159,89,5.090,0.718,0.650,804,6785 -Beurey,10045,201,17.334,1.325,1.200,811,6789 -Carquefou,44026,19384,43.297,2.094,1.896,360,6694 -Thieffrain,10376,154,7.426,0.867,0.785,806,6791 -Saint-Benoist-sur-Mer,85201,462,15.640,1.259,1.140,370,6601 -Lissey,55297,113,9.972,1.005,0.910,869,6921 -Villiers-Vineux,89474,295,11.224,1.066,0.965,761,6762 -Saint-Vincent-sur-Graon,85277,1481,49.018,2.229,2.018,364,6614 -Carbuccia,2A062,389,14.431,1.209,1.095,1194,6121 -Le Poiré-sur-Vie,85178,8497,72.164,2.704,2.448,350,6642 -Magnant,10213,164,15.292,1.245,1.127,808,6785 -Villers-devant-Dun,55561,55,8.037,0.902,0.817,855,6924 -Rosnay,85193,622,14.216,1.200,1.086,370,6615 -Brouennes,55083,148,12.219,1.113,1.008,864,6940 -Cliponville,76182,275,7.470,0.870,0.788,529,6955 -Louppy-sur-Loison,55306,137,14.409,1.208,1.094,867,6928 -Autréville-Saint-Lambert,55018,41,3.999,0.637,0.577,856,6944 -Bourguignons,10055,291,16.609,1.297,1.174,801,6786 -Loutehel,35160,265,7.294,0.860,0.779,321,6770 -Thorigny,85291,1238,32.209,1.807,1.636,373,6618 -Lesges,2421,100,6.657,0.821,0.743,736,6913 -La Villeneuve-au-Chêne,10423,428,10.883,1.050,0.951,801,6796 -Halles-sous-les-Côes,55225,155,5.444,0.743,0.673,854,6928 -Hénu,62430,166,4.294,0.660,0.598,668,7007 -Verdilly,2781,465,5.236,0.728,0.659,733,6886 -Cléry-le-Petit,55119,185,4.594,0.682,0.617,859,6921 -Dun-sur-Meuse,55167,665,6.461,0.809,0.732,861,6921 -Aincreville,55004,71,9.119,0.961,0.870,854,6918 -Chasnais,85058,726,10.834,1.048,0.949,375,6605 -Saint-Maurice-sur-Aveyron,45292,863,54.687,2.354,2.131,697,6747 -Dombras,55156,136,11.219,1.066,0.965,878,6925 -Bourg-de-Bigorre,65105,196,8.018,0.901,0.816,476,6223 -Pouru-Saint-Remy,8343,1179,10.351,1.024,0.927,853,6954 -Vauchonvilliers,10397,159,11.670,1.087,0.984,816,6797 -Quincy-Landzécourt,55410,144,12.536,1.127,1.020,867,6933 -Chervey,10097,165,13.480,1.169,1.058,812,6780 -Pouilly-sur-Meuse,55408,180,11.904,1.098,0.994,855,6942 -Rupt-sur-Othain,55450,47,5.521,0.748,0.677,878,6925 -Mesmont,8288,97,11.413,1.075,0.973,801,6944 -Camplong,34049,235,13.103,1.152,1.043,709,6286 -Champ-sur-Barse,10078,27,7.154,0.851,0.771,805,6792 -Grandchamp,8196,95,7.337,0.862,0.780,800,6951 -Loscouët-sur-Meu,22133,638,22.214,1.500,1.358,312,6798 -Longpré-le-Sec,10205,83,15.715,1.262,1.143,812,6786 -Amance,10005,284,23.082,1.529,1.384,809,6801 -La Roche-sur-Yon,85191,53741,88.026,2.986,2.704,364,6623 -Le Tablier,85285,747,9.268,0.969,0.877,368,6617 -Gelos,64237,3499,11.041,1.058,0.958,426,6242 -Marlemont,8277,144,10.045,1.009,0.914,801,6963 -Vaudoncourt,55535,86,5.980,0.778,0.704,891,6917 -Saint-Phal,10359,525,33.340,1.838,1.664,772,6783 -Signy-l'Abbaye,8419,1372,62.101,2.508,2.271,803,6952 -Aubin,64073,228,5.823,0.768,0.695,422,6264 -Saint-Avaugourd-des-Landes,85200,1059,20.901,1.455,1.317,358,6608 -Rethel,8362,7662,18.647,1.375,1.245,798,6935 -Festigny,51249,404,25.682,1.613,1.460,759,6882 -Le Bernard,85022,1209,27.673,1.674,1.516,361,6602 -Mareuil-sur-Lay-Dissais,85135,2823,25.916,1.620,1.467,372,6615 -La Ferrière,85089,5234,47.145,2.186,1.979,374,6633 -Viellenave-d'Arthez,64554,195,3.922,0.630,0.570,420,6263 -Rives de l'Yon,85213,4141,54.588,2.352,2.130,369,6618 -Villy-en-Trodes,10433,243,18.128,1.355,1.227,805,6792 -La Bretonnière-la-Claye,85036,582,16.520,1.294,1.172,371,6606 -Beaulieu,43021,1023,22.644,1.515,1.372,776,6452 -Briel-sur-Barse,10062,209,12.568,1.128,1.021,802,6793 -Lacq,64300,735,17.136,1.318,1.193,408,6267 -Sorbon,8427,191,14.514,1.213,1.098,795,6939 -Dompierre-sur-Yon,85081,4248,33.885,1.853,1.678,364,6640 -Buxières-sur-Arce,10069,124,10.680,1.040,0.942,806,6784 -Han-devant-Pierrepont,54602,154,5.043,0.715,0.647,898,6925 -Pécorade,40220,141,4.200,0.652,0.590,429,6290 -Lacadée,64296,159,4.813,0.698,0.632,404,6275 -Sigottier,5167,90,25.416,1.605,1.453,913,6379 -Colmey,54134,254,9.889,1.001,0.906,883,6931 -Chambonchard,23046,82,12.952,1.146,1.038,666,6560 -Kédange-sur-Canner,57358,1090,3.895,0.628,0.569,943,6918 -Réhon,54451,3844,3.740,0.616,0.558,900,6938 -Coupray,52146,148,12.255,1.114,1.009,843,6766 -Manois,52306,453,10.353,1.024,0.927,878,6795 -Maransin,33264,1021,29.892,1.740,1.575,445,6451 -Saint-Pierre-la-Bruyère,61448,446,6.408,0.806,0.730,538,6808 -Latrecey-Ormoy-sur-Aube,52274,290,46.790,2.177,1.971,833,6765 -Cutry,54151,1028,5.938,0.776,0.703,899,6933 -Aizanville,52005,33,3.520,0.597,0.541,842,6781 -Gremilly,55218,41,17.778,1.342,1.215,885,6911 -Harréville-les-Chanteurs,52237,299,15.879,1.268,1.148,897,6798 -Les Magnils-Reigniers,85131,1618,18.086,1.354,1.226,378,6600 -Amel-sur-l'Étang,55008,159,15.299,1.245,1.127,894,6907 -Sazos,65413,123,30.151,1.748,1.583,452,6205 -Gincrey,55211,63,9.647,0.989,0.895,887,6913 -Saint-Sébastien-sur-Loire,44190,26872,11.764,1.092,0.989,361,6686 -Montigny-sur-Chiers,54378,491,9.445,0.978,0.885,894,6937 -Divatte-sur-Loire,44029,6713,35.612,1.900,1.720,368,6696 -Le Loroux-Bottereau,44084,8126,44.791,2.130,1.929,370,6686 -Castaignos-Souslens,40069,396,7.564,0.875,0.792,406,6283 -Cleuville,76180,195,4.115,0.646,0.585,530,6959 -Thouaré-sur-Loire,44204,9778,12.542,1.127,1.020,368,6696 -Oyé,71337,304,18.461,1.368,1.239,795,6579 -Le Landreau,44079,2977,23.681,1.549,1.402,371,6685 -Wavrechain-sous-Faulx,59652,372,3.819,0.622,0.563,720,7017 -Arthez-de-Béarn,64057,1875,27.913,1.682,1.523,405,6268 -Vernois-lès-Belvoir,25607,60,4.691,0.689,0.624,976,6696 -Saint-Laurent-sur-Othain,55461,505,16.867,1.307,1.183,880,6923 -Senon,55481,335,20.548,1.443,1.307,888,6909 -Foameix-Ornel,55191,241,10.896,1.051,0.952,889,6905 -Magstatt-le-Bas,68197,471,3.341,0.582,0.527,1032,6737 -Nouillonpont,55387,235,10.129,1.013,0.917,892,6922 -Saint-Pancré,54485,320,6.188,0.792,0.717,892,6939 -Rouvrois-sur-Othain,55445,197,12.278,1.115,1.010,893,6923 -Morgemoulin,55357,110,6.849,0.833,0.754,888,6908 -Saint-Mayeux,22316,469,30.785,1.766,1.599,253,6816 -Bertignolles,10041,53,6.225,0.794,0.719,813,6786 -Haute-Goulaine,44071,5755,20.852,1.454,1.316,369,6686 -Vaudrémont,52506,104,10.631,1.038,0.940,843,6784 -Tournavaux,8456,239,1.647,0.409,0.370,828,6977 -Lonlay-le-Tesson,61233,223,12.669,1.133,1.026,450,6843 -Mangiennes,55316,396,18.508,1.369,1.240,882,6916 -Warcq,55578,205,4.975,0.710,0.643,894,6903 -Nœux-lès-Auxi,62616,179,6.166,0.790,0.715,642,7018 -Laferté-sur-Aube,52258,341,32.803,1.823,1.651,837,6777 -Hagedet,65215,45,2.206,0.473,0.428,454,6273 -Basse-Goulaine,44009,8867,13.803,1.183,1.071,361,6690 -Pars-lès-Chavanges,10279,66,8.503,0.928,0.840,812,6823 -Ancourt,76008,665,12.407,1.121,1.015,571,6979 -Sainte-Luce-sur-Loire,44172,15247,11.435,1.076,0.974,364,6693 -Maubourguet,65304,2433,22.310,1.503,1.361,462,6264 -Pierrepont,54428,870,7.046,0.845,0.765,899,6928 -Saint-Julien-de-Concelles,44169,6888,33.358,1.838,1.664,363,6692 -Muzeray,55367,133,8.268,0.915,0.828,893,6918 -Viviers-sur-Artaut,10439,125,6.149,0.789,0.714,810,6779 -Saint-Usage,10364,77,16.548,1.295,1.173,826,6778 -Cunfin,10119,181,33.255,1.836,1.662,821,6771 -Châteauvillain,52114,1596,107.427,3.299,2.987,848,6776 -Fresnois-la-Montagne,54212,410,8.590,0.933,0.845,892,6939 -Armentieux,32008,77,4.880,0.703,0.637,466,6275 -Boulc,26055,126,57.282,2.409,2.181,901,6394 -Maranville,52308,416,12.689,1.134,1.027,841,6785 -Auriébat,65049,249,16.340,1.287,1.165,466,6273 -Pillon,55405,271,15.484,1.253,1.134,888,6920 -Vitry-le-Croisé,10438,240,32.413,1.812,1.641,815,6788 -Gruchet-le-Valasse,76329,3153,14.232,1.201,1.087,520,6943 -Sorbey,55495,270,12.455,1.123,1.017,886,6928 -Maumusson-Laguian,32245,141,9.406,0.976,0.884,451,6285 -Abaucourt-Hautecourt,55002,111,9.646,0.989,0.895,884,6901 -Saint-Lanne,65387,136,13.053,1.150,1.041,453,6279 -Saint-Pierrevillers,55464,157,11.174,1.064,0.963,895,6925 -Treize-Septiers,85295,3177,22.352,1.505,1.363,383,6662 -Ladevèze-Ville,32175,249,9.056,0.958,0.867,464,6274 -Ville-Houdlémont,54572,652,6.011,0.780,0.706,894,6939 -Saint-Agnet,40247,195,7.850,0.892,0.808,435,6286 -Labatut-Rivière,65240,407,12.895,1.143,1.035,461,6275 -Corbère-Abères,64193,113,7.070,0.846,0.766,451,6267 -Charency-Vezin,54118,634,14.800,1.225,1.109,882,6932 -Cuisles,51201,137,2.919,0.544,0.493,755,6893 -Allenjoie,25011,733,6.561,0.815,0.738,994,6723 -Castelnau-Rivière-Basse,65130,631,18.430,1.367,1.238,455,6283 -Sombrun,65429,207,9.741,0.993,0.899,456,6268 -Sarry,71500,114,9.637,0.988,0.895,786,6578 -Lexy,54314,3607,5.993,0.779,0.705,899,6939 -Aillon-le-Jeune,73004,435,33.920,1.854,1.679,945,6508 -Vindecy,71581,252,16.552,1.295,1.173,776,6584 -Anzy-le-Duc,71011,472,25.119,1.595,1.444,785,6582 -Tieste-Uragnoux,32445,177,6.245,0.795,0.720,461,6275 -La Hoguette,14332,718,24.822,1.586,1.436,468,6871 -Boismont,54081,411,5.445,0.743,0.673,897,6927 -Livarot-Pays-d'Auge,14371,6392,183.490,4.312,3.904,496,6888 -Grancey-sur-Ource,21305,206,24.180,1.565,1.417,821,6771 -Villers-lès-Mangiennes,55563,81,8.575,0.932,0.844,880,6919 -Le Bouchaud,3035,214,22.831,1.521,1.377,773,6579 -Faissault,8163,249,6.022,0.781,0.707,810,6945 -Ugny,54537,728,9.149,0.963,0.872,899,6933 -Tellancourt,54514,559,3.740,0.616,0.558,892,6938 -Saint-Aunix-Lengros,32362,143,5.448,0.743,0.673,462,6278 -Orges,52365,361,17.579,1.335,1.209,841,6779 -Fromezey,55201,51,5.899,0.773,0.700,889,6903 -Maucourt-sur-Orne,55325,60,6.441,0.808,0.732,885,6911 -Fontenay,71203,41,2.478,0.501,0.454,800,6599 -Loison,55299,119,14.272,1.203,1.089,885,6913 -Beuveille,54067,766,12.003,1.103,0.999,895,6931 -Dinteville,52168,54,15.720,1.262,1.143,831,6773 -Ville-sous-la-Ferté,10426,1070,19.741,1.414,1.280,833,6787 -Crouseilles,64196,126,7.920,0.896,0.811,450,6276 -Marast,70332,51,3.044,0.555,0.503,953,6723 -Ougney-Douvot,25439,249,6.619,0.819,0.742,947,6698 -Estirac,65174,101,5.229,0.728,0.659,459,6270 -Madiran,65296,421,15.110,1.237,1.120,450,6278 -Domprix,54169,84,7.821,0.890,0.806,899,6919 -Damloup,55143,133,5.288,0.732,0.663,881,6902 -Petit-Failly,54420,86,8.122,0.907,0.821,879,6928 -Les Loges-sur-Brécey,50275,139,5.371,0.738,0.668,396,6859 -Allondrelle-la-Malmaison,54011,644,13.565,1.172,1.061,889,6937 -Saint-Brancher,89336,294,22.245,1.501,1.359,772,6703 -Braux-le-Châtel,52069,144,10.737,1.043,0.944,842,6780 -Fresnoy-lès-Roye,80359,294,7.731,0.885,0.801,683,6961 -Saugy,18244,80,9.725,0.993,0.899,630,6651 -Mogeville,55339,83,6.352,0.802,0.726,886,6907 -Galiax,32136,155,6.182,0.791,0.716,457,6284 -Sail-les-Bains,42194,205,21.513,1.476,1.336,768,6569 -Billy-sous-Mangiennes,55053,374,25.171,1.597,1.446,890,6917 -Étain,55181,3592,19.944,1.422,1.287,891,6903 -Issirac,30134,296,20.335,1.435,1.299,815,6355 -Cosnes-et-Romain,54138,2665,16.196,1.281,1.160,893,6938 -Soublecause,65432,188,6.265,0.797,0.722,457,6275 -Ladevèze-Rivière,32174,214,13.633,1.175,1.064,465,6275 -Beauvezer,4025,376,27.020,1.655,1.498,993,6343 -Beaumarchés,32036,668,32.886,1.825,1.652,468,6277 -Mouhous,64408,56,3.321,0.580,0.525,438,6271 -Goux,32151,70,5.425,0.741,0.671,458,6285 -Cons-la-Grandville,54137,527,8.386,0.922,0.835,897,6935 -Poinville,28300,143,8.152,0.909,0.823,620,6786 -Lanty-sur-Aube,52272,125,22.496,1.510,1.367,828,6773 -Hères,65219,125,5.979,0.778,0.704,456,6277 -Guimiliau,29074,1016,11.313,1.071,0.970,185,6842 -Baslieux,54049,603,10.197,1.016,0.920,899,6932 -Vielle-Louron,65466,91,2.836,0.536,0.485,486,6195 -Sauveterre,65412,171,10.399,1.026,0.929,468,6270 -Leuchey,52285,85,5.548,0.750,0.679,868,6739 -Lascazères,65264,314,9.230,0.967,0.876,457,6273 -Autreville-sur-la-Renne,52031,389,31.609,1.790,1.621,851,6782 -Dampierre-sur-le-Doubs,25191,460,3.158,0.566,0.512,981,6715 -Dieppe-sous-Douaumont,55153,186,15.042,1.235,1.118,882,6904 -Le Bourguet,83020,31,25.283,1.601,1.450,978,6305 -Jû-Belloc,32163,298,10.151,1.014,0.918,460,6282 -Norville,76471,966,11.992,1.102,0.998,531,6934 -Thennelières,10375,341,6.745,0.827,0.749,786,6800 -Viviers-sur-Chiers,54590,651,16.125,1.278,1.157,891,6930 -Allenc,48003,234,38.994,1.988,1.800,750,6382 -Escorailles,15064,78,2.724,0.525,0.475,648,6454 -Bignicourt,8066,68,8.723,0.940,0.851,804,6920 -Sarron,40290,113,3.945,0.632,0.572,434,6281 -Juillac,32164,124,7.566,0.876,0.793,467,6274 -Pauvres,8338,188,12.608,1.130,1.023,812,6926 -Pronville-en-Artois,62671,324,6.163,0.790,0.715,701,7006 -Caussade-Rivière,65137,98,6.194,0.792,0.717,457,6273 -Durdat-Larequille,3106,1343,24.589,1.578,1.429,678,6575 -Hauviné,8220,322,14.617,1.217,1.102,805,6916 -Montbavin,2499,45,5.481,0.745,0.675,738,6936 -Andelot-Morval,39010,95,10.338,1.023,0.926,888,6595 -Villefranque,65472,81,3.212,0.570,0.516,456,6270 -Ban-de-Sapt,88033,349,22.657,1.515,1.372,997,6809 -Sugny,8431,100,6.076,0.785,0.711,823,6920 -Machault,8264,507,16.698,1.301,1.178,809,6921 -Saint-Clément-à-Arnes,8378,109,10.195,1.016,0.920,805,6909 -Les Églisottes-et-Chalaures,33154,2179,17.315,1.325,1.200,459,6446 -Villers-Stoncourt,57718,232,10.548,1.034,0.936,954,6891 -Liry,8256,92,12.760,1.137,1.029,821,6915 -Saignon,84105,1007,19.779,1.416,1.282,894,6307 -Tincry,57674,174,8.448,0.925,0.838,948,6875 -Quilly,8351,81,5.588,0.752,0.681,813,6924 -Contréglise,70170,116,9.725,0.993,0.899,927,6756 -Bourcq,8077,52,9.918,1.002,0.907,815,6922 -Aure,8031,51,12.715,1.135,1.028,820,6911 -Grivy-Loisy,8200,183,11.603,1.084,0.981,821,6925 -Juniville,8239,1219,26.109,1.626,1.472,798,6920 -Sommepy-Tahure,51544,626,68.165,2.628,2.379,822,6906 -Diedendorf,67091,322,10.423,1.028,0.931,997,6870 -Lasserre,64323,90,4.257,0.657,0.595,451,6271 -Lasserade,32199,202,12.720,1.135,1.028,463,6288 -Saint-Étienne-à-Arnes,8379,243,29.804,1.738,1.574,811,6916 -Bouzon-Gellenave,32063,193,10.356,1.024,0.927,459,6295 -Notre-Dame-de-Commiers,38277,498,5.648,0.756,0.684,912,6437 -Champagnolles,17084,634,17.267,1.323,1.198,415,6500 -Annelles,8014,140,12.756,1.137,1.029,803,6929 -Moutoux,39376,70,4.261,0.657,0.595,926,6637 -La Neuville-en-Tourne-à-Fuy,8320,575,27.390,1.666,1.508,800,6915 -Izotges,32161,112,3.050,0.556,0.503,456,6289 -Perrigny,39411,1526,8.870,0.948,0.858,899,6625 -Quatremare,27483,402,5.961,0.777,0.704,561,6898 -Sion,32434,106,7.158,0.852,0.771,458,6297 -Sourdon,80740,313,5.123,0.720,0.652,658,6957 -Fontaine,90047,607,6.952,0.839,0.760,1002,6736 -Semide,8410,196,36.955,1.935,1.752,815,6920 -Maulichères,32244,169,6.214,0.793,0.718,450,6294 -Méricourt,78391,419,2.443,0.498,0.451,599,6882 -Contreuve,8130,81,11.060,1.059,0.959,818,6917 -Mont-Saint-Martin,8308,80,14.071,1.194,1.081,818,6917 -Angicourt,60013,1397,5.003,0.712,0.645,663,6911 -Coulommes-et-Marqueny,8134,89,12.044,1.105,1.000,812,6925 -Saint-Hilaire-le-Petit,51487,342,22.796,1.520,1.376,803,6911 -Arblade-le-Haut,32005,300,12.386,1.120,1.014,452,6297 -Bétous,32049,94,5.186,0.725,0.656,460,6294 -Molesme,21419,265,28.551,1.701,1.540,806,6760 -Mont-Saint-Remy,8309,55,7.602,0.878,0.795,806,6924 -Termes-d'Armagnac,32443,189,10.052,1.009,0.914,456,6293 -Couloumé-Mondebat,32109,194,23.219,1.534,1.389,464,6287 -Charnois,8106,76,5.617,0.754,0.683,830,7001 -Fromelennes,8183,1044,7.204,0.854,0.773,832,7003 -Saint-Griède,32380,141,7.629,0.879,0.796,452,6297 -Mattexey,54356,66,5.002,0.712,0.645,961,6822 -Chooz,8122,745,13.260,1.159,1.049,828,7005 -Givet,8190,6755,18.414,1.366,1.237,829,7005 -Poncey-sur-l'Ignon,21494,72,16.536,1.294,1.172,830,6710 -Trouvans,25572,104,2.760,0.529,0.479,953,6709 -Mercy-le-Bas,54362,1274,8.220,0.913,0.827,900,6925 -Rédange,57565,993,5.519,0.748,0.677,912,6936 -Rustroff,57604,606,3.302,0.578,0.523,945,6930 -Biermes,8064,300,7.967,0.898,0.813,800,6933 -Saint-Honoré,76589,206,3.080,0.559,0.506,568,6965 -Haucourt-Moulaine,54254,3165,7.486,0.871,0.789,905,6936 -Saint-Georges-des-Groseillers,61391,3233,7.294,0.860,0.779,437,6856 -Bréhain-la-Ville,54096,383,10.086,1.011,0.915,907,6930 -Martignat,1237,1627,13.089,1.152,1.043,899,6569 -Martincourt,54355,97,10.741,1.043,0.944,918,6867 -Épaumesnil,80269,132,4.760,0.694,0.628,616,6980 -Saulnes,54493,2410,4.027,0.639,0.579,904,6940 -Mont-Saint-Martin,54382,8602,8.789,0.944,0.855,900,6941 -Bénéjacq,64109,1937,17.106,1.317,1.192,441,6239 -Crainvilliers,88119,172,10.420,1.028,0.931,912,6785 -Thil,54521,1772,3.355,0.583,0.528,910,6935 -Fillières,54194,509,14.284,1.203,1.089,906,6929 -Villerupt,54580,9645,6.456,0.809,0.732,913,6931 -Larret,70297,58,5.653,0.757,0.685,899,6727 -Urdès,64541,305,5.946,0.776,0.703,411,6266 -Prades,66149,6153,10.991,1.055,0.955,653,6165 -Château-Salins,57132,2453,11.057,1.058,0.958,958,6865 -Bazailles,54056,141,4.307,0.661,0.598,902,6926 -Pothières,21499,210,18.069,1.353,1.225,814,6760 -Filain,70234,233,15.703,1.261,1.142,938,6721 -Perros-Guirec,22168,7212,14.932,1.230,1.114,227,6875 -Saint-Julien-de-Civry,71433,484,21.133,1.463,1.325,791,6587 -Tressange,57678,2107,9.372,0.974,0.882,918,6927 -Bretenières,39077,39,4.117,0.646,0.585,892,6649 -Volmerange-les-Mines,57731,2170,12.915,1.144,1.036,920,6930 -Sainte-Colombe,46260,208,11.321,1.071,0.970,622,6405 -Longwy,54323,14722,5.453,0.743,0.673,899,6939 -Haut-Clocher,57304,341,11.528,1.081,0.979,993,6856 -Neunkirchen-lès-Bouzonville,57502,344,3.790,0.620,0.561,958,6924 -Sévry,18251,68,9.136,0.962,0.871,685,6669 -Herserange,54261,4368,3.571,0.602,0.545,903,6938 -Ville-au-Montois,54568,268,12.373,1.120,1.014,904,6926 -Longlaville,54321,2489,3.156,0.565,0.512,902,6940 -Barbâtre,85011,1752,13.198,1.156,1.047,305,6663 -Bramevaque,65109,37,3.691,0.612,0.554,502,6212 -Varenne-l'Arconce,71554,119,8.325,0.918,0.831,790,6581 -Dangers,28128,429,7.399,0.866,0.784,580,6826 -Cesseville,27135,488,6.570,0.816,0.739,551,6899 -Sequehart,2708,206,6.441,0.808,0.732,724,6980 -Budelière,23035,733,25.006,1.592,1.441,663,6571 -Labastide-Chalosse,40130,149,4.578,0.681,0.617,408,6285 -Montaut,64400,1118,15.496,1.253,1.134,445,6233 -Coublucq,64195,105,5.573,0.751,0.680,426,6276 -La Bâtie-Montsaléon,5016,244,15.053,1.235,1.118,921,6377 -Caumont,32093,105,7.136,0.850,0.770,451,6295 -Pouydraguin,32325,137,9.763,0.995,0.901,461,6287 -Manthelan,37143,1369,39.547,2.002,1.813,530,6672 -Avrilly,3014,134,11.511,1.080,0.978,776,6581 -Russange,57603,1273,3.452,0.591,0.535,914,6937 -Ottange,57529,2984,15.498,1.253,1.134,920,6930 -Saint-Gildas,22291,278,16.041,1.275,1.154,254,6829 -Laix,54290,204,7.578,0.876,0.793,903,6933 -Germolles-sur-Grosne,71217,127,7.228,0.856,0.775,824,6577 -Aumetz,57041,2311,10.350,1.024,0.927,912,6927 -Angevillers,57022,1251,8.730,0.940,0.851,919,6924 -Abbenans,25003,352,11.300,1.070,0.969,958,6719 -Joppécourt,54282,158,6.995,0.842,0.762,900,6926 -Urgosse,32458,242,6.782,0.829,0.751,457,6300 -Sorbets,32437,223,9.351,0.973,0.881,457,6293 -Dyo,71185,344,15.751,1.263,1.144,801,6584 -Loussous-Débat,32218,60,5.088,0.718,0.650,466,6289 -Châlons-sur-Vesle,51109,196,4.479,0.674,0.610,766,6911 -Loubédat,32214,110,9.644,0.989,0.895,459,6300 -Brusson,51094,189,4.882,0.703,0.637,827,6850 -Villers-la-Montagne,54575,1499,18.211,1.358,1.230,907,6931 -Mexy,54367,2251,4.885,0.704,0.637,901,6936 -Douillet,72121,333,19.192,1.394,1.262,472,6799 -Havange,57305,448,9.680,0.990,0.896,919,6926 -Luneau,3154,299,27.239,1.661,1.504,775,6588 -Chenières,54127,634,8.480,0.927,0.839,899,6932 -Cahuzac-sur-Adour,32070,230,6.735,0.826,0.748,455,6285 -Boulange,57096,2495,12.729,1.136,1.029,912,6923 -Isle-Aubigny,10174,184,18.862,1.382,1.251,797,6828 -Sabazan,32354,135,8.300,0.917,0.830,462,6296 -Le Faouët,22057,395,7.666,0.881,0.798,255,6859 -Saint-Symphorien-des-Bois,71483,445,10.608,1.037,0.939,801,6582 -Saint-Cyran-du-Jambot,36188,220,14.221,1.200,1.086,562,6662 -Tiercelet,54525,655,7.790,0.888,0.804,911,6933 -Les Pontets,25464,139,6.393,0.805,0.729,941,6631 -Escherange,57199,604,13.170,1.155,1.046,925,6928 -Cagny,14119,1830,8.538,0.930,0.842,462,6901 -L'Hôpital-le-Mercier,71233,303,16.557,1.295,1.173,775,6589 -Verpillières-sur-Ource,10404,111,18.075,1.353,1.225,820,6771 -Aire-sur-l'Adour,40001,6114,57.988,2.424,2.195,443,6298 -Tasque,32440,256,9.985,1.006,0.911,458,6288 -Lanrivoaré,29119,1465,15.520,1.254,1.135,135,6843 -Serrouville,54504,694,15.601,1.257,1.138,908,6923 -Noé-les-Mallets,10264,116,8.457,0.926,0.838,816,6780 -Lebucquière,62493,237,4.793,0.697,0.631,698,7002 -Tarsac,32439,168,4.549,0.679,0.615,448,6291 -Vaux-lès-Mouron,8464,81,2.230,0.475,0.430,829,6913 -Séailles,32423,47,8.190,0.911,0.825,468,6297 -Saint-Martin-d'Armagnac,32390,241,10.854,1.049,0.950,450,6294 -Beaune-d'Allier,3020,290,24.441,1.574,1.425,694,6572 -Vivoin,72380,950,18.363,1.364,1.235,492,6795 -Essoyes,10141,728,35.930,1.908,1.728,814,6777 -Morfontaine,54385,1095,11.443,1.077,0.975,902,6929 -Gevrolles,21296,178,27.050,1.656,1.499,833,6769 -Ham-sous-Varsberg,57288,2820,6.528,0.813,0.736,967,6904 -Agos-Vidalos,65004,425,6.182,0.791,0.716,448,6222 -Rétonval,76523,196,5.652,0.757,0.685,599,6967 -Lanne-Soubiran,32191,140,6.803,0.830,0.751,449,6297 -Margouët-Meymes,32235,187,17.805,1.343,1.216,466,6299 -Metzeresche,57464,940,9.580,0.985,0.892,941,6918 -Cirfontaines-en-Azois,52130,189,11.702,1.089,0.986,837,6780 -Halstroff,57286,320,10.861,1.049,0.950,952,6929 -Rapale,2B257,151,10.080,1.011,0.915,1218,6187 -Fustérouau,32135,132,7.954,0.898,0.813,457,6293 -Haute-Kontz,57371,586,6.436,0.808,0.732,941,6932 -Valdoie,90099,5340,4.623,0.684,0.619,989,6739 -Villars-en-Azois,52525,68,19.753,1.415,1.281,829,6773 -Ailly-sur-Noye,80010,2849,25.391,1.604,1.452,648,6960 -Fontette,10155,201,19.542,1.407,1.274,823,6777 -Casalabriva,2A071,209,15.813,1.266,1.146,1189,6092 -Campuzan,65126,163,6.504,0.812,0.735,492,6244 -Bazoilles-sur-Meuse,88044,606,21.374,1.472,1.333,899,6804 -Chacenay,10071,47,7.758,0.887,0.803,814,6777 -Betpouy,65090,77,4.121,0.646,0.585,492,6244 -Inglange,57345,432,5.710,0.761,0.689,940,6923 -Momerstroff,57471,279,6.203,0.793,0.718,957,6903 -Loches-sur-Ource,10199,357,13.818,1.183,1.071,811,6772 -Lagarde,57375,190,22.440,1.508,1.365,970,6847 -Saint-Remimont,54486,353,6.763,0.828,0.750,942,6828 -Polisot,10295,326,10.565,1.035,0.937,798,6775 -Sabarros,65381,34,3.665,0.609,0.551,493,6240 -Laslades,65265,351,5.283,0.732,0.663,472,6241 -Champignol-lez-Mondeville,10076,291,44.194,2.116,1.916,827,6779 -Filstroff,57213,780,16.851,1.307,1.183,953,6918 -Villenave-de-Rions,33549,315,2.569,0.510,0.462,435,6404 -Waldweistroff,57739,493,7.729,0.885,0.801,955,6922 -Aboncourt,57001,361,5.929,0.775,0.702,943,6912 -Oberdorff,57516,347,4.239,0.655,0.593,960,6916 -Moreilles,85149,404,19.827,1.417,1.283,388,6598 -Varnéville,55528,54,6.482,0.810,0.733,894,6866 -Saint-Didier-sur-Arroux,71407,237,28.051,1.686,1.527,786,6635 -Laumesfeld,57387,276,8.290,0.916,0.829,948,6925 -Le Mazis,80522,106,3.862,0.626,0.567,611,6974 -Lignan-de-Bazas,33244,396,11.064,1.059,0.959,439,6374 -Helstroff,57312,535,7.866,0.893,0.809,953,6900 -Guerting,57274,860,5.607,0.754,0.683,964,6907 -Montreuil-en-Caux,76449,512,9.384,0.975,0.883,569,6955 -Mégange,57455,165,4.966,0.709,0.642,949,6907 -Lennon,29123,803,22.830,1.521,1.377,187,6816 -Landreville,10187,462,14.234,1.201,1.087,810,6779 -Puydarrieux,65374,218,14.138,1.197,1.084,488,6249 -Celles-sur-Ource,10070,504,9.514,0.982,0.889,804,6776 -Bazeilles-sur-Othain,55034,117,7.706,0.884,0.800,877,6937 -Vigy,57716,1710,17.094,1.316,1.192,941,6904 -Vouhé,79354,397,14.186,1.199,1.086,450,6614 -Duffort,32116,140,9.964,1.005,0.910,489,6252 -Bourlon,62164,1175,12.221,1.113,1.008,710,7008 -Kirsch-lès-Sierck,57364,310,8.884,0.949,0.859,949,6932 -Noiron-sur-Seine,21460,76,11.378,1.074,0.972,807,6761 -Chatenet,17095,228,9.672,0.990,0.896,441,6474 -Monlaur-Bernet,32272,157,12.562,1.128,1.021,499,6255 -Porcelette,57550,2490,13.425,1.166,1.056,965,6902 -Pont-de-l'Arche,27469,4156,9.377,0.975,0.883,566,6914 -Cuélas,32114,124,6.663,0.822,0.744,495,6255 -Saint-Nicolas-de-Redon,44185,3164,22.167,1.499,1.357,324,6742 -Gomelange,57252,507,9.437,0.978,0.885,951,6911 -Marmagne,21389,215,12.927,1.144,1.036,804,6725 -Kirschnaumen,57365,469,19.966,1.422,1.287,950,6931 -Rémeling,57569,302,6.408,0.806,0.730,955,6927 -Mont-Laurent,8306,63,6.864,0.834,0.755,809,6932 -Chanac,48039,1459,71.760,2.696,2.441,733,6375 -Budling,57118,181,5.727,0.762,0.690,943,6920 -Piblange,57542,1030,9.595,0.986,0.893,949,6909 -Han-lès-Juvigny,55226,123,5.462,0.744,0.674,869,6935 -Balot,21044,82,15.520,1.254,1.135,810,6750 -Hunting,57341,732,3.773,0.618,0.560,943,6929 -Planay,21484,72,8.802,0.944,0.855,802,6740 -Libaros,65274,135,9.035,0.957,0.866,487,6239 -Boulay-Moselle,57097,5604,19.566,1.408,1.275,953,6902 -Labergement-lès-Seurre,21332,999,29.030,1.715,1.553,856,6655 -Merrey-sur-Arce,10232,325,8.460,0.926,0.838,807,6777 -La Motte-Saint-Martin,38266,440,15.132,1.238,1.121,916,6434 -Vieuzos,65468,46,4.983,0.711,0.644,494,6242 -Coume,57154,664,14.896,1.229,1.113,964,6907 -Gaussan,65187,116,7.732,0.885,0.801,495,6238 -Bettelainville,57072,628,13.656,1.176,1.065,942,6908 -Gavisse,57245,566,4.156,0.649,0.588,940,6931 -Mur-de-Sologne,41157,1514,53.046,2.318,2.099,591,6698 -Berviller-en-Moselle,57069,478,5.528,0.748,0.677,965,6912 -Buding,57117,591,6.368,0.803,0.727,941,6917 -Coudures,40086,458,11.751,1.091,0.988,415,6296 -Pleuven,29161,2848,13.682,1.177,1.066,174,6778 -Caubous,65136,42,3.870,0.626,0.567,493,6242 -Citou,11092,90,17.696,1.339,1.212,665,6256 -Laran,65261,49,3.408,0.588,0.532,496,6241 -Organ,65336,42,2.706,0.524,0.474,496,6246 -Freistroff,57235,1074,14.721,1.221,1.106,955,6915 -Menskirch,57457,141,4.468,0.673,0.609,948,6918 -Klang,57367,239,4.219,0.654,0.592,945,6917 -Ponsan-Soubiran,32324,95,7.092,0.848,0.768,496,6251 -Peyret-Saint-André,65358,55,6.296,0.799,0.723,497,6251 -Ames,62028,644,3.656,0.609,0.551,659,7047 -Barthe,65068,16,1.373,0.373,0.338,495,6246 -Bazougers,53025,1119,32.001,1.801,1.631,435,6773 -Larroque,65263,103,6.976,0.841,0.761,495,6251 -Saint-Chels,46254,141,18.033,1.352,1.224,605,6385 -Senargent-Mignafans,70487,297,10.804,1.046,0.947,968,6723 -Biol,38044,1402,15.775,1.264,1.144,882,6491 -Chémery-les-Deux,57136,557,10.024,1.008,0.913,949,6917 -Valmunster,57691,98,3.144,0.564,0.511,957,6912 -Puntous,65373,190,8.870,0.948,0.858,495,6247 -Kerling-lès-Sierck,57361,565,18.085,1.354,1.226,947,6924 -Grindorff-Bizing,57259,318,6.843,0.833,0.754,957,6928 -Malling,57437,623,4.535,0.678,0.614,939,6930 -Maylis,40177,317,12.275,1.115,1.010,403,6294 -Nesle-et-Massoult,21451,75,23.634,1.547,1.401,809,6746 -Renung,40240,537,22.250,1.501,1.359,426,6299 -Tournous-Devant,65449,113,4.712,0.691,0.626,490,6244 -Cizos,65148,124,7.675,0.882,0.799,498,6244 -Doazit,40089,860,22.513,1.510,1.367,405,6293 -Guinkirchen,57277,154,5.135,0.721,0.653,948,6907 -Fénery,79118,298,12.764,1.137,1.029,446,6626 -Veckring,57704,683,6.663,0.822,0.744,943,6920 -Anzeling,57025,513,5.767,0.764,0.692,954,6912 -Guizerix,65213,125,7.223,0.855,0.774,493,6251 -Murviel-lès-Béziers,34178,3051,32.459,1.814,1.642,709,6259 -Étais,21252,86,14.174,1.198,1.085,811,6734 -Marcenay,21378,100,9.491,0.981,0.888,804,6754 -Sommette-Eaucourt,2726,191,6.282,0.798,0.723,709,6956 -Kemplich,57359,167,5.534,0.749,0.678,949,6920 -Kernouës,29094,699,7.758,0.887,0.803,160,6856 -Villing,57720,494,4.929,0.707,0.640,964,6914 -Rely,62701,455,4.885,0.704,0.637,656,7054 -Fontaines-les-Sèches,21279,28,13.659,1.176,1.065,800,6742 -Gyé-sur-Seine,10170,495,23.561,1.545,1.399,805,6768 -Condé-Northen,57150,669,10.959,1.054,0.954,952,6901 -Bissey-la-Pierre,21078,74,8.423,0.924,0.837,807,6752 -Launstroff,57388,262,7.865,0.893,0.809,952,6931 -Flesquières,59236,262,6.326,0.801,0.725,710,7003 -Tillay-le-Péneux,28390,326,22.353,1.505,1.363,610,6788 -Ébersviller,57186,941,14.093,1.195,1.082,947,6912 -Trégourez,29291,984,17.595,1.335,1.209,189,6798 -Mécringes,51359,199,10.871,1.050,0.951,741,6858 -Merten,57460,1517,5.273,0.731,0.662,965,6911 -Alzing,57016,397,4.603,0.683,0.618,958,6915 -Bouzonville,57106,3970,13.823,1.183,1.071,960,6916 -Vagney,88486,3932,24.721,1.583,1.433,975,6772 -Holling,57329,439,4.833,0.700,0.634,954,6912 -Oncieu,1279,94,7.558,0.875,0.792,891,6546 -Hauriet,40121,277,7.539,0.874,0.791,404,6301 -Eugénie-les-Bains,40097,452,11.043,1.058,0.958,425,6295 -Hayes,57307,223,11.993,1.102,0.998,948,6901 -Frontenac,46116,67,2.812,0.534,0.483,619,6384 -Saint-François-Lacroix,57610,302,7.337,0.862,0.780,952,6923 -Bucy-lès-Cerny,2132,210,8.748,0.941,0.852,738,6941 -Classun,40082,270,8.915,0.950,0.860,429,6296 -Saint-Martin-de-Sanzay,79277,1082,24.335,1.570,1.422,459,6672 -Dalem,57165,624,7.342,0.862,0.780,965,6911 -Waldwisse,57740,833,11.717,1.090,0.987,955,6928 -Vif,38545,8372,27.334,1.664,1.507,913,6445 -Sarraziet,40289,230,7.096,0.848,0.768,420,6294 -Charleville-sous-Bois,57128,319,12.811,1.139,1.031,946,6908 -La Chapelle-du-Bourgay,76170,129,3.060,0.557,0.504,568,6971 -Montsoué,40196,573,17.994,1.350,1.222,421,6297 -Hargarten-aux-Mines,57296,1119,5.505,0.747,0.676,961,6908 -Saint-Jean-du-Gard,30269,2521,41.588,2.053,1.859,767,6338 -Fargues,40099,334,11.884,1.097,0.993,423,6296 -Mussy-sur-Seine,10261,1031,28.045,1.686,1.527,808,6763 -Buanes,40057,262,6.665,0.822,0.744,423,6296 -Fléré-la-Rivière,36074,560,25.255,1.600,1.449,558,6658 -Mersuay,70343,291,11.797,1.093,0.990,938,6750 -La Tour-du-Meix,39534,231,14.274,1.203,1.089,907,6606 -Flastroff,57215,322,8.431,0.924,0.837,955,6924 -Horsarrieu,40128,688,11.063,1.059,0.959,408,6293 -Eyres-Moncube,40098,371,12.226,1.113,1.008,412,6295 -Sainte-Colombe,40252,683,12.887,1.143,1.035,415,6295 -Bouix,21093,158,15.690,1.261,1.142,806,6760 -Voujeaucourt,25632,3248,9.501,0.981,0.888,983,6713 -Å’uf-en-Ternois,62633,251,8.786,0.944,0.855,642,7029 -Sierck-les-Bains,57650,1733,4.752,0.694,0.628,944,6934 -Moncaup,64390,154,11.495,1.079,0.977,455,6269 -Banos,40024,286,5.766,0.764,0.692,409,6300 -Falck,57205,2480,6.063,0.784,0.710,964,6907 -Wingen-sur-Moder,67538,1629,17.316,1.325,1.200,1019,6881 -Denting,57172,270,9.643,0.988,0.895,959,6901 -Les Riceys,10317,1260,43.083,2.089,1.891,807,6763 -Voiron,38563,20209,22.098,1.496,1.355,901,6475 -Ponson-Debat-Pouts,64451,94,5.771,0.765,0.693,455,6253 -Sénac,65418,299,9.064,0.958,0.867,472,6257 -Ecquetot,27215,381,5.591,0.753,0.682,556,6899 -Hinckange,57326,316,6.072,0.784,0.710,949,6903 -Sainte-Marie-du-Mont,50509,726,27.524,1.670,1.512,391,6930 -Monlezun,32273,198,17.611,1.336,1.210,472,6271 -Saint-Louet-sur-Vire,50504,206,7.460,0.869,0.787,408,6882 -Gomméville,21302,138,9.978,1.005,0.910,808,6763 -Momas,64387,573,14.528,1.213,1.098,424,6268 -Yvoy-le-Marron,41297,693,50.770,2.268,2.053,613,6721 -Walbach,68354,899,5.548,0.750,0.679,1012,6784 -Puits,21511,124,20.808,1.452,1.315,808,6737 -Tauxigny-Saint-Bauld,37254,1665,41.185,2.043,1.850,532,6680 -Ampilly-le-Sec,21012,356,24.399,1.572,1.423,814,6750 -Ugnouas,65457,76,1.594,0.402,0.364,464,6254 -Lescurry,65269,173,5.094,0.718,0.650,468,6252 -Tostat,65446,526,6.298,0.799,0.723,465,6251 -Kœnigsmacker,57370,2233,18.412,1.366,1.237,936,6927 -Pontiacq-Viellepinte,64454,179,7.095,0.848,0.768,452,6255 -Talazac,65438,74,1.563,0.398,0.360,459,6253 -Jacque,65232,74,1.893,0.438,0.397,473,6252 -Saint-Sever-de-Rustan,65397,173,9.919,1.002,0.907,478,6254 -Ombrée d'Anjou,49248,9013,205.216,4.560,4.129,390,6750 -Sainte-Barbe,57607,737,14.171,1.198,1.085,941,6903 -Escarmain,59204,469,6.324,0.800,0.724,740,7012 -Raynans,25481,339,4.044,0.640,0.579,980,6723 -Téterchen,57667,799,8.777,0.943,0.854,960,6911 -Peyrun,65361,86,4.027,0.639,0.579,473,6252 -Bazillac,65073,345,10.326,1.023,0.926,468,6257 -Lacassagne,65242,234,6.641,0.820,0.742,470,6256 -Ottonville,57530,437,15.756,1.263,1.144,960,6907 -Saint-Laurent-Médoc,33424,4580,136.178,3.715,3.364,395,6464 -Coulmier-le-Sec,21201,262,32.009,1.801,1.631,809,6741 -Mansan,65297,42,2.125,0.464,0.420,471,6253 -Vrigne aux Bois,8491,3645,22.674,1.516,1.373,833,6966 -Chaînée-des-Coupis,39090,180,5.217,0.727,0.658,885,6651 -Briastre,59108,743,6.968,0.840,0.761,734,7004 -Fréchède,65178,49,5.459,0.744,0.674,479,6258 -La Capelle-Bonance,12055,88,13.848,1.185,1.073,704,6371 -Creutzwald,57160,13189,26.763,1.647,1.491,971,6904 -Vry,57736,590,15.044,1.235,1.118,944,6902 -Volmerange-lès-Boulay,57730,563,5.952,0.777,0.704,953,6902 -Bouafles,27097,649,12.826,1.140,1.032,586,6902 -Bretigny,21107,904,6.936,0.838,0.759,857,6701 -Saint-Jouan-de-l'Isle,22305,499,8.333,0.919,0.832,316,6807 -Beyren-lès-Sierck,57076,527,9.274,0.969,0.877,939,6933 -Montenach,57479,455,9.194,0.965,0.874,946,6931 -Neuf-Église,63251,294,14.941,1.230,1.114,687,6554 -Bar-sur-Seine,10034,3033,27.599,1.672,1.514,804,6777 -Luttange,57426,903,12.835,1.140,1.032,939,6911 -Montaner,64398,441,19.369,1.401,1.268,459,6253 -Schwerdorff,57640,472,9.419,0.977,0.885,958,6924 -Saint-Maden,22312,230,6.777,0.829,0.751,325,6815 -Casteide-Doat,64173,154,5.371,0.738,0.668,457,6257 -Les Ternes,15235,588,19.003,1.388,1.257,697,6434 -Saint-Julien-du-Pinet,43203,464,17.435,1.329,1.203,783,6453 -Bouilh-Devant,65102,21,3.001,0.551,0.499,479,6253 -Hestroff,57322,454,7.504,0.872,0.790,952,6912 -Laméac,65254,150,5.284,0.732,0.663,475,6251 -Touillon,21641,467,36.842,1.932,1.749,811,6730 -Jézeau,65234,98,12.214,1.112,1.007,492,6204 -Escalans,40093,263,30.218,1.750,1.584,464,6329 -Andrest,65007,1395,6.207,0.793,0.718,461,6249 -Saint-Hubert,57612,232,15.998,1.273,1.153,946,6912 -Vaudreching,57700,546,4.624,0.684,0.619,958,6912 -Drouvin-le-Marais,62278,584,2.116,0.463,0.419,675,7043 -Courteron,10111,106,10.317,1.022,0.925,811,6772 -Laignes,21336,714,40.378,2.023,1.832,800,6745 -Lamastre,7129,2340,25.783,1.616,1.463,822,6431 -Aubérive,51019,232,27.693,1.675,1.517,798,6900 -Ville-sur-Arce,10427,215,16.230,1.282,1.161,807,6777 -Cerbère,66048,1335,8.255,0.915,0.828,714,6150 -Plaines-Saint-Lange,10288,265,10.685,1.040,0.942,812,6770 -Montbard,21425,5334,46.468,2.170,1.965,802,6725 -Hombourg-Budange,57331,563,15.438,1.251,1.133,946,6917 -Gancourt-Saint-Étienne,76297,227,12.627,1.131,1.024,607,6942 -Kanfen,57356,1154,8.509,0.929,0.841,927,6929 -Marlhes,42139,1298,32.632,1.818,1.646,808,6463 -Siarrouy,65425,431,6.351,0.802,0.726,458,6252 -Joyeuse,7110,1709,12.924,1.144,1.036,797,6378 -Verneix,3305,603,30.830,1.767,1.600,677,6593 -Yzeron,69269,1038,10.729,1.043,0.944,822,6513 -Puttelange-lès-Thionville,57557,957,10.663,1.039,0.941,933,6937 -Fécocourt,54190,107,7.980,0.899,0.814,923,6817 -Aubigny-aux-Kaisnes,2032,249,3.745,0.616,0.558,709,6965 -Fligny,8172,184,6.817,0.831,0.752,790,6975 -Boust,57104,1217,7.005,0.842,0.762,929,6932 -Beaumont-Pied-de-Bœuf,53027,184,13.633,1.175,1.064,445,6763 -Chalancon,26067,49,36.026,1.911,1.730,884,6386 -Rodemack,57588,1204,9.946,1.004,0.909,936,6931 -Bansat,63029,251,10.397,1.026,0.929,731,6487 -Mondorff,57475,537,3.838,0.624,0.565,934,6939 -Sorde-l'Abbaye,40306,639,16.316,1.286,1.164,373,6280 -Cousances-les-Forges,55132,1700,18.139,1.356,1.228,856,6835 -Mézilles,89254,568,52.554,2.308,2.090,709,6734 -Roussy-le-Village,57600,1350,12.510,1.126,1.019,929,6932 -Solemont,25548,158,8.219,0.913,0.827,981,6700 -Courcemont,72101,683,19.352,1.400,1.268,505,6788 -Polisy,10296,193,11.449,1.077,0.975,803,6773 -Tarasteix,65439,263,9.842,0.999,0.905,458,6251 -Basse-Rentgen,57574,471,10.462,1.030,0.933,933,6937 -Larrivoire,39280,109,6.447,0.808,0.732,915,6587 -Hettange-Grande,57323,7636,16.280,1.284,1.163,931,6929 -Savoisy,21594,203,25.123,1.595,1.444,803,6736 -Sorel,80737,163,7.948,0.897,0.812,705,6990 -Moumoulous,65325,41,3.360,0.583,0.528,476,6256 -Basse-Ham,57287,2253,10.062,1.010,0.914,935,6926 -Orignac,65338,263,10.100,1.012,0.916,471,6230 -Saint-Lézer,65390,422,11.427,1.076,0.974,461,6255 -Graveron-Sémerville,27298,299,8.067,0.904,0.818,552,6888 -Roncherolles-sur-le-Vivier,76536,1066,5.377,0.738,0.668,567,6932 -Prizy,71361,67,4.304,0.660,0.598,793,6583 -Montceaux-l'Étoile,71307,294,9.758,0.994,0.900,780,6588 -Merschweiller,57459,236,5.778,0.765,0.693,948,6933 -Breistroff-la-Grande,57109,694,10.614,1.037,0.939,935,6931 -Versaugues,71573,196,10.875,1.050,0.951,784,6584 -Saint-Loup-de-Gonois,45287,86,6.237,0.795,0.720,693,6772 -Pujo,65372,638,5.278,0.731,0.662,461,6253 -Camalès,65121,388,4.675,0.688,0.623,464,6254 -Bras,83021,2732,35.849,1.906,1.726,940,6273 -Argancy,57028,1351,11.450,1.077,0.975,932,6903 -Lézignan,65271,346,2.562,0.509,0.461,454,6228 -Avançon,5011,401,22.367,1.505,1.363,955,6390 -Plouégat-Moysan,29183,717,14.939,1.230,1.114,211,6851 -Sabalos,65380,149,2.193,0.471,0.426,467,6246 -Balnot-sur-Laignes,10029,154,10.211,1.017,0.921,798,6773 -Barbazan-Dessus,65063,160,4.219,0.654,0.592,468,6235 -Saint-Jean-de-Losne,21554,1102,0.593,0.245,0.222,871,6669 -Metzervisse,57465,2274,8.976,0.954,0.864,936,6918 -Anrosey,52013,123,11.113,1.061,0.961,898,6754 -Rurange-lès-Thionville,57602,2494,8.865,0.948,0.858,934,6910 -Weiterswiller,67524,524,7.923,0.896,0.811,1021,6870 -Cour-sur-Loire,41069,274,5.963,0.777,0.704,583,6729 -Saint-Chabrais,23185,297,25.051,1.593,1.442,641,6559 -Bousse,57102,3158,8.811,0.945,0.856,933,6911 -Le Palais-sur-Vienne,87113,6043,10.317,1.022,0.925,572,6532 -Cérilly,21125,235,13.867,1.185,1.073,811,6749 -Le Gratteris,25297,179,2.977,0.549,0.497,938,6681 -Sanry-lès-Vigy,57626,531,5.594,0.753,0.682,938,6905 -Charly-Oradour,57129,680,6.771,0.828,0.750,935,6901 -Omerville,95462,316,12.320,1.117,1.011,608,6895 -Rivière-sur-Tarn,12200,1050,26.211,1.630,1.476,708,6344 -Ponson-Dessus,64452,257,10.908,1.051,0.952,454,6250 -Neuville-sur-Seine,10262,448,14.608,1.217,1.102,808,6773 -Yutz,57757,16338,13.976,1.190,1.077,935,6920 -Pouzac,65370,1106,7.570,0.876,0.793,468,6225 -Guénange,57269,7191,8.393,0.922,0.835,930,6916 -Castelvieilh,65131,245,5.335,0.735,0.665,472,6245 -Laloubère,65251,1897,4.059,0.641,0.580,463,6238 -Astugue,65043,261,7.992,0.900,0.815,460,6228 -Guipry-Messac,35176,6887,92.328,3.059,2.770,332,6760 -Ségrie,72332,602,22.117,1.497,1.355,477,6796 -Louit,65285,201,4.980,0.710,0.643,469,6248 -Grenant,52229,149,13.072,1.151,1.042,888,6734 -Chay,25143,213,6.559,0.815,0.738,919,6662 -Cisternes-la-Forêt,63110,466,33.569,1.844,1.670,675,6521 -La Lande-de-Lougé,61217,47,4.979,0.710,0.643,461,6851 -Julos,65236,385,5.952,0.777,0.704,457,6230 -Dun-sur-Auron,18087,3945,49.994,2.251,2.038,663,6641 -Bertrange,57067,2727,6.815,0.831,0.752,930,6916 -Saint-Vaast-la-Hougue,50562,1779,6.519,0.813,0.736,393,6952 -Flévy,57219,567,11.558,1.082,0.980,939,6912 -La Maxe,57452,881,7.493,0.871,0.789,934,6900 -Ennery,57193,2010,7.303,0.860,0.779,932,6908 -Recologne,70440,31,1.130,0.338,0.306,909,6723 -Failly,57204,501,6.742,0.827,0.749,938,6899 -Combres-sous-les-Côes,55121,118,5.101,0.719,0.651,893,6888 -Ay-sur-Moselle,57043,1499,4.711,0.691,0.626,933,6911 -Frasseto,2A119,115,16.594,1.297,1.174,1200,6111 -Les Aix-d'Angillon,18003,1926,14.709,1.221,1.106,667,6675 -Valmestroff,57689,289,3.787,0.619,0.560,938,6923 -Bellaffaire,4026,148,13.213,1.157,1.048,957,6370 -Volstroff,57733,1969,12.226,1.113,1.008,938,6916 -Distroff,57179,1745,7.937,0.897,0.812,938,6922 -Gez-ez-Angles,65203,28,2.409,0.494,0.447,458,6225 -Lansac,65259,177,3.917,0.630,0.570,468,6240 -Osmets,65342,86,4.923,0.706,0.639,476,6249 -Luzillat,63201,1110,23.686,1.549,1.402,729,6537 -Trémery,57677,1060,7.675,0.882,0.799,937,6913 -La Grimaudière,86108,387,19.334,1.400,1.268,471,6640 -Chailly-lès-Ennery,57125,364,7.291,0.859,0.778,939,6905 -Tonneins,47310,9055,34.816,1.878,1.700,484,6369 -Kuntzig,57372,1310,4.417,0.669,0.606,935,6920 -Haute-Amance,52242,950,46.433,2.169,1.964,884,6752 -Genevrières,52213,133,13.028,1.149,1.040,897,6741 -Elzange,57191,731,3.979,0.635,0.575,938,6922 -Viens,84144,629,35.148,1.887,1.709,908,6313 -Grimault,89194,122,23.977,1.559,1.412,777,6729 -Pierrecourt,70409,109,15.613,1.258,1.139,896,6729 -Pierremont-sur-Amance,52388,145,16.501,1.293,1.171,899,6751 -Belmont,52043,57,7.388,0.865,0.783,893,6737 -Moulédous,65324,209,7.033,0.844,0.764,473,6241 -Bize,52051,91,2.088,0.460,0.416,897,6751 -Fayl-Billot,52197,1326,43.301,2.095,1.897,900,6745 -Trébons,65451,754,10.321,1.023,0.926,465,6228 -Oursbelille,65350,1190,11.485,1.079,0.977,461,6249 -Bordères-sur-l'Échez,65100,5151,16.158,1.280,1.159,463,6247 -Barbazan-Debat,65062,3449,9.854,0.999,0.905,468,6239 -Saint-Sever-du-Moustier,12249,203,25.974,1.622,1.469,672,6296 -Ossun-ez-Angles,65345,47,2.169,0.469,0.425,460,6226 -Argillières,70027,76,9.656,0.989,0.895,895,6733 -Woippy,57751,14103,14.627,1.217,1.102,930,6903 -Les Loges,52290,137,10.950,1.053,0.953,885,6746 -Savigny,52467,60,6.116,0.787,0.713,898,6737 -Plesnois,57546,825,3.080,0.559,0.506,928,6901 -Lantéfontaine,54302,760,8.277,0.916,0.829,910,6909 -Sancy,54491,321,13.291,1.160,1.050,914,6920 -La Réole,33352,4265,12.480,1.124,1.018,459,6391 -Jœuf,54280,6497,3.180,0.568,0.514,921,6908 -Valleroy,52503,22,3.473,0.593,0.537,900,6738 -Saulny,57634,1389,9.804,0.997,0.903,928,6901 -Piennes,54425,2477,4.818,0.699,0.633,901,6915 -Aubarède,65044,295,4.880,0.703,0.637,476,6244 -Landres,54295,977,8.032,0.902,0.817,905,6915 -Sainte-Colombe-en-Auxois,21544,57,6.352,0.802,0.726,809,6704 -Landévennec,29104,332,13.814,1.183,1.071,160,6822 -Bisten-en-Lorraine,57087,244,4.512,0.676,0.612,962,6901 -Algrange,57012,6144,6.944,0.839,0.760,921,6921 -Angos,65010,228,2.999,0.551,0.499,472,6239 -Rougeux,52438,113,9.837,0.998,0.904,890,6748 -Maurupt-le-Montois,51358,580,17.922,1.348,1.220,833,6851 -Mercy-le-Haut,54363,274,13.488,1.169,1.058,903,6922 -Fluquières,2317,222,5.262,0.730,0.661,713,6967 -Champsevraine,52083,733,40.927,2.036,1.843,886,6740 -Maizières-sur-Amance,52303,100,8.038,0.902,0.817,897,6751 -Saint-Ignat,63362,880,16.072,1.276,1.155,721,6534 -Tornay,52493,33,7.374,0.864,0.782,895,6733 -Saint-Hilaire,25518,162,2.605,0.514,0.465,946,6698 -Suriauville,88461,219,13.497,1.169,1.058,913,6787 -Chaudenay,52119,340,4.679,0.689,0.624,890,6748 -Saulles,52464,45,17.315,1.325,1.200,888,6734 -Hatrize,54253,770,7.450,0.869,0.787,909,6903 -Loisail,61229,126,5.229,0.728,0.659,523,6824 -Hitte,65222,165,2.934,0.545,0.493,470,6231 -Séméac,65417,4902,6.225,0.794,0.719,466,6242 -Lannux,32192,244,12.915,1.144,1.036,437,6289 -Les Salles-du-Gardon,30307,2606,21.142,1.464,1.326,785,6343 -Poinson-lès-Fayl,52394,227,12.351,1.119,1.013,893,6743 -Antist,65016,171,2.389,0.492,0.445,468,6229 -Olley,54408,247,9.519,0.982,0.889,901,6898 -Hagondange,57283,9275,5.489,0.746,0.675,932,6911 -Bray,27109,384,5.847,0.770,0.697,541,6890 -Anoux,54018,260,9.913,1.002,0.907,907,6910 -Villers-Saint-Martin,25626,216,8.947,0.952,0.862,957,6697 -Frécourt,52207,94,6.233,0.795,0.720,882,6763 -Gilley,52223,68,10.493,1.031,0.933,899,6734 -Champlitte,70122,1675,129.690,3.625,3.282,893,6737 -Brianny,21108,118,7.543,0.874,0.791,802,6703 -Bosc-Hyons,76124,428,5.651,0.757,0.685,601,6931 -Seigny,21598,173,8.066,0.904,0.818,806,6722 -Champ-Haut,61088,50,5.136,0.721,0.653,503,6852 -Saint-Martin,65392,439,8.315,0.918,0.831,460,6234 -Chaillon,55096,111,11.452,1.077,0.975,897,6876 -Pompaire,79213,2010,12.836,1.140,1.032,451,6616 -Ranguevaux,57562,836,10.185,1.016,0.920,920,6914 -Alise-Sainte-Reine,21008,586,3.817,0.622,0.563,814,6716 -La Croix-sur-Gartempe,87052,190,12.751,1.137,1.029,543,6566 -Venarey-les-Laumes,21663,2899,10.358,1.024,0.927,807,6714 -Arnayon,26012,26,19.683,1.412,1.278,881,6379 -Damery,51204,1444,15.464,1.252,1.134,766,6885 -Parux,54419,70,4.374,0.666,0.603,989,6833 -Lantilly,21341,107,9.197,0.965,0.874,804,6715 -Moncontour,22153,868,0.486,0.222,0.201,283,6822 -Sarlabous,65405,67,3.405,0.587,0.531,479,6223 -Oléac-Dessus,65333,126,3.766,0.618,0.560,473,6234 -Champ-d'Oiseau,21137,88,4.884,0.703,0.637,803,6719 -Preutin-Higny,54436,136,7.093,0.848,0.768,904,6919 -Montois-la-Montagne,57481,2636,7.050,0.845,0.765,921,6908 -Montceaux,1258,1182,10.070,1.010,0.914,842,6558 -Jeandelize,54277,373,6.730,0.826,0.748,905,6903 -Grignon,21308,221,11.760,1.092,0.989,806,6716 -Queaux,86203,506,53.363,2.325,2.105,522,6581 -Saint-Rémy-de-Provence,13100,9612,89.926,3.019,2.733,848,6297 -Massingy-lès-Semur,21394,168,8.442,0.925,0.838,806,6716 -Marcigny-sous-Thil,21380,65,5.083,0.718,0.650,806,6700 -La Groutte,18107,129,2.929,0.545,0.493,664,6621 -Fameck,57206,14010,12.788,1.138,1.030,927,6914 -Marigny-le-Cahouët,21386,316,19.282,1.398,1.266,806,6706 -Tarzy,8440,165,10.266,1.020,0.924,794,6974 -Rombas,57591,9857,11.730,1.090,0.987,922,6908 -Villars-et-Villenotte,21689,176,7.550,0.875,0.792,803,6715 -Ossenx,64434,51,4.044,0.640,0.579,392,6261 -Marquerie,65298,78,3.533,0.598,0.541,475,6244 -Artiguemy,65037,94,3.000,0.551,0.499,477,6230 -La Baronnie,27277,705,11.281,1.069,0.968,571,6875 -Sainte-Feyre,23193,2472,30.189,1.749,1.584,618,6566 -Esconnets,65162,37,2.298,0.483,0.437,476,6223 -Benoisey,21064,107,5.765,0.764,0.692,803,6720 -Les Angles,65011,122,3.064,0.557,0.504,457,6225 -Placey,25455,198,2.572,0.510,0.462,916,6687 -Pouillenay,21500,573,15.066,1.236,1.119,812,6711 -Sainte-Marie,32388,424,22.393,1.506,1.364,531,6288 -Ménétreux-le-Pitois,21404,431,6.649,0.821,0.743,811,6717 -Artigues,65038,18,1.444,0.383,0.347,455,6223 -Saint-Jouan-des-Guérets,35284,2622,9.278,0.970,0.878,332,6844 -Sarrouilles,65410,527,4.356,0.664,0.601,467,6242 -Boigny-sur-Bionne,45034,2158,7.529,0.873,0.790,629,6760 -Illange,57343,1892,5.686,0.759,0.687,930,6918 -Fèves,57211,1074,4.804,0.698,0.632,930,6904 -Auboué,54028,2506,4.510,0.676,0.612,918,6905 -Héming,57314,500,3.686,0.611,0.553,992,6853 -Éringes,21248,74,6.036,0.782,0.708,812,6723 -Saint-Jeannet,4181,59,29.137,1.718,1.556,947,6327 -Knutange,57368,3199,2.427,0.496,0.449,921,6919 -Semur-en-Auxois,21603,4132,19.180,1.394,1.262,802,6716 -Oroix,65341,121,9.016,0.956,0.866,455,6247 -Montigny-sur-Armançon,21431,152,8.247,0.914,0.828,805,6704 -Roilly,21529,48,4.546,0.679,0.615,800,6703 -Mont-Bonvillers,54084,949,7.107,0.849,0.769,907,6920 -Montigny-Montfort,21429,302,17.179,1.319,1.194,803,6721 -Soccia,2A282,145,27.891,1.681,1.522,1191,6145 -Boulin,65104,284,2.516,0.505,0.457,467,6243 -Le Renouard,61346,198,14.514,1.213,1.098,486,6875 -Fresnes,21287,169,13.273,1.160,1.050,806,6722 -Rochefort-Montagne,63305,876,17.644,1.337,1.211,684,6511 -Bénac,65080,534,7.993,0.900,0.815,456,6232 -Grand-Verly,2783,138,3.798,0.620,0.561,743,6984 -Aurensan,65048,775,7.207,0.855,0.774,465,6251 -Saint-Trimoël,22332,533,8.615,0.934,0.846,292,6826 -Touffreville,27649,348,10.677,1.040,0.942,587,6917 -Sainte-Colombe-la-Commanderie,27524,835,10.846,1.048,0.949,549,6894 -Anderny,54015,254,9.676,0.990,0.896,908,6920 -Magny-la-Ville,21365,78,3.714,0.613,0.555,808,6711 -Juilly,21329,47,4.525,0.677,0.613,807,6712 -Juillan,65235,4137,8.237,0.914,0.828,456,6237 -Réaup-Lisse,47221,604,71.038,2.683,2.429,471,6339 -Pont-et-Massène,21497,184,6.161,0.790,0.715,803,6710 -Florange,57221,11895,13.177,1.155,1.046,929,6919 -La Javie,4097,397,37.418,1.947,1.763,963,6349 -Alvimare,76002,620,6.688,0.823,0.745,530,6950 -Giraumont,54227,1346,7.727,0.885,0.801,914,6900 -Gourgue,65207,61,1.556,0.397,0.359,477,6231 -Nogent-lès-Montbard,21456,155,6.468,0.810,0.733,802,6725 -Sadournin,65383,178,12.562,1.128,1.021,492,6249 -Colombe-lès-Vesoul,70162,460,8.042,0.903,0.818,941,6727 -Bettainvillers,54066,374,4.552,0.679,0.615,910,6914 -Trieux,54533,2533,8.834,0.946,0.857,912,6919 -Chelle-Spou,65143,119,4.620,0.684,0.619,475,6232 -Abbéville-lès-Conflans,54002,223,7.894,0.894,0.809,909,6903 -Lavieu,42117,117,4.504,0.676,0.612,779,6495 -Fain-lès-Montbard,21259,300,7.575,0.876,0.793,807,6723 -Étrelles-et-la-Montbleuse,70222,78,6.296,0.799,0.723,915,6715 -Vitry-sur-Orne,57724,3015,7.691,0.883,0.799,926,6912 -Villeneuve-sous-Charigny,21696,91,3.206,0.570,0.516,805,6706 -Chassey,21151,88,6.652,0.821,0.743,809,6711 -Moyeuvre-Petite,57492,468,5.448,0.743,0.673,919,6912 -Ozerailles,54413,148,6.368,0.803,0.727,906,6905 -Pouyastruc,65369,698,11.835,1.095,0.991,469,6246 -Clouange,57143,3602,3.007,0.552,0.500,926,6911 -Talange,57663,7699,3.719,0.614,0.556,932,6909 -Roncourt,57593,997,6.736,0.826,0.748,924,6903 -Tarbes,65440,40318,15.336,1.247,1.129,463,6245 -Hauban,65216,109,2.183,0.470,0.426,470,6227 -Bazet,65072,1710,2.864,0.539,0.488,464,6248 -Ballay,8045,282,10.408,1.027,0.930,828,6927 -Beaudricourt,62091,92,4.579,0.681,0.617,659,7018 -Courcelles-lès-Montbard,21204,77,6.159,0.790,0.715,807,6723 -Bordes,65101,758,11.226,1.067,0.966,472,6239 -Azereix,65057,989,15.223,1.242,1.125,457,6240 -Moranville,55356,109,6.760,0.828,0.750,885,6899 -Paréac,65355,59,2.404,0.494,0.447,457,6230 -Martigues,13056,48783,72.723,2.714,2.457,869,6249 -Gray,70279,5482,20.328,1.435,1.299,898,6703 -Xivry-Circourt,54598,275,12.278,1.115,1.010,899,6920 -Braux,21101,164,12.961,1.146,1.038,809,6705 -Avril,54036,1118,20.281,1.433,1.297,917,6916 -Mondelange,57474,5739,4.085,0.643,0.582,933,6911 -Orincles,65339,335,5.803,0.767,0.694,457,6230 -Gondrecourt-Aix,54231,178,12.339,1.118,1.012,903,6910 -Vitrac,63464,345,13.187,1.156,1.047,691,6544 -Orleix,65340,2123,8.342,0.919,0.832,467,6245 -Saint Martin de l'If,76289,1686,22.849,1.522,1.378,541,6940 -Sère-Lanso,65421,52,4.173,0.650,0.589,455,6223 -Dours,65156,226,5.023,0.713,0.646,468,6252 -Polminhac,15154,1151,29.066,1.716,1.554,670,6426 -Lathuile,74147,1028,8.737,0.941,0.852,948,6528 -Visker,65479,334,4.181,0.651,0.589,462,6233 -Montgermont,35189,3296,4.685,0.689,0.624,349,6793 -Sagy,71379,1238,34.401,1.867,1.690,878,6618 -Norroy-le-Veneur,57511,1018,8.452,0.925,0.838,923,6902 -Horgues,65223,1195,4.504,0.676,0.612,462,6237 -Ibos,65226,2890,33.125,1.832,1.659,455,6247 -Peyraube,65357,162,3.483,0.594,0.538,477,6238 -Hiis,65221,247,3.050,0.556,0.503,465,6231 -Jans,44076,1342,33.403,1.840,1.666,357,6737 -Chelle-Debat,65142,212,8.783,0.943,0.854,474,6251 -Nilvange,57508,4758,2.833,0.536,0.485,920,6920 -Plouyé,29211,686,37.577,1.951,1.766,198,6827 -Castillon,65135,81,3.378,0.585,0.530,473,6226 -Conflans-en-Jarnisy,54136,2358,8.794,0.944,0.855,906,6898 -Uckange,57683,6793,5.498,0.746,0.675,930,6918 -Crevans-et-la-Chapelle-lès-Granges,70187,264,3.863,0.626,0.567,971,6721 -Lommerange,57411,285,8.142,0.908,0.822,917,6916 -Mont-Dauphin,5082,154,0.589,0.244,0.221,988,6403 -Craonne,2234,80,8.679,0.938,0.849,757,6926 -Lamouilly,55275,92,4.739,0.693,0.627,862,6943 -Richemont,57582,2013,8.518,0.929,0.841,930,6916 -Huclier,62462,133,3.397,0.587,0.531,654,7037 -Saint-Euphrône,21547,181,11.022,1.057,0.957,806,6707 -Lanespède,65256,148,4.519,0.677,0.613,479,6233 -Bartrès,65070,502,7.367,0.864,0.782,451,6229 -Saint-Martin-de-la-Cluze,38115,713,16.486,1.292,1.170,912,6438 -Arrodets-ez-Angles,65033,112,4.632,0.685,0.620,460,6223 -Bucy-le-Roi,45058,169,4.691,0.689,0.624,621,6774 -Coti-Chiavari,2A098,748,62.619,2.519,2.281,1185,6095 -Marange-Silvange,57443,5993,15.224,1.242,1.125,927,6909 -Averan,65052,69,4.298,0.660,0.598,455,6232 -Velet,70529,384,6.074,0.784,0.710,891,6705 -Saint-Ail,54469,437,7.389,0.865,0.783,921,6901 -Thuy,65443,19,0.549,0.236,0.214,476,6243 -Marseillan,65301,249,4.469,0.673,0.609,472,6248 -Campigneulles-les-Grandes,62206,292,5.367,0.737,0.667,607,7039 -Oueilloux,65346,178,4.406,0.668,0.605,471,6233 -Saint-Michel-de-Dèze,48173,248,14.028,1.192,1.079,771,6353 -Neuilh,65328,98,2.369,0.490,0.444,460,6223 -Pintac,65364,23,1.499,0.390,0.353,456,6247 -Champvans,70125,183,7.290,0.859,0.778,897,6703 -Vieux-Vy-sur-Couesnon,35355,1194,21.640,1.481,1.341,369,6813 -Missery,21417,103,9.701,0.991,0.897,806,6692 -Feuguerolles,27241,178,8.203,0.912,0.826,558,6895 -Nantilly,70376,488,9.931,1.003,0.908,892,6709 -Montot,70368,135,10.107,1.012,0.916,895,6720 -Cabanac,65115,285,5.653,0.757,0.685,475,6244 -Gaudreville-la-Rivière,27281,225,6.696,0.824,0.746,555,6874 -Collongues,65151,147,2.175,0.469,0.425,471,6247 -Amnéville,57019,10443,10.146,1.014,0.918,922,6907 -Saint-Caprais,3222,89,20.024,1.424,1.289,682,6603 -Montreuillon,58179,268,35.741,1.903,1.723,764,6675 -Bagas,33024,290,3.666,0.609,0.551,458,6397 -Souyeaux,65436,305,6.155,0.790,0.715,472,6242 -Vereux,70546,230,8.999,0.955,0.865,896,6717 -Reillanne,4160,1653,39.093,1.990,1.802,911,6310 -Rosselange,57597,2712,5.365,0.737,0.667,924,6911 -Mézilhac,7158,92,26.696,1.645,1.489,809,6416 -Fontoy,57226,3023,17.000,1.312,1.188,921,6921 -Rossfeld,67412,991,6.352,0.802,0.726,1041,6812 -Bouhans-et-Feurg,70080,249,10.003,1.007,0.912,890,6714 -Aureilhan,65047,7783,9.539,0.983,0.890,466,6245 -Vatierville,76724,130,4.538,0.678,0.614,595,6967 -Fléville-Lixières,54198,311,14.695,1.220,1.105,906,6911 -Ricaud,65378,65,3.297,0.578,0.523,477,6231 -Saint-Connec,22285,255,11.250,1.068,0.967,263,6802 -Tournay,65447,1264,14.368,1.207,1.093,480,6235 -Cresancey,70185,182,9.679,0.990,0.896,900,6701 -Autoreille,70039,328,10.099,1.012,0.916,916,6700 -Boncourt,54082,182,6.720,0.825,0.747,905,6899 -Ternat,52486,62,7.991,0.900,0.815,858,6761 -Vars,70523,201,16.029,1.274,1.153,887,6717 -Dorans,90035,729,3.820,0.622,0.563,990,6728 -Battrans,70054,230,5.423,0.741,0.671,899,6705 -Tardes,23251,137,21.608,1.480,1.340,650,6558 -Homécourt,54263,6167,4.459,0.672,0.608,919,6907 -Doncourt-lès-Longuyon,54172,303,5.561,0.751,0.680,898,6930 -Mouaville,54389,98,8.591,0.933,0.845,902,6903 -Moineville,54371,1085,8.344,0.919,0.832,917,6904 -Annéot,89011,133,6.135,0.788,0.713,768,6714 -Blies-Guersviller,57093,630,3.686,0.611,0.553,999,6900 -Mérilheu,65310,252,3.367,0.584,0.529,471,6226 -Merey,27400,347,8.670,0.937,0.848,584,6873 -Lhez,65272,77,0.870,0.297,0.269,472,6238 -Grosbliederstroff,57260,3326,13.090,1.152,1.043,992,6901 -Poumarous,65367,152,5.621,0.755,0.684,472,6232 -Montureux-et-Prantigny,70371,209,12.239,1.114,1.009,900,6715 -Montignac,65321,137,1.099,0.334,0.302,469,6237 -Lourdes,65286,13651,36.895,1.933,1.750,453,6230 -Soues,65433,3046,3.924,0.631,0.571,464,6239 -Congrier,53073,904,24.592,1.579,1.430,395,6753 -Lixing-lès-Rouhling,57408,927,4.292,0.659,0.597,990,6902 -Chargey-lès-Gray,70132,710,16.621,1.298,1.175,896,6712 -Charencey,21144,30,4.844,0.701,0.635,827,6704 -Huêtre,45166,280,13.191,1.156,1.047,608,6771 -Saint-Martial-de-Vitaterne,17363,550,2.816,0.534,0.483,433,6490 -Ancier,70018,495,4.512,0.676,0.612,900,6709 -Lizos,65276,112,1.745,0.420,0.380,468,6243 -Villeron,95675,748,5.628,0.755,0.684,667,6886 -Petite-Rosselle,57537,6358,5.032,0.714,0.646,983,6908 -Moimay,70349,235,6.270,0.797,0.722,954,6724 -Kerbach,57360,1197,4.439,0.671,0.608,990,6901 -Saint-Jean-en-Royans,26307,2918,28.155,1.689,1.529,875,6436 -Denèvre,70204,169,5.807,0.767,0.694,899,6719 -Apremont,70024,467,14.476,1.211,1.096,888,6702 -Francheville,21284,278,32.174,1.806,1.635,837,6706 -Soréac,65430,52,2.376,0.491,0.445,471,6251 -Grainville-Ymauville,76317,442,6.340,0.801,0.725,511,6952 -Achey,70003,71,6.985,0.841,0.761,897,6723 -Mercey-sur-Saône,70342,134,7.740,0.886,0.802,904,6719 -Lagarde,65244,518,4.909,0.705,0.638,457,6249 -Auvet-et-la-Chapelotte,70043,243,14.430,1.209,1.095,891,6712 -Saint-Derrien,29244,808,12.301,1.116,1.010,172,6853 -L'Hôpital,57336,5411,4.007,0.637,0.577,971,6901 -Saint-Étienne-de-Cuines,73231,1192,20.602,1.445,1.308,950,6478 -Freyming-Merlebach,57240,13004,9.085,0.959,0.868,975,6901 -Cluny,71137,4753,23.837,1.554,1.407,832,6594 -Rigny,70446,590,12.752,1.137,1.029,901,6712 -Schœneck,57638,2623,4.048,0.640,0.579,986,6907 -Delain,70201,222,12.195,1.112,1.007,898,6727 -Stiring-Wendel,57660,11991,3.601,0.604,0.547,988,6908 -Arrayou-Lahitte,65247,108,4.872,0.703,0.637,459,6228 -Chavaroux,63107,470,4.077,0.643,0.582,719,6529 -Framont,70252,174,11.695,1.089,0.986,895,6720 -Roche-en-Régnier,43164,501,26.825,1.649,1.493,777,6460 -Eth,59217,335,2.834,0.536,0.485,748,7025 -Uzer,65459,106,3.607,0.605,0.548,472,6223 -Diesen,57765,1064,5.466,0.744,0.674,967,6904 -La Baffe,88028,648,9.029,0.956,0.866,966,6794 -Hourc,65225,111,2.006,0.451,0.408,468,6243 -Cocheren,57144,3527,5.627,0.755,0.684,979,6900 -Bonnemazon,65096,64,5.018,0.713,0.646,475,6227 -Behren-lès-Forbach,57058,6578,5.555,0.750,0.679,986,6906 -Domaize,63136,389,14.604,1.216,1.101,743,6511 -Crimolois,21213,796,3.594,0.603,0.546,862,6689 -Rosbruck,57596,777,1.530,0.394,0.357,982,6902 -Le Merzer,22150,968,12.927,1.144,1.036,250,6849 -Lohuec,22132,262,17.520,1.332,1.206,216,6836 -Calanhel,22024,211,14.706,1.221,1.106,220,6837 -Locarn,22128,405,32.572,1.817,1.645,231,6823 -Germigney,70265,166,15.226,1.242,1.125,888,6698 -Le Plessier-sur-Bulles,60497,215,3.893,0.628,0.569,652,6934 -Bulat-Pestivien,22023,430,31.708,1.792,1.623,233,6837 -Gray-la-Ville,70280,962,3.953,0.633,0.573,892,6708 -Le Fœil,22059,1439,21.896,1.489,1.348,261,6826 -Flin,54199,376,11.462,1.078,0.976,972,6831 -Derbamont,88129,109,6.832,0.832,0.753,944,6802 -Suisse,57662,105,5.030,0.714,0.646,963,6881 -Bernac-Dessus,65084,293,4.668,0.688,0.623,465,6233 -Martigny-les-Gerbonvaux,88290,107,8.935,0.951,0.861,905,6820 -Le Val-de-Guéblange,57267,860,19.109,1.391,1.259,991,6885 -Jarnac,16167,4413,11.951,1.100,0.996,456,6515 -Lespouey,65270,211,2.982,0.550,0.498,468,6238 -Guenviller,57271,651,4.741,0.693,0.627,978,6895 -Loucrup,65281,222,3.728,0.615,0.557,462,6228 -Le Maisnil,59371,643,3.514,0.597,0.541,692,7057 -Hymont,88246,477,4.213,0.653,0.591,934,6801 -Riquewihr,68277,1082,17.029,1.314,1.190,1013,6795 -Neuville-Day,8321,160,7.688,0.883,0.799,823,6937 -Ommeray,57524,122,10.161,1.015,0.919,970,6852 -Mazerulles,54358,269,6.378,0.804,0.728,947,6855 -Eincheville,57189,220,6.778,0.829,0.751,962,6882 -Lanrivain,22115,461,37.556,1.951,1.766,238,6828 -Ambrines,62027,252,4.572,0.681,0.617,661,7022 -Carnoët,22031,672,42.037,2.064,1.869,221,6827 -Saint-Pompont,24488,394,28.109,1.688,1.528,554,6407 -Vielle-Adour,65464,509,5.821,0.768,0.695,468,6230 -Xanrey,57754,117,7.797,0.889,0.805,964,6854 -Plappeville,57545,2009,2.523,0.506,0.458,927,6896 -Valhey,54541,174,6.239,0.795,0.720,957,6850 -Racrange,57560,595,7.268,0.858,0.777,970,6874 -Ozon,65353,285,9.112,0.961,0.870,475,6232 -La Chapelle-sous-Uchon,71096,183,16.611,1.297,1.174,798,6637 -Flétrange,57217,947,6.099,0.786,0.712,959,6892 -Arcizac-Adour,65019,536,5.115,0.720,0.652,465,6233 -Lanfains,22099,1085,22.369,1.505,1.363,262,6826 -Gonez,65204,29,1.126,0.338,0.306,473,6241 -Arès,33011,6202,49.096,2.230,2.019,381,6425 -Layrisse,65268,180,3.385,0.586,0.531,460,6232 -Mouchin,59419,1397,9.221,0.967,0.876,718,7047 -Espieilh,65167,26,2.110,0.462,0.418,475,6225 -La Harmoye,22073,377,17.838,1.344,1.217,260,6819 -Quintin,22262,2815,3.114,0.562,0.509,262,6827 -Bours,65108,811,4.709,0.691,0.626,463,6247 -Adé,65002,801,7.510,0.872,0.790,454,6230 -Lanne,65257,585,5.767,0.764,0.692,455,6232 -Aussonce,8032,214,19.456,1.404,1.271,797,6920 -Clarac,65149,180,6.344,0.802,0.726,479,6238 -Insviller,57347,179,9.503,0.981,0.888,985,6871 -Duault,22052,359,21.899,1.490,1.349,220,6825 -Hautaget,65217,54,1.353,0.370,0.335,492,6220 -Louey,65284,976,6.080,0.785,0.711,459,6237 -Maison-Roland,80502,108,5.020,0.713,0.646,631,7005 -Canihuel,22029,360,32.493,1.814,1.642,247,6817 -Macornay,39306,980,4.688,0.689,0.624,895,6621 -Saint-Bihy,22276,261,8.383,0.922,0.835,261,6826 -Sinzos,65426,146,4.190,0.652,0.590,472,6241 -La Voivre,88519,692,5.848,0.770,0.697,988,6812 -Magoar,22139,85,7.870,0.893,0.809,244,6827 -Saint-Connan,22284,300,13.706,1.178,1.067,249,6829 -Crest,26108,8380,23.696,1.549,1.402,863,6406 -Boqueho,22011,1081,27.623,1.673,1.515,260,6839 -Merville,31341,5367,30.944,1.771,1.603,567,6293 -Pagny-sur-Meuse,55398,1026,18.831,1.381,1.250,903,6848 -Aiton,73007,1686,16.307,1.285,1.163,955,6504 -Plusquellec,22243,528,26.855,1.650,1.494,222,6833 -Arcon,42008,109,19.192,1.394,1.262,767,6548 -Le Leslay,22126,158,5.087,0.718,0.650,260,6829 -Bayecourt,88040,257,7.093,0.848,0.768,960,6801 -Bolazec,29012,205,17.558,1.334,1.208,212,6832 -Cohiniac,22045,365,12.573,1.129,1.022,259,6832 -Guermange,57272,93,18.639,1.374,1.244,977,6862 -Plésidy,22189,612,26.230,1.630,1.476,250,6831 -Saint-Vincent,64498,398,16.725,1.302,1.179,445,6233 -Senven-Léhart,22335,233,12.726,1.136,1.029,250,6834 -Olby,63257,778,17.610,1.336,1.210,691,6520 -Maxstadt,57453,325,7.854,0.892,0.808,978,6891 -Boulogne-la-Grasse,60093,475,9.418,0.977,0.885,677,6947 -Domnom-lès-Dieuze,57181,82,6.658,0.821,0.743,982,6870 -Saint-Fiacre,22289,214,9.793,0.996,0.902,255,6833 -Bettes,65091,52,3.391,0.586,0.531,473,6223 -La Roquebrussanne,83108,2578,37.238,1.942,1.758,938,6250 -Mancenans-Lizerne,25366,191,6.076,0.785,0.711,985,6693 -Bourbriac,22013,2335,73.212,2.724,2.466,242,6842 -Saint-Servais,22328,409,28.306,1.694,1.534,228,6824 -Vantoux,57693,868,2.442,0.497,0.450,937,6896 -Ordizan,65335,551,5.920,0.774,0.701,465,6228 -Sadroc,19178,925,19.323,1.399,1.267,589,6464 -Decize,58095,5519,48.347,2.213,2.004,741,6633 -Saint-Adrien,22271,356,10.023,1.008,0.913,249,6840 -Pont-Melvez,22249,609,23.564,1.545,1.399,233,6840 -La Chaux-en-Bresse,39132,37,2.078,0.459,0.416,889,6640 -Mignéville,54368,193,6.481,0.810,0.733,978,6833 -Vilsberg,57721,361,4.966,0.709,0.642,1013,6864 -Luc,65290,211,4.944,0.708,0.641,469,6233 -Oléac-Debat,65332,168,1.976,0.447,0.405,468,6245 -Castéra-Lectourois,32082,347,18.907,1.384,1.253,508,6327 -Argelès-Bagnères,65024,115,2.642,0.517,0.468,471,6226 -Maël-Pestivien,22138,390,31.849,1.796,1.626,238,6828 -Niderhoff,57504,281,5.344,0.736,0.666,995,6842 -Artigueloutan,64059,1084,8.101,0.906,0.820,436,6248 -Dampierre-en-Bresse,71168,171,11.062,1.059,0.959,866,6640 -Plounévézel,29205,1254,24.407,1.573,1.424,214,6825 -Plainfaing,88349,1706,38.584,1.977,1.790,1003,6786 -Callac,22025,2210,33.496,1.842,1.668,229,6836 -Saléchan,65398,265,4.122,0.646,0.585,507,6209 -Le Vieux-Bourg,22386,787,25.700,1.614,1.461,253,6828 -Héronchelles,76359,138,6.688,0.823,0.745,582,6941 -Moyenvic,57490,374,14.490,1.212,1.097,962,6857 -Domremy-la-Canne,55162,36,3.085,0.559,0.506,895,6915 -Courcelles,54140,103,4.327,0.662,0.599,924,6811 -Plouvara,22234,1148,23.019,1.527,1.383,261,6836 -Andoins,64021,637,12.304,1.117,1.011,441,6249 -Brin-sur-Seille,54100,792,11.676,1.088,0.985,949,6859 -Aulnois-sur-Seille,57040,278,5.059,0.716,0.648,947,6868 -Kerien,22088,262,22.086,1.496,1.355,242,6828 -Coole,51167,144,29.998,1.743,1.578,799,6850 -Lemainville,54309,372,4.797,0.697,0.631,934,6827 -Saint-Germainmont,8381,853,15.746,1.263,1.144,784,6937 -Bébing,57056,197,9.704,0.992,0.898,995,6855 -Bidarray,64124,686,39.139,1.991,1.803,349,6254 -Peumerit-Quintin,22169,175,14.927,1.230,1.114,233,6827 -Aast,64001,177,4.774,0.695,0.629,450,6250 -Haraucourt-sur-Seille,57295,106,8.100,0.906,0.820,966,6864 -Trégueux,22360,8444,14.472,1.211,1.096,280,6836 -Arrien,64053,181,4.486,0.674,0.610,444,6250 -Still,67480,1804,23.038,1.528,1.383,1023,6840 -Saint-Pé-de-Bigorre,65395,1159,42.549,2.076,1.880,447,6226 -Lagos,64302,470,4.462,0.672,0.608,436,6240 -Rambucourt,55412,192,14.810,1.225,1.109,904,6865 -Montenoy,54376,416,4.010,0.637,0.577,939,6859 -Charency,39108,56,2.854,0.538,0.487,929,6633 -Arraincourt,57027,128,4.788,0.697,0.631,959,6879 -La Méaugon,22144,1286,6.742,0.827,0.749,270,6840 -Binic-Étables-sur-Mer,22055,6965,15.055,1.235,1.118,272,6848 -Autrey,88021,291,17.409,1.328,1.202,975,6804 -Tremblecourt,54532,180,6.007,0.780,0.706,918,6859 -Bordères,64137,631,4.614,0.684,0.619,437,6238 -Regnéville-sur-Meuse,55422,50,3.798,0.620,0.561,869,6908 -Lombia,64346,208,7.689,0.883,0.799,448,6254 -Plieux,32320,125,12.303,1.116,1.010,522,6320 -Ouillon,64438,558,6.404,0.806,0.730,440,6251 -Pinas,65363,451,5.926,0.775,0.702,492,6229 -Plerneuf,22188,1046,8.531,0.930,0.842,268,6837 -Saint-Laurent-du-Pont,38412,4540,35.344,1.892,1.713,913,6484 -Saint-Jammes,64482,638,4.107,0.645,0.584,437,6255 -Sixt-sur-Aff,35328,2113,43.226,2.093,1.895,321,6751 -Colombey-les-Belles,54135,1464,17.650,1.337,1.211,915,6826 -Sucé-sur-Erdre,44201,6958,41.545,2.052,1.858,360,6708 -Bruys,2129,20,5.603,0.753,0.682,742,6905 -Nitting,57509,461,8.842,0.947,0.857,999,6848 -Arreux,8022,328,4.232,0.655,0.593,818,6970 -Labatmale,64292,252,3.337,0.581,0.526,444,6238 -Rotangy,60549,214,9.871,1.000,0.905,632,6943 -Quessoy,22258,3804,30.173,1.748,1.583,278,6828 -Plaintel,22171,4315,27.541,1.670,1.512,273,6825 -Le Broc,63054,678,17.563,1.334,1.208,721,6492 -Saubole,64507,141,5.145,0.722,0.654,449,6250 -Ménil-sur-Belvitte,88301,301,8.605,0.934,0.846,973,6818 -Vers-Pont-du-Gard,30346,1880,19.151,1.393,1.261,820,6323 -Le Mont,88306,50,3.943,0.632,0.572,999,6819 -Sainte-Barbe,88410,281,30.242,1.750,1.584,974,6819 -Giriviller,54228,71,7.736,0.885,0.801,957,6821 -Juvrecourt,54285,61,6.236,0.795,0.720,961,6856 -Mirebeau-sur-Bèze,21416,2100,22.203,1.500,1.358,872,6702 -Frémonville,54211,186,14.092,1.195,1.082,990,6842 -Avricourt,57042,621,10.372,1.025,0.928,983,6845 -Saint-Brandan,22277,2398,25.551,1.609,1.457,265,6823 -Saint-Donan,22287,1448,22.911,1.524,1.380,269,6835 -Yvecrique,76757,646,6.053,0.783,0.709,542,6959 -Ploufragan,22215,11398,26.871,1.650,1.494,269,6837 -Marimont-lès-Bénestroff,57446,39,3.953,0.633,0.573,976,6872 -Plédran,22176,6571,34.669,1.874,1.697,280,6832 -Hémonstoir,22075,717,14.190,1.199,1.086,262,6801 -Bidestroff,57081,127,7.966,0.898,0.813,980,6867 -Nuits-Saint-Georges,21464,5543,20.412,1.438,1.302,845,6675 -Plaine-Haute,22170,1595,15.907,1.270,1.150,269,6831 -Beaurain,59060,231,1.016,0.321,0.291,739,7010 -Concots,46073,419,26.043,1.624,1.470,593,6364 -Pordic,22251,7105,33.777,1.850,1.675,268,6842 -Tramont-Émy,54529,31,3.988,0.636,0.576,918,6815 -Saint-Julien,22307,2061,5.620,0.755,0.684,272,6832 -Trémuson,22372,2051,6.306,0.799,0.723,268,6842 -Plérin,22187,13824,27.588,1.672,1.514,270,6841 -Hermelange,57318,229,2.614,0.515,0.466,994,6850 -Willerwald,57746,1544,6.328,0.801,0.725,996,6886 -Lamelouze,30137,138,8.877,0.948,0.858,776,6347 -Langonnet,56100,1808,86.278,2.957,2.677,219,6807 -Housseras,88243,494,19.607,1.409,1.276,980,6809 -Maisoncelle-Saint-Pierre,60376,158,4.253,0.656,0.594,636,6937 -Silfiac,56245,437,22.596,1.513,1.370,244,6800 -Gourin,56066,3887,75.130,2.759,2.498,209,6796 -Loudéac,22136,9593,81.931,2.881,2.609,267,6801 -Saint-Aignan,56203,591,27.603,1.672,1.514,249,6807 -Loigny-la-Bataille,28212,208,18.167,1.357,1.229,605,6786 -Xonville,54599,134,7.285,0.859,0.778,910,6889 -Sainte-Brigitte,56209,177,17.728,1.340,1.213,244,6801 -Les Salelles,48185,166,10.596,1.036,0.938,724,6377 -Oron,57528,90,5.360,0.737,0.667,956,6874 -Angaïs,64023,883,5.978,0.778,0.704,436,6245 -Sedze-Maubecq,64515,270,7.689,0.883,0.799,448,6257 -Chantes,70127,119,6.557,0.815,0.738,919,6729 -Saint-Jean-d'Aubrigoux,43196,179,17.999,1.350,1.222,765,6476 -Mostuéjouls,12160,314,31.335,1.782,1.613,716,6344 -La Roque-Sainte-Marguerite,12204,185,49.773,2.246,2.034,717,6339 -Saint-André-de-Vézines,12211,134,39.377,1.997,1.808,726,6336 -Trélans,48192,93,23.260,1.535,1.390,708,6376 -Bran,17061,126,4.223,0.654,0.592,443,6478 -Bédeille,64103,208,3.925,0.631,0.571,448,6256 -Thoissia,39532,34,3.943,0.632,0.572,884,6596 -Millau,12145,22200,170.194,4.153,3.760,710,6340 -Sercœur,88454,237,9.360,0.974,0.882,962,6799 -La Canourgue,48034,2156,104.773,3.258,2.950,717,6366 -Lespourcy,64338,195,7.110,0.849,0.769,445,6255 -Poueyferré,65366,856,6.348,0.802,0.726,451,6230 -Escaunets,65160,129,6.316,0.800,0.724,452,6255 -Aventignan,65051,203,5.284,0.732,0.663,500,6222 -Clémensat,63111,117,3.214,0.571,0.517,709,6496 -Esclanèdes,48056,385,12.589,1.129,1.022,730,6379 -Rigny-la-Salle,55433,368,10.328,1.023,0.926,903,6841 -Lamarque-Pontacq,65252,842,10.793,1.046,0.947,446,6235 -Creissels,12084,1597,28.626,1.703,1.542,708,6327 -Grèzes,48072,214,16.094,1.277,1.156,727,6377 -Hures-la-Parade,48074,260,88.754,2.999,2.715,727,6353 -Gorges du Tarn Causses,48146,971,144.908,3.832,3.470,736,6371 -Montgesoye,25400,472,11.277,1.069,0.968,942,6668 -Veyreau,12293,140,41.549,2.052,1.858,730,6341 -Bourgs sur Colagne,48099,2169,53.255,2.323,2.103,714,6385 -Cussac-sur-Loire,43084,1731,10.264,1.020,0.924,772,6431 -Vézelise,54563,1441,5.368,0.737,0.667,928,6823 -Monteils,30177,653,7.074,0.847,0.767,794,6334 -Canaules-et-Argentières,30065,425,10.069,1.010,0.914,783,6323 -Verdenal,54562,155,6.570,0.816,0.739,982,6837 -Auneau-Bleury-Saint-Symphorien,28015,5808,34.378,1.866,1.690,611,6821 -Brignon,30053,779,6.789,0.829,0.751,797,6320 -Neuve-Chapelle,62606,1439,1.891,0.438,0.397,684,7053 -Saint-Jean-de-Serres,30267,522,8.270,0.915,0.828,786,6320 -Tomblaine,54526,8898,5.536,0.749,0.678,937,6846 -Coarraze,64191,2168,14.938,1.230,1.114,436,6237 -Ners,30188,715,4.959,0.709,0.642,795,6326 -Palisse,19157,227,33.374,1.839,1.665,633,6481 -Saint-Nazaire-des-Gardies,30289,81,11.324,1.071,0.970,782,6319 -Saint-Julien-le-Châtel,23204,145,15.353,1.247,1.129,640,6557 -Méhoncourt,54359,237,7.877,0.893,0.809,952,6830 -Boisset-et-Gaujac,30042,2542,14.376,1.207,1.093,782,6327 -Thézey-Saint-Martin,54517,203,8.029,0.902,0.817,940,6872 -Saint-Julien-de-Vouvantes,44170,973,25.804,1.617,1.464,381,6739 -Privezac,12191,332,10.973,1.054,0.954,637,6366 -Cutting,57161,138,5.548,0.750,0.679,980,6867 -Espoey,64216,1139,13.534,1.171,1.060,445,6246 -Nousty,64419,1615,9.679,0.990,0.896,438,6248 -Sor,9297,29,1.086,0.332,0.301,538,6205 -Trédarzec,22347,1082,11.595,1.084,0.981,245,6870 -Omex,65334,231,5.642,0.756,0.684,449,6226 -Belleville-en-Caux,76072,693,4.497,0.675,0.611,556,6959 -Buc,90020,287,2.456,0.499,0.452,985,6730 -Lévignac-de-Guyenne,47147,665,25.063,1.594,1.443,480,6392 -Murs-et-Gélignieux,1268,255,6.041,0.782,0.708,909,6508 -Escamps,89154,890,22.288,1.503,1.361,732,6739 -Avezac-Prat-Lahitte,65054,605,17.729,1.340,1.213,485,6225 -Saint-Just,1369,917,3.433,0.590,0.534,876,6571 -Source-Seine,21084,61,16.467,1.292,1.170,829,6713 -Ancy-Dornot,57021,1581,10.224,1.018,0.922,921,6891 -Martignargues,30158,422,4.989,0.711,0.644,793,6327 -Bicqueley,54073,894,16.929,1.310,1.186,913,6843 -Abaucourt,54001,300,7.931,0.896,0.811,938,6872 -Arreau,65031,757,11.164,1.064,0.963,484,6203 -Trondes,54534,547,12.495,1.125,1.019,901,6851 -Tilhouse,65445,224,6.564,0.816,0.739,481,6225 -Lamargelle,21338,156,25.841,1.618,1.465,834,6716 -Rumilly-lès-Vaudes,10331,527,42.645,2.079,1.882,792,6779 -Eslourenties-Daban,64211,311,5.116,0.720,0.652,445,6248 -Gomer,64246,319,3.264,0.575,0.521,441,6244 -Uzos,64550,725,3.541,0.599,0.542,429,6248 -Castelnau-Valence,30072,449,10.271,1.020,0.924,797,6325 -Sedzère,64516,400,12.691,1.134,1.027,439,6254 -Mortagne-du-Nord,59418,1642,2.176,0.470,0.426,733,7045 -Saint-Amand-Montrond,18197,9830,20.219,1.431,1.296,661,6623 -Tréogan,22373,100,7.123,0.850,0.770,213,6808 -Pierre-Morains,51430,95,13.518,1.170,1.059,776,6859 -Lamarche-sur-Saône,21337,1327,33.825,1.851,1.676,880,6692 -Guerlédan,22158,2446,49.170,2.232,2.021,257,6802 -Sermentizon,63418,578,18.479,1.368,1.239,737,6521 -Plouray,56170,1142,39.314,1.996,1.807,223,6802 -Gigny-Bussy,51270,227,22.472,1.509,1.366,813,6835 -Domarin,38149,1608,3.020,0.553,0.501,875,6500 -Lalobbe,8243,172,9.851,0.999,0.905,797,6953 -Holving,57330,1304,10.734,1.043,0.944,988,6888 -Séron,65422,328,9.308,0.971,0.879,450,6250 -Ossen,65343,229,6.936,0.838,0.759,449,6222 -Plénée-Jugon,22185,2408,62.430,2.515,2.277,297,6815 -Ségus,65415,246,10.899,1.051,0.952,446,6224 -Beuste,64119,616,5.822,0.768,0.695,439,6243 -Harskirchen,67183,855,14.548,1.214,1.099,995,6880 -Montagny-Sainte-Félicité,60413,420,5.570,0.751,0.680,682,6891 -Gabaston,64227,659,12.754,1.137,1.029,442,6257 -Saint-Igeaux,22334,138,12.918,1.144,1.036,244,6814 -Urost,64544,77,2.333,0.486,0.440,444,6253 -Batsère,65071,39,2.308,0.484,0.438,478,6221 -Ruan,45266,204,16.392,1.289,1.167,622,6781 -Saint-Glen,22296,609,11.117,1.061,0.961,289,6815 -Plémet,22183,3609,57.643,2.417,2.188,282,6805 -Laneuveville-lès-Lorquin,57380,105,2.291,0.482,0.436,994,6846 -Lestelle-Bétharram,64339,841,8.658,0.937,0.848,440,6228 -Merdrignac,22147,2940,57.520,2.414,2.186,300,6796 -Barlest,65065,293,4.024,0.639,0.579,447,6232 -Le Mené,22046,6425,163.467,4.070,3.685,294,6820 -Lelling,57389,473,4.905,0.705,0.638,970,6890 -Noyal,22160,889,7.088,0.847,0.767,297,6830 -Nempont-Saint-Firmin,62602,193,4.442,0.671,0.608,611,7031 -Saulxures,52465,128,8.201,0.912,0.826,895,6765 -Loubajac,65280,395,6.538,0.814,0.737,448,6230 -Neuville-lès-This,8322,380,7.755,0.886,0.802,814,6962 -Saint-Rieul,22326,548,6.443,0.808,0.732,297,6830 -Hangviller,57291,268,4.485,0.674,0.610,1009,6867 -Saint-Illiers-la-Ville,78558,345,6.627,0.819,0.742,594,6878 -Espéchède,64212,149,9.383,0.975,0.883,442,6249 -Erquy,22054,3904,26.521,1.639,1.484,301,6853 -Pédernec,22164,1849,27.030,1.655,1.498,236,6847 -Saudrupt,55470,201,7.710,0.884,0.800,853,6847 -Bacourt,57045,110,3.960,0.633,0.573,948,6875 -Lomné,65278,32,2.939,0.546,0.494,480,6219 -Hillion,22081,4117,24.689,1.582,1.432,286,6837 -Champagney,25115,282,3.011,0.552,0.500,918,6687 -Quintenic,22261,366,7.521,0.873,0.790,299,6835 -Bréhand,22015,1624,25.935,1.621,1.468,284,6823 -Saint-Alban,22273,2152,30.414,1.755,1.589,294,6839 -Lucgarier,64358,254,5.681,0.759,0.687,439,6242 -Luquet,65292,401,8.203,0.912,0.826,446,6244 -Biblisheim,67037,349,2.248,0.477,0.432,1052,6878 -Nourard-le-Franc,60468,353,11.466,1.078,0.976,656,6932 -La Malhoure,22140,576,5.172,0.724,0.656,294,6823 -Teyssode,81299,376,22.908,1.524,1.380,610,6286 -Le Val,25460,241,6.595,0.817,0.740,922,6667 -Aspin-Aure,65039,50,12.184,1.111,1.006,480,6207 -Les Cammazes,81055,331,7.832,0.891,0.807,625,6256 -Campan,65123,1336,97.045,3.136,2.839,475,6202 -Marly,57447,10049,10.759,1.044,0.945,929,6888 -Bargemon,83011,1374,35.260,1.890,1.711,984,6285 -Saint-Laurent-de-Neste,65389,924,10.582,1.035,0.937,494,6224 -Innenheim,67223,1186,6.224,0.794,0.719,1037,6832 -Laborde,65241,87,1.823,0.430,0.389,480,6219 -Plounévez-Quintin,22229,1102,43.292,2.094,1.896,242,6817 -Nistos,65329,218,32.644,1.819,1.647,495,6211 -La Barthe-de-Neste,65069,1228,7.636,0.880,0.797,486,6225 -Arné,65028,215,8.328,0.919,0.832,497,6237 -Gaillard,74133,11152,3.921,0.630,0.570,948,6570 -Fontaine-les-Grès,10151,874,12.252,1.114,1.009,766,6811 -Carhaix-Plouguer,29024,7240,25.950,1.622,1.469,217,6818 -Lombrès,65277,104,1.410,0.378,0.342,497,6219 -Plussulien,22244,492,22.747,1.518,1.374,248,6817 -Treffrin,22351,559,7.505,0.872,0.790,218,6822 -Saint-Gilles-Vieux-Marché,22295,351,22.265,1.502,1.360,258,6815 -Bois,17050,550,21.352,1.471,1.332,416,6491 -Mamirolle,25364,1773,11.554,1.082,0.980,942,6682 -Gouarec,22064,908,6.581,0.817,0.740,241,6813 -Espèche,65166,54,2.695,0.523,0.474,481,6221 -Callen,40060,146,87.403,2.976,2.695,429,6351 -Soulosse-sous-Saint-Élophe,88460,644,19.610,1.410,1.277,904,6812 -Arrodets,65034,21,0.958,0.312,0.282,478,6218 -Le Vernet,43260,23,3.923,0.630,0.570,752,6437 -Glomel,22061,1396,79.177,2.832,2.564,223,6815 -Maël-Carhaix,22137,1514,36.994,1.936,1.753,228,6815 -Domérat,3101,8819,35.329,1.892,1.713,664,6590 -Balléville,88031,104,6.278,0.798,0.723,910,6806 -Zarbeling,57759,58,3.954,0.633,0.573,970,6870 -Crévéchamps,54144,393,4.898,0.704,0.637,942,6829 -Igney,88247,1181,7.829,0.891,0.807,950,6805 -Clavy-Warby,8124,350,11.830,1.095,0.991,809,6962 -Autreville-sur-Moselle,54031,277,4.566,0.680,0.616,927,6864 -Péré,65356,53,4.775,0.696,0.630,481,6232 -Hergugney,88239,137,5.460,0.744,0.674,937,6816 -Franquevielle,31197,334,10.891,1.050,0.951,502,6228 -Bon Repos sur Blavet,22107,1279,55.187,2.365,2.141,249,6807 -Le Moustoir,22157,666,14.881,1.228,1.112,216,6815 -Plouguernével,22220,1711,41.806,2.058,1.863,240,6809 -Jarret,65233,312,4.449,0.671,0.608,453,6223 -Lagrange,65245,225,3.632,0.607,0.550,485,6227 -Escots,65163,32,4.043,0.640,0.579,478,6222 -Le Crocq,60182,183,3.090,0.560,0.507,642,6946 -Uzel,22384,1041,6.954,0.839,0.760,268,6815 -Caurel,22033,362,13.163,1.155,1.046,253,6806 -Kergrist-Moëlou,22087,652,47.181,2.186,1.979,228,6820 -Cernoy,60137,298,4.976,0.710,0.643,668,6926 -La Basse-Vaivre,70051,39,3.567,0.601,0.544,929,6766 -Champigneulles,54115,6781,24.044,1.561,1.413,933,6854 -Merléac,22149,451,30.462,1.757,1.591,265,6812 -Dambenois,25188,740,3.285,0.577,0.522,992,6724 -Valmanya,66221,35,27.832,1.679,1.520,656,6158 -Grâce-Uzel,22068,425,8.142,0.908,0.822,269,6809 -Arro,2A022,86,8.815,0.945,0.856,1180,6127 -Corlay,22047,957,14.148,1.197,1.084,249,6818 -Frévin-Capelle,62363,375,3.624,0.606,0.549,674,7027 -Sérigny,86260,314,24.934,1.589,1.439,495,6654 -Le Haut-Corlay,22074,672,26.035,1.624,1.470,250,6819 -Charrey-sur-Saône,21148,353,5.558,0.750,0.679,861,6670 -Gausson,22060,620,16.747,1.303,1.180,275,6816 -Alaincourt-la-Côe,57010,143,4.126,0.647,0.586,944,6871 -Saint-Nicolas-du-Pélem,22321,1667,41.491,2.050,1.856,246,6825 -Trélévern,22363,1257,7.056,0.846,0.766,234,6874 -La Neuveville-sous-Châtenois,88324,378,7.453,0.869,0.787,915,6802 -Plélo,22182,3332,44.496,2.123,1.922,260,6849 -Homps,11172,585,3.087,0.559,0.506,676,6242 -Lanvollon,22121,1764,5.078,0.717,0.649,259,6855 -Bize,65093,218,13.064,1.151,1.042,491,6216 -Rospez,22265,1756,13.412,1.166,1.056,230,6870 -Guerlesquin,29067,1343,22.028,1.494,1.353,218,6846 -Saint-Brieuc,22278,44999,19.248,1.397,1.265,275,6837 -Uglas,65456,287,8.619,0.934,0.846,493,6231 -Villeneuve-Lécussan,31586,553,16.228,1.282,1.161,494,6227 -La Foye-Monjault,79127,836,19.450,1.404,1.271,428,6569 -Chérisey,57139,298,5.103,0.719,0.651,936,6883 -Ligny-sur-Canche,62513,188,7.210,0.855,0.774,647,7019 -Mantallot,22141,227,2.872,0.539,0.488,236,6864 -Cohennoz,73088,162,13.755,1.181,1.069,973,6525 -Banios,65060,51,5.442,0.743,0.673,475,6218 -Francières,80344,200,5.865,0.771,0.698,623,6999 -Gazave,65190,65,7.358,0.863,0.781,488,6217 -Quemper-Guézennec,22256,1113,23.118,1.530,1.385,251,6859 -Trégastel,22353,2447,7.229,0.856,0.775,221,6878 -Ouroux-sur-Saône,71336,3072,22.713,1.517,1.374,849,6630 -Pérouse,90076,1164,4.878,0.703,0.637,992,6735 -Murville,54394,245,5.608,0.754,0.683,905,6918 -Trévérec,22378,219,4.360,0.665,0.602,255,6858 -Plouëc-du-Trieux,22212,1132,18.558,1.371,1.241,246,6862 -Fléty,58114,107,20.260,1.433,1.297,772,6632 -Lanmérin,22110,600,4.228,0.655,0.593,234,6868 -Borville,54085,102,4.768,0.695,0.629,952,6820 -Farébersviller,57207,5519,6.873,0.834,0.755,984,6897 -Dunières,43087,2846,34.700,1.875,1.698,802,6458 -Isse,51301,118,10.948,1.053,0.953,786,6886 -Ayzac-Ost,65056,455,3.123,0.563,0.510,448,6217 -Mazères-de-Neste,65307,326,3.402,0.587,0.531,499,6225 -Brouzet-lès-Quissac,30054,286,15.918,1.270,1.150,781,6308 -Kermoroc'h,22091,463,6.171,0.791,0.716,244,6854 -Ronchamp,70451,2767,23.439,1.541,1.395,972,6739 -Villemardy,41283,278,12.222,1.113,1.008,566,6738 -Escala,65159,378,3.875,0.627,0.568,490,6226 -Xeuilley,54596,888,7.444,0.868,0.786,930,6834 -Campistrous,65125,317,10.296,1.021,0.924,486,6233 -Hèches,65218,611,35.474,1.896,1.717,490,6213 -Richeval,57583,135,5.000,0.712,0.645,987,6843 -Taintrux,88463,1551,31.734,1.793,1.623,992,6803 -Ploumilliau,22226,2487,34.755,1.877,1.699,220,6867 -Caouënnec-Lanvézéac,22030,868,7.257,0.857,0.776,234,6864 -Lanloup,22109,230,2.544,0.508,0.460,261,6861 -Langatte,57382,558,13.154,1.154,1.045,989,6861 -Affracourt,54005,110,5.666,0.758,0.686,933,6824 -Le Vieux-Marché,22387,1339,22.338,1.504,1.362,224,6851 -Raville,57563,277,7.063,0.846,0.766,952,6894 -Saint-Michel-en-Grève,22319,453,4.673,0.688,0.623,217,6860 -Recurt,65376,202,13.564,1.172,1.061,491,6240 -Goudelin,22065,1757,23.252,1.535,1.390,257,6854 -Tréglamus,22354,1014,19.274,1.397,1.265,237,6844 -Vahl-lès-Faulquemont,57686,252,6.164,0.790,0.715,967,6884 -Lies,65275,69,3.641,0.607,0.550,473,6222 -Pérols,34198,9061,8.644,0.936,0.847,778,6273 -Bazus-Neste,65076,58,2.487,0.502,0.455,488,6218 -Saint-Sauveur-de-Ginestoux,48182,57,22.302,1.503,1.361,744,6400 -Lemud,57392,457,4.237,0.655,0.593,948,6885 -Ilhet,65228,120,8.012,0.901,0.816,486,6210 -Blénod-lès-Toul,54080,1095,17.671,1.338,1.211,906,6838 -Keskastel,67234,1532,18.838,1.382,1.251,995,6880 -Ferrère,65175,43,57.761,2.419,2.190,494,6209 -Lacoste,34124,334,7.417,0.867,0.785,732,6285 -Liniez,36097,326,27.070,1.656,1.499,602,6659 -Heillecourt,54257,5569,3.681,0.611,0.553,934,6844 -Houtaud,25309,1074,7.846,0.892,0.808,949,6653 -Neufgrange,57499,1412,7.338,0.862,0.780,999,6895 -Vahl-Ebersing,57684,516,6.311,0.800,0.724,972,6890 -Boisset,43034,333,14.180,1.199,1.086,774,6469 -Penvénan,22166,2571,20.320,1.435,1.299,239,6878 -Warmeriville,51660,2407,23.338,1.538,1.393,794,6918 -Tajan,65437,138,4.971,0.710,0.643,492,6236 -Foulcrey,57229,180,12.420,1.122,1.016,983,6844 -Madegney,88280,118,3.055,0.556,0.503,944,6802 -Plouzélambre,22235,235,7.797,0.889,0.805,220,6857 -Varangéville,54549,3668,12.037,1.104,1.000,946,6841 -Plouha,22222,4484,41.367,2.047,1.853,268,6861 -Trégonneau,22358,566,6.291,0.798,0.723,247,6851 -Asque,65041,116,15.805,1.265,1.145,478,6218 -Les Gras,25296,811,14.970,1.232,1.115,967,6660 -Vénérieu,38532,799,5.936,0.776,0.703,879,6509 -Chanteheux,54116,2128,5.764,0.764,0.692,959,6839 -Berneville,62115,490,5.688,0.759,0.687,678,7018 -Clarens,65150,516,11.332,1.072,0.971,491,6232 -Allauch,13002,21228,50.351,2.259,2.045,907,6252 -Lanne-en-Barétous,64310,495,41.392,2.048,1.854,392,6232 -Pont-Saint-Vincent,54432,1901,6.686,0.823,0.745,929,6838 -Veyras,7340,1533,7.799,0.889,0.805,823,6407 -Kerfot,22086,712,5.837,0.769,0.696,258,6867 -Plouézec,22214,3210,28.445,1.698,1.537,263,6864 -Pettonville,54422,66,2.998,0.551,0.499,977,6833 -Eygalayes,26126,84,18.254,1.360,1.231,909,6347 -Plougrescant,22218,1202,16.225,1.282,1.161,245,6879 -Latilly,2411,211,9.301,0.971,0.879,723,6897 -Meysse,7157,1303,18.708,1.377,1.247,839,6394 -Longeville-lès-Saint-Avold,57413,3696,24.670,1.581,1.431,966,6895 -Plouguiel,22221,1774,19.622,1.410,1.277,240,6875 -Agnac,47003,424,13.926,1.188,1.076,492,6396 -Erbéviller-sur-Amezule,54180,77,4.488,0.674,0.610,948,6852 -Socourt,88458,271,3.815,0.622,0.563,940,6815 -Gerde,65198,1150,6.911,0.837,0.758,471,6223 -Saint-Martin-Belle-Roche,71448,1386,4.508,0.676,0.612,844,6589 -Trézény,22381,359,3.306,0.579,0.524,232,6868 -Bénesville,76077,195,5.495,0.746,0.675,545,6965 -Ploëzal,22204,1261,26.469,1.638,1.483,243,6862 -Lanleff,22108,121,2.225,0.475,0.430,255,6860 -Plounévez-Moëdec,22228,1434,41.074,2.040,1.847,228,6849 -Puget-Ville,83100,4235,37.120,1.939,1.756,955,6251 -Merviller,54365,343,12.601,1.130,1.023,981,6824 -Saint-Martin-de-Gurson,24454,672,24.836,1.586,1.436,474,6435 -Astillé,53011,866,21.038,1.460,1.322,410,6770 -Plestin-les-Grèves,22194,3590,34.387,1.867,1.690,215,6856 -Servigny-lès-Sainte-Barbe,57649,459,3.131,0.563,0.510,939,6898 -Berhet,22006,253,3.343,0.582,0.527,237,6863 -Soubrebost,23173,137,20.971,1.458,1.320,612,6544 -Galez,65184,190,7.367,0.864,0.782,488,6234 -Louargat,22135,2355,58.427,2.433,2.203,236,6847 -Pluzunet,22245,1000,23.612,1.547,1.401,233,6854 -Brouville,54101,132,9.833,0.998,0.904,975,6829 -Labeuville,55265,133,9.592,0.986,0.893,902,6893 -Saint-Martin-du-Mont,71454,206,5.293,0.732,0.663,874,6616 -Landebaëron,22095,189,6.434,0.807,0.731,242,6854 -Xousse,54600,124,6.168,0.791,0.716,974,6844 -Brémoncourt,54098,165,5.260,0.730,0.661,950,6827 -Pontrieux,22250,1036,1.047,0.326,0.295,246,6862 -Kermaria-Sulard,22090,1045,9.276,0.969,0.877,234,6873 -Kappelkinger,57357,401,8.552,0.931,0.843,985,6883 -Le Plan,31425,454,8.131,0.908,0.822,549,6233 -Margerie-Hancourt,51349,190,22.151,1.498,1.356,808,6831 -Lachaussée,55267,270,30.776,1.766,1.599,907,6889 -Champey-sur-Moselle,54114,349,2.481,0.501,0.454,925,6878 -Tilleul-Dame-Agnès,27640,194,5.178,0.724,0.656,546,6879 -Tréon,28394,1391,11.014,1.056,0.956,575,6843 -Léry,27365,2034,8.410,0.923,0.836,568,6910 -Moustéru,22156,670,14.482,1.211,1.096,243,6843 -Lannion,22113,19831,46.912,2.180,1.974,225,6874 -Bringolo,22019,463,9.375,0.975,0.883,257,6846 -Henneveux,62429,301,5.544,0.749,0.678,620,7069 -Grigneuseville,76328,360,7.380,0.865,0.783,568,6950 -Saint-Paul,65394,315,6.882,0.835,0.756,496,6227 -Barrancoueu,65066,33,3.817,0.622,0.563,482,6204 -Érize-Saint-Dizier,55178,191,12.471,1.124,1.018,869,6861 -Bambiderstroff,57047,1047,11.102,1.061,0.961,965,6894 -Houdreville,54266,440,10.446,1.029,0.932,928,6830 -Seuzey,55487,107,4.635,0.685,0.620,888,6881 -Bielle,64127,394,25.486,1.607,1.455,421,6226 -Montsérié,65323,74,2.277,0.480,0.435,490,6220 -Montégut,65319,133,7.023,0.844,0.764,497,6223 -Izaux,65231,204,5.353,0.736,0.666,485,6220 -Saint-Maurice-de-Cazevieille,30285,711,13.212,1.157,1.048,802,6325 -Mons,30173,1657,16.016,1.274,1.153,796,6334 -Fréchendets,65179,31,2.029,0.453,0.410,473,6222 -Châtillon-sur-Loire,45087,3162,39.819,2.009,1.819,683,6721 -Caharet,65118,37,1.198,0.348,0.315,481,6230 -Ardengost,65023,12,5.863,0.771,0.698,486,6207 -Tuzaguet,65455,461,7.879,0.893,0.809,494,6225 -Pérignat-sur-Allier,63273,1516,4.854,0.701,0.635,720,6515 -Les Plans,30197,248,6.209,0.793,0.718,797,6341 -Espirat,63154,394,4.393,0.667,0.604,725,6516 -Saint-Césaire-de-Gauzignan,30240,380,6.882,0.835,0.756,797,6325 -Bouffignereux,2104,103,4.397,0.667,0.604,762,6919 -Bénestroff,57060,550,9.532,0.983,0.890,974,6871 -Englesqueville-en-Auge,14238,113,3.650,0.608,0.550,492,6920 -Woustviller,57752,3194,10.865,1.049,0.950,991,6892 -Toul,54528,15707,30.901,1.769,1.602,913,6843 -Lutilhous,65294,224,3.383,0.585,0.530,482,6231 -Pléguien,22177,1323,15.705,1.261,1.142,260,6853 -Gurunhuel,22072,433,19.973,1.423,1.288,239,6840 -Mailly-sur-Seille,54333,246,6.263,0.797,0.722,940,6875 -Lézardrieux,22127,1469,12.068,1.106,1.001,250,6871 -Saint-Thomas-de-Courceriers,53256,191,13.057,1.150,1.041,461,6802 -Paimpol,22162,7186,23.878,1.555,1.408,256,6867 -Villefranche-sur-Mer,6159,5098,4.896,0.704,0.637,1048,6301 -Vacqueville,54539,241,10.128,1.013,0.917,984,6828 -Ommoy,61316,128,5.707,0.760,0.688,476,6864 -Trévou-Tréguignec,22379,1339,6.664,0.822,0.744,235,6877 -Monlong,65316,103,7.304,0.860,0.779,495,6234 -Lannemezan,65258,5865,19.233,1.396,1.264,486,6225 -Saint-Martin,67426,352,4.160,0.649,0.588,1019,6815 -Miscon,26186,56,12.178,1.111,1.006,900,6397 -Le Syndicat,88462,1912,18.285,1.361,1.232,979,6780 -Réjaumont,65377,166,6.812,0.831,0.752,494,6235 -Fréchet-Aure,65180,13,3.401,0.587,0.531,488,6206 -Le Luot,50282,265,8.539,0.930,0.842,381,6862 -Prat,22254,1114,22.292,1.503,1.361,235,6863 -Casson,44027,2217,16.271,1.284,1.163,354,6709 -Tréguier,22362,2437,1.603,0.403,0.365,243,6871 -Trégrom,22359,417,16.895,1.308,1.184,230,6854 -Sacoué,65382,62,13.303,1.161,1.051,495,6211 -Le Mesnil-Gilbert,50312,139,7.954,0.898,0.813,402,6853 -Coincy,57145,307,7.153,0.851,0.771,937,6896 -La Chapelle-aux-Naux,37056,571,5.340,0.736,0.666,507,6694 -Lorry-lès-Metz,57415,1767,6.084,0.785,0.711,924,6899 -Gellenoncourt,54219,76,3.630,0.606,0.549,948,6848 -Bizous,65094,109,3.174,0.567,0.513,491,6221 -Messein,54366,1873,5.197,0.726,0.657,932,6841 -Générest,65194,100,12.017,1.103,0.999,499,6220 -Bégard,22004,4774,36.365,1.920,1.738,240,6856 -Loc-Envel,22129,70,3.401,0.587,0.531,226,6842 -Lassales,65266,32,2.509,0.504,0.456,496,6237 -Saint-Agathon,22272,2263,14.640,1.218,1.103,253,6846 -Plounérin,22227,733,26.357,1.634,1.479,214,6852 -Baudoncourt,70055,549,7.663,0.881,0.798,949,6745 -Tranqueville-Graux,88478,100,14.986,1.232,1.115,913,6819 -Ourde,65347,34,5.654,0.757,0.685,500,6209 -Saint-Quay-Perros,22324,1309,4.750,0.694,0.628,227,6871 -Loguivy-Plougras,22131,929,48.822,2.224,2.014,226,6843 -Ploubazlanec,22210,2999,15.361,1.248,1.130,261,6872 -Trédrez-Locquémeau,22349,1444,10.649,1.039,0.941,218,6868 -Praye,54434,275,8.745,0.941,0.852,931,6818 -Saint-Clet,22283,874,14.844,1.226,1.110,247,6857 -Montoussé,65322,247,7.923,0.896,0.811,491,6221 -Houeydets,65224,257,7.457,0.869,0.787,484,6233 -Tréguidel,22361,616,6.658,0.821,0.743,263,6848 -Trébeurden,22343,3664,13.725,1.179,1.067,221,6870 -Saint-Cricq-Chalosse,40253,638,20.388,1.437,1.301,403,6294 -Belleville,54060,1432,10.358,1.024,0.927,929,6862 -Villers-lès-Moivrons,54577,147,2.866,0.539,0.488,937,6862 -Piets-Plasence-Moustrou,64447,138,8.365,0.921,0.834,419,6276 -Fontaine-sur-Maye,80327,163,5.711,0.761,0.689,625,7017 -Verdun,55545,17913,31.756,1.794,1.624,878,6900 -Lauret,40148,87,7.369,0.864,0.782,433,6280 -Bainville-aux-Miroirs,54042,320,6.787,0.829,0.751,944,6819 -Nonsard-Lamarche,55386,212,18.259,1.360,1.231,901,6872 -Bernay-Saint-Martin,17043,775,25.247,1.599,1.448,417,6557 -Cazalis,40079,132,5.144,0.722,0.654,402,6286 -Tragny,57676,100,5.426,0.741,0.671,946,6877 -Le Gallet,60267,174,3.485,0.594,0.538,635,6948 -Gressey,78285,545,7.215,0.855,0.774,598,6859 -Ispagnac,48075,892,54.471,2.349,2.127,737,6371 -Rapsécourt,51452,34,7.314,0.861,0.780,834,6882 -Thuilley-aux-Groseilles,54523,465,9.271,0.969,0.877,919,6838 -Vernéville,57707,618,9.180,0.964,0.873,919,6895 -Sault-Saint-Remy,8404,202,9.699,0.991,0.897,785,6923 -Desseling,57173,107,5.077,0.717,0.649,981,6860 -Bazegney,88041,113,5.835,0.769,0.696,941,6800 -Fontenelle,2324,274,10.381,1.026,0.929,758,6994 -Villers-l'Hôpital,62859,262,8.403,0.923,0.836,643,7013 -Barjac,48018,750,29.921,1.741,1.576,730,6379 -Châtas,88093,51,5.592,0.753,0.682,1001,6813 -Primelin,29228,724,8.692,0.938,0.849,135,6798 -Fontaine-Étoupefour,14274,2297,5.230,0.728,0.659,449,6898 -Cezais,85041,301,12.297,1.116,1.010,410,6620 -Troguéry,22383,266,3.258,0.575,0.521,244,6869 -Coin-sur-Seille,57147,338,3.288,0.577,0.522,932,6883 -Coulon,79100,2264,29.959,1.742,1.577,420,6586 -Mauries,40174,92,5.512,0.747,0.676,430,6286 -Labeyrie,64295,123,3.753,0.617,0.559,408,6278 -Mialos,64383,123,4.517,0.677,0.613,423,6273 -Balansun,64088,287,10.783,1.045,0.946,401,6275 -Pommerit-le-Vicomte,22248,1761,33.698,1.848,1.673,254,6850 -La Chapelle-Rainsouin,53059,415,18.260,1.360,1.231,440,6785 -Thicourt,57670,143,5.500,0.747,0.676,960,6884 -La Trétoire,77472,482,9.280,0.970,0.878,718,6866 -Mont-le-Vignoble,54380,422,4.185,0.651,0.589,911,6840 -Pair-et-Grandrupt,88341,510,4.644,0.686,0.621,996,6804 -Sarraltroff,57629,734,12.028,1.104,1.000,997,6861 -Cheminot,57137,773,11.486,1.079,0.977,927,6879 -Corny-sur-Moselle,57153,2221,8.222,0.913,0.827,925,6887 -Olmiccia,2A191,122,11.265,1.068,0.967,1201,6080 -Squiffiec,22338,777,10.832,1.048,0.949,248,6854 -Pleubian,22195,2356,20.148,1.429,1.294,247,6875 -Messei,61278,1935,13.343,1.163,1.053,443,6854 -Payroux,86189,490,30.324,1.753,1.587,508,6570 -Pierrefiche,48112,164,16.807,1.305,1.182,761,6398 -Nohant-en-Goût,18166,589,25.021,1.592,1.441,666,6668 -Saint-Jean-Kerdaniel,22304,631,11.158,1.063,0.962,253,6845 -Étray,25227,262,6.062,0.784,0.710,952,6674 -Albepierre-Bredons,15025,243,34.441,1.868,1.691,681,6440 -Poudenx,40232,225,7.475,0.870,0.788,409,6282 -Pleslin-Trigavou,22190,3578,21.968,1.492,1.351,328,6835 -Guimaëc,29073,958,19.060,1.390,1.259,210,6860 -Poiseux,58212,337,30.671,1.763,1.596,719,6673 -Anos,64027,189,1.773,0.424,0.384,434,6260 -Uzein,64549,1228,16.169,1.280,1.159,420,6263 -Vignes,64557,428,8.050,0.903,0.818,427,6277 -Cléden-Poher,29029,1142,30.175,1.749,1.584,204,6817 -Puygaillard-de-Lomagne,82146,73,7.133,0.850,0.770,528,6321 -Brassempouy,40054,269,10.853,1.049,0.950,400,6291 -Lignon,51322,129,7.495,0.871,0.789,813,6832 -Marols,42140,414,14.944,1.231,1.115,778,6488 -Fichous-Riumayou,64226,175,6.400,0.805,0.729,419,6272 -Botsorhel,29014,424,25.556,1.609,1.457,213,6842 -Payros-Cazautets,40219,106,6.365,0.803,0.727,424,6285 -Saint-Léger-de-Peyre,48168,184,26.987,1.654,1.498,722,6387 -Mesplède,64382,366,11.683,1.088,0.985,404,6275 -Béhagnies,62103,120,3.083,0.559,0.506,687,7005 -Rehainviller,54449,1044,5.629,0.755,0.684,957,6836 -Les Mages,30152,2089,12.669,1.133,1.026,796,6348 -Raucourt,54444,217,5.135,0.721,0.653,935,6876 -Saulxures-lès-Nancy,54495,4070,7.197,0.854,0.773,938,6846 -Scrignac,29275,779,70.524,2.673,2.420,200,6837 -Mazerolles,64374,1101,11.801,1.093,0.990,417,6265 -Saint-Jean-du-Doigt,29251,643,19.946,1.422,1.287,203,6858 -Châteaumeillant,18057,1856,42.550,2.076,1.880,637,6602 -Erbray,44054,2983,58.536,2.435,2.205,379,6735 -Garlan,29059,1056,13.407,1.166,1.056,203,6856 -Plougonven,29191,3461,70.000,2.663,2.411,207,6839 -Marchastel,48091,56,34.934,1.881,1.703,711,6393 -Harricourt,8215,38,7.972,0.899,0.814,840,6931 -Cravans,17133,854,14.779,1.224,1.108,409,6504 -Roche-lès-Clerval,25496,120,5.335,0.735,0.665,961,6700 -Nassiet,40203,354,11.866,1.096,0.992,402,6286 -Nasbinals,48104,509,63.414,2.535,2.295,699,6394 -Saint-Laurent-de-Muret,48165,187,45.858,2.156,1.952,718,6387 -Antrenas,48005,334,17.458,1.330,1.204,720,6385 -Le Buisson,48032,230,24.321,1.570,1.422,718,6389 -Valencisse,41142,2414,43.915,2.109,1.910,569,6721 -Saint-Germain-de-Calberte,48155,441,38.608,1.978,1.791,770,6347 -Saint-Privat-de-Vallongue,48178,233,23.720,1.550,1.403,762,6358 -Saint-Denis,30247,298,3.667,0.610,0.552,800,6349 -Albiez-Montrond,73013,381,48.611,2.219,2.009,965,6464 -Hyères,83069,55772,133.458,3.677,3.329,977,6216 -Saint-Martin-de-Boubaux,48170,176,31.240,1.779,1.611,774,6341 -Quézac,15157,328,16.571,1.296,1.173,633,6408 -Cescau,64184,597,7.981,0.899,0.814,417,6265 -Étoile-sur-Rhône,26124,5412,40.208,2.018,1.827,846,6420 -Latrille,40146,151,6.871,0.834,0.755,435,6288 -Gauville,80375,349,7.327,0.862,0.780,612,6964 -Robiac-Rochessadoule,30216,849,10.563,1.035,0.937,790,6351 -Montagut,64397,117,6.228,0.794,0.719,415,6280 -Peyremale,30194,286,8.700,0.939,0.850,784,6354 -Lonçon,64347,194,5.457,0.744,0.674,425,6268 -Miossens-Lanusse,64385,261,9.148,0.963,0.872,433,6271 -Luzy-Saint-Martin,55310,113,7.277,0.859,0.778,854,6938 -Bourg-le-Comte,71048,184,11.443,1.077,0.975,777,6581 -Lacrabe,40138,259,6.333,0.801,0.725,412,6287 -Serreslous-et-Arribans,40299,195,5.495,0.746,0.675,407,6290 -Servas,30318,207,10.873,1.050,0.951,796,6343 -Soucé,53261,165,6.658,0.821,0.743,430,6823 -Menaucourt,55332,237,6.361,0.803,0.727,872,6842 -Blausasc,6019,1514,10.107,1.012,0.916,1051,6312 -Pomps,64450,289,7.775,0.888,0.804,410,6272 -Bessèges,30037,2840,10.357,1.024,0.927,791,6356 -La Vernarède,30345,332,5.677,0.758,0.686,779,6354 -Geaune,40110,676,10.512,1.032,0.934,427,6290 -Houécourt,88241,440,9.888,1.001,0.906,914,6805 -Portet-de-Luchon,31432,40,4.081,0.643,0.582,495,6194 -Harchéchamp,88229,77,7.455,0.869,0.787,907,6813 -Arget,64044,78,4.008,0.637,0.577,413,6278 -Ouvans,25441,62,5.145,0.722,0.654,963,6692 -Géus-d'Arzacq,64243,201,4.138,0.648,0.587,415,6269 -Branoux-les-Taillades,30051,1354,15.038,1.234,1.117,780,6349 -Arzacq-Arraziguet,64063,1105,15.319,1.246,1.128,425,6280 -Hagetaubin,64254,584,18.828,1.381,1.250,407,6277 -Vijon,36240,306,21.348,1.471,1.332,634,6592 -Romont,88395,389,19.407,1.402,1.269,964,6807 -Saint-Rémy-sur-Durolle,63393,1734,18.250,1.360,1.231,748,6532 -Rousson,30223,4064,33.036,1.830,1.657,796,6343 -Trévillach,66215,153,17.437,1.329,1.203,659,6181 -Blâmont,54077,1081,7.485,0.871,0.789,982,6840 -Croissy-sur-Seine,78190,9887,3.443,0.591,0.535,635,6865 -Courry,30097,279,8.308,0.917,0.830,794,6358 -Saint-Georges-sur-Moulon,18211,701,9.554,0.984,0.891,656,6674 -Uzan,64548,176,6.278,0.798,0.723,417,6268 -Peyre,40223,248,10.332,1.023,0.926,412,6279 -Baugy,71024,509,12.664,1.133,1.026,777,6581 -Mayran,12142,634,15.561,1.256,1.137,652,6363 -Garlède-Mondebat,64232,223,8.681,0.938,0.849,429,6274 -Reigny,18192,264,24.524,1.576,1.427,652,6613 -Le Donjon,3103,1064,37.070,1.938,1.755,759,6585 -Viven,64560,192,3.647,0.608,0.550,425,6269 -Chevières,8120,46,6.170,0.791,0.716,839,6917 -Flers,61169,14766,21.471,1.475,1.335,438,6853 -Joué-sur-Erdre,44077,2434,55.254,2.366,2.142,372,6722 -Vandœuvre-lès-Nancy,54547,30182,9.477,0.980,0.887,935,6845 -Drouville,54173,204,7.148,0.851,0.771,950,6846 -Tertry,80750,165,4.931,0.707,0.640,704,6976 -Saint-Jean-de-Valériscle,30268,680,8.254,0.914,0.828,790,6351 -Mant,40172,271,19.589,1.409,1.276,420,6284 -Amelécourt,57018,165,7.581,0.876,0.793,954,6866 -Saint-Julien-de-Cassagnas,30271,684,4.514,0.676,0.612,795,6346 -Garos,64234,250,12.176,1.111,1.006,420,6272 -Clèdes,40083,128,6.846,0.833,0.754,428,6287 -Méailles,4115,112,32.868,1.825,1.652,996,6337 -Bellonne,62106,216,2.046,0.455,0.412,703,7023 -Les Grandes-Armoises,8019,61,4.519,0.677,0.613,838,6937 -Urgons,40321,256,11.588,1.084,0.981,422,6291 -Espédaillac,46094,264,35.198,1.888,1.709,599,6390 -Bretignolles,79050,614,13.113,1.153,1.044,424,6649 -Durbans,46090,139,27.935,1.682,1.523,597,6398 -Luthenay-Uxeloup,58148,633,39.005,1.988,1.800,721,6634 -Vaxoncourt,88497,464,8.660,0.937,0.848,953,6803 -Navacelles,30187,335,11.104,1.061,0.961,800,6343 -Maxey-sur-Meuse,88293,232,10.902,1.051,0.952,899,6818 -Saint-Mard,54479,88,3.056,0.556,0.503,942,6828 -La Grand-Combe,30132,5086,12.426,1.122,1.016,781,6347 -Thèze,64536,823,7.946,0.897,0.812,430,6272 -Beux,57075,265,5.050,0.715,0.647,942,6881 -Laxou,54304,14321,15.967,1.272,1.152,927,6845 -Lindre-Basse,57404,223,11.005,1.056,0.956,978,6863 -Château-Bréhain,57130,76,6.118,0.787,0.713,960,6872 -Boissy-le-Châtel,77042,3137,9.950,1.004,0.909,712,6860 -Ventalon en Cévennes,48152,221,23.749,1.551,1.404,766,6356 -Saint-Hilaire-de-Lavit,48158,115,10.324,1.023,0.926,767,6349 -Méracq,64380,227,8.264,0.915,0.828,427,6275 -Le Martinet,30159,778,10.388,1.026,0.929,785,6350 -Ogéviller,54406,285,3.666,0.609,0.551,975,6834 -Salindres,30305,3406,11.538,1.081,0.979,790,6341 -Allamps,54010,516,7.301,0.860,0.779,909,6830 -Chambon,30079,265,14.472,1.211,1.096,781,6356 -Lanchy,2402,38,3.720,0.614,0.556,705,6971 -Potelières,30204,373,6.536,0.814,0.737,796,6348 -Molières-sur-Cèze,30171,1367,8.675,0.938,0.849,793,6351 -Saint-Florent-sur-Auzonnet,30253,1192,9.302,0.971,0.879,789,6352 -Clayeures,54130,190,9.358,0.974,0.882,952,6826 -Saint-Menges,8391,985,11.805,1.094,0.991,838,6961 -Meyrannes,30167,841,6.646,0.821,0.743,795,6353 -Fèrebrianges,51247,158,7.031,0.844,0.764,764,6863 -Mauvezin-sur-Gupie,47163,590,15.926,1.270,1.150,478,6387 -Saint-André-de-Cruzières,7211,466,20.350,1.436,1.300,797,6355 -Astet,7018,41,34.817,1.878,1.700,782,6403 -Cellier-du-Luc,7047,74,14.757,1.223,1.107,774,6398 -Larreule,64318,182,10.141,1.014,0.918,417,6269 -Monségur,40190,396,19.852,1.418,1.284,414,6282 -Malaussanne,64365,426,17.617,1.336,1.210,417,6281 -Joannas,7109,306,12.114,1.108,1.003,797,6389 -Vic-en-Bigorre,65460,4930,31.902,1.798,1.628,457,6260 -Ribes,7189,298,6.924,0.838,0.759,797,6378 -Prunet,7187,132,8.906,0.950,0.860,797,6389 -Saint-Genest-de-Beauzon,7238,316,5.354,0.737,0.667,797,6371 -Grangermont,45159,194,3.954,0.633,0.573,656,6786 -Pouliacq,64456,56,3.430,0.590,0.534,430,6277 -Mont-sur-Meurthe,54383,1113,9.658,0.989,0.895,953,6836 -Cabidos,64158,185,7.262,0.858,0.777,421,6278 -Haroué,54252,512,4.286,0.659,0.597,934,6824 -Quevilloncourt,54442,94,2.895,0.542,0.491,930,6824 -Morville-sur-Nied,57486,122,5.775,0.765,0.693,950,6877 -Saint-Geniez-ô-Merle,19205,92,15.881,1.268,1.148,626,6445 -Holacourt,57328,87,2.900,0.542,0.491,956,6882 -Frenelle-la-Grande,88185,109,5.518,0.748,0.677,927,6811 -Auga,64077,144,4.076,0.643,0.582,428,6269 -Repel,88389,86,3.506,0.596,0.540,922,6810 -Haussonville,54256,303,11.255,1.068,0.967,944,6831 -Plou,18181,528,33.840,1.852,1.677,636,6664 -Lay-Saint-Remy,54306,356,3.866,0.626,0.567,902,6844 -Beyries,40041,125,4.297,0.660,0.598,406,6282 -Brias,62180,292,7.761,0.887,0.803,658,7036 -Sainte-Pôle,54484,191,5.759,0.764,0.692,982,6831 -Nonzeville,88331,50,1.609,0.404,0.366,969,6802 -Saint-Georges-Antignac,17332,380,10.214,1.017,0.921,430,6493 -Aguessac,12002,867,17.749,1.341,1.214,706,6343 -Petit-Tenquin,57536,232,4.870,0.702,0.636,985,6883 -Chéniers,23062,578,35.006,1.883,1.705,609,6581 -Lostroff,57417,69,4.991,0.711,0.644,982,6869 -Haims,86110,226,32.807,1.823,1.651,542,6606 -Nayemont-les-Fosses,88320,814,8.875,0.948,0.858,999,6809 -Sommerviller,54509,986,3.851,0.625,0.566,947,6843 -Saint-Pierre-des-Tripiers,48176,84,34.895,1.880,1.702,718,6348 -Lalonquette,64308,280,5.313,0.734,0.665,430,6271 -Saint-Cyr-en-Pail,53208,488,20.520,1.442,1.306,462,6818 -Aubagnan,40016,250,3.432,0.590,0.534,419,6292 -Vernon,7336,236,3.804,0.621,0.562,796,6380 -Lafage,11184,82,12.931,1.145,1.037,609,6228 -Gourgé,79135,965,50.445,2.261,2.047,462,6630 -Sanilhac,7307,448,21.072,1.461,1.323,795,6380 -Marthille,57451,173,10.257,1.019,0.923,962,6874 -Saint-Hilaire,46269,68,8.035,0.902,0.817,634,6410 -Thimonville,57671,156,7.378,0.865,0.783,947,6875 -Gurgy,89198,1728,13.241,1.158,1.048,740,6757 -Berrias-et-Casteljau,7031,750,26.668,1.644,1.489,794,6368 -Pimbo,40226,210,10.934,1.053,0.953,425,6280 -Chandolas,7053,502,11.908,1.098,0.994,799,6367 -Crévic,54145,901,10.662,1.039,0.941,949,6844 -Saint-Genès-Champespe,63346,221,32.372,1.811,1.640,680,6477 -Saint-Pardoux-les-Cards,23229,290,24.675,1.581,1.431,629,6554 -Les Assions,7017,724,13.989,1.191,1.078,793,6372 -Les Salces,48187,99,46.086,2.161,1.957,706,6386 -Saint-Saturnin,48181,64,9.212,0.966,0.875,716,6369 -Lapanouse-de-Cernon,12122,121,22.919,1.524,1.380,705,6320 -Massegros Causses Gorges,48094,976,159.590,4.021,3.641,718,6348 -La Bastide-Pradines,12022,102,20.565,1.443,1.307,706,6326 -Saint-Bonnet-de-Chirac,48138,70,7.601,0.878,0.795,723,6380 -Charmes-sur-Rhône,7055,2905,5.899,0.773,0.700,846,6420 -Palhers,48107,188,8.620,0.935,0.847,723,6380 -Champgenéteux,53053,521,25.255,1.600,1.449,446,6804 -Saint-Pôan,22323,804,20.216,1.431,1.296,306,6839 -Allarmont,88005,215,13.123,1.153,1.044,994,6827 -Vannes-le-Châtel,54548,573,17.497,1.331,1.205,904,6836 -Le Bois-Robert,76112,344,5.011,0.713,0.646,565,6972 -La Cresse,12086,313,19.319,1.399,1.267,714,6339 -Ambacourt,88006,305,6.803,0.830,0.751,931,6811 -Paulhe,12178,397,4.860,0.702,0.636,710,6341 -Lignères,61225,28,5.407,0.740,0.670,503,6854 -Berthelming,57066,508,10.719,1.042,0.943,994,6864 -Verrières,12291,452,53.495,2.328,2.108,707,6349 -Bussy-en-Othe,89059,737,57.502,2.414,2.186,734,6770 -Dalhain,57166,112,4.836,0.700,0.634,960,6872 -Molac,56135,1549,28.592,1.702,1.541,291,6754 -Plainoiseau,39422,529,5.615,0.754,0.683,896,6627 -Sennecey-le-Grand,71512,3147,26.739,1.646,1.490,847,6620 -Dijon,21231,155090,41.729,2.056,1.862,858,6691 -Oinville-Saint-Liphard,28284,274,21.869,1.489,1.348,618,6792 -Lacajunte,40136,153,5.659,0.757,0.685,423,6282 -Vomécourt-sur-Madon,88522,69,3.566,0.601,0.544,934,6811 -Villers-Vicomte,60692,157,5.238,0.729,0.660,643,6949 -Kerprich-aux-Bois,57362,155,8.077,0.905,0.819,993,6856 -Aigleville,27004,404,3.273,0.576,0.522,586,6879 -Sainte-Hélène-du-Lac,73240,773,7.080,0.847,0.767,940,6491 -Castillon (Canton d'Arthez-de-Béarn),64181,307,6.865,0.834,0.755,410,6268 -Lasclaveries,64321,244,6.128,0.788,0.713,434,6263 -Bats,40029,298,7.389,0.865,0.783,422,6291 -Blanquefort-sur-Briolance,47029,471,42.039,2.064,1.869,535,6389 -Dadonville,45119,2434,18.324,1.363,1.234,643,6783 -Saxon-Sion,54497,94,6.268,0.797,0.722,927,6816 -Hattigny,57302,192,13.381,1.164,1.054,990,6845 -Dierre,37096,602,10.332,1.023,0.926,546,6694 -Gélaucourt,54218,66,2.258,0.478,0.433,920,6821 -Hambach,57289,2877,17.547,1.333,1.207,998,6892 -Grémecey,57257,105,9.075,0.959,0.868,949,6863 -Dommartemont,54165,594,1.324,0.366,0.331,937,6852 -Buissoncourt,54104,269,6.930,0.838,0.759,945,6845 -Blanche-Église,57090,115,6.845,0.833,0.754,971,6862 -Andilly,54016,284,7.223,0.855,0.774,914,6855 -Ancerviller,54014,276,12.464,1.124,1.018,981,6833 -Ménarmont,88298,72,5.254,0.730,0.661,970,6820 -Attilloncourt,57036,106,3.314,0.579,0.524,949,6859 -Woël,55583,201,13.337,1.162,1.052,901,6888 -Thélod,54515,249,10.834,1.048,0.949,925,6833 -Pange,57533,877,8.924,0.951,0.861,943,6891 -Dombrot-sur-Vair,88141,249,9.146,0.963,0.872,914,6798 -Brû,88077,568,8.971,0.953,0.863,974,6814 -Sotzeling,57657,21,3.622,0.606,0.549,965,6869 -Padoux,88340,514,19.283,1.398,1.266,966,6802 -Sarre-Union,67434,2865,15.444,1.251,1.133,998,6881 -Bazien,88042,77,3.188,0.568,0.514,974,6819 -Malaucourt-sur-Seille,57436,127,7.160,0.852,0.771,948,6867 -Foug,54205,2688,25.729,1.615,1.462,903,6847 -Viterne,54586,729,23.338,1.538,1.393,921,6839 -Saint-Remy,88435,518,12.278,1.115,1.010,980,6810 -Aspach,57034,33,4.111,0.645,0.584,993,6848 -Pettoncourt,57538,288,4.927,0.707,0.640,952,6860 -Chaouilley,54117,114,5.133,0.721,0.653,926,6821 -Longeville-lès-Metz,57412,4068,2.707,0.524,0.474,929,6896 -Estrennes,88164,91,6.025,0.781,0.707,927,6801 -Battigny,54052,137,6.535,0.814,0.737,923,6820 -Dolaincourt,88137,96,2.624,0.516,0.467,909,6808 -Languimberg,57383,171,18.586,1.372,1.242,990,6853 -Retonfey,57575,1385,9.764,0.995,0.901,944,6896 -Armaucourt,54021,219,3.706,0.613,0.555,942,6863 -Blainville-sur-l'Eau,54076,3985,11.896,1.098,0.994,952,6830 -Saint-Avold,57606,15446,35.429,1.895,1.716,967,6894 -Oberstinzel,57518,348,5.129,0.721,0.653,999,6863 -Nouilly,57512,705,2.485,0.502,0.455,937,6897 -Gosselming,57255,594,10.217,1.017,0.921,994,6860 -Jolivet,54281,905,7.245,0.857,0.776,960,6841 -Neufmaisons,54396,233,21.959,1.492,1.351,990,6822 -Hagéville,54244,114,8.897,0.949,0.859,907,6885 -Rambervillers,88367,5286,20.690,1.448,1.311,966,6809 -Sivry,54508,259,5.850,0.770,0.697,935,6862 -Many,57442,272,8.238,0.914,0.828,957,6882 -Boucheporn,57095,581,6.670,0.822,0.744,964,6902 -Adelange,57008,210,5.881,0.772,0.699,964,6883 -Domèvre-sur-Durbion,88143,275,12.775,1.138,1.030,957,6802 -Donjeux,57182,88,3.224,0.572,0.518,950,6871 -Adaincourt,57007,127,3.417,0.588,0.532,951,6883 -Gémonville,54220,73,9.130,0.962,0.871,913,6819 -Neuves-Maisons,54397,6820,4.446,0.671,0.608,928,6840 -Silly-sur-Nied,57654,692,4.522,0.677,0.613,944,6896 -Vigneulles,54565,246,5.651,0.757,0.685,946,6833 -Laneuveville-devant-Nancy,54300,6544,12.472,1.124,1.018,942,6842 -Hilsprich,57325,873,10.361,1.025,0.928,988,6885 -Vergaville,57706,592,13.180,1.156,1.047,977,6865 -Halloville,54246,73,3.942,0.632,0.572,985,6836 -Hampont,57290,185,11.234,1.067,0.966,965,6867 -Aingeray,54007,554,12.941,1.145,1.037,921,6851 -Barisey-la-Côe,54047,223,3.954,0.633,0.573,909,6832 -Rigny-Saint-Martin,55434,54,16.057,1.276,1.155,903,6839 -Lafrimbolle,57374,205,10.655,1.039,0.941,997,6844 -Augny,57039,1875,14.970,1.232,1.115,925,6887 -Crespinet,81073,173,9.119,0.961,0.870,644,6316 -Luppy,57425,569,16.246,1.283,1.162,943,6878 -Ubexy,88480,180,5.024,0.713,0.646,941,6808 -Mirecourt,88304,5285,12.207,1.112,1.007,929,6801 -Lindre-Haute,57405,47,2.405,0.494,0.447,977,6865 -Nompatelize,88328,540,6.957,0.840,0.761,988,6812 -Bannay,57048,72,4.167,0.650,0.589,955,6898 -Jeandelaincourt,54276,802,4.597,0.682,0.617,939,6868 -Vathiménil,54550,358,12.210,1.112,1.007,964,6831 -Scy-Chazelles,57642,2670,4.448,0.671,0.608,926,6895 -Saint-Maurice-aux-Forges,54481,103,3.313,0.579,0.524,985,6829 -Serres,54502,244,15.811,1.266,1.146,954,6851 -Rapey,88374,23,2.949,0.547,0.495,942,6807 -Autrey,54032,179,6.196,0.792,0.717,932,6830 -Germonville,54224,118,5.211,0.727,0.658,939,6816 -Créhange,57159,3918,10.479,1.030,0.933,960,6887 -Azelot,54037,423,4.725,0.692,0.627,939,6838 -Amanvillers,57017,2176,9.773,0.995,0.901,924,6899 -Vigny,57715,349,5.818,0.768,0.695,937,6880 -Port-sur-Seille,54433,221,6.325,0.801,0.725,934,6872 -Lironville,54317,128,9.010,0.955,0.865,911,6866 -Amenoncourt,54013,80,7.285,0.859,0.778,979,6845 -Barville,88036,90,8.533,0.930,0.842,907,6811 -Sillegny,57652,469,10.501,1.031,0.933,928,6882 -Lédas-et-Penthiès,81141,143,12.534,1.127,1.020,649,6334 -Vicherey,88504,187,5.920,0.774,0.701,919,6814 -Pleuvezain,88350,77,3.804,0.621,0.562,916,6811 -Chauffecourt,88097,41,1.884,0.437,0.396,933,6809 -Tritteling-Redlach,57679,535,6.026,0.781,0.707,963,6893 -Cappel,57122,700,5.959,0.777,0.704,983,6893 -Servigny-lès-Raville,57648,478,14.214,1.200,1.086,954,6891 -Coin-lès-Cuvry,57146,710,6.641,0.820,0.742,928,6885 -Moutrot,54392,298,7.273,0.858,0.777,916,6837 -Lachambre,57373,898,7.830,0.891,0.807,974,6891 -Glatigny,57249,251,6.235,0.795,0.720,943,6900 -Saint-Germain-sur-Meuse,55456,270,7.706,0.884,0.800,902,6843 -Agincourt,54006,438,4.250,0.656,0.594,937,6851 -Gézoncourt,54225,176,5.328,0.735,0.665,919,6863 -Burlioncourt,57120,148,7.371,0.864,0.782,965,6869 -Francaltroff,57232,762,12.503,1.126,1.019,976,6880 -Sauvigny,55474,232,17.509,1.332,1.206,903,6823 -Sainte-Ruffine,57624,553,0.712,0.269,0.244,926,6894 -Crion,54147,92,8.213,0.912,0.826,965,6844 -Biécourt,88058,102,6.001,0.780,0.706,918,6806 -Châtel-sur-Moselle,88094,1704,12.133,1.109,1.004,949,6808 -Rozelieures,54467,191,9.480,0.980,0.887,955,6824 -Lairière,11186,50,13.493,1.169,1.058,655,6214 -Rémilly,57572,2059,18.918,1.384,1.253,952,6882 -Fontenoy-la-Joûte,54201,307,11.125,1.062,0.962,970,6826 -Henriville,57316,757,3.959,0.633,0.573,983,6896 -Beuvezin,54068,97,7.615,0.878,0.795,918,6812 -Pulligny,54437,1174,9.301,0.971,0.879,934,6832 -Veney,54560,50,3.512,0.597,0.541,983,6825 -Vaudigny,54554,75,4.029,0.639,0.579,938,6818 -Foville,57231,102,3.417,0.588,0.532,944,6875 -Avrainville,54034,221,9.764,0.995,0.901,918,6858 -Saint-Michel-sur-Meurthe,88428,1875,15.488,1.253,1.134,985,6808 -Froville,54216,123,5.893,0.773,0.700,950,6822 -Bezaumont,54072,257,4.269,0.658,0.596,929,6866 -Sainte-Marguerite,88424,2322,5.607,0.754,0.683,996,6804 -Frolois,54214,708,9.397,0.976,0.884,933,6835 -Harmonville,88232,235,15.216,1.242,1.125,913,6819 -Lorey,54324,107,5.102,0.719,0.651,944,6825 -Assenoncourt,57035,115,16.864,1.307,1.183,976,6858 -Xivray-et-Marvoisin,55586,98,14.502,1.212,1.097,903,6867 -Bertrichamps,54065,1091,19.935,1.421,1.287,983,6820 -Moyemont,88318,221,12.328,1.118,1.012,963,6808 -Sainte-Hélène,88418,476,17.063,1.315,1.191,972,6807 -Dommartin-sous-Amance,54168,271,4.092,0.644,0.583,939,6851 -Mainvillers,57430,336,6.767,0.828,0.750,960,6887 -Athienville,54026,178,13.138,1.154,1.045,954,6851 -Lucy,57424,222,7.510,0.872,0.790,953,6876 -Vaudémont,54552,64,5.791,0.766,0.694,927,6816 -Bouillonville,54087,151,5.340,0.736,0.666,908,6874 -Vieux-Moulin,88506,328,3.865,0.626,0.567,995,6817 -Domèvre-sur-Vezouze,54161,289,15.196,1.241,1.124,978,6837 -Morhange,57483,3465,15.517,1.254,1.135,967,6873 -Fresnes-en-Saulnois,57238,179,12.890,1.143,1.035,954,6863 -Vany,57694,390,3.118,0.562,0.509,935,6899 -Manhoué,57440,143,4.074,0.642,0.581,945,6863 -Moussey,57488,561,7.806,0.889,0.805,977,6846 -Hoste,57337,620,9.474,0.980,0.887,980,6889 -Jouy-aux-Arches,57350,1487,5.948,0.776,0.703,925,6889 -Gugnécourt,88222,232,5.128,0.721,0.653,970,6800 -Herny,57319,503,9.733,0.993,0.899,957,6882 -Saint-Médard,57621,95,9.892,1.001,0.906,966,6861 -Maizières,54336,980,15.818,1.266,1.146,923,6834 -Latour-en-Woëvre,55281,95,6.788,0.829,0.751,905,6894 -Liéhon,57403,110,5.389,0.739,0.669,939,6884 -Val-de-Bride,57270,591,11.415,1.075,0.973,969,6865 -Gibeaumeix,54226,165,7.968,0.899,0.814,904,6838 -Lorry-Mardigny,57416,640,11.602,1.084,0.981,926,6878 -Crézilles,54146,276,9.603,0.986,0.893,914,6834 -Saint-Menge,88427,127,6.700,0.824,0.746,921,6803 -Puttigny,57558,86,7.483,0.871,0.789,960,6868 -Romain,54461,69,3.111,0.561,0.508,948,6831 -Maizeroy,57431,384,8.757,0.942,0.853,946,6890 -Maconcourt,88278,78,4.915,0.706,0.639,919,6812 -Colligny-Maizery,57148,579,6.786,0.829,0.751,943,6896 -Béchy,57057,641,9.586,0.986,0.893,946,6879 -Raon-l'Étape,88372,6426,23.731,1.551,1.404,985,6822 -Charey,54119,79,9.429,0.977,0.885,909,6882 -Bérig-Vintrange,57063,222,8.540,0.930,0.842,969,6880 -Repaix,54458,94,4.971,0.710,0.643,984,6841 -Jaulny,54275,211,8.211,0.912,0.826,913,6879 -Dampvitoux,54153,59,9.159,0.963,0.872,906,6879 -Niederstinzel,57506,260,13.081,1.151,1.042,992,6873 -Valmont,57690,3185,9.194,0.965,0.874,971,6891 -Han-sur-Nied,57293,259,2.018,0.452,0.409,952,6881 -Lixing-lès-Saint-Avold,57409,691,6.358,0.803,0.727,974,6887 -Herbitzheim,67191,1851,22.014,1.493,1.352,999,6885 -Laneuvelotte,54296,442,9.146,0.963,0.872,942,6849 -Brixey-aux-Chanoines,55080,85,7.632,0.879,0.796,903,6823 -Elvange,57190,382,7.191,0.854,0.773,961,6891 -Laquenexy,57385,1139,9.085,0.959,0.868,943,6891 -Montdidier,57478,77,1.914,0.440,0.398,980,6877 -Leyviller,57398,489,7.217,0.855,0.774,980,6886 -Barst,57052,582,5.795,0.766,0.694,978,6891 -Racécourt,88365,167,7.233,0.856,0.775,939,6799 -Biding,57082,325,6.642,0.820,0.742,979,6892 -Pulnoy,54439,4712,3.756,0.617,0.559,939,6849 -Pierre-la-Treiche,54426,500,12.961,1.146,1.038,920,6841 -Laronxe,54303,373,6.799,0.830,0.751,966,6835 -Villers,88507,217,4.978,0.710,0.643,936,6806 -Franconville,54209,81,4.579,0.681,0.617,954,6827 -Donnelay,57183,190,13.007,1.148,1.039,972,6854 -Léning,57394,326,6.504,0.812,0.735,980,6882 -Phlin,54424,41,3.734,0.615,0.557,941,6873 -Vallois,54543,154,7.331,0.862,0.780,962,6821 -Limey-Remenauville,54316,277,18.688,1.376,1.246,915,6870 -Vahl-lès-Bénestroff,57685,144,8.959,0.953,0.863,979,6876 -Avrainville,88024,109,4.596,0.682,0.617,939,6815 -Vaxy,57702,155,5.318,0.734,0.665,957,6869 -Frizon,88190,510,11.807,1.094,0.991,948,6806 -Dommartin-lès-Toul,54167,2007,6.943,0.839,0.760,918,6844 -Loupershouse,57419,941,7.726,0.885,0.801,983,6893 -Juvelize,57353,72,7.728,0.885,0.801,967,6859 -Tanconville,54512,117,4.202,0.652,0.590,988,6841 -Seingbouse,57644,1856,8.037,0.902,0.817,981,6895 -Parey-Saint-Césaire,54417,244,5.614,0.754,0.683,926,6828 -Fey-en-Haye,54193,79,7.198,0.854,0.773,915,6870 -Viviers-lès-Offroicourt,88518,35,4.565,0.680,0.616,925,6800 -Villers-en-Haye,54573,179,7.333,0.862,0.780,922,6863 -Marthemont,54354,42,2.134,0.465,0.421,923,6832 -Bougarber,64142,869,10.290,1.021,0.924,419,6260 -Saint-Baussant,54470,74,9.076,0.959,0.868,904,6868 -Hudiviller,54269,352,3.016,0.553,0.501,949,6839 -Rouvres-en-Xaintois,88400,279,11.107,1.061,0.961,921,6802 -Landaville,88259,299,13.211,1.157,1.048,901,6801 -Bagneux,54041,160,8.727,0.940,0.851,912,6834 -Celles-sur-Plaine,88082,847,20.206,1.431,1.296,990,6822 -Puzieux,88364,150,5.476,0.745,0.675,930,6807 -Altrippe,57014,387,4.878,0.703,0.637,980,6889 -Hombourg-Haut,57332,6594,12.254,1.114,1.009,977,6896 -Malleloy,54338,981,4.141,0.648,0.587,933,6861 -Teting-sur-Nied,57668,1358,9.901,1.002,0.907,966,6892 -Pompey,54430,4900,8.297,0.917,0.830,930,6859 -Virming,57723,296,10.808,1.046,0.947,974,6876 -Fribourg,57241,164,17.484,1.331,1.205,989,6861 -Manonviller,54349,167,6.920,0.837,0.758,972,6840 -Uruffe,54538,398,13.012,1.148,1.039,900,6833 -Villers-sous-Prény,54579,348,6.280,0.798,0.723,919,6874 -Fraimbois,54206,386,15.129,1.238,1.121,964,6832 -Thiébauménil,54520,381,3.908,0.629,0.570,969,6839 -Forcelles-Saint-Gorgon,54203,151,5.331,0.735,0.665,931,6823 -Chambley-Bussières,54112,690,19.330,1.399,1.267,916,6887 -Le Ban-Saint-Martin,57049,4340,1.573,0.399,0.361,928,6896 -Gironcourt-sur-Vraine,88206,955,7.492,0.871,0.789,917,6802 -Neufmoulins,57500,42,1.946,0.444,0.402,992,6850 -Arracourt,54023,247,17.776,1.342,1.215,958,6856 -Housséville,54268,166,5.358,0.737,0.667,930,6818 -Sarrewerden,67435,857,16.793,1.304,1.181,998,6873 -Xures,54601,111,7.045,0.845,0.765,970,6848 -Saint-Martin,54480,58,5.023,0.713,0.646,977,6838 -Anthelupt,54020,458,7.792,0.889,0.805,953,6842 -Béning-lès-Saint-Avold,57061,1136,3.679,0.611,0.553,979,6900 -Wuisse,57753,63,14.485,1.211,1.096,972,6868 -Gerbécourt,57247,94,2.996,0.551,0.499,959,6865 -Villey-le-Sec,54583,411,6.437,0.808,0.732,917,6844 -Sainte-Geneviève,54474,191,7.324,0.861,0.780,929,6866 -Hardancourt,88230,40,3.341,0.582,0.527,964,6814 -Landroff,57379,272,7.730,0.885,0.801,965,6882 -Remenoville,54455,164,8.502,0.928,0.840,956,6822 -Xaronval,88529,105,5.289,0.732,0.663,937,6811 -Badménil-aux-Bois,88027,159,9.318,0.972,0.880,960,6809 -Ceintrey,54109,920,11.140,1.062,0.962,932,6829 -Autigny-la-Tour,88019,164,15.843,1.267,1.147,903,6814 -Ippling,57348,761,3.410,0.588,0.532,992,6899 -Bult,88080,309,9.920,1.003,0.908,967,6804 -Barchain,57050,110,1.706,0.416,0.377,991,6852 -Dieuze,57177,2942,9.447,0.978,0.885,973,6865 -Lagor,64301,1191,21.006,1.459,1.321,402,6258 -Azerailles,54038,782,13.726,1.179,1.067,975,6825 -Bouxières-sous-Froidmont,54091,350,7.801,0.889,0.805,925,6877 -Soncourt,88459,44,3.903,0.629,0.570,916,6815 -Vannecourt,57692,81,9.564,0.984,0.891,961,6868 -Roville-devant-Bayon,54465,791,4.454,0.672,0.608,945,6824 -Jonville-en-Woëvre,55256,149,10.884,1.050,0.951,905,6890 -Azoudange,57044,115,15.961,1.272,1.152,977,6856 -Norroy-lès-Pont-à-Mousson,54403,1215,5.931,0.775,0.702,919,6873 -Hamonville,54248,93,6.668,0.822,0.744,905,6859 -Entre-deux-Eaux,88159,509,8.571,0.932,0.844,999,6799 -Les Étangs,57200,400,6.064,0.784,0.710,945,6897 -Hinsingen,67199,89,2.997,0.551,0.499,993,6879 -Magnières,54331,290,11.659,1.087,0.984,965,6819 -Sorbey,57656,367,5.569,0.751,0.680,942,6885 -Narbéfontaine,57495,118,3.586,0.603,0.546,960,6900 -Griscourt,54239,129,3.725,0.614,0.556,923,6865 -Bezange-la-Grande,54071,160,17.205,1.320,1.195,957,6857 -Féy,57212,743,5.718,0.761,0.689,927,6884 -Lalœuf,54291,292,10.993,1.055,0.955,923,6824 -Baerendorf,67017,308,7.607,0.878,0.795,1000,6865 -Buchy,57116,108,3.566,0.601,0.544,941,6882 -Thiaucourt-Regniéville,54518,1131,19.227,1.396,1.264,916,6873 -Germiny,54223,208,11.910,1.099,0.995,923,6830 -Momuy,40188,464,13.410,1.166,1.056,407,6285 -Domptail,88153,359,18.786,1.380,1.249,969,6825 -Aboncourt,54003,102,6.924,0.838,0.759,919,6810 -Maizières-lès-Vic,57434,510,26.008,1.623,1.469,980,6850 -Vittonville,54589,123,4.023,0.638,0.578,924,6880 -Arry,57030,545,6.916,0.837,0.758,925,6883 -Sorède,66196,3246,34.560,1.871,1.694,697,6161 -Lanfroicourt,54301,130,6.243,0.795,0.720,943,6859 -Haigneville,54245,56,2.899,0.542,0.491,947,6827 -Flainval,54195,204,3.609,0.605,0.548,949,6840 -Thonville,57673,47,2.529,0.506,0.458,962,6883 -Vallerange,57687,207,6.654,0.821,0.743,972,6878 -Coyviller,54141,142,4.550,0.679,0.615,942,6835 -Folschviller,57224,4041,9.499,0.981,0.888,972,6891 -Beaumont,54057,71,3.078,0.558,0.505,904,6863 -Montigny-lès-Metz,57480,21713,6.693,0.823,0.745,928,6894 -Hammeville,54247,176,5.489,0.746,0.675,927,6825 -Vic-sur-Seille,57712,1291,19.582,1.409,1.276,957,6857 -Blénod-lès-Pont-à-Mousson,54079,4603,9.760,0.994,0.900,925,6870 -Omelmont,54409,187,4.665,0.688,0.623,931,6828 -Ernestviller,57197,501,4.445,0.671,0.608,991,6894 -Laneuveville-devant-Bayon,54299,225,5.806,0.767,0.694,942,6823 -Dommarie-Eulmont,54164,85,5.474,0.745,0.675,925,6816 -Ars-Laquenexy,57031,929,6.221,0.794,0.719,937,6892 -Waville,54593,430,11.455,1.077,0.975,917,6883 -Saint-Georges,57611,201,8.111,0.907,0.821,991,6846 -Loudrefing,57418,322,23.038,1.528,1.383,990,6872 -Chaudeney-sur-Moselle,54122,704,8.387,0.922,0.835,913,6845 -Évaux-et-Ménil,88166,356,5.001,0.712,0.645,945,6806 -Harbouey,54251,116,10.220,1.018,0.922,989,6836 -Nomexy,88327,2109,8.177,0.910,0.824,952,6805 -Bayonville-sur-Mad,54055,302,9.568,0.985,0.892,919,6881 -Kirviller,57366,143,2.531,0.506,0.458,990,6880 -Senones,88451,2466,18.472,1.368,1.239,995,6819 -Salles-sur-l'Hers,11371,699,20.009,1.424,1.289,600,6247 -Benney,54062,644,18.612,1.373,1.243,937,6833 -Cabrespine,11056,174,18.159,1.356,1.228,659,6254 -Théding,57669,2515,8.146,0.908,0.822,985,6897 -Reillon,54452,86,4.493,0.675,0.611,975,6841 -Bralleville,54094,175,4.491,0.675,0.611,937,6816 -Mortagne,88315,167,22.209,1.500,1.358,981,6805 -Richardménil,54459,2358,7.060,0.846,0.766,936,6839 -Orny,57527,365,7.290,0.859,0.778,936,6885 -Beney-en-Woëvre,55046,133,17.522,1.332,1.206,906,6875 -Sainte-Colombe-de-la-Commanderie,66170,151,4.818,0.699,0.633,681,6168 -Vilcey-sur-Trey,54566,162,13.506,1.170,1.059,918,6877 -Hellering-lès-Fénétrange,57310,192,4.087,0.644,0.583,997,6864 -Lorquin,57414,1153,8.762,0.942,0.853,993,6850 -Montauriol,66112,236,11.292,1.070,0.969,676,6166 -Fleury,57218,1179,9.717,0.992,0.898,936,6886 -Marange-Zondrange,57444,338,8.304,0.917,0.830,956,6896 -Buriville,54107,73,11.560,1.082,0.980,974,6833 -Viller,57717,208,7.264,0.858,0.777,967,6884 -Croismare,54148,631,15.953,1.271,1.151,961,6840 -Bernécourt,54063,183,9.516,0.982,0.889,907,6866 -Chenois,57138,76,3.578,0.602,0.545,954,6880 -Wolfskirchen,67552,349,10.675,1.040,0.942,997,6870 -Altwiller,67009,406,16.441,1.291,1.169,989,6878 -Doncourt-lès-Conflans,54171,1198,7.403,0.866,0.784,914,6900 -Houdelmont,54264,218,3.895,0.628,0.569,929,6830 -Manonville,54348,242,9.441,0.978,0.885,913,6861 -Certilleux,88083,210,5.932,0.775,0.702,901,6806 -Mulcey,57493,210,8.321,0.918,0.831,971,6863 -Diffembach-lès-Hellimer,57178,357,5.781,0.765,0.693,984,6886 -Bruville,54103,225,10.875,1.050,0.951,915,6894 -Pévange,57539,54,1.947,0.444,0.402,964,6874 -Craincourt,57158,258,9.064,0.958,0.867,943,6869 -Remoncourt,54457,46,6.852,0.833,0.754,976,6848 -Montauville,54375,1069,16.477,1.292,1.170,922,6870 -Viviers,57727,124,7.380,0.865,0.783,951,6870 -Ancerville,57020,301,5.239,0.729,0.660,950,6888 -Bey-sur-Seille,54070,165,5.584,0.752,0.681,945,6862 -Saint-Jure,57617,302,10.655,1.039,0.941,939,6875 -Saint-Boingt,54471,72,8.232,0.913,0.827,955,6818 -Anglars-Saint-Félix,12008,808,22.225,1.501,1.359,642,6370 -Mandres-aux-Quatre-Tours,54343,183,10.389,1.026,0.929,903,6858 -Bissert,67047,156,3.344,0.582,0.527,993,6879 -Reherrey,54450,116,5.949,0.776,0.703,978,6831 -Zincourt,88532,86,4.564,0.680,0.616,957,6806 -Cirey-sur-Vezouze,54129,1661,16.559,1.295,1.173,989,6837 -Guinglange,57276,332,10.400,1.027,0.930,954,6891 -Amance,54012,337,13.625,1.175,1.064,946,6856 -Verny,57708,1940,3.904,0.629,0.570,934,6882 -Bélesta,66019,225,20.480,1.441,1.305,673,6181 -Saint-Pierremont,88432,157,5.531,0.749,0.678,965,6819 -Espira-de-l'Agly,66069,3445,27.150,1.659,1.502,686,6185 -Munster,57494,255,6.613,0.819,0.742,983,6873 -Anglemont,88008,165,5.902,0.773,0.700,974,6814 -Saulxures-lès-Vannes,54496,376,18.341,1.363,1.234,904,6828 -Oms,66126,331,18.724,1.377,1.247,674,6160 -Sionviller,54507,103,6.850,0.833,0.754,963,6843 -Grostenquin,57262,617,21.841,1.488,1.347,972,6882 -Fremifontaine,88184,483,9.657,0.989,0.895,975,6804 -Laure-Minervois,11198,1074,40.680,2.030,1.838,656,6236 -Portieux,88355,1268,7.879,0.893,0.809,949,6809 -Saint-Sernin-lès-Lavaur,81270,166,4.265,0.657,0.595,616,6271 -Villey-Saint-Étienne,54584,1083,17.522,1.332,1.206,916,6848 -Crépey,54143,392,21.365,1.471,1.332,922,6829 -Vaucourt,54551,66,6.322,0.800,0.724,970,6847 -Autrepierre,54030,81,7.936,0.897,0.812,981,6843 -Lessy,57396,749,2.875,0.540,0.489,927,6897 -Laning,57384,594,6.721,0.825,0.747,975,6889 -Saizerais,54490,1526,14.473,1.211,1.096,922,6858 -Selles-sur-Cher,41242,4590,25.759,1.616,1.463,588,6685 -Mousson,54390,106,5.858,0.770,0.697,925,6871 -Gondrexon,54233,40,2.513,0.505,0.457,977,6841 -Belleau,54059,741,20.667,1.447,1.310,931,6864 -Nelling,57497,264,7.408,0.866,0.784,982,6880 -Vibersviller,57711,461,12.852,1.141,1.033,990,6871 -Mécleuves,57454,1164,12.894,1.143,1.035,938,6887 -Longchamp-sous-Châtenois,88274,69,4.953,0.708,0.641,912,6802 -Guessling-Hémering,57275,916,10.099,1.012,0.916,968,6884 -Bertrambois,54064,317,18.408,1.366,1.237,999,6834 -Aube,57037,267,5.324,0.734,0.665,944,6884 -Gugney-aux-Aulx,88223,153,8.693,0.939,0.850,941,6806 -Velaine-sous-Amance,54558,276,6.494,0.811,0.734,946,6851 -Rollainville,88393,305,8.128,0.907,0.821,902,6812 -Moriville,88313,431,25.527,1.608,1.456,951,6812 -Arraye-et-Han,54024,355,10.329,1.023,0.926,943,6865 -Brulange,57115,102,5.874,0.771,0.698,961,6878 -Riche,57580,189,6.330,0.801,0.725,966,6873 -Mittersheim,57469,593,18.119,1.355,1.227,991,6869 -Coinches,88111,352,5.643,0.756,0.684,1000,6800 -Rémelfing,57568,1406,2.609,0.514,0.465,999,6895 -Albestroff,57011,630,19.071,1.390,1.259,980,6877 -Vitrey,54587,209,11.695,1.089,0.986,924,6823 -Nébing,57496,350,7.382,0.865,0.783,979,6872 -Art-sur-Meurthe,54025,1403,11.596,1.084,0.981,937,6846 -Le Vintrou,81321,83,11.368,1.073,0.972,660,6272 -Zommange,57763,42,7.456,0.869,0.787,978,6865 -Cajarc,46045,1131,25.771,1.616,1.463,604,6378 -Clémery,54131,497,9.551,0.984,0.891,935,6870 -Juvaincourt,88257,186,8.934,0.951,0.861,927,6806 -Jallaucourt,57349,162,8.456,0.926,0.838,949,6863 -Diane-Capelle,57175,223,7.354,0.863,0.781,991,6853 -Solgne,57655,1105,7.251,0.857,0.776,940,6879 -Hellimer,57311,560,10.418,1.027,0.930,978,6885 -Moulins-lès-Metz,57487,5093,6.978,0.841,0.761,926,6892 -Aiguefonde,81002,2522,19.036,1.389,1.258,643,6262 -Grundviller,57263,670,6.284,0.798,0.723,992,6890 -Ville-sur-Yron,54581,297,11.191,1.065,0.964,908,6895 -Réning,57573,125,4.053,0.641,0.580,980,6880 -Lamanère,66091,41,23.701,1.550,1.403,657,6139 -Sarreguemines,57631,20944,29.718,1.735,1.571,993,6899 -Essey-lès-Nancy,54184,8704,5.765,0.764,0.692,939,6851 -Sailly-Achâtel,57605,288,8.191,0.911,0.825,943,6878 -Viocourt,88514,159,4.799,0.697,0.631,912,6809 -Thiraucourt,88469,99,3.019,0.553,0.501,927,6804 -Fléville-devant-Nancy,54197,2288,7.475,0.870,0.788,937,6843 -Siltzheim,67468,647,7.194,0.854,0.773,998,6891 -Azay-le-Rideau,37014,3434,27.316,1.664,1.507,507,6691 -Rembercourt-sur-Mad,54453,157,5.142,0.722,0.654,913,6882 -Jeanménil,88251,1110,18.290,1.361,1.232,981,6809 -Atton,54027,813,15.847,1.267,1.147,926,6869 -Rozérieulles,57601,1377,6.631,0.820,0.742,922,6895 -Denipaire,88128,246,6.985,0.841,0.761,994,6810 -Barbas,54044,189,7.481,0.871,0.789,985,6836 -Coincourt,54133,133,8.079,0.905,0.819,966,6852 -Bioncourt,57084,316,8.227,0.913,0.827,948,6859 -Guebenhouse,57264,427,4.472,0.673,0.609,988,6894 -Destord,88130,247,5.115,0.720,0.652,969,6805 -Faulx,54188,1332,17.286,1.323,1.198,937,6858 -Haillainville,88228,168,12.540,1.127,1.020,957,6818 -Vého,54556,96,7.826,0.890,0.806,972,6840 -Royaumeix,54466,354,21.900,1.490,1.349,906,6853 -Florémont,88173,442,8.041,0.903,0.818,943,6812 -Vitrimont,54588,402,11.867,1.097,0.993,955,6835 -Belcastel,12024,189,10.835,1.048,0.949,649,6369 -Écrouves,54174,4375,10.443,1.029,0.932,911,6844 -Ludres,54328,6298,8.230,0.913,0.827,936,6839 -Saint-Jean-Lasseille,66177,1539,2.899,0.542,0.491,690,6165 -Pierrepont-sur-l'Arentèle,88348,138,6.337,0.801,0.725,973,6803 -Mars-la-Tour,54353,963,12.937,1.145,1.037,914,6894 -Vittersbourg,57725,365,7.148,0.851,0.771,988,6878 -Hurbache,88245,320,9.969,1.005,0.910,990,6811 -Lamath,54292,200,5.611,0.754,0.683,952,6829 -Mouacourt,54388,71,8.600,0.933,0.845,968,6844 -Neuvillers-sur-Fave,88326,340,5.011,0.713,0.646,1000,6806 -Métairies-Saint-Quirin,57461,270,9.531,0.983,0.890,998,6843 -Xaffévillers,88527,154,8.334,0.919,0.832,965,6819 -Morville-sur-Seille,54387,148,5.354,0.737,0.667,930,6875 -Landremont,54294,146,5.599,0.753,0.682,932,6865 -Laître-sous-Amance,54289,412,5.190,0.725,0.656,941,6852 -Noailhac,81196,859,20.916,1.456,1.318,649,6273 -Nomeny,54400,1192,18.138,1.356,1.228,936,6865 -Chamagne,88084,465,15.303,1.245,1.127,947,6817 -Saint-Marcel,54478,153,11.528,1.081,0.979,919,6895 -Saint-Dié-des-Vosges,88413,19748,46.267,2.165,1.960,997,6809 -Fénétrange,57210,718,14.704,1.221,1.106,997,6869 -Viéville-en-Haye,54564,150,8.576,0.932,0.844,912,6873 -Richecourt,55431,60,6.268,0.797,0.722,900,6871 -Saint-Genest,88416,134,6.243,0.795,0.720,961,6810 -Emberménil,54177,262,14.536,1.214,1.099,969,6848 -Vatimont,57698,325,8.034,0.902,0.817,955,6880 -Bassing,57053,121,6.334,0.801,0.725,980,6871 -Hannonville-Suzémont,54249,262,8.614,0.934,0.846,906,6891 -Essey-et-Maizerais,54182,380,13.122,1.153,1.044,902,6871 -Mamey,54340,340,7.585,0.877,0.794,916,6869 -Marainville-sur-Madon,88286,93,4.933,0.707,0.640,933,6817 -Gugney,54241,75,2.931,0.545,0.493,927,6816 -Juville,57354,119,6.147,0.789,0.714,947,6877 -Dommartin-la-Chaussée,54166,36,2.763,0.529,0.479,910,6884 -Vincey,88513,2195,12.961,1.146,1.038,945,6811 -Delme,57171,1119,5.110,0.720,0.652,947,6872 -Saint-Benoît,11333,104,21.361,1.471,1.332,626,6210 -Lhor,57410,133,5.371,0.738,0.668,985,6871 -Puzieux,57559,187,6.266,0.797,0.722,946,6869 -Metzing,57466,638,6.445,0.808,0.732,989,6899 -Villers-sur-Nied,57719,77,4.306,0.661,0.598,957,6876 -Belles-Forêts,57086,250,26.645,1.643,1.488,983,6865 -Cerville,54110,571,8.194,0.911,0.825,942,6849 -Bazoilles-et-Ménil,88043,118,5.759,0.764,0.692,929,6801 -Saint-Jean-Rohrbach,57615,979,12.194,1.112,1.007,982,6886 -Schopperten,67456,436,4.369,0.665,0.602,997,6878 -Vandelainville,54544,138,1.376,0.373,0.338,918,6887 -Gondreville,54232,2823,25.422,1.605,1.453,923,6845 -Hémilly,57313,144,14.114,1.196,1.083,952,6887 -Lesse,57395,207,8.454,0.926,0.838,959,6877 -La Salvetat-Lauragais,31527,139,3.695,0.612,0.554,604,6274 -Hadigny-les-Verrières,88224,404,14.053,1.193,1.080,957,6810 -Escueillens-et-Saint-Just-de-Bélengard,11128,162,11.685,1.088,0.985,617,6224 -Saint-Germain,54475,160,7.587,0.877,0.794,948,6817 -Villoncourt,88509,108,6.599,0.818,0.741,962,6804 -Frouard,54215,6566,13.087,1.152,1.043,929,6856 -Allamont,54009,158,9.282,0.970,0.878,903,6894 -Saint-Julien-lès-Gorze,54477,163,10.323,1.023,0.926,911,6883 -Gripport,54238,293,5.795,0.766,0.694,941,6817 -Vaxainville,54555,104,3.630,0.606,0.549,977,6830 -La Salle,88438,396,4.628,0.685,0.620,981,6809 -Aroffe,88013,83,8.547,0.931,0.843,917,6819 -Hénaménil,54258,150,14.521,1.213,1.098,961,6849 -Réclonville,54447,74,2.934,0.545,0.493,975,6834 -Barisey-au-Plain,54046,400,10.899,1.051,0.952,909,6830 -Chesny,57140,603,4.344,0.663,0.600,938,6890 -Punerot,88363,158,13.841,1.184,1.072,908,6826 -Seicheprey,54499,113,8.524,0.929,0.841,904,6868 -Bouvron,54088,247,10.018,1.007,0.912,911,6854 -Postroff,57551,210,5.074,0.717,0.649,997,6868 -Saulcy-sur-Meurthe,88445,2335,16.465,1.292,1.170,990,6799 -Landécourt,54293,92,5.867,0.771,0.698,954,6829 -Jujols,66090,44,9.935,1.003,0.908,639,6168 -Einville-au-Jard,54176,1216,17.099,1.316,1.192,958,6844 -Saint-Jean-de-Bassel,57613,345,10.076,1.010,0.914,990,6862 -Dombasle-sur-Meurthe,54159,9781,11.263,1.068,0.967,947,6843 -Deinvillers,88127,63,5.575,0.752,0.681,962,6820 -Saint-Rémy-aux-Bois,54487,71,9.638,0.988,0.895,952,6816 -Fossieux,57228,217,5.070,0.717,0.649,944,6865 -Ménil-de-Senones,88300,137,7.215,0.855,0.774,994,6814 -Corsavy,66060,217,47.268,2.188,1.981,656,6155 -Rodalbe,57587,246,10.575,1.035,0.937,970,6874 -Frémestroff,57237,299,5.549,0.750,0.679,978,6886 -Château-Voué,57133,108,7.509,0.872,0.790,965,6869 -Bouxières-aux-Dames,54090,4223,3.957,0.633,0.573,933,6854 -Burthecourt-aux-Chênes,54108,105,5.630,0.755,0.684,938,6834 -Chenevières,54125,498,4.653,0.687,0.622,969,6830 -Lahayville,55270,26,4.022,0.638,0.578,904,6868 -Bettborn,57071,409,6.606,0.818,0.741,997,6865 -Thorey-Lyautey,54522,140,6.216,0.794,0.719,925,6823 -Rogéville,54460,186,7.029,0.844,0.764,918,6863 -Noviant-aux-Prés,54404,262,11.231,1.067,0.966,910,6866 -Novéant-sur-Moselle,57515,1823,12.971,1.146,1.038,923,6883 -Sarralbe,57628,4556,27.303,1.663,1.506,992,6882 -Ars-sur-Moselle,57032,4685,11.680,1.088,0.985,926,6892 -Loisy,54320,326,5.596,0.753,0.682,926,6866 -Leménil-Mitry,54310,3,3.470,0.593,0.537,940,6821 -Fonteny,57225,144,15.643,1.259,1.140,958,6870 -Alaigne,11004,326,14.395,1.208,1.094,627,6220 -Laneuveville-en-Saulnois,57381,302,6.514,0.812,0.735,954,6867 -Prévocourt,57555,109,6.788,0.829,0.751,953,6877 -Maron,54352,839,19.069,1.390,1.259,922,6844 -Haute-Vigneulles,57714,408,9.639,0.988,0.895,960,6897 -Pommérieux,57547,697,4.327,0.662,0.599,932,6883 -Fontenoy-sur-Moselle,54202,372,5.513,0.747,0.676,920,6851 -Gelucourt,57246,220,13.596,1.174,1.063,974,6856 -Vasperviller,57697,317,1.531,0.394,0.357,999,6845 -Leintrey,54308,139,15.711,1.262,1.143,974,6844 -Ollainville,88336,63,6.326,0.801,0.725,906,6801 -Dolving,57180,357,6.723,0.825,0.747,997,6859 -Lunéville,54329,18566,16.570,1.296,1.173,955,6839 -Hoéville,54262,199,8.585,0.933,0.845,951,6852 -Houdemont,54265,2144,3.641,0.607,0.550,934,6841 -Arriance,57029,210,7.004,0.842,0.762,958,6885 -Haboudange,57281,270,10.464,1.030,0.933,963,6873 -Honskirch,57335,226,6.565,0.816,0.739,992,6879 -Essegney,88163,761,8.512,0.929,0.841,950,6816 -Morelmaison,88312,213,5.542,0.749,0.678,916,6805 -Chalabre,11091,1114,16.022,1.274,1.153,623,6211 -Villecey-sur-Mad,54570,334,7.386,0.865,0.783,915,6879 -Villeneuve-lès-Montréal,11432,286,2.200,0.472,0.427,627,6232 -Villers-lès-Nancy,54578,14455,9.944,1.004,0.909,930,6843 -Destry,57174,91,6.932,0.838,0.759,963,6876 -Rebeuville,88376,285,8.720,0.940,0.851,904,6807 -Bayon,54054,1602,6.100,0.786,0.712,945,6824 -Ménil-en-Xaintois,88299,153,4.243,0.656,0.594,922,6802 -Pexonne,54423,369,13.516,1.170,1.059,984,6827 -Lezey,57399,99,7.460,0.869,0.787,968,6855 -Ley,57397,101,6.161,0.790,0.715,969,6853 -Maixe,54335,413,9.391,0.975,0.883,953,6841 -Courcelles-Chaussy,57155,3092,16.147,1.279,1.158,950,6899 -Removille,88387,212,7.540,0.874,0.791,911,6814 -Gogney,54230,47,8.914,0.950,0.860,983,6844 -Soulatgé,11384,129,24.691,1.582,1.432,660,6194 -Altviller,57015,586,4.830,0.700,0.634,972,6893 -Fosse,66083,38,4.392,0.667,0.604,655,6189 -Moncourt,57473,72,6.709,0.824,0.746,967,6855 -Bouxières-aux-Bois,88069,141,7.715,0.884,0.800,945,6798 -Morville-lès-Vic,57485,128,8.077,0.905,0.819,959,6862 -Moyen,54393,551,23.705,1.550,1.403,969,6825 -Minorville,54370,235,12.687,1.134,1.027,913,6861 -Raville-sur-Sânon,54445,103,3.342,0.582,0.527,959,6846 -Moncel-sur-Seille,54374,527,12.635,1.131,1.024,949,6858 -Ormes-et-Ville,54411,231,12.560,1.128,1.021,938,6824 -Jezainville,54279,949,18.311,1.362,1.233,919,6866 -Bazoncourt,57055,542,13.212,1.157,1.048,948,6892 -Pauligne,11274,351,6.309,0.800,0.724,629,6219 -Hannocourt,57292,21,4.180,0.651,0.589,953,6875 -Puttelange-aux-Lacs,57556,2995,16.655,1.299,1.176,989,6890 -Eulmont,54186,1044,8.107,0.906,0.820,937,6852 -Villacourt,54567,405,14.168,1.198,1.085,950,6822 -Lenoncourt,54311,594,11.650,1.086,0.983,942,6849 -Châtel-Saint-Germain,57134,1853,12.955,1.146,1.038,926,6894 -Sournia,66198,497,29.988,1.743,1.578,649,6177 -Saint-Paul,88431,152,4.938,0.707,0.640,916,6807 -Favières,54189,596,29.882,1.740,1.575,918,6819 -Sornéville,54510,337,9.293,0.970,0.878,953,6854 -Thiaville-sur-Meurthe,54519,565,4.532,0.678,0.614,981,6820 -Leyr,54315,925,10.879,1.050,0.951,942,6860 -Bouxurulles,88070,168,6.788,0.829,0.751,941,6808 -Charmois,54121,188,5.475,0.745,0.675,949,6831 -Langley,88260,165,2.708,0.524,0.474,948,6812 -Ramecourt,88368,186,3.244,0.573,0.519,929,6806 -La Bourgonce,88068,899,16.647,1.299,1.176,986,6806 -Gy-en-Sologne,41099,501,35.957,1.909,1.728,594,6699 -Pagny-la-Blanche-Côe,55397,240,12.387,1.120,1.014,904,6831 -Montferrer,66116,189,21.939,1.491,1.350,665,6147 -Clérey-la-Côe,88107,32,3.222,0.571,0.517,904,6825 -Domèvre-en-Haye,54160,376,8.591,0.933,0.845,913,6859 -Lidrezing,57401,86,10.012,1.007,0.912,974,6874 -Ajoncourt,57009,102,3.496,0.595,0.539,941,6866 -Bouxières-aux-Chênes,54089,1423,19.880,1.419,1.285,942,6860 -Voinémont,54591,332,4.113,0.646,0.585,936,6831 -Cubières-sur-Cinoble,11112,102,14.851,1.227,1.111,654,6199 -Hablainville,54243,222,7.562,0.875,0.792,972,6831 -Euvezin,54187,108,11.378,1.074,0.972,911,6873 -Maxéville,54357,9889,5.662,0.757,0.685,934,6852 -Fuilla,66085,450,9.623,0.987,0.894,649,6166 -Marsal,57448,277,11.119,1.061,0.961,969,6860 -Hazembourg,57308,133,1.692,0.414,0.375,990,6880 -Rouhling,57598,2088,5.999,0.780,0.706,991,6899 -Létricourt,54313,242,7.314,0.861,0.780,942,6870 -Poussay,88357,698,8.792,0.944,0.855,930,6804 -Jussy,57352,454,2.926,0.544,0.493,922,6894 -Nousseviller-Saint-Nabor,57514,1191,6.122,0.788,0.713,989,6899 -Ibigny,57342,100,4.792,0.697,0.631,989,6846 -Baudrecourt,57054,186,5.062,0.716,0.648,953,6880 -Flocourt,57220,118,4.528,0.677,0.613,950,6881 -Bettoncourt,88056,92,3.254,0.574,0.520,935,6808 -Bourdonnay,57099,230,17.495,1.331,1.205,974,6852 -Courcelles-sur-Nied,57156,1198,5.061,0.716,0.648,941,6888 -Civrac-sur-Dordogne,33127,218,1.937,0.443,0.401,456,6420 -Lucey,54327,623,11.046,1.058,0.958,910,6853 -Bionville-sur-Nied,57085,382,8.501,0.928,0.840,952,6894 -Farschviller,57208,1395,11.273,1.069,0.968,986,6896 -Ville-en-Vermois,54571,601,10.559,1.034,0.936,936,6839 -Pallegney,88342,176,6.104,0.786,0.712,956,6803 -Zimming,57762,711,7.913,0.895,0.810,961,6897 -Nonhigny,54401,126,5.825,0.768,0.695,989,6833 -Xocourt,57755,90,4.906,0.705,0.638,949,6872 -Pont-sur-Madon,88354,174,3.466,0.593,0.537,932,6812 -Chenicourt,54126,228,3.876,0.627,0.568,942,6866 -Hundling,57340,1345,6.615,0.819,0.742,990,6898 -Seranville,54501,98,5.345,0.736,0.666,958,6823 -Onville,54410,535,9.240,0.968,0.876,915,6886 -Xirocourt,54597,448,11.491,1.079,0.977,932,6820 -Richeling,57581,341,4.224,0.654,0.592,990,6889 -Xammes,54594,149,8.279,0.916,0.829,909,6877 -Ortoncourt,88338,90,4.365,0.665,0.602,960,6812 -Offroicourt,88335,152,9.292,0.970,0.878,926,6804 -Tenteling,57665,1076,7.178,0.853,0.772,985,6900 -Flavigny-sur-Moselle,54196,1733,17.660,1.338,1.211,938,6833 -Jouaville,54283,304,11.310,1.070,0.969,915,6902 -Insming,57346,578,7.224,0.856,0.775,982,6880 -Bratte,54095,43,3.338,0.582,0.527,937,6862 -Moncheux,57472,150,7.347,0.863,0.781,946,6878 -Réchicourt-le-Château,57564,547,25.675,1.613,1.460,980,6850 -Bourgaltroff,57098,250,9.817,0.997,0.903,977,6870 -Bouzanville,54092,62,5.847,0.770,0.697,931,6812 -Prény,54435,358,15.283,1.244,1.126,921,6879 -Hériménil,54260,960,12.587,1.129,1.022,957,6834 -Boucq,54086,357,22.655,1.515,1.372,900,6852 -Jevoncourt,54278,99,3.330,0.581,0.526,933,6817 -La Petite-Raon,88346,755,8.915,0.950,0.860,996,6823 -Eus,66074,387,20.152,1.429,1.294,656,6175 -Saint-Epvre,57609,177,4.633,0.685,0.620,950,6878 -Bellange,57059,55,3.812,0.621,0.562,961,6873 -Fréménil,54210,223,3.089,0.559,0.506,972,6835 -Carpentras,84031,28554,37.905,1.960,1.775,863,6327 -Dolcourt,54158,127,6.107,0.787,0.713,921,6825 -Marquixanes,66103,543,4.896,0.704,0.637,659,6171 -Puxe,54440,114,6.020,0.781,0.707,905,6898 -Méréville,54364,1373,8.593,0.933,0.845,929,6836 -Fanjeaux,11136,831,24.980,1.591,1.441,618,6231 -Clérey-sur-Brenon,54132,70,4.423,0.669,0.606,932,6829 -Marbache,54351,1714,10.806,1.046,0.947,928,6860 -Villerouge-Termenès,11435,143,20.010,1.424,1.289,669,6214 -Manoncourt-en-Woëvre,54346,243,10.680,1.040,0.942,918,6859 -Tonnoy,54527,712,12.412,1.121,1.015,941,6836 -Camps-sur-l'Agly,11065,57,26.494,1.638,1.483,656,6193 -Moyenmoutier,88319,3237,34.322,1.865,1.689,994,6815 -Autreville,88020,181,10.961,1.054,0.954,915,6826 -Ahéville,88002,67,5.834,0.769,0.696,938,6805 -Pagny-lès-Goin,57532,242,5.158,0.723,0.655,935,6878 -Duilhac-sous-Peyrepertuse,11123,147,21.164,1.464,1.326,664,6194 -Gemmelaincourt,88194,155,7.432,0.868,0.786,920,6800 -Noisseville,57510,1019,2.653,0.518,0.469,940,6899 -Chazelles-sur-Albe,54124,38,3.452,0.591,0.535,977,6838 -Jarville-la-Malgrange,54274,9233,2.409,0.494,0.447,936,6846 -Vaubexy,88494,123,6.489,0.811,0.734,939,6802 -Saint-Julien-lès-Metz,57616,3366,4.540,0.678,0.614,933,6899 -Frémery,57236,78,4.490,0.674,0.610,954,6874 -Betton-Bettonet,73041,315,3.416,0.588,0.532,950,6499 -Baronville,57051,368,6.186,0.792,0.717,965,6878 -Saint-Firmin,54473,273,6.732,0.826,0.748,933,6817 -Parroy,54418,164,17.772,1.342,1.215,966,6844 -Lesménils,54312,497,10.979,1.055,0.955,929,6873 -Brainville,54093,156,10.040,1.009,0.914,905,6894 -Obreck,57520,38,3.239,0.573,0.519,965,6867 -Diebling,57176,1656,7.857,0.892,0.808,988,6895 -Sponville,54511,126,7.225,0.856,0.775,909,6890 -Saint-Martin-des-Puits,11354,28,7.106,0.849,0.769,667,6214 -Guébling,57268,126,6.844,0.833,0.754,972,6869 -Montigny,54377,149,6.150,0.789,0.714,982,6829 -Francheville,54208,279,11.048,1.058,0.958,916,6851 -Varzay,17460,807,14.032,1.192,1.079,411,6518 -Vroville,88525,137,6.841,0.833,0.754,937,6805 -Petitmont,54421,322,17.864,1.345,1.218,1000,6833 -Gerbécourt-et-Haplemont,54221,226,5.342,0.736,0.666,931,6825 -Bréhain,57107,107,3.592,0.603,0.546,961,6873 -Tarquimpol,57664,63,6.425,0.807,0.731,974,6860 -Varize-Vaudoncourt,57695,547,13.877,1.186,1.074,952,6894 -Tramont-Saint-André,54531,59,7.062,0.846,0.766,916,6815 -Sanry-sur-Nied,57627,296,4.790,0.697,0.631,943,6890 -Vandeléville,54545,210,10.006,1.007,0.912,923,6819 -Vittoncourt,57726,378,9.510,0.982,0.889,952,6887 -Fenneviller,54191,92,3.025,0.554,0.502,988,6826 -Gravelotte,57256,830,5.703,0.760,0.688,922,6895 -Goviller,54235,427,12.274,1.115,1.010,922,6829 -Rémering-lès-Puttelange,57571,1116,9.219,0.966,0.875,988,6888 -Moriviller,54386,94,7.305,0.860,0.779,955,6824 -Montreux,54381,65,3.790,0.620,0.561,988,6832 -Mattaincourt,88292,835,7.005,0.842,0.762,931,6801 -Dieulouard,54157,4757,18.058,1.353,1.225,926,6866 -Ogy-Montoy-Flanville,57482,1691,10.037,1.008,0.913,942,6894 -Aboncourt-sur-Seille,57002,72,3.625,0.606,0.549,946,6862 -Capavenir Vosges,88465,9033,27.895,1.681,1.522,956,6803 -Dompierre,88152,263,8.811,0.945,0.856,966,6802 -Grosrouvres,54240,63,4.642,0.686,0.621,910,6862 -Bréménil,54097,109,5.629,0.755,0.684,991,6833 -Saint-Sauveur,54488,45,19.421,1.403,1.270,997,6830 -Bruley,54102,616,6.305,0.799,0.723,912,6851 -Brouck,57112,84,3.021,0.553,0.501,957,6899 -Faulquemont,57209,5394,18.792,1.380,1.249,963,6883 -Aouze,88010,184,11.157,1.063,0.962,912,6810 -Darney-aux-Chênes,88125,61,2.477,0.501,0.454,908,6803 -Lachapelle,54287,269,10.166,1.015,0.919,977,6819 -Kirrberg,67241,168,6.392,0.805,0.729,1000,6865 -Goin,57251,333,9.045,0.957,0.866,934,6879 -Domptail-en-l'Air,54170,71,3.194,0.569,0.515,945,6828 -Fraquelfing,57233,80,4.583,0.681,0.617,994,6842 -Domjevin,54163,254,10.375,1.025,0.928,972,6835 -Friauville,54213,367,6.328,0.801,0.725,904,6898 -Buhl-Lorraine,57119,1225,11.623,1.085,0.982,1001,6853 -Lay-Saint-Christophe,54305,2468,11.638,1.086,0.983,933,6854 -Chambrey,57126,343,14.336,1.205,1.091,954,6863 -Diarville,54156,529,11.180,1.064,0.963,933,6814 -Dombasle-en-Xaintois,88139,126,4.738,0.693,0.627,923,6807 -Einvaux,54175,352,7.449,0.869,0.787,952,6830 -Morlanne,64406,580,13.080,1.151,1.042,411,6274 -Pournoy-la-Grasse,57554,598,7.178,0.853,0.772,934,6883 -Domgermain,54162,1198,13.186,1.156,1.047,907,6840 -Mazirot,88295,223,6.598,0.818,0.741,935,6808 -Saint-Médard,64491,215,11.390,1.074,0.972,410,6275 -Moivrons,54372,489,6.145,0.789,0.714,940,6863 -Pontoy,57548,428,10.127,1.013,0.917,940,6883 -Laudrefang,57386,338,4.702,0.690,0.625,966,6892 -Doazon,64200,190,6.109,0.787,0.713,413,6266 -Louvigny,64355,140,7.121,0.849,0.769,423,6274 -Poursiugues-Boucoue,64457,194,9.108,0.961,0.870,429,6279 -Casteide-Candau,64172,276,9.460,0.979,0.886,414,6277 -Monget,40189,94,5.729,0.762,0.690,417,6281 -Castelner,40073,109,5.684,0.759,0.687,412,6280 -Astis,64070,304,3.162,0.566,0.512,430,6267 -Feuilla,11143,104,24.205,1.566,1.418,692,6200 -Caubios-Loos,64183,546,7.209,0.855,0.774,427,6264 -Auriac,64078,239,5.236,0.728,0.659,432,6265 -Bahus-Soubiran,40022,415,14.729,1.222,1.106,433,6290 -Custines,54150,3004,11.742,1.091,0.988,931,6858 -Villeneuve-les-Corbières,11431,244,24.269,1.568,1.420,680,6204 -Carrère,64167,215,6.634,0.820,0.742,434,6268 -Claracq,64190,228,9.908,1.002,0.907,436,6272 -Lème,64332,164,6.647,0.821,0.743,427,6271 -Sévignacq,64523,750,17.421,1.329,1.203,436,6264 -Argelos,40007,164,6.520,0.813,0.736,407,6285 -Séby,64514,195,5.994,0.779,0.705,426,6269 -Doumy,64203,297,6.429,0.807,0.731,427,6264 -Barinque,64095,616,9.080,0.959,0.868,435,6264 -Ribarrouy,64464,83,2.319,0.485,0.439,434,6275 -Nyer,66123,150,37.062,1.938,1.755,638,6150 -Arboucave,40005,201,9.955,1.004,0.909,424,6285 -Vira,66232,27,12.985,1.147,1.039,647,6184 -Sorbets,40305,198,11.948,1.100,0.996,433,6289 -Saint-Marcel-Campes,81262,208,22.568,1.512,1.369,619,6330 -Casteide-Cami,64171,235,6.953,0.839,0.760,413,6267 -Puyol-Cazalet,40239,109,4.649,0.686,0.621,424,6284 -Alénya,66002,3534,5.723,0.761,0.689,700,6172 -Mont,64396,1116,18.380,1.365,1.236,406,6263 -Bassercles,40027,155,6.674,0.822,0.744,410,6281 -Cassagnes,66042,267,15.220,1.242,1.125,673,6183 -Boumourt,64144,154,7.950,0.897,0.812,416,6265 -Millas,66108,4250,19.351,1.400,1.268,675,6181 -Calce,66030,209,23.978,1.559,1.412,682,6180 -Llauro,66099,316,8.375,0.921,0.834,682,6161 -Boule-d'Amont,66022,55,23.386,1.539,1.393,664,6163 -Prunet-et-Belpuig,66153,49,21.699,1.483,1.343,674,6163 -Claira,66050,4104,19.326,1.399,1.267,695,6182 -Ortaffa,66129,1426,8.530,0.930,0.842,693,6163 -Baixas,66014,2546,19.011,1.388,1.257,684,6185 -Montescot,66114,1744,6.109,0.787,0.713,693,6167 -Corneilla-del-Vercol,66059,2232,5.386,0.739,0.669,697,6170 -Tautavel,66205,872,53.398,2.326,2.106,673,6193 -Bezange-la-Petite,57077,92,7.916,0.896,0.811,966,6852 -Secourt,57643,199,7.304,0.860,0.779,940,6875 -Corbère,66055,724,7.256,0.857,0.776,672,6170 -Saint-Jean-Pla-de-Corts,66178,2187,10.581,1.035,0.937,682,6155 -Bouleternère,66023,931,10.771,1.045,0.946,668,6170 -Arles-sur-Tech,66009,2700,28.817,1.709,1.547,668,6151 -Céret,66049,7747,37.833,1.958,1.773,678,6147 -Villelongue-de-la-Salanque,66224,3268,7.219,0.855,0.774,697,6180 -Llupia,66101,1953,7.142,0.851,0.771,681,6168 -Saint-Hippolyte,66176,2973,25.463,1.606,1.454,695,6188 -Corneilla-la-Rivière,66058,2005,12.642,1.132,1.025,676,6177 -Chicourt,57141,95,5.548,0.750,0.679,956,6873 -Villelongue-dels-Monts,66225,1666,11.751,1.091,0.988,690,6161 -Bages,66011,4129,12.040,1.104,1.000,689,6166 -Corbère-les-Cabanes,66056,1097,4.224,0.654,0.592,673,6172 -Camélas,66033,454,12.981,1.147,1.039,673,6168 -Canohès,66038,5819,8.719,0.940,0.851,688,6171 -Tresserre,66214,1055,11.115,1.061,0.961,685,6161 -Planèzes,66143,102,6.225,0.794,0.719,669,6188 -Pézilla-la-Rivière,66140,3587,16.333,1.286,1.164,677,6182 -Saint-Michel-de-Llotes,66185,343,8.874,0.948,0.858,668,6173 -Bompas,66021,7198,5.743,0.763,0.691,697,6182 -Ille-sur-Têt,66088,5457,31.665,1.791,1.622,671,6172 -Toulouges,66213,6732,8.006,0.901,0.816,683,6174 -Calmeilles,66032,60,13.337,1.162,1.052,671,6160 -Baho,66012,3205,7.738,0.885,0.801,687,6177 -Reynès,66160,1364,27.787,1.678,1.519,677,6156 -Saint-Féliu-d'Amont,66173,1097,5.634,0.756,0.684,678,6173 -Castelnou,66044,326,19.258,1.397,1.265,678,6166 -Saint-André,66168,3388,9.734,0.993,0.899,697,6161 -Peyrestortes,66138,1384,8.059,0.904,0.818,689,6182 -Casefabre,66040,40,7.028,0.844,0.764,669,6170 -Finestret,66079,180,8.532,0.930,0.842,660,6170 -Pollestres,66144,4815,8.336,0.919,0.832,691,6172 -Taulis,66203,51,6.278,0.798,0.723,670,6158 -Salses-le-Château,66190,3504,82.546,2.892,2.618,699,6196 -Le Perthus,66137,586,4.237,0.655,0.593,687,6152 -Banyuls-dels-Aspres,66015,1253,10.686,1.041,0.943,688,6165 -Le Boulou,66024,5632,14.561,1.215,1.100,688,6159 -Vingrau,66231,609,32.551,1.816,1.644,684,6200 -Massaguel,81160,409,10.029,1.008,0.913,634,6262 -Maury,66107,783,34.611,1.873,1.696,667,6189 -Latour-de-France,66096,1031,14.085,1.195,1.082,669,6188 -Cabestany,66028,9821,10.584,1.036,0.938,694,6174 -Cases-de-Pène,66041,920,13.534,1.171,1.060,684,6185 -Canet-en-Roussillon,66037,12069,30.161,1.748,1.583,699,6175 -Cucugnan,11113,126,15.083,1.236,1.119,673,6193 -Laroque-des-Albères,66093,2099,20.747,1.450,1.313,693,6154 -Néfiach,66121,1281,8.819,0.945,0.856,670,6178 -Saint-Nazaire,66186,2594,10.377,1.025,0.928,697,6174 -Dourgne,81081,1313,22.737,1.518,1.374,631,6261 -Montbolo,66113,182,21.999,1.493,1.352,672,6157 -Villeneuve-la-Rivière,66228,1282,4.434,0.670,0.607,685,6177 -Coustouges,66061,103,16.743,1.302,1.179,666,6140 -Opoul-Périllos,66127,1168,48.595,2.219,2.009,692,6200 -Montesquieu-des-Albères,66115,1218,17.190,1.320,1.195,689,6154 -Saint-Féliu-d'Avall,66174,2765,10.544,1.034,0.936,681,6176 -Saint-Félix-de-Sorgues,12222,225,31.099,1.775,1.607,698,6305 -Taillet,66199,108,10.104,1.012,0.916,672,6157 -Saint-Marsal,66183,79,15.439,1.251,1.133,671,6159 -Villemolaque,66226,1364,5.954,0.777,0.704,689,6169 -Cassagnoles,34054,100,24.108,1.563,1.415,665,6258 -Amélie-les-Bains-Palalda,66003,3482,29.342,1.724,1.561,672,6153 -Saint-Laurent-de-Cerdans,66179,1125,44.635,2.127,1.926,665,6147 -Saint-Estève,66172,11841,11.709,1.089,0.986,685,6181 -Vivès,66233,175,11.183,1.064,0.963,681,6157 -Brouilla,66026,1358,7.887,0.894,0.809,691,6165 -Palau-del-Vidre,66133,3178,10.362,1.025,0.928,698,6165 -Trouillas,66217,2028,17.155,1.318,1.193,689,6169 -Tordères,66211,158,10.023,1.008,0.913,679,6164 -Maureillas-las-Illas,66106,2559,42.509,2.075,1.879,687,6156 -Caixas,66029,146,27.786,1.678,1.519,668,6167 -Les Cluses,66063,251,8.831,0.946,0.857,687,6156 -Saint-Génis-des-Fontaines,66175,2798,9.926,1.003,0.908,695,6162 -Rouffiac-des-Corbières,11326,89,16.124,1.278,1.157,666,6201 -Terrats,66207,644,7.354,0.863,0.781,682,6166 -Villeneuve-de-la-Raho,66227,3936,11.563,1.082,0.980,691,6170 -Baillestavy,66013,113,17.801,1.343,1.216,664,6162 -Padern,11270,128,30.092,1.746,1.581,668,6198 -Rodès,66165,625,18.607,1.373,1.243,661,6177 -Tuchan,11401,774,59.444,2.454,2.222,678,6206 -Escaro,66068,109,15.086,1.236,1.119,646,6161 -Glorianes,66086,25,18.725,1.377,1.247,662,6167 -Urbanya,66219,51,13.887,1.186,1.074,643,6170 -Montfort-sur-Boulzane,11244,81,34.038,1.857,1.681,640,6179 -Molitg-les-Bains,66109,230,13.087,1.152,1.043,649,6177 -Ria-Sirach,66161,1320,12.874,1.142,1.034,651,6165 -Arboussols,66007,115,14.060,1.194,1.081,657,6173 -Joch,66089,263,3.453,0.591,0.535,660,6170 -Codalet,66052,383,2.823,0.535,0.484,653,6166 -Campôme,66034,113,5.347,0.736,0.666,652,6171 -Vinça,66230,2040,7.817,0.890,0.806,661,6170 -Estoher,66073,148,26.058,1.625,1.471,659,6160 -Py,66155,92,50.662,2.266,2.052,652,6152 -Clara-Villerach,66051,255,8.626,0.935,0.847,656,6167 -Montalba-le-Château,66111,149,15.967,1.272,1.152,662,6177 -Serdinya,66193,246,17.460,1.330,1.204,645,6167 -Saint-Martin-de-Fenouillet,66184,58,9.343,0.973,0.881,654,6187 -Vernet-les-Bains,66222,1359,16.505,1.293,1.171,648,6162 -Ansignan,66006,167,7.981,0.899,0.814,659,6186 -La Bastide,66018,73,15.448,1.251,1.133,663,6161 -Castelnau-Tursan,40072,194,9.352,0.973,0.881,423,6291 -Souanyas,66197,40,4.854,0.701,0.635,639,6161 -Espira-de-Conflent,66070,171,6.141,0.789,0.714,657,6168 -Mosset,66119,303,71.076,2.684,2.430,647,6171 -Caudiès-de-Fenouillèdes,66046,630,37.513,1.950,1.766,645,6193 -Sahorre,66166,379,15.046,1.235,1.118,650,6156 -Fenouillet,66077,86,18.793,1.380,1.249,647,6184 -Saint-Arnac,66169,118,6.900,0.836,0.757,660,6187 -Trilla,66216,75,9.138,0.962,0.871,661,6180 -Saint-Just-et-le-Bézu,11350,41,13.801,1.183,1.071,643,6200 -Mantet,66102,31,32.101,1.803,1.632,645,6148 -Campoussy,66035,38,17.311,1.324,1.199,656,6175 -Saint-Paul-de-Fenouillet,66187,1814,44.364,2.120,1.919,656,6193 -Los Masos,66104,948,5.722,0.761,0.689,656,6170 -Villefranche-de-Conflent,66223,214,4.583,0.681,0.617,648,6166 -Labastide-Saint-Georges,81116,1927,6.233,0.795,0.720,608,6291 -Serralongue,66194,230,22.996,1.526,1.382,660,6144 -Prugnanes,66152,106,13.623,1.175,1.064,651,6194 -Valady,12288,1509,15.419,1.250,1.132,656,6370 -Vendine,31571,282,2.876,0.540,0.489,600,6279 -Saint-Salvy-de-la-Balme,81269,527,18.781,1.379,1.249,646,6279 -Tarerach,66201,50,8.230,0.913,0.827,661,6177 -Bugarach,11055,224,27.433,1.667,1.509,649,6195 -Aussillon,81021,5968,10.249,1.019,0.923,649,6269 -Gincla,11163,48,7.852,0.892,0.808,647,6184 -Le Vivier,66234,79,12.944,1.145,1.037,653,6186 -Lansac,66092,90,5.262,0.730,0.661,664,6187 -Prats-de-Sournia,66151,77,8.447,0.925,0.838,657,6180 -Lesquerde,66097,131,15.654,1.259,1.140,665,6187 -Salza,11374,18,8.489,0.927,0.839,662,6210 -Corneilla-de-Conflent,66057,470,11.063,1.059,0.959,648,6166 -Montjoi,11250,38,7.409,0.866,0.784,656,6209 -Pézilla-de-Conflent,66139,50,6.757,0.827,0.749,659,6181 -Taurinya,66204,334,13.640,1.176,1.065,655,6159 -Puilaurens,11302,268,33.766,1.850,1.675,639,6188 -Casteil,66043,135,29.644,1.733,1.569,656,6155 -Fillols,66078,183,8.871,0.948,0.858,651,6165 -Caramany,66039,150,14.241,1.201,1.087,663,6185 -Conat,66054,59,19.193,1.395,1.263,645,6172 -Saint-Louis-et-Parahou,11352,58,16.012,1.274,1.153,649,6194 -Albine,81005,504,17.129,1.317,1.192,661,6258 -Salvezines,11373,77,20.237,1.432,1.297,641,6184 -Catllar,66045,768,7.988,0.900,0.815,651,6170 -Rabouillet,66156,112,19.577,1.408,1.275,644,6179 -Rigarda,66162,649,3.628,0.606,0.549,663,6171 -Saint-Pierre-des-Champs,11363,181,16.656,1.299,1.176,670,6218 -Sorèze,81288,2802,41.684,2.055,1.861,630,6261 -Verdalle,81312,992,24.229,1.567,1.419,634,6268 -Albiac,31006,210,4.746,0.693,0.627,602,6272 -Blan,81032,1121,13.444,1.167,1.057,624,6268 -Jonquières,81109,451,12.240,1.114,1.009,630,6282 -Guitalens-L'Albarède,81132,886,9.460,0.979,0.886,624,6282 -Maurens,31329,202,6.645,0.821,0.743,604,6265 -Puycalvel,81216,217,12.248,1.114,1.009,625,6290 -Loubens-Lauragais,31304,463,6.485,0.811,0.734,601,6278 -Le Faget,31179,346,11.430,1.076,0.974,607,6275 -Cuq-Toulza,81076,699,23.206,1.533,1.388,607,6273 -Viviers-lès-Lavaur,81324,220,10.023,1.008,0.913,603,6280 -Fontiès-d'Aude,11151,465,6.123,0.788,0.713,654,6233 -Arfons,81016,172,40.586,2.028,1.836,637,6262 -Bertre,81030,121,4.165,0.650,0.589,616,6279 -Roumens,31463,240,3.577,0.602,0.545,616,6264 -Soual,81289,2530,14.088,1.195,1.082,631,6271 -Mourvilles-Hautes,31393,171,6.667,0.822,0.744,603,6260 -Nogaret,31400,79,4.017,0.638,0.578,612,6268 -Puéchoursi,81214,96,3.594,0.603,0.546,610,6269 -Lux,31310,346,7.663,0.881,0.798,602,6258 -Serviès,81286,636,12.941,1.145,1.037,619,6284 -Aguts,81001,218,9.829,0.998,0.904,611,6272 -Montgey,81179,291,9.932,1.003,0.908,616,6270 -Cambounet-sur-le-Sor,81054,921,7.764,0.887,0.803,631,6276 -Poudis,81210,259,4.625,0.685,0.620,617,6269 -Laprade,11189,87,4.723,0.692,0.627,638,6260 -Labécède-Lauragais,11181,417,20.461,1.440,1.304,616,6258 -Navès,81195,683,9.821,0.998,0.904,637,6272 -Escoussens,81084,606,23.967,1.558,1.411,636,6268 -Villeneuve-lès-Lavaur,81318,152,6.190,0.792,0.717,602,6277 -Laboulbène,81118,140,4.656,0.687,0.622,637,6286 -Lacroisille,81127,116,6.650,0.821,0.743,615,6275 -Vaux,31570,287,10.478,1.030,0.933,607,6261 -Viviers-lès-Montagnes,81325,1918,18.167,1.357,1.229,631,6275 -Massac-Séran,81159,378,8.521,0.929,0.841,610,6284 -Saint-Paul-Cap-de-Joux,81266,1114,17.195,1.320,1.195,621,6282 -Pratviel,81213,86,7.135,0.850,0.770,611,6281 -Palleville,81200,443,6.484,0.811,0.734,620,6268 -Lescout,81143,701,6.899,0.836,0.757,630,6270 -Cuq,81075,495,15.082,1.236,1.119,628,6286 -Saint-Amancet,81237,190,12.152,1.110,1.005,630,6261 -Saint-Germier,81252,168,4.164,0.650,0.589,638,6286 -Veilhes,81310,137,5.638,0.756,0.684,606,6280 -Rieumajou,31453,128,3.769,0.618,0.560,604,6256 -Laroque-de-Fa,11191,149,20.798,1.452,1.315,661,6205 -Cahuzac,81049,388,5.632,0.755,0.684,624,6265 -Revel,31451,9567,35.668,1.901,1.721,615,6266 -Cambiac,31102,212,7.772,0.887,0.803,602,6265 -Les Brunels,11054,273,12.256,1.114,1.009,623,6260 -Vielmur-sur-Agout,81315,1488,11.665,1.087,0.984,629,6283 -Lempaut,81142,862,14.154,1.198,1.085,627,6269 -Magrin,81151,131,8.026,0.902,0.817,615,6281 -Auriac-sur-Vendinelle,31026,1035,31.039,1.773,1.605,608,6268 -Le Cabanial,31097,459,8.552,0.931,0.843,609,6268 -Lagardiolle,81129,241,10.175,1.015,0.919,624,6268 -Saint-Affrique-les-Montagnes,81235,736,7.913,0.895,0.810,636,6273 -Gramazie,11167,116,1.966,0.446,0.404,626,6226 -Saint-Julia,31491,414,11.561,1.082,0.980,612,6264 -Saint-Félix-Lauragais,31478,1276,52.174,2.299,2.082,606,6267 -Burlats,81042,2127,32.516,1.815,1.643,644,6286 -Juzes,31243,93,3.810,0.621,0.562,604,6261 -Labruguière,81120,6523,61.478,2.496,2.260,644,6269 -Maurens-Scopont,81162,187,8.590,0.933,0.845,603,6277 -Montmaur,11252,309,13.166,1.155,1.046,605,6256 -Durfort,81083,252,4.507,0.676,0.612,624,6260 -Sallèles-Cabardès,11368,117,7.062,0.846,0.766,650,6245 -Puylaurens,81219,3275,82.160,2.885,2.612,616,6270 -Marzens,81157,289,11.297,1.070,0.969,609,6285 -Les Cassés,11074,291,7.339,0.862,0.780,611,6258 -Montégut-Lauragais,31371,455,7.742,0.886,0.802,616,6264 -Payrin-Augmontel,81204,2180,12.825,1.140,1.032,645,6275 -Roquevidal,81229,137,7.692,0.883,0.799,606,6281 -Saint-Amans-Soult,81238,1614,25.284,1.601,1.450,655,6266 -Cambon-lès-Lavaur,81050,335,12.163,1.110,1.005,607,6275 -Mouzens,81189,123,4.941,0.708,0.641,611,6270 -Folcarde,31185,122,2.325,0.485,0.439,601,6258 -Carbes,81058,228,7.436,0.868,0.786,632,6281 -Lingé,36096,231,37.936,1.961,1.776,561,6631 -Appelle,81015,71,3.798,0.620,0.561,615,6275 -Roquecourbe,81227,2200,16.574,1.296,1.173,641,6283 -Saint-Avit,81242,266,4.769,0.695,0.629,627,6269 -Falga,31180,117,5.401,0.740,0.670,606,6267 -Villelongue-d'Aude,11427,306,13.564,1.172,1.061,624,6216 -Prades,81212,132,5.167,0.724,0.656,615,6281 -Lacombe,11182,169,15.492,1.253,1.134,636,6254 -Péchaudier,81205,186,6.814,0.831,0.752,616,6273 -Villar-en-Val,11414,26,11.768,1.092,0.989,654,6219 -Belleserre,81027,164,4.797,0.697,0.631,623,6267 -Saint-Germain-des-Prés,81251,914,17.187,1.320,1.195,624,6272 -Viterbe,81323,360,6.564,0.816,0.739,612,6286 -Labastide-Esparbairenque,11180,80,17.162,1.319,1.194,652,6258 -Bélesta-en-Lauragais,31060,110,5.643,0.756,0.684,603,6261 -Morlhon-le-Haut,12159,561,22.284,1.503,1.361,624,6357 -Saint-Paulet,11362,198,7.542,0.874,0.791,610,6256 -Lagarrigue,81130,1809,4.860,0.702,0.636,643,6274 -Saint-Jean-de-Vals,81256,76,4.698,0.690,0.625,640,6290 -Sémalens,81281,2019,11.083,1.060,0.960,626,6277 -Damiatte,81078,1025,31.882,1.797,1.627,622,6288 -Fréjeville,81098,651,9.496,0.981,0.888,630,6281 -Beauville,31055,164,6.113,0.787,0.713,600,6262 -Lacougotte-Cadoul,81126,172,8.793,0.944,0.855,607,6282 -Lautrec,81139,1781,54.682,2.354,2.131,628,6286 -Garrevaques,81100,396,6.905,0.836,0.757,620,6266 -Algans,81006,205,14.445,1.210,1.096,610,6282 -La Pomarède,11292,146,13.364,1.164,1.054,616,6256 -Saïx,81273,3509,13.760,1.181,1.069,631,6276 -Vénès,81311,793,27.479,1.669,1.511,634,6297 -Montpinier,81181,191,7.604,0.878,0.795,633,6286 -Coustouge,11110,124,9.734,0.993,0.899,680,6215 -Castres,81065,41338,98.432,3.158,2.859,633,6286 -Fraissé-des-Corbières,11157,228,19.034,1.389,1.258,690,6203 -Réalmont,81222,3383,14.425,1.209,1.095,634,6297 -Cascastel-des-Corbières,11071,224,15.704,1.261,1.142,682,6212 -Lavaur,81140,10783,63.251,2.532,2.293,597,6289 -Giroussens,81104,1490,42.119,2.066,1.871,602,6294 -Saint-Genest-de-Contest,81250,297,13.670,1.177,1.066,631,6295 -Laboutarie,81119,492,5.431,0.742,0.672,630,6298 -Fiac,81092,929,25.289,1.601,1.450,608,6291 -Missècle,81169,96,5.823,0.768,0.695,617,6291 -Serviès-en-Val,11378,221,6.757,0.827,0.749,661,6220 -Cabanès,81044,285,8.854,0.947,0.857,617,6292 -Palaja,11272,2320,14.980,1.232,1.115,653,6231 -Graulhet,81105,12542,57.375,2.411,2.183,617,6300 -Peyregoux,81207,81,4.496,0.675,0.611,636,6290 -Montfa,81177,484,10.711,1.042,0.943,636,6288 -Saint-Gauzens,81248,838,18.584,1.372,1.242,608,6296 -Saint-Jean-de-Rives,81255,490,6.046,0.783,0.709,601,6295 -Puybegon,81215,647,19.624,1.410,1.277,609,6300 -Ambres,81011,986,19.085,1.391,1.259,609,6292 -Briatexte,81039,2007,15.300,1.245,1.127,611,6295 -Saint-Julien-du-Puy,81258,433,19.330,1.399,1.267,629,6296 -Moulayrès,81187,197,8.887,0.949,0.859,621,6291 -Montirat,11248,77,13.091,1.152,1.043,652,6228 -Busque,81043,752,8.530,0.930,0.842,617,6300 -Brousse,81040,417,14.710,1.221,1.106,621,6291 -Montdragon,81174,620,12.171,1.110,1.005,626,6300 -Belcastel-et-Buc,11029,58,14.619,1.217,1.102,649,6213 -Cazilhac,11088,1646,4.116,0.646,0.585,647,6230 -Arquettes-en-Val,11016,79,9.618,0.987,0.894,659,6221 -Chambray-lès-Tours,37050,11548,19.460,1.404,1.271,531,6696 -Athée-sur-Cher,37008,2668,34.518,1.870,1.693,544,6690 -Villefloure,11423,170,17.394,1.328,1.202,652,6228 -Caudebronde,11079,188,6.514,0.812,0.735,643,6252 -Caunes-Minervois,11081,1656,28.819,1.709,1.547,659,6253 -Clermont-sur-Lauquet,11094,26,18.728,1.378,1.248,656,6215 -Rennes-les-Bains,11310,225,19.294,1.398,1.266,651,6203 -Villemoustaussou,11429,4389,12.633,1.131,1.024,651,6239 -Auriac,11020,42,21.499,1.476,1.336,655,6204 -Gardie,11161,118,4.776,0.696,0.630,641,6221 -Saint-Hilaire,11344,779,23.823,1.554,1.407,641,6221 -Terroles,11389,17,6.858,0.834,0.755,648,6210 -Verzeille,11408,494,5.438,0.742,0.672,644,6224 -Castans,11075,125,17.442,1.329,1.203,659,6260 -Aragon,11011,435,21.360,1.471,1.332,643,6247 -Villebazy,11420,128,12.550,1.128,1.021,645,6216 -Fayet,12099,265,15.914,1.270,1.150,699,6299 -Cassaignes,11073,52,3.858,0.625,0.566,643,6205 -Ladern-sur-Lauquet,11183,267,25.473,1.607,1.455,647,6225 -Villar-Saint-Anselme,11415,114,6.064,0.784,0.710,641,6218 -Le Rialet,81223,55,7.496,0.871,0.789,656,6273 -Espérausses,81086,172,12.269,1.115,1.010,660,6289 -Arques,11015,248,18.960,1.386,1.255,652,6207 -Valmigère,11402,15,6.004,0.780,0.706,648,6209 -Serres,11377,66,4.284,0.659,0.597,644,6206 -Arifat,81017,166,20.224,1.431,1.296,652,6298 -Greffeil,11169,75,14.208,1.200,1.086,652,6221 -Saint-Polycarpe,11364,144,14.173,1.198,1.085,641,6218 -Mazamet,81163,9969,72.921,2.718,2.461,649,6258 -Cambounès,81053,329,22.542,1.511,1.368,656,6274 -Missègre,11235,65,7.486,0.871,0.789,647,6212 -Limousis,11205,128,10.283,1.021,0.924,650,6248 -Saint-Amans-Valtoret,81239,921,35.685,1.901,1.721,656,6269 -Lanet,11187,50,8.876,0.948,0.858,656,6207 -Malves-en-Minervois,11215,850,5.065,0.716,0.648,656,6238 -Fourtou,11155,71,20.983,1.458,1.320,656,6199 -Saint-Pierre-de-Trivisy,81267,625,36.034,1.911,1.730,650,6296 -Trèbes,11397,5606,17.902,1.347,1.220,656,6236 -Badens,11023,798,9.928,1.003,0.908,660,6238 -Aigues-Vives,11001,579,10.507,1.032,0.934,660,6238 -Gijounet,81103,125,15.125,1.238,1.121,669,6287 -Cavanac,11085,908,8.948,0.952,0.862,648,6230 -Caunette-sur-Lauquet,11082,4,5.086,0.718,0.650,655,6214 -Vabre,81305,792,28.454,1.698,1.537,653,6285 -Pradelles-Cabardès,11297,145,21.330,1.470,1.331,655,6254 -Peyrolles,11287,86,14.978,1.232,1.115,644,6208 -Le Bez,81031,838,32.479,1.814,1.642,653,6285 -Bouisse,11044,95,26.215,1.630,1.476,654,6214 -Lastours,11194,160,2.820,0.535,0.484,650,6248 -Bout-du-Pont-de-Larn,81036,1261,7.881,0.894,0.809,651,6267 -Bouilhonnac,11043,233,6.113,0.787,0.713,654,6239 -Carcassonne,11069,45895,65.106,2.568,2.325,654,6233 -Fournes-Cabardès,11154,52,12.781,1.138,1.030,654,6250 -Pennautier,11279,2515,18.518,1.370,1.240,641,6239 -Caucalières,81066,289,12.844,1.141,1.033,643,6273 -Villegailhenc,11425,1695,5.045,0.715,0.647,648,6241 -Brassac,81037,1281,23.706,1.550,1.403,661,6276 -Mas-des-Cours,11223,26,7.549,0.875,0.792,652,6228 -Villardonnel,11413,500,17.170,1.319,1.194,646,6246 -Boissezon,81034,402,19.509,1.406,1.273,656,6274 -Les Martys,11221,286,19.508,1.406,1.273,642,6260 -Villanière,11411,137,7.247,0.857,0.776,649,6248 -Mayronnes,11227,33,12.233,1.113,1.008,662,6218 -Sougraigne,11381,112,18.970,1.386,1.255,644,6200 -Villeneuve-Minervois,11433,1018,24.604,1.579,1.430,657,6245 -Valdurenque,81307,824,5.912,0.774,0.701,644,6276 -Fontrieu,81062,943,102.619,3.225,2.920,671,6285 -Couffoulens,11102,600,10.175,1.015,0.919,643,6225 -Roquefère,11319,79,8.221,0.913,0.827,649,6258 -Compolibat,12071,353,16.920,1.309,1.185,634,6367 -Montredon-Labessonnié,81182,2019,110.894,3.352,3.035,652,6287 -Vignevieille,11409,103,16.901,1.309,1.185,659,6212 -Villarzel-Cabardès,11416,233,6.589,0.817,0.740,655,6242 -Floure,11146,405,4.637,0.685,0.620,659,6229 -Pont-de-Larn,81209,2869,34.169,1.861,1.685,656,6269 -Villedubert,11422,344,3.218,0.571,0.517,652,6236 -Rustiques,11330,509,6.572,0.816,0.739,658,6234 -Bagnoles,11025,310,5.784,0.766,0.694,653,6242 -Trassanel,11395,33,4.514,0.676,0.612,655,6248 -Monze,11257,228,14.624,1.217,1.102,658,6226 -Lacrouzette,81128,1745,28.847,1.710,1.548,652,6282 -Taurize,11387,110,8.602,0.934,0.846,660,6221 -Villalier,11410,1021,8.037,0.902,0.817,654,6240 -Lasfaillades,81137,78,8.340,0.919,0.832,661,6276 -Salsigne,11372,396,11.818,1.094,0.991,647,6245 -Véraza,11406,32,15.037,1.234,1.117,642,6209 -Berriac,11037,915,2.684,0.521,0.472,652,6236 -Les Ilhes,11174,53,4.168,0.650,0.589,647,6251 -Mas-Cabardès,11222,189,9.288,0.970,0.878,650,6252 -Leuc,11201,835,11.678,1.088,0.985,648,6226 -Fauch,81088,527,17.055,1.315,1.191,638,6306 -Fajac-en-Val,11133,37,14.084,1.195,1.082,655,6227 -Prémian,34219,518,16.595,1.297,1.174,687,6268 -Lacaze,81125,292,46.096,2.161,1.957,663,6291 -Villegly,11426,1110,10.289,1.021,0.924,654,6246 -La Tourette-Cabardès,11391,21,5.206,0.726,0.657,645,6256 -Labastide-en-Val,11179,93,12.075,1.106,1.001,656,6215 -La Serpent,11376,90,10.034,1.008,0.913,631,6208 -Villardebelle,11412,51,13.411,1.166,1.056,654,6214 -Peux-et-Couffouleux,12179,89,21.966,1.492,1.351,692,6294 -Fenouillet-du-Razès,11139,89,7.526,0.873,0.790,623,6230 -Loupia,11207,241,4.624,0.684,0.619,627,6219 -Lauraguel,11197,615,7.244,0.857,0.776,634,6223 -Saint-Jean-de-Barrou,11345,250,7.575,0.876,0.793,688,6206 -Cailhavel,11059,128,5.642,0.756,0.684,627,6231 -Puivert,11303,496,42.695,2.080,1.883,621,6197 -Brézilhac,11051,173,7.204,0.854,0.773,623,6229 -Monthaut,11247,39,7.057,0.846,0.766,622,6219 -Peyrefitte-du-Razès,11282,46,6.946,0.839,0.760,621,6216 -Malras,11214,384,4.384,0.666,0.603,631,6218 -Sainte-Foi,9260,25,2.459,0.499,0.452,613,6226 -Tourreilles,11394,125,6.447,0.808,0.732,634,6213 -Courtauly,11107,69,7.802,0.889,0.805,620,6214 -Bellegarde-du-Razès,11032,234,6.734,0.826,0.748,625,6225 -Lasserre-de-Prouille,11193,266,4.385,0.667,0.604,627,6231 -Donazac,11121,107,5.228,0.728,0.659,630,6221 -Castelreng,11078,201,11.352,1.072,0.971,629,6212 -Cambieure,11061,309,3.360,0.583,0.528,627,6225 -Montgradail,11246,51,4.485,0.674,0.610,621,6226 -Bouriège,11045,120,10.906,1.051,0.952,633,6210 -Bourigeole,11046,51,9.341,0.973,0.881,625,6209 -Hounoux,11173,138,7.909,0.895,0.810,618,6228 -Gaja-et-Villedieu,11158,292,7.970,0.899,0.814,631,6221 -La Digne-d'Aval,11120,543,3.246,0.573,0.519,633,6215 -Plaisance,12183,223,14.055,1.193,1.080,663,6315 -Belvèze-du-Razès,11034,873,4.540,0.678,0.614,627,6225 -Meljac,12144,134,9.564,0.984,0.891,652,6338 -Malviès,11216,372,7.458,0.869,0.787,636,6226 -Termes,11388,34,19.096,1.391,1.259,665,6214 -Saint-Couat-du-Razès,11338,58,6.599,0.818,0.741,627,6213 -Sonnac-sur-l'Hers,11380,138,13.778,1.182,1.070,620,6214 -Montjardin,11249,89,14.526,1.213,1.098,625,6208 -La Courtète,11108,43,5.672,0.758,0.686,622,6226 -Leigné-les-Bois,86125,587,30.055,1.745,1.580,529,6633 -Ferran,11141,106,6.111,0.787,0.713,623,6229 -Saint-Geours-de-Maremne,40261,2631,43.167,2.091,1.893,362,6298 -Cailhau,11058,268,10.089,1.011,0.915,631,6230 -Brugairolles,11053,268,8.813,0.945,0.856,632,6229 -La Bezole,11039,42,6.699,0.824,0.746,625,6215 -Dernacueillette,11118,43,7.887,0.894,0.809,669,6202 -Pomy,11294,59,6.063,0.784,0.710,624,6220 -Preuilly-la-Ville,36167,164,4.301,0.660,0.598,545,6623 -Villefort,11424,91,12.737,1.136,1.029,625,6208 -Lignairolles,11204,42,7.479,0.871,0.789,617,6222 -Festes-et-Saint-André,11142,208,18.489,1.369,1.240,625,6205 -Saint-Jean-de-Paracol,11346,120,7.311,0.861,0.780,628,6203 -Routier,11328,249,11.867,1.097,0.993,627,6225 -La Digne-d'Amont,11119,285,3.763,0.617,0.559,633,6215 -Corbières,11100,28,8.764,0.942,0.853,617,6216 -Mazerolles-du-Razès,11228,163,8.568,0.932,0.844,626,6227 -Caunettes-en-Val,11083,46,8.736,0.941,0.852,665,6217 -Ajac,11003,188,5.444,0.743,0.673,628,6216 -Albas,11006,76,22.853,1.522,1.378,676,6214 -Maisons,11213,45,12.268,1.115,1.010,674,6201 -Talairan,11386,465,37.832,1.958,1.773,673,6209 -Embres-et-Castelmaure,11125,152,32.579,1.817,1.645,684,6200 -Portel-des-Corbières,11295,1343,34.955,1.882,1.704,688,6217 -Palairac,11271,28,18.436,1.367,1.238,673,6209 -Fitou,11144,1055,30.379,1.754,1.588,693,6198 -Jonquières,11176,59,13.560,1.172,1.061,680,6214 -Mosnay,36131,477,25.478,1.607,1.455,597,6614 -Roquefort-des-Corbières,11322,1041,45.427,2.145,1.942,691,6210 -Durban-Corbières,11124,646,25.633,1.612,1.460,682,6212 -Quintillan,11305,58,16.451,1.291,1.169,678,6206 -Villesèque-des-Corbières,11436,376,31.971,1.800,1.630,687,6217 -Montgaillard,11245,45,16.841,1.306,1.182,667,6200 -Caves,11086,858,8.972,0.953,0.863,695,6206 -Félines-Termenès,11137,112,10.308,1.022,0.925,670,6208 -Massac,11224,30,12.306,1.117,1.011,666,6201 -Fontjoncouse,11152,131,27.699,1.675,1.517,686,6219 -Davejean,11117,117,13.645,1.176,1.065,666,6205 -Treilles,11398,246,12.609,1.130,1.023,694,6204 -Sigean,11379,5470,40.513,2.026,1.834,696,6216 -Brusque,12039,285,36.068,1.912,1.731,694,6293 -Viane,81314,538,38.644,1.979,1.792,667,6291 -Senaux,81282,33,4.771,0.695,0.629,670,6294 -Lamontélarié,81134,74,21.622,1.480,1.340,667,6282 -La Salvetat-sur-Agout,34293,1131,90.063,3.021,2.735,671,6285 -Villemort,86291,104,4.452,0.672,0.608,540,6608 -Rosis,34235,295,52.608,2.309,2.091,698,6278 -Le Soulié,34305,127,40.390,2.023,1.832,676,6269 -Lacaune,81124,2507,91.184,3.040,2.752,679,6292 -Saint-Martin-de-l'Arçon,34273,138,4.154,0.649,0.588,699,6277 -Fraisse-sur-Agout,34107,338,58.452,2.434,2.204,686,6282 -Murasson,12163,186,40.347,2.022,1.831,682,6293 -Mons,34160,584,21.947,1.491,1.350,696,6279 -Escroux,81085,50,10.194,1.016,0.920,672,6296 -Nages,81193,327,50.171,2.255,2.042,680,6279 -Castanet-le-Haut,34055,202,27.513,1.670,1.512,693,6284 -Berlats,81028,104,10.446,1.029,0.932,663,6287 -Murat-sur-Vèbre,81192,832,94.395,3.093,2.800,682,6289 -Barre,81023,206,15.124,1.238,1.121,682,6293 -Cambon-et-Salvergues,34046,48,49.917,2.249,2.036,695,6284 -Esclagne,9115,144,3.544,0.599,0.542,607,6210 -Anglès,81014,508,85.949,2.951,2.672,669,6277 -Saint-Julien,34271,219,19.334,1.400,1.268,695,6274 -Bénaix,9051,144,14.748,1.222,1.106,609,6202 -Dun,9107,561,41.596,2.053,1.859,606,6218 -Saint-Julien-de-Gras-Capou,9266,56,6.251,0.796,0.721,606,6215 -Mirepoix,9194,3191,47.674,2.198,1.990,609,6228 -La Bastide-sur-l'Hers,9043,678,4.823,0.699,0.633,610,6208 -L'Aiguillon,9003,424,6.432,0.807,0.731,609,6200 -Lavelanet,9160,6165,12.778,1.138,1.030,604,6203 -Pradettes,9233,49,3.512,0.597,0.541,602,6211 -Lesparrou,9165,232,16.415,1.290,1.168,609,6204 -Plaigne,11290,116,13.681,1.177,1.066,604,6228 -Plavilla,11291,112,12.695,1.134,1.027,611,6226 -Aigues-Vives,9002,654,5.225,0.728,0.659,610,6212 -Malegoude,9178,46,6.173,0.791,0.716,615,6224 -Cazals-des-Baylès,9089,55,4.667,0.688,0.623,615,6223 -Saint-Gaudéric,11343,106,11.457,1.077,0.975,613,6226 -Tourtrol,9314,290,5.154,0.723,0.655,602,6218 -Tabre,9305,375,2.876,0.540,0.489,608,6210 -Ribouisse,11312,109,10.513,1.032,0.934,612,6232 -Le Peyrat,9229,479,6.207,0.793,0.718,611,6206 -Manses,9180,129,15.415,1.250,1.132,601,6225 -La Bastide-de-Bousignac,9039,336,12.611,1.130,1.023,606,6217 -Lieurac,9168,183,6.421,0.807,0.731,601,6208 -Val de Lambronne,11080,195,12.247,1.114,1.009,615,6219 -Coutens,9102,172,4.229,0.655,0.593,604,6221 -Viviès,9341,113,4.406,0.668,0.605,601,6220 -Teilhet,9309,156,8.961,0.953,0.863,602,6221 -Saint-Jean-d'Aigues-Vives,9262,388,4.470,0.673,0.609,608,6204 -Lagarde,9150,191,11.955,1.101,0.997,616,6216 -Troye-d'Ariège,9316,89,8.276,0.916,0.829,608,6217 -Sautel,9281,103,9.302,0.971,0.879,604,6206 -Ilhat,9142,114,6.809,0.831,0.752,600,6208 -Limbrassac,9169,127,12.423,1.122,1.016,608,6214 -Dreuilhe,9106,354,7.023,0.844,0.764,610,6204 -Belloc,9048,74,9.698,0.991,0.897,615,6211 -Régat,9243,86,2.182,0.470,0.426,610,6212 -Saint-Quentin-la-Tour,9274,335,8.944,0.952,0.862,613,6215 -Orsans,11268,100,10.278,1.020,0.924,619,6229 -Bélesta,9047,1046,26.873,1.650,1.494,617,6198 -Saint-Papoul,11361,818,27.308,1.663,1.506,625,6247 -Villautou,11419,63,6.142,0.789,0.714,606,6232 -Sainte-Colombe-sur-l'Hers,11336,438,10.911,1.051,0.952,617,6204 -Castelnaudary,11076,11213,47.825,2.201,1.993,618,6244 -Tréziers,11400,102,6.602,0.818,0.741,616,6216 -Sainte-Camelle,11334,119,9.863,1.000,0.905,600,6241 -Saint-Julien-de-Briola,11348,86,11.701,1.089,0.986,614,6231 -Besset,9052,166,8.139,0.908,0.822,605,6219 -Camon,9074,141,10.296,1.021,0.924,616,6213 -Léran,9161,593,12.138,1.109,1.004,610,6208 -Saint-Martin-Lalande,11356,1121,12.716,1.135,1.028,620,6243 -Laroque-d'Olmes,9157,2454,14.344,1.206,1.092,610,6210 -Seignalens,11375,33,6.389,0.805,0.729,617,6224 -Raissac,9242,46,3.725,0.614,0.556,602,6206 -Issel,11175,492,18.238,1.359,1.230,622,6253 -Cumiès,11114,36,4.065,0.642,0.581,607,6246 -Laurabuc,11195,410,8.372,0.921,0.834,619,6243 -Cazalrenoux,11087,89,13.768,1.181,1.069,612,6232 -Saint-Sernin,11365,36,6.827,0.832,0.753,605,6238 -Payra-sur-l'Hers,11275,199,25.305,1.601,1.450,607,6239 -Fendeille,11138,548,7.331,0.862,0.780,617,6243 -Cenne-Monestiés,11089,399,7.758,0.887,0.803,627,6249 -Tréville,11399,102,5.483,0.745,0.675,614,6255 -Verdun-en-Lauragais,11407,276,20.661,1.447,1.310,626,6255 -Pech-Luna,11278,76,6.781,0.829,0.751,607,6234 -Rouairoux,81231,370,28.517,1.700,1.539,666,6264 -Pardailhan,34193,185,41.107,2.041,1.848,689,6257 -Raissac-sur-Lampy,11308,459,5.450,0.743,0.673,632,6245 -Labastide-d'Anjou,11178,1349,8.636,0.935,0.847,606,6249 -Bize-Minervois,11041,1169,20.982,1.458,1.320,689,6254 -Bram,11049,3200,17.855,1.345,1.218,625,6240 -Villespy,11439,355,6.663,0.822,0.744,627,6249 -Le Truel,12284,346,26.580,1.641,1.486,678,6326 -Montréal,11254,1899,56.338,2.389,2.163,634,6238 -Montferrand,11243,546,17.959,1.349,1.221,605,6249 -Saint-Martin-le-Vieil,11357,225,13.716,1.179,1.067,629,6242 -Airoux,11002,161,5.622,0.755,0.684,607,6253 -Ricaud,11313,298,6.180,0.791,0.716,612,6250 -Montauriol,11239,87,8.361,0.920,0.833,606,6244 -Gaja-la-Selve,11159,147,11.751,1.091,0.988,608,6233 -Belflou,11030,122,9.369,0.974,0.882,603,6246 -Mézerville,11231,95,7.649,0.880,0.797,600,6241 -Avignonet-Lauragais,31037,1491,40.566,2.027,1.835,604,6256 -Mas-Saintes-Puelles,11225,916,28.966,1.713,1.551,606,6248 -Flagnac,12101,1060,12.972,1.146,1.038,642,6391 -Villesiscle,11438,381,5.610,0.754,0.683,624,6237 -Peyrens,11284,501,4.941,0.708,0.641,615,6253 -Puginier,11300,155,6.975,0.841,0.761,615,6253 -Couddes,41062,542,18.734,1.378,1.248,582,6697 -Fonters-du-Razès,11149,77,12.587,1.129,1.022,613,6241 -Mireval-Lauragais,11234,163,10.649,1.039,0.941,613,6240 -Saissac,11367,930,59.028,2.446,2.215,628,6255 -Gourvieille,11166,73,3.189,0.568,0.514,602,6250 -Laurac,11196,172,12.076,1.106,1.001,618,6236 -Lasbordes,11192,792,15.538,1.255,1.136,622,6246 -Peyrefitte-sur-l'Hers,11283,75,6.648,0.821,0.743,606,6239 -Souilhe,11383,317,4.359,0.665,0.602,614,6252 -Villemagne,11428,262,11.060,1.059,0.959,627,6249 -Pexiora,11281,1235,13.661,1.176,1.065,620,6240 -Mayreville,11226,74,8.258,0.915,0.828,606,6239 -Labastide-Rouairoux,81115,1410,23.844,1.554,1.407,668,6260 -Saint-Amans,11331,64,8.573,0.932,0.844,607,6239 -La Cassaigne,11072,183,12.573,1.129,1.022,620,6235 -La Force,11153,218,4.741,0.693,0.627,627,6232 -Pécharic-et-le-Py,11277,27,5.945,0.776,0.703,605,6232 -Berlou,34030,199,11.274,1.069,0.968,693,6268 -Souilhanels,11382,366,2.822,0.535,0.484,611,6252 -Molleville,11238,124,3.579,0.602,0.545,606,6248 -Soupex,11385,256,7.643,0.880,0.797,610,6252 -Generville,11162,61,10.436,1.028,0.931,616,6235 -Carlipa,11070,337,5.496,0.746,0.675,629,6244 -Cahuzac,11057,34,3.141,0.564,0.511,606,6232 -Quarante,34226,1760,30.035,1.744,1.579,702,6250 -Baraigne,11026,172,4.703,0.690,0.625,606,6249 -Bizanet,11040,1640,37.549,1.951,1.766,690,6222 -Luc-sur-Orbieu,11210,1140,9.848,0.999,0.905,685,6230 -Peyriac-Minervois,11286,1124,10.184,1.016,0.920,667,6245 -Montséret,11256,580,11.414,1.075,0.973,686,6220 -Cesseras,34075,384,14.930,1.230,1.114,676,6246 -Comigne,11095,309,9.579,0.985,0.892,664,6229 -Marseillette,11220,719,11.161,1.063,0.962,661,6234 -Babeau-Bouldoux,34021,298,21.337,1.470,1.331,690,6263 -Bages,11024,834,22.137,1.498,1.356,701,6221 -Roubia,11324,511,7.568,0.876,0.793,681,6240 -Saint-Étienne-d'Albagnan,34250,313,22.569,1.512,1.369,687,6268 -Marcorignan,11217,1283,5.711,0.761,0.689,693,6238 -Villedaigne,11421,509,2.509,0.504,0.456,688,6233 -Agel,34004,227,12.157,1.110,1.005,688,6253 -Fontcouverte,11148,546,10.196,1.016,0.920,677,6230 -Rieussec,34228,69,22.393,1.506,1.364,680,6257 -Thézan-des-Corbières,11390,536,26.486,1.638,1.483,683,6225 -Trausse,11396,561,10.999,1.056,0.956,664,6249 -Roquecourbe-Minervois,11318,127,3.633,0.607,0.550,672,6233 -Minerve,34158,130,27.644,1.674,1.516,673,6252 -Lespinassière,11200,133,16.555,1.295,1.173,665,6258 -Riols,34229,758,56.609,2.395,2.168,682,6260 -La Caunette,34059,304,21.662,1.481,1.341,681,6249 -Canet,11067,1743,13.999,1.191,1.078,684,6235 -Prades-sur-Vernazobre,34218,309,19.827,1.417,1.283,700,6259 -Pépieux,11280,1058,10.233,1.018,0.922,676,6246 -Sainte-Valière,11366,576,6.547,0.814,0.737,687,6240 -Ferrals-les-Corbières,11140,1181,16.124,1.278,1.157,677,6230 -Saint-Couat-d'Aude,11337,413,5.350,0.736,0.666,672,6233 -Olonzac,34189,1805,19.231,1.396,1.264,683,6242 -Névian,11264,1290,14.320,1.205,1.091,693,6234 -Siran,34302,725,21.147,1.464,1.326,672,6244 -Creissan,34089,1370,8.650,0.936,0.847,701,6251 -Azille,11022,1160,24.268,1.568,1.420,676,6242 -Saint-André-de-Roquelongue,11332,1405,29.954,1.742,1.577,691,6220 -Fabrezan,11132,1308,28.866,1.710,1.548,673,6228 -Ginestas,11164,1410,9.526,0.982,0.889,693,6241 -Boutenac,11048,714,23.174,1.532,1.387,681,6228 -Cuxac-d'Aude,11116,4002,21.754,1.485,1.345,700,6237 -Ornaisons,11267,1208,10.815,1.047,0.948,688,6233 -Montbrun-des-Corbières,11241,307,10.643,1.038,0.940,673,6236 -Argens-Minervois,11013,346,4.604,0.683,0.618,680,6240 -Antigny,86006,557,44.451,2.122,1.921,540,6609 -Tourouzelle,11393,460,14.360,1.206,1.092,679,6241 -Camplong-d'Aude,11064,358,12.628,1.131,1.024,673,6228 -Escales,11126,457,10.321,1.023,0.926,674,6235 -Vélieux,34326,83,10.146,1.014,0.918,678,6255 -Beaufort,34026,215,6.068,0.784,0.710,684,6245 -Oupia,34190,251,8.984,0.954,0.864,680,6244 -Raissac-d'Aude,11307,256,6.312,0.800,0.724,688,6236 -Roquebrun,34232,605,39.673,2.005,1.815,705,6264 -Conilhac-Corbières,11098,915,12.247,1.114,1.009,678,6229 -Ferrals-les-Montagnes,34098,178,25.542,1.609,1.457,668,6260 -Moussan,11258,1883,14.968,1.231,1.115,696,6239 -Argeliers,11012,2111,10.886,1.050,0.951,691,6247 -Boisset,34034,42,17.406,1.328,1.202,674,6254 -Aigne,34006,270,11.112,1.061,0.961,685,6247 -Puichéric,11301,1179,13.946,1.189,1.077,669,6239 -Aigues-Vives,34007,468,12.719,1.135,1.028,687,6247 -Lagrasse,11185,546,32.481,1.814,1.642,671,6225 -Villespassans,34339,167,13.978,1.190,1.077,691,6251 -Ventenac-en-Minervois,11405,543,6.135,0.788,0.713,689,6241 -Verreries-de-Moussans,34331,95,18.820,1.381,1.250,671,6262 -Mailhac,11212,559,10.567,1.035,0.937,685,6245 -Saint-Chinian,34245,1719,22.996,1.526,1.382,697,6256 -Rieux-en-Val,11314,90,7.324,0.861,0.780,663,6218 -Moulins-sur-Céphons,36135,295,32.309,1.809,1.638,587,6658 -Félines-Minervois,34097,474,30.200,1.749,1.584,665,6256 -Saint-Nazaire-d'Aude,11360,2013,8.759,0.942,0.853,693,6238 -Paraza,11273,621,9.544,0.983,0.890,682,6241 -Pouzols-Minervois,11296,525,10.167,1.015,0.919,683,6242 -La Livinière,34141,544,31.091,1.775,1.607,671,6254 -Lézignan-Corbières,11203,11334,38.154,1.966,1.780,682,6229 -Saint-Laurent-de-la-Cabrerisse,11351,738,25.273,1.600,1.449,675,6218 -Mirepeisset,11233,762,5.288,0.732,0.663,692,6245 -Saint-Pons-de-Thomières,34284,1892,41.040,2.039,1.846,679,6270 -Azillanet,34020,368,14.357,1.206,1.092,681,6248 -Ribaute,11311,279,9.447,0.978,0.885,671,6221 -Cruscades,11111,897,9.743,0.994,0.900,688,6233 -Ferrières-Poussarou,34100,68,25.667,1.613,1.460,695,6264 -Ouveillan,11269,2376,30.152,1.748,1.583,696,6246 -Assignan,34015,164,8.275,0.916,0.829,689,6254 -Prévinquières,12190,306,20.837,1.453,1.316,637,6363 -Tournissan,11392,276,11.968,1.101,0.997,673,6219 -Montouliers,34170,224,7.720,0.884,0.800,691,6247 -Castelnau-d'Aude,11077,489,7.459,0.869,0.787,675,6238 -Blomac,11042,224,8.448,0.925,0.838,665,6237 -Douzens,11122,725,14.685,1.220,1.105,669,6228 -Fontiers-Cabardès,11150,450,8.809,0.945,0.856,640,6251 -Peyriac-de-Mer,11285,1113,35.451,1.895,1.716,695,6224 -Cébazan,34070,610,12.966,1.146,1.038,697,6255 -Rieux-Minervois,11315,1993,21.803,1.486,1.345,664,6242 -Montredon-des-Corbières,11255,1469,17.411,1.328,1.202,694,6234 -Sallèles-d'Aude,11369,2877,12.503,1.126,1.019,697,6239 -Saint-Marcel-sur-Aude,11353,1983,8.443,0.925,0.838,693,6241 -Cruzy,34092,998,25.962,1.622,1.469,691,6250 -Moux,11261,698,16.066,1.276,1.155,673,6228 -Sauveterre,81278,168,12.445,1.123,1.017,662,6264 -Capendu,11068,1491,15.915,1.270,1.150,666,6232 -Saint-Jean-de-Minervois,34269,149,32.803,1.823,1.651,682,6260 -La Redorte,11190,1127,13.624,1.175,1.064,671,6236 -Saint-Frichoux,11342,253,6.498,0.811,0.734,665,6237 -Pomas,11293,881,10.621,1.037,0.939,644,6224 -Roullens,11327,465,8.133,0.908,0.822,643,6231 -Pezens,11288,1488,11.227,1.067,0.966,641,6239 -Luc-sur-Aude,11209,237,7.987,0.900,0.815,641,6206 -Montclar,11242,169,11.613,1.085,0.982,639,6225 -Rennes-le-Château,11309,77,15.033,1.234,1.117,638,6204 -Cournanel,11105,704,6.391,0.805,0.729,639,6214 -Alairac,11005,1323,16.632,1.298,1.175,638,6235 -Saint-Martin-de-Villereglan,11355,371,9.686,0.991,0.897,634,6222 -Arzens,11018,1245,21.802,1.486,1.345,638,6236 -Preixan,11299,615,8.575,0.932,0.844,641,6229 -Alet-les-Bains,11008,421,24.236,1.567,1.419,639,6208 -Antugnac,11010,271,9.836,0.998,0.904,635,6206 -Brousses-et-Villaret,11052,343,11.564,1.082,0.980,637,6248 -Rouffiac-d'Aude,11325,441,5.509,0.747,0.676,643,6226 -Espéraza,11129,1934,10.590,1.036,0.938,634,6203 -Pieusse,11289,1001,13.351,1.163,1.053,641,6219 -Caux-et-Sauzens,11084,959,9.152,0.963,0.872,638,6235 -Montolieu,11253,855,24.651,1.580,1.431,635,6250 -Lavalette,11199,1502,6.767,0.828,0.750,640,6235 -Cuxac-Cabardès,11115,909,25.556,1.609,1.457,642,6256 -Granès,11168,98,5.564,0.751,0.680,640,6198 -Cépie,11090,661,6.835,0.832,0.753,637,6225 -Couiza,11103,1129,6.877,0.835,0.756,643,6202 -Fraisse-Cabardès,11156,103,7.398,0.866,0.784,640,6251 -Saint-Denis,11339,514,8.616,0.934,0.846,637,6248 -Coustaussa,11109,51,4.709,0.691,0.626,640,6206 -Ventenac-Cabardès,11404,963,10.813,1.047,0.948,640,6245 -Villesèquelande,11437,888,5.335,0.735,0.665,636,6237 -Limoux,11206,10098,32.498,1.815,1.643,641,6218 -Montazels,11240,569,4.432,0.670,0.607,638,6207 -Lanuéjouls,12121,730,11.879,1.097,0.993,634,6367 -Sainte-Eulalie,11340,512,6.419,0.806,0.730,634,6237 -Magrie,11211,532,10.274,1.020,0.924,637,6213 -Moussoulens,11259,1024,19.523,1.406,1.273,636,6241 -Campagne-sur-Aude,11063,576,6.105,0.786,0.712,637,6202 -Villarzel-du-Razès,11417,109,12.963,1.146,1.038,638,6230 -Saint-Germain-en-Brionnais,71421,192,5.962,0.777,0.704,797,6585 -Saint-Rémy,12242,326,8.974,0.954,0.864,621,6366 -Martiel,12140,1023,46.765,2.177,1.971,611,6360 -Sanvensa,12259,658,25.871,1.619,1.466,627,6356 -Rieupeyroux,12198,1986,54.837,2.357,2.134,635,6362 -Monteils,12150,539,17.209,1.320,1.195,620,6350 -Toulonjac,12281,749,7.447,0.869,0.787,619,6364 -Sainte-Croix,12217,728,26.182,1.629,1.475,620,6367 -La Capelle-Bleys,12054,369,15.693,1.261,1.142,636,6359 -Brandonnet,12034,322,11.916,1.099,0.995,633,6364 -Le Bas Ségala,12021,1586,82.375,2.889,2.616,626,6354 -Colombiès,12068,904,55.394,2.369,2.145,651,6363 -Villefranche-de-Rouergue,12300,11894,45.750,2.153,1.949,622,6357 -Rignac,12199,1916,33.480,1.842,1.668,644,6365 -La Rouquette,12205,778,29.890,1.740,1.575,618,6361 -Castanet,12059,522,30.829,1.767,1.600,649,6358 -Boussac,12032,577,18.090,1.354,1.226,649,6353 -Poisson,71354,566,35.623,1.900,1.720,790,6584 -Maleville,12136,966,35.719,1.902,1.722,630,6364 -Savignac,12263,716,15.305,1.245,1.127,617,6366 -Vailhourles,12287,637,32.504,1.815,1.643,615,6354 -Vieillevie,15260,111,9.568,0.985,0.892,652,6394 -Soulages-Bonneval,12273,296,15.333,1.246,1.128,685,6397 -Sénergues,12268,421,44.944,2.134,1.932,659,6394 -Florentin-la-Capelle,12103,279,36.764,1.930,1.747,666,6392 -Roussennac,12206,623,17.301,1.324,1.199,643,6375 -Entraygues-sur-Truyère,12094,1017,30.863,1.768,1.601,666,6399 -Saint-Santin-de-Maurs,15212,357,14.691,1.220,1.105,634,6394 -Le Nayrac,12172,517,36.446,1.922,1.740,677,6389 -Campouriez,12048,355,18.298,1.362,1.233,670,6397 -Cassaniouze,15029,539,36.317,1.918,1.737,655,6396 -Montsalvy,15134,839,20.516,1.442,1.306,662,6400 -Corn,46075,217,15.411,1.250,1.132,613,6387 -Curières,12088,225,36.329,1.919,1.737,697,6395 -Vaureilles,12290,510,14.322,1.205,1.091,633,6372 -Golinhac,12110,343,32.265,1.808,1.637,671,6384 -Le Fel,12093,176,24.934,1.589,1.439,665,6400 -Laguiole,12119,1239,63.892,2.544,2.303,695,6402 -Le Cayrol,12064,258,22.404,1.507,1.364,680,6388 -Espeyrac,12097,241,22.205,1.500,1.358,661,6388 -Montmurat,15133,134,5.252,0.729,0.660,637,6394 -Montpeyroux,12156,546,62.149,2.509,2.272,680,6388 -Saint-Amans-des-Cots,12209,758,41.399,2.048,1.854,678,6402 -Saint-Jean-Mirabel,46272,225,9.231,0.967,0.876,631,6393 -Condom-d'Aubrac,12074,300,45.890,2.156,1.952,686,6389 -Bagnac-sur-Célé,46015,1477,22.295,1.503,1.361,634,6396 -Felzins,46101,435,15.059,1.235,1.118,634,6388 -Salvagnac-Cajarc,12256,381,23.222,1.534,1.389,610,6370 -Bouillac,12030,432,8.219,0.913,0.827,634,6388 -Grèzes,46131,175,11.107,1.061,0.961,608,6390 -Linac,46174,221,12.219,1.113,1.008,632,6400 -Cambes,46051,361,6.625,0.819,0.742,616,6393 -Lentillac-Saint-Blaise,46168,167,5.701,0.760,0.688,630,6390 -Lugan,12134,337,12.625,1.131,1.024,640,6379 -Fons,46108,406,15.087,1.236,1.119,616,6393 -Lunan,46180,566,6.221,0.794,0.719,626,6390 -Fourmagnac,46111,157,3.746,0.616,0.558,618,6398 -Peyrusse-le-Roc,12181,234,13.793,1.182,1.070,632,6381 -Cardaillac,46057,603,18.217,1.359,1.230,620,6398 -Reyrevignes,46237,377,12.483,1.125,1.019,612,6395 -Montredon,46207,297,11.821,1.094,0.991,637,6391 -Béduer,46021,729,24.969,1.591,1.441,617,6384 -Cuzac,46085,245,5.005,0.712,0.645,630,6386 -Viazac,46332,328,17.635,1.337,1.211,624,6396 -Camboulit,46052,257,5.215,0.727,0.658,616,6390 -Espagnac-Sainte-Eulalie,46093,92,9.812,0.997,0.903,611,6387 -Saint-Jean-Delnous,12230,426,18.417,1.366,1.237,661,6328 -Capdenac-Gare,12052,4549,20.240,1.432,1.297,627,6382 -Livernon,46176,681,26.201,1.629,1.475,607,6399 -Camburat,46053,416,8.070,0.904,0.818,618,6394 -Bonneuil-Matours,86032,2119,42.936,2.086,1.889,508,6623 -Saint-Santin,12246,560,23.091,1.530,1.385,638,6392 -Decazeville,12089,5355,13.969,1.190,1.077,644,6385 -Montamisé,86163,3562,32.623,1.818,1.646,500,6619 -Saint-Félix,46266,516,7.811,0.890,0.806,629,6389 -Saint-Constant-Fournoulès,15181,619,29.108,1.717,1.555,643,6402 -Capdenac,46055,1101,11.011,1.056,0.956,630,6387 -Issepts,46133,226,9.120,0.961,0.870,616,6399 -Saint-Georges-lès-Baillargeaux,86222,4117,33.891,1.853,1.678,509,6620 -Le Trioulou,15242,106,6.049,0.783,0.709,634,6396 -Boisse-Penchot,12028,522,4.529,0.677,0.613,636,6386 -Almont-les-Junies,12004,471,23.786,1.552,1.405,650,6388 -Livinhac-le-Haut,12130,1148,10.936,1.053,0.953,635,6388 -Faycelles,46100,654,14.012,1.192,1.079,623,6385 -Saint-Perdoux,46288,205,12.580,1.129,1.022,627,6398 -Assier,46009,657,16.647,1.299,1.176,613,6397 -Boussac,46035,187,7.906,0.895,0.810,613,6387 -Montbazens,12148,1393,17.450,1.330,1.204,639,6378 -Brengues,46039,208,20.808,1.452,1.315,610,6386 -Montsalès,12158,325,12.506,1.126,1.019,617,6378 -Foissac,12104,465,9.772,0.995,0.901,624,6377 -Saint-Igest,12227,196,11.607,1.084,0.981,626,6374 -Valzergues,12289,218,6.578,0.816,0.739,638,6381 -Galgan,12108,366,20.395,1.438,1.302,637,6382 -Auzits,12016,857,24.483,1.575,1.426,646,6374 -Salles-Courbatiès,12252,409,13.554,1.172,1.061,629,6374 -Asprières,12012,726,17.251,1.322,1.197,633,6381 -Sonnac,12272,510,11.929,1.099,0.995,632,6381 -Escandolières,12095,231,13.571,1.173,1.062,646,6374 -Balaguier-d'Olt,12018,153,10.941,1.053,0.953,617,6378 -Bournazel,12031,341,16.428,1.290,1.168,643,6376 -Causse-et-Diège,12257,739,29.976,1.743,1.578,619,6384 -Drulhe,12091,445,18.027,1.351,1.223,629,6375 -Villeneuve,12301,1990,65.518,2.577,2.333,622,6377 -Cadrieu,46041,163,5.264,0.730,0.661,611,6377 -Viviez,12305,1277,6.594,0.817,0.740,637,6383 -Aubin,12013,3780,27.151,1.659,1.502,638,6381 -Saint-Pierre-Toirac,46289,149,5.809,0.767,0.694,616,6384 -Gréalou,46129,277,17.508,1.332,1.206,613,6382 -Naussac,12170,370,14.828,1.226,1.110,630,6376 -Ols-et-Rinhodes,12175,168,10.894,1.051,0.952,618,6373 -Saint-Jean-de-Laur,46270,232,21.747,1.484,1.344,608,6375 -Firmi,12100,2411,29.223,1.721,1.558,644,6385 -Montbrun,46198,94,8.120,0.907,0.821,611,6381 -Ambeyrac,12007,176,11.178,1.064,0.963,616,6380 -Larroque-Toirac,46157,133,5.842,0.769,0.696,616,6380 -Saujac,12261,127,12.346,1.118,1.012,612,6379 -Les Albres,12003,345,15.296,1.245,1.127,637,6382 -La Capelle-Balaguier,12053,307,13.454,1.168,1.058,617,6373 -Cransac,12083,1526,6.958,0.840,0.761,643,6379 -Goutrens,12111,516,26.011,1.623,1.469,648,6369 -Carayac,46056,99,6.957,0.840,0.761,614,6385 -Promilhanes,46227,224,14.590,1.216,1.101,607,6367 -Colombiers,86081,1516,21.040,1.460,1.322,501,6635 -Saint-Sulpice,46294,145,13.034,1.149,1.040,606,6386 -Saint-Julien-l'Ars,86226,2618,18.673,1.375,1.245,509,6612 -Laramière,46154,346,22.040,1.494,1.353,610,6366 -Puylagarde,82147,336,23.220,1.534,1.389,611,6361 -Beauregard,46020,233,15.060,1.235,1.118,601,6361 -Saint-Projet,82172,285,26.308,1.633,1.479,594,6356 -Parisot,82137,593,28.109,1.688,1.528,610,6355 -Saillac,46247,161,16.285,1.285,1.163,603,6360 -Larnagol,46155,135,24.133,1.564,1.416,601,6374 -Puyjourdes,46230,90,7.872,0.893,0.809,607,6367 -Lacapelle-Livron,82082,200,13.839,1.184,1.072,607,6352 -Limogne-en-Quercy,46173,764,32.233,1.807,1.636,607,6368 -Marcilhac-sur-Célé,46183,198,26.927,1.652,1.496,600,6384 -Vidaillac,46333,168,9.580,0.985,0.892,608,6361 -Réquista,12197,2007,59.462,2.455,2.223,660,6324 -Cambon,81052,2122,7.785,0.888,0.804,637,6312 -Tendu,36219,648,42.141,2.066,1.871,590,6623 -Curvalle,81077,395,38.716,1.981,1.794,658,6312 -Moularès,81186,280,16.824,1.306,1.182,643,6329 -Miolles,81167,105,12.093,1.107,1.002,664,6312 -Villefranche-d'Albigeois,81317,1245,21.984,1.492,1.351,648,6310 -Mont-Roc,81183,192,14.142,1.197,1.084,647,6302 -Tauriac-de-Naucelle,12276,369,22.043,1.494,1.353,644,6338 -Valderiès,81306,852,20.698,1.448,1.311,637,6327 -Crespin,81072,129,14.141,1.197,1.084,646,6327 -Bellegarde-Marsal,81026,719,19.463,1.404,1.271,642,6311 -Dénat,81079,794,15.076,1.236,1.119,638,6303 -Rullac-Saint-Cirq,12207,347,32.844,1.824,1.651,659,6332 -Camboulazet,12045,420,14.347,1.206,1.092,654,6346 -Trébas,81303,414,5.742,0.763,0.691,660,6317 -Cabanès,12041,246,15.950,1.271,1.151,643,6347 -Bouesse,36022,433,24.390,1.572,1.423,602,6615 -La Bastide-Solages,12023,108,7.042,0.845,0.765,660,6316 -Tanus,81292,535,18.894,1.384,1.253,644,6338 -Tayrac,12278,170,15.902,1.269,1.149,641,6346 -Sauveterre-de-Rouergue,12262,810,23.758,1.552,1.405,644,6346 -Mouzieys-Teulet,81190,491,13.261,1.159,1.049,639,6312 -Padiès,81199,191,14.891,1.228,1.112,648,6326 -Saint-Julien-Gaulène,81259,211,11.845,1.096,0.992,649,6319 -Arthès,81018,2488,10.096,1.011,0.915,637,6320 -Paulinet,81203,542,73.513,2.729,2.471,658,6299 -Andouque,81013,398,26.530,1.640,1.485,646,6327 -Sainte-Gemme,81249,893,20.127,1.428,1.293,637,6330 -Balaguier-sur-Rance,12019,92,9.749,0.994,0.900,664,6312 -Centrès,12065,465,36.751,1.930,1.747,658,6345 -Pierrefiche,12182,271,17.090,1.316,1.192,697,6372 -Le Masnau-Massuguiès,81158,272,47.587,2.196,1.988,665,6305 -Saint-Michel-Labadié,81264,95,9.780,0.995,0.901,656,6323 -Rayssac,81221,248,30.080,1.746,1.581,650,6304 -Fréjairolles,81097,1321,17.618,1.336,1.210,639,6312 -La Salvetat-Peyralès,12258,973,54.580,2.352,2.130,632,6345 -Gramond,12113,490,13.333,1.162,1.052,648,6354 -Cunac,81074,1551,6.384,0.804,0.728,636,6314 -Lédergues,12127,667,36.588,1.925,1.743,659,6332 -Lacapelle-Pinet,81122,75,8.147,0.909,0.823,650,6330 -Cadix,81047,231,18.232,1.359,1.230,658,6316 -Ambialet,81010,455,30.257,1.751,1.585,650,6318 -Le Fraysse,81096,387,29.553,1.730,1.566,648,6311 -Le Dourn,81082,115,9.335,0.973,0.881,657,6326 -Saint-Cirgue,81247,208,18.812,1.381,1.250,650,6318 -Assac,81019,144,15.160,1.239,1.122,656,6317 -Crespin,12085,309,18.451,1.367,1.238,635,6338 -Castelmary,12060,117,11.837,1.095,0.991,639,6340 -Courris,81071,81,9.365,0.974,0.882,654,6317 -Rosières,81230,746,10.460,1.029,0.932,636,6325 -Quins,12194,839,38.696,1.980,1.793,647,6351 -Massals,81161,99,16.293,1.285,1.163,665,6306 -Cassagnes-Bégonhès,12057,904,30.838,1.768,1.601,659,6339 -Saint-Georges-de-Luzençon,12225,1621,48.230,2.211,2.002,696,6326 -Tréban,81302,46,3.158,0.566,0.512,648,6334 -Naucelle,12169,1997,23.483,1.543,1.397,650,6340 -Saint-Just-sur-Viaur,12235,211,25.482,1.607,1.455,652,6338 -Manhac,12137,809,18.427,1.366,1.237,658,6348 -La Selve,12267,628,48.460,2.216,2.006,665,6340 -Saint-André,81240,97,7.300,0.860,0.779,657,6316 -Teillet,81295,443,24.362,1.571,1.422,645,6303 -Sérénac,81285,480,17.098,1.316,1.192,645,6315 -Pradinas,12189,363,22.933,1.524,1.380,643,6347 -Faussergues,81089,145,14.905,1.229,1.113,653,6329 -Alban,81003,938,9.795,0.996,0.902,658,6309 -Saint-Juéry,81257,6814,9.349,0.973,0.881,639,6317 -Saint-Grégoire,81253,475,12.802,1.139,1.031,640,6315 -Montauriol,81172,47,5.272,0.731,0.662,646,6330 -Valence-d'Albigeois,81308,1325,20.678,1.447,1.310,649,6322 -Sainte-Juliette-sur-Viaur,12234,591,16.748,1.303,1.180,658,6348 -Pampelonne,81201,855,35.611,1.900,1.720,635,6338 -Échenans,25210,158,1.736,0.419,0.379,977,6720 -Fraissines,81094,92,6.397,0.805,0.729,660,6322 -Saint-Jean-de-Marcel,81254,368,18.450,1.367,1.238,641,6327 -Camjac,12046,572,23.049,1.528,1.383,654,6346 -Coupiac,12080,397,24.935,1.589,1.439,666,6313 -Saint-Juéry,12233,284,29.046,1.716,1.554,673,6317 -Castelnau-de-Mandailles,12061,579,35.960,1.909,1.728,688,6379 -Versols-et-Lapeyre,12292,430,27.973,1.684,1.525,691,6312 -Salmiech,12255,765,28.222,1.691,1.531,668,6348 -Bessuéjouls,12027,217,11.327,1.071,0.970,679,6377 -Brasc,12035,164,20.257,1.433,1.297,662,6318 -Calmels-et-le-Viala,12042,210,23.179,1.532,1.387,678,6315 -Vézins-de-Lévézou,12294,655,78.969,2.829,2.561,690,6349 -Agen-d'Aveyron,12001,1053,22.098,1.496,1.355,678,6360 -Rebourguil,12195,283,35.321,1.892,1.713,683,6306 -Druelle Balsac,12090,3081,51.182,2.277,2.062,659,6367 -Nauviale,12171,532,25.519,1.608,1.456,652,6379 -Arques,12010,127,11.240,1.067,0.966,682,6356 -Pruines,12193,303,18.940,1.385,1.254,662,6383 -Prades-Salars,12188,304,30.659,1.762,1.595,683,6346 -Sébrazac,12265,506,25.250,1.599,1.448,673,6379 -Flavin,12102,2309,50.797,2.269,2.054,676,6358 -Viala-du-Tarn,12296,478,38.515,1.975,1.788,692,6330 -Martrin,12141,230,23.373,1.539,1.393,673,6313 -Montlaur,12154,628,41.498,2.051,1.857,684,6311 -Luc-la-Primaube,12133,5937,26.959,1.653,1.497,662,6360 -Palmas d'Aveyron,12177,1027,43.507,2.100,1.901,686,6371 -Le Vibal,12297,506,25.930,1.621,1.468,682,6355 -Curan,12307,308,40.917,2.036,1.843,692,6344 -Coubisou,12079,490,30.846,1.768,1.601,682,6385 -Salles-Curan,12253,1050,99.361,3.173,2.873,682,6336 -Durenque,12092,525,33.364,1.839,1.665,667,6336 -Alrance,12006,361,35.912,1.908,1.728,674,6341 -Broquiès,12037,609,37.866,1.959,1.774,680,6323 -Campuac,12049,448,19.128,1.392,1.260,663,6387 -Muret-le-Château,12165,346,14.820,1.225,1.109,666,6380 -Saint-Martin-de-Lenne,12239,295,9.445,0.978,0.885,698,6367 -Saint-Christophe-Vallon,12215,1137,23.341,1.538,1.393,650,6378 -Saint-Rome-de-Tarn,12244,872,52.204,2.300,2.082,694,6330 -Bozouls,12033,2828,69.516,2.654,2.403,682,6376 -Montjaux,12153,394,31.532,1.787,1.618,689,6336 -Castelnau-Pégayrols,12062,336,53.048,2.318,2.099,697,6334 -Laissac-Sévérac l'Église,12120,2102,33.924,1.854,1.679,687,6360 -Saint Geniez d'Olt et d'Aubrac,12224,2198,89.541,3.012,2.727,705,6387 -Arvieu,12011,785,49.700,2.244,2.032,672,6346 -Salles-la-Source,12254,2200,76.995,2.793,2.529,665,6368 -Brousse-le-Château,12038,155,15.373,1.248,1.130,669,6325 -Auriac-Lagast,12015,230,30.609,1.761,1.594,667,6336 -Saint-Izaire,12228,305,34.468,1.869,1.692,678,6315 -Le Monastère,12146,2234,6.740,0.826,0.748,666,6358 -Saint-Laurent-de-Lévézou,12236,154,23.350,1.538,1.393,699,6343 -Rodez,12202,23739,11.261,1.068,0.967,668,6362 -Luzeret,36106,152,27.041,1.655,1.498,581,6608 -Bertholène,12026,1038,46.857,2.179,1.973,680,6360 -Sébazac-Concourès,12264,3235,27.240,1.661,1.504,665,6368 -La Loubière,12131,1476,28.736,1.706,1.545,672,6361 -Gabriac,12106,503,25.664,1.613,1.460,682,6372 -Moyrazès,12162,1133,48.624,2.220,2.010,654,6354 -Rodelle,12201,1075,53.657,2.332,2.111,669,6382 -Pont-de-Salars,12185,1656,45.774,2.154,1.950,681,6352 -Saint-Victor-et-Melvieu,12251,371,18.079,1.353,1.225,683,6329 -Baraqueville,12056,3146,33.926,1.854,1.679,654,6348 -La Serre,12269,117,18.501,1.369,1.240,673,6308 -Saint-Beauzély,12213,584,31.002,1.772,1.604,693,6342 -Sainte-Radegonde,12241,1766,30.858,1.768,1.601,668,6362 -Les Costes-Gozon,12078,186,20.439,1.439,1.303,687,6323 -Vabres-l'Abbaye,12286,1190,41.280,2.045,1.852,690,6312 -Montclar,12149,165,12.772,1.138,1.030,671,6319 -Saint-Léons,12238,398,32.887,1.825,1.652,700,6350 -Espalion,12096,4521,36.722,1.929,1.747,678,6382 -Ségur,12266,567,67.639,2.618,2.370,692,6359 -Ayssènes,12017,215,23.109,1.530,1.385,683,6334 -Onet-le-Château,12176,11972,40.192,2.018,1.827,659,6367 -Olemps,12174,3381,12.799,1.139,1.031,666,6358 -Clairvaux-d'Aveyron,12066,1153,24.516,1.576,1.427,654,6371 -Gissac,12109,105,31.223,1.779,1.611,690,6312 -Saint-Affrique,12208,8145,110.728,3.349,3.032,681,6321 -Comps-la-Grand-Ville,12073,624,21.797,1.486,1.345,665,6351 -Mouret,12161,536,31.170,1.777,1.609,658,6380 -Villefranche-de-Panat,12299,717,30.553,1.759,1.593,678,6338 -Vimenet,12303,244,21.077,1.461,1.323,694,6364 -Lestrade-et-Thouels,12129,487,42.142,2.066,1.871,672,6324 -Cahuzac-sur-Vère,81051,1144,30.635,1.762,1.595,609,6319 -Connac,12075,109,10.773,1.045,0.946,666,6323 -Villecomtal,12298,399,13.963,1.189,1.077,665,6384 -Montrozier,12157,1599,47.258,2.188,1.981,673,6369 -Lassouts,12124,291,30.908,1.770,1.603,693,6377 -Canet-de-Salars,12050,431,34.044,1.857,1.681,675,6349 -Saint-Félix-de-Lunel,12221,358,19.044,1.389,1.258,665,6384 -Gaillac-d'Aveyron,12107,302,28.997,1.714,1.552,692,6359 -Saint-Côme-d'Olt,12216,1342,30.117,1.747,1.582,684,6384 -Saint-Rome-de-Cernon,12243,895,37.702,1.954,1.769,696,6326 -Marcillac-Vallon,12138,1689,14.540,1.214,1.099,657,6373 -Trémouilles,12283,505,29.021,1.715,1.553,672,6346 -Féneyrols,82061,150,14.824,1.226,1.110,607,6334 -Ginals,82069,208,24.182,1.565,1.417,616,6350 -Terssac,81297,1176,5.575,0.752,0.681,623,6314 -Broze,81041,116,3.986,0.636,0.576,609,6319 -Andillac,81012,123,5.428,0.742,0.672,610,6322 -Jouqueviel,81110,96,12.039,1.104,1.000,632,6345 -Labastide-de-Lévis,81112,903,14.195,1.199,1.086,622,6314 -Roquefort-sur-Soulzon,12203,572,16.871,1.307,1.183,701,6317 -Les Cabannes,81045,369,6.279,0.798,0.723,615,6333 -Senouillac,81283,1102,15.146,1.239,1.122,614,6318 -Fillière,74282,9179,119.099,3.474,3.145,954,6545 -Milhavet,81166,87,4.443,0.671,0.608,621,6327 -Peyrole,81208,573,20.197,1.431,1.296,614,6301 -Saliès,81274,821,3.609,0.605,0.548,629,6311 -Cadalen,81046,1528,40.524,2.026,1.834,623,6305 -Amarens,81009,68,4.821,0.699,0.633,615,6329 -Laguépie,82088,607,15.011,1.233,1.116,619,6339 -Virac,81322,228,11.546,1.082,0.980,624,6330 -Sainte-Croix,81326,378,7.211,0.855,0.774,628,6319 -Rivières,81225,1037,9.645,0.989,0.895,619,6313 -Loubers,81148,78,4.246,0.656,0.594,612,6326 -Le Riols,81224,105,4.986,0.711,0.644,613,6337 -Gaillac,81099,15254,50.933,2.272,2.057,608,6309 -Cestayrols,81067,465,17.097,1.316,1.192,620,6322 -Loupiac,81149,405,10.866,1.049,0.950,603,6305 -Milhars,81165,236,16.433,1.290,1.168,612,6338 -Brens,81038,2296,22.749,1.518,1.374,617,6312 -Fayssac,81087,345,7.675,0.882,0.799,621,6318 -Saint-Christophe,81245,130,14.396,1.208,1.094,620,6340 -Montrosier,81184,31,3.496,0.595,0.539,607,6336 -Lescure-d'Albigeois,81144,4508,14.465,1.211,1.096,632,6319 -Poulan-Pouzols,81211,483,11.982,1.102,0.998,630,6307 -Saint-Benoît-de-Carmaux,81244,2152,4.503,0.675,0.611,631,6330 -Mouzieys-Panens,81191,242,13.359,1.163,1.053,616,6333 -Tonnac,81300,116,11.248,1.068,0.967,606,6331 -Labastide-Gabausse,81114,502,12.370,1.120,1.014,628,6324 -Roussayrolles,81234,77,5.414,0.741,0.671,606,6335 -Bor-et-Bar,12029,191,13.054,1.150,1.041,629,6345 -Salles,81275,182,8.210,0.912,0.826,625,6331 -Lamillarié,81133,497,13.991,1.191,1.078,630,6309 -Caylus,82038,1445,97.779,3.148,2.850,595,6347 -Rauzan,33350,1210,6.428,0.807,0.731,454,6414 -Sainte-Cécile-du-Cayrou,81246,116,8.066,0.904,0.818,605,6321 -Itzac,81108,151,11.212,1.066,0.965,609,6326 -La Fouillade,12105,1060,32.936,1.827,1.654,622,6345 -Vaour,81309,334,14.157,1.198,1.085,606,6328 -Orban,81198,335,8.870,0.948,0.858,625,6302 -Labessière-Candeil,81117,742,22.235,1.501,1.359,624,6298 -Cordes-sur-Ciel,81069,909,8.438,0.925,0.838,616,6328 -Castelnau-de-Lévis,81063,1571,21.426,1.473,1.334,623,6314 -Verfeil,82191,374,18.646,1.374,1.244,611,6346 -Alos,81007,92,6.438,0.808,0.732,610,6327 -Pousthomy,12186,212,17.403,1.328,1.202,668,6302 -Taïx,81291,464,4.866,0.702,0.636,628,6323 -Cagnac-les-Mines,81048,2532,24.812,1.586,1.436,633,6321 -Carmaux,81060,9356,14.139,1.197,1.084,634,6326 -Vieux,81316,222,6.953,0.839,0.760,608,6324 -Souel,81290,171,9.689,0.991,0.897,619,6326 -Donnazac,81080,77,4.756,0.694,0.628,617,6325 -Espinas,82056,176,16.196,1.281,1.160,607,6343 -Lombers,81147,1126,38.853,1.984,1.796,628,6304 -Francillon,36079,76,10.293,1.021,0.924,590,6648 -Vindrac-Alayrac,81320,158,9.789,0.996,0.902,615,6329 -Saint-Martin-Laguépie,81263,400,21.969,1.492,1.351,621,6337 -Frausseilles,81095,87,5.863,0.771,0.698,614,6325 -Fénols,81090,240,6.040,0.782,0.708,626,6307 -Lagrave,81131,2127,9.456,0.979,0.886,620,6312 -Puygouzon,81218,3417,20.365,1.436,1.300,634,6307 -Combefa,81068,156,2.912,0.543,0.492,626,6327 -Aussac,81020,259,6.103,0.786,0.712,624,6309 -Mailhoc,81152,287,12.911,1.144,1.036,628,6324 -Laparrouquial,81135,106,8.410,0.923,0.836,623,6338 -Mirandol-Bourgnounac,81168,1040,37.936,1.961,1.776,639,6340 -Varen,82187,655,23.510,1.543,1.397,612,6338 -Rouffiac,81232,630,11.304,1.070,0.969,624,6311 -Laval-Roquecezière,12125,274,30.689,1.763,1.596,673,6298 -Monestiés,81170,1371,27.191,1.660,1.503,626,6328 -Lunac,12135,431,18.887,1.383,1.252,629,6345 -Bernac,81029,187,5.583,0.752,0.681,621,6318 -Labarthe-Bleys,81111,74,9.113,0.961,0.870,609,6332 -Najac,12167,698,54.121,2.342,2.120,617,6350 -Montels,81176,103,3.264,0.575,0.521,612,6319 -Almayrac,81008,288,10.960,1.054,0.954,633,6332 -Bournazel,81035,179,7.910,0.895,0.810,617,6332 -Sylvanès,12274,109,17.087,1.316,1.192,696,6306 -Lacapelle-Ségalar,81123,99,6.787,0.829,0.751,617,6337 -Dissay,86095,3226,23.643,1.548,1.402,508,6623 -Técou,81294,975,19.505,1.406,1.273,612,6308 -Noailles,81197,218,11.585,1.083,0.981,617,6324 -Montirat,81180,250,27.679,1.675,1.517,630,6340 -Marssac-sur-Tarn,81156,3124,7.318,0.861,0.780,622,6314 -Villeneuve-sur-Vère,81319,495,15.988,1.273,1.153,620,6326 -Saint-André-de-Najac,12210,428,25.306,1.601,1.450,625,6342 -Lescure-Jaoul,12128,233,18.590,1.372,1.242,629,6344 -Castanet,81061,202,7.129,0.850,0.770,621,6322 -Blaye-les-Mines,81033,3009,8.906,0.950,0.860,633,6326 -Le Garric,81101,1258,23.276,1.536,1.391,634,6326 -Sieurac,81287,271,8.834,0.946,0.857,626,6300 -Le Ségur,81280,255,18.942,1.385,1.254,622,6334 -Saint-Michel-de-Vax,81265,66,5.941,0.776,0.703,603,6334 -Parisot,81202,959,28.766,1.707,1.546,609,6300 -Lisle-sur-Tarn,81145,4634,85.792,2.948,2.669,596,6312 -Livers-Cazelles,81146,222,13.215,1.157,1.048,621,6327 -Campagnac,81056,152,7.420,0.867,0.785,605,6328 -Lasgraisses,81138,503,12.323,1.117,1.011,620,6303 -Florentin,81093,677,12.648,1.132,1.025,624,6312 -Trévien,81304,185,16.217,1.282,1.161,632,6336 -Montans,81171,1390,32.592,1.817,1.645,604,6304 -Saint-Jean-d'Alcapiès,12229,257,8.608,0.934,0.846,699,6317 -Camarès,12044,1019,42.017,2.063,1.868,689,6298 -Mounes-Prohencoux,12192,184,37.885,1.959,1.774,686,6304 -Belmont-sur-Rance,12025,990,44.222,2.117,1.917,676,6301 -Combret,12069,273,50.081,2.253,2.040,678,6307 -Montfranc,12152,125,6.224,0.794,0.719,665,6305 -La Roche-Posay,86207,1556,35.277,1.891,1.712,533,6637 -Vicq-sur-Gartempe,86288,615,33.335,1.838,1.664,537,6625 -Archigny,86009,1108,66.839,2.602,2.356,519,6621 -Angles-sur-l'Anglin,86004,366,14.631,1.218,1.103,540,6628 -Availles-en-Châtellerault,86014,1766,15.499,1.253,1.134,513,6634 -Paizay-le-Sec,86187,465,34.797,1.878,1.700,527,6615 -Sainte-Radégonde,86239,167,13.200,1.156,1.047,525,6613 -Sauzelles,36213,239,12.901,1.143,1.035,549,6619 -Vouneuil-sur-Vienne,86298,2171,36.843,1.932,1.749,508,6630 -Yzeures-sur-Creuse,37282,1401,55.533,2.372,2.148,533,6637 -Mérigny,36119,535,31.895,1.798,1.628,540,6613 -Lavoux,86124,1177,15.384,1.248,1.130,509,6612 -Naintré,86174,5889,24.857,1.587,1.437,509,6638 -Lurais,36104,248,13.655,1.176,1.065,544,6624 -Saint-Savin,86246,860,18.718,1.377,1.247,533,6609 -Sèvres-Anxaumont,86261,2140,15.682,1.261,1.142,507,6613 -Monthoiron,86164,664,16.898,1.308,1.184,521,6631 -Cenon-sur-Vienne,86046,1799,8.801,0.944,0.855,510,6630 -Beaumont Saint-Cyr,86019,3074,37.179,1.941,1.757,510,6625 -Lauthiers,86122,69,8.302,0.917,0.830,527,6616 -Pleumartin,86193,1244,24.111,1.563,1.415,531,6628 -Néons-sur-Creuse,36137,395,19.818,1.417,1.283,541,6624 -La Bussière,86040,320,32.357,1.811,1.640,530,6616 -Nalliers,86175,318,16.047,1.275,1.154,539,6617 -Bignoux,86028,1059,14.661,1.219,1.104,505,6613 -Saint-Aigny,36178,284,14.837,1.226,1.110,545,6617 -La Puye,86202,613,23.694,1.549,1.402,527,6615 -Chenevelles,86072,477,29.220,1.721,1.558,527,6627 -La Chapelle-Moulière,86058,694,17.603,1.335,1.209,515,6620 -Bellefonds,86020,253,8.593,0.933,0.845,515,6619 -Saint-Pierre-de-Maillé,86236,882,75.066,2.758,2.497,531,6628 -Tournon-Saint-Martin,36224,1172,25.872,1.619,1.466,547,6625 -Saint-Germain,86223,935,20.355,1.436,1.300,542,6613 -Liniers,86135,566,16.348,1.287,1.165,508,6617 -Ingrandes,36087,319,11.199,1.065,0.964,545,6610 -Fontgombault,36076,248,10.498,1.031,0.933,547,6623 -Nouaillé-Maupertuis,86180,2742,22.145,1.498,1.356,504,6606 -Bonnes,86031,1723,34.876,1.880,1.702,515,6619 -Vineuil,36247,1224,44.534,2.124,1.923,599,6642 -Déols,36063,7541,31.837,1.796,1.626,606,6636 -Villegongis,36242,116,18.285,1.361,1.232,590,6648 -Val-Fouzon,36229,1012,47.068,2.184,1.977,594,6682 -Baudres,36013,444,27.639,1.673,1.515,595,6664 -Niherne,36142,1591,44.570,2.125,1.924,590,6629 -La Vernelle,36233,749,17.225,1.321,1.196,594,6685 -Menetou-sur-Nahon,36115,113,6.986,0.841,0.761,596,6682 -Bouges-le-Château,36023,268,34.915,1.881,1.703,603,6661 -Gièvres,41097,2476,38.268,1.969,1.783,603,6687 -Chezelles,36050,477,17.748,1.341,1.214,589,6643 -Saint-Maur,36202,3601,88.781,2.999,2.715,600,6632 -Poulaines,36162,870,46.566,2.172,1.967,603,6674 -Chabris,36034,2741,41.293,2.045,1.852,595,6687 -Velles,36231,996,64.154,2.550,2.309,598,6618 -Malicornay,36111,190,16.587,1.296,1.173,599,6606 -Le Pêchereau,36154,1859,21.131,1.463,1.325,589,6607 -Saint-Plantaire,36207,600,34.390,1.867,1.690,597,6589 -Maillet,36110,264,25.421,1.605,1.453,599,6606 -Vigoux,36239,461,38.114,1.965,1.779,581,6608 -Prissac,36168,635,63.665,2.540,2.300,571,6598 -Sacierges-Saint-Martin,36177,315,31.657,1.791,1.622,571,6598 -Pommiers,36160,243,12.367,1.119,1.013,597,6600 -Celon,36033,412,17.259,1.322,1.197,586,6602 -Chavin,36048,272,14.005,1.191,1.078,594,6611 -Écueillé,36069,1289,35.404,1.894,1.715,571,6665 -Chazelet,36049,120,11.971,1.101,0.997,578,6603 -Gargilesse-Dampierre,36081,292,15.559,1.256,1.137,596,6599 -La Chapelle-Baloue,23050,135,8.666,0.937,0.848,589,6583 -Bazaiges,36014,210,18.705,1.377,1.247,586,6597 -Ceaulmont,36032,728,17.613,1.336,1.210,588,6608 -Chalais,36036,143,40.235,2.019,1.828,568,6609 -Le Menoux,36117,428,5.536,0.749,0.678,592,6609 -Badecon-le-Pin,36158,744,10.060,1.010,0.914,591,6602 -Lassay-sur-Croisne,41112,251,18.687,1.376,1.246,597,6695 -Nuret-le-Ferron,36144,308,49.145,2.231,2.020,575,6622 -Châteauvieux,41042,542,33.640,1.846,1.671,581,6682 -Choussy,41054,341,15.566,1.256,1.137,577,6699 -Rougeou,41195,156,7.869,0.893,0.809,591,6698 -Orbigny,37177,748,66.053,2.587,2.342,572,6681 -Mareuil-sur-Cher,41126,1131,31.887,1.797,1.627,575,6689 -Pouillé,41181,796,18.057,1.353,1.225,567,6688 -Noyers-sur-Cher,41164,2750,22.823,1.521,1.377,576,6688 -Lye,36107,755,25.254,1.600,1.449,580,6681 -Méhers,41132,350,18.412,1.366,1.237,581,6695 -Ruffec,36176,592,43.178,2.092,1.894,564,6611 -Montrichard Val de Cher,41151,3816,19.162,1.393,1.261,561,6698 -Saint-Romain-sur-Cher,41229,1489,31.418,1.784,1.615,576,6688 -Seigy,41239,1083,8.116,0.907,0.821,574,6683 -Saint-Aignan,41198,2854,18.462,1.368,1.239,578,6686 -Saint-Julien-de-Chédon,41217,756,9.894,1.001,0.906,566,6690 -Loches,37132,6283,27.333,1.664,1.507,543,6667 -Châtillon-sur-Cher,41043,1731,29.797,1.738,1.574,584,6686 -Angé,41002,913,17.368,1.327,1.201,567,6695 -Saintes-Maries-de-la-Mer,13096,2504,370.931,6.131,5.551,814,6262 -Monthou-sur-Cher,41146,970,20.252,1.432,1.297,569,6694 -Meusnes,41139,1094,13.501,1.170,1.059,588,6685 -Bélâbre,36016,974,40.675,2.030,1.838,558,6602 -Couffy,41063,505,14.975,1.232,1.115,583,6686 -Chémery,41049,984,35.693,1.902,1.722,589,6695 -Thésée,41258,1143,17.619,1.336,1.210,575,6689 -Genillé,37111,1526,63.499,2.536,2.296,554,6682 -Le Liège,37127,361,11.184,1.065,0.964,554,6682 -Châtillon-sur-Indre,36045,2672,45.324,2.143,1.940,556,6654 -Liglet,86132,316,53.362,2.325,2.105,548,6605 -Bridoré,37039,527,14.853,1.227,1.111,556,6660 -Ferrière-sur-Beaulieu,37108,737,19.623,1.410,1.277,556,6672 -Paulnay,36153,328,40.124,2.016,1.825,558,6647 -Obterre,36145,196,28.487,1.699,1.538,550,6644 -Saint-Flovier,37218,572,29.538,1.730,1.566,553,6654 -Douadic,36066,445,44.326,2.119,1.919,556,6621 -Lureuil,36105,265,22.191,1.499,1.357,548,6631 -Murs,36136,128,23.068,1.529,1.384,560,6644 -Martizay,36113,962,40.065,2.015,1.824,548,6632 -Saint-Hilaire-sur-Benaize,36197,307,33.232,1.835,1.661,548,6606 -Saint-Hippolyte,37221,641,32.923,1.826,1.653,557,6660 -Pouligny-Saint-Pierre,36165,1086,47.408,2.192,1.985,552,6627 -Mauvières,36114,317,24.332,1.570,1.422,557,6612 -Saint-Jean-Saint-Germain,37222,761,21.492,1.476,1.336,553,6669 -Rosnay,36173,513,67.153,2.608,2.361,561,6631 -Saint-Quentin-sur-Indrois,37234,512,27.287,1.663,1.506,549,6678 -Saint-Michel-en-Brenne,36204,324,54.917,2.359,2.136,565,6630 -Le Blanc,36018,6521,57.473,2.413,2.185,557,6613 -Beaulieu-lès-Loches,37020,1782,3.925,0.631,0.571,551,6671 -Céré-la-Ronde,37046,451,49.611,2.242,2.030,561,6687 -Verneuil-sur-Indre,37269,486,40.652,2.030,1.838,554,6659 -Sennevières,37246,210,23.432,1.541,1.395,553,6671 -Azay-le-Ferron,36010,861,60.987,2.486,2.251,549,6640 -Cléré-du-Bois,36054,252,36.173,1.914,1.733,551,6651 -Nieuil-l'Espoir,86178,2642,21.135,1.463,1.325,502,6601 -Pouillé,86198,647,14.054,1.193,1.080,516,6606 -Mignaloux-Beauvoir,86157,4356,21.614,1.480,1.340,498,6610 -Fleix,86098,136,9.234,0.967,0.876,529,6608 -Valdivienne,86233,2748,61.495,2.496,2.260,513,6601 -Chauvigny,86070,7053,96.064,3.120,2.825,522,6616 -Béthines,86025,474,37.579,1.951,1.766,548,6606 -Concremiers,36058,650,28.110,1.688,1.528,545,6610 -Tercé,86268,1116,23.900,1.556,1.409,512,6607 -Leignes-sur-Fontaine,86126,634,32.543,1.816,1.644,533,6603 -Jouhet,86117,524,25.575,1.610,1.458,541,6599 -Fleuré,86099,1059,16.928,1.310,1.186,508,6603 -Savigny-Lévescault,86256,1159,22.089,1.496,1.355,509,6605 -Saint-Genou,36194,982,24.457,1.574,1.425,577,6644 -Vendœuvres,36232,1072,98.985,3.167,2.867,568,6630 -Clion,36055,1043,33.669,1.847,1.672,565,6647 -Villedieu-sur-Indre,36241,2721,58.506,2.435,2.205,584,6636 -Saulnay,36212,158,22.505,1.510,1.367,566,6646 -Gehée,36082,258,22.773,1.519,1.375,586,6657 -Chasseneuil,36042,695,29.926,1.741,1.576,588,6617 -Préaux,36166,161,32.954,1.827,1.654,571,6656 -Sougé,36218,143,13.135,1.154,1.045,587,6651 -Vicq-sur-Nahon,36237,735,49.219,2.233,2.022,585,6670 -Le Pont-Chrétien-Chabenet,36161,922,9.068,0.959,0.868,582,6615 -Pellevoisin,36155,767,26.053,1.625,1.471,582,6653 -La Chapelle-Orthemale,36040,115,16.902,1.309,1.185,582,6641 -Migné,36124,274,66.604,2.598,2.352,567,6622 -Saint-Marcel,36200,1585,17.866,1.345,1.218,588,6611 -Nouans-les-Fontaines,37173,759,63.397,2.534,2.294,576,6672 -Luant,36101,1487,31.382,1.783,1.614,592,6622 -Abilly,37001,1151,30.622,1.761,1.594,525,6648 -Veuil,36235,375,18.854,1.382,1.251,591,6671 -Mézières-en-Brenne,36123,1021,67.269,2.611,2.364,569,6640 -Méobecq,36118,367,37.921,1.960,1.775,581,6625 -Heugnes,36086,397,42.736,2.081,1.884,581,6659 -Thenay,36220,887,34.500,1.870,1.693,584,6614 -Argenton-sur-Creuse,36006,4940,29.371,1.725,1.562,583,6613 -Luçay-le-Mâle,36103,1375,67.948,2.624,2.376,575,6669 -Loché-sur-Indrois,37133,534,74.841,2.754,2.494,563,6661 -Jeu-Maloches,36090,132,12.903,1.143,1.035,579,6663 -Frédille,36080,71,6.412,0.806,0.730,585,6659 -Ciron,36053,566,60.731,2.481,2.246,564,6611 -Saint-Lactencin,36198,432,32.670,1.819,1.647,590,6648 -Oulches,36148,408,43.724,2.105,1.906,574,6608 -Palluau-sur-Indre,36149,780,41.516,2.051,1.857,575,6650 -Villiers,36246,182,24.944,1.590,1.440,562,6648 -Fontguenand,36077,234,18.293,1.361,1.232,589,6681 -Crouzilles,37093,540,14.541,1.214,1.099,509,6675 -Valençay,36228,2391,41.793,2.058,1.863,594,6676 -Arpheuilles,36008,224,22.401,1.507,1.364,570,6644 -Neuillay-les-Bois,36139,664,47.881,2.203,1.995,585,6625 -Saint-Médard,36203,46,12.629,1.131,1.024,567,6659 -Saint-Gervais-les-Trois-Clochers,86224,1314,39.491,2.000,1.811,507,6646 -Le Tranger,36225,169,22.337,1.504,1.362,566,6657 -La Pérouille,36157,460,21.938,1.491,1.350,587,6628 -Villeloin-Coulangé,37277,615,35.044,1.884,1.706,569,6675 -Beaumont-Village,37023,270,19.315,1.399,1.267,563,6674 -Saint-Gaultier,36192,1827,9.369,0.974,0.882,582,6618 -Avon-les-Roches,37012,548,33.272,1.836,1.662,511,6681 -Argy,36007,607,39.235,1.994,1.805,582,6653 -Chitray,36051,180,20.052,1.425,1.290,572,6617 -Buzançais,36031,4481,58.617,2.437,2.206,576,6640 -Selles-sur-Nahon,36216,72,6.857,0.834,0.755,581,6658 -Le Louroux,37136,525,28.895,1.711,1.549,536,6677 -Sainte-Gemme,36193,265,34.439,1.868,1.691,572,6638 -Villedômain,37275,116,16.648,1.299,1.176,570,6664 -Villegouin,36243,339,24.399,1.572,1.423,571,6656 -Descartes,37115,3570,38.199,1.967,1.781,525,6654 -Rivarennes,36172,570,37.707,1.955,1.770,575,6610 -Langé,36092,293,20.621,1.445,1.308,590,6665 -Panzoult,37178,573,34.879,1.880,1.702,503,6681 -La Tour-Saint-Gelin,37260,527,13.485,1.169,1.058,500,6666 -Ingrandes,86111,1756,35.132,1.887,1.709,514,6647 -Bossée,37029,331,19.068,1.390,1.259,526,6672 -Crissay-sur-Manse,37090,94,7.542,0.874,0.791,511,6675 -Saché,37205,1380,28.016,1.685,1.526,513,6689 -Saint-Épain,37216,1557,63.340,2.533,2.293,519,6679 -Cormery,37083,1777,6.049,0.783,0.709,538,6687 -Chezelles,37071,135,15.354,1.247,1.129,508,6666 -Monts,37159,7774,27.830,1.679,1.520,521,6686 -Paulmy,37181,232,26.624,1.642,1.487,536,6652 -Jaulnay,37121,261,14.837,1.226,1.110,506,6652 -Collonges-la-Rouge,19057,488,14.114,1.196,1.083,595,6442 -Cussay,37094,574,26.131,1.627,1.473,532,6658 -Le Heaulme,95303,209,1.967,0.446,0.404,627,6896 -Dolus-le-Sec,37097,669,27.546,1.671,1.513,541,6672 -Armancourt,80027,31,2.132,0.465,0.421,679,6952 -Mairé,86143,161,20.537,1.443,1.307,528,6644 -Bossay-sur-Claise,37028,763,65.546,2.577,2.333,541,6637 -Nouâtre,37174,829,9.687,0.991,0.897,517,6659 -Braslou,37034,308,15.937,1.271,1.151,500,6659 -Sossais,86265,442,11.991,1.102,0.998,499,6647 -Oyré,86186,982,33.272,1.836,1.662,518,6639 -Buxeuil,86042,953,12.029,1.104,1.000,520,6657 -Châtellerault,86066,32057,52.043,2.296,2.079,518,6639 -Leigné-sur-Usseau,86127,489,11.230,1.067,0.966,510,6650 -Verneuil-le-Château,37268,127,8.396,0.922,0.835,505,6663 -Preuilly-sur-Claise,37189,1003,12.209,1.112,1.007,544,6644 -La Guerche,37114,183,5.390,0.739,0.669,525,6648 -Sainte-Maure-de-Touraine,37226,4285,40.734,2.032,1.840,517,6667 -Ports,37187,355,11.085,1.060,0.960,515,6659 -Germaine,2343,80,4.570,0.680,0.616,710,6968 -Brizay,37040,289,14.405,1.208,1.094,504,6672 -Senillé-Saint-Sauveur,86245,1859,50.965,2.272,2.057,523,6640 -Luzé,37140,256,20.355,1.436,1.300,505,6661 -Bournan,37032,273,14.774,1.223,1.107,529,6663 -Boussay,37033,234,28.067,1.686,1.527,542,6645 -Les Ormes,86183,1643,23.939,1.557,1.410,518,6654 -Scorbé-Clairvaux,86258,2261,22.766,1.519,1.375,501,6635 -Mouzay,37162,477,23.622,1.547,1.401,540,6672 -Gourchelles,60280,127,2.221,0.474,0.429,611,6960 -Rilly-sur-Vienne,37199,490,13.181,1.156,1.047,508,6665 -Coussay-les-Bois,86086,997,43.645,2.103,1.904,523,6635 -Maillé,37142,579,15.611,1.258,1.139,518,6667 -Marigny-Marmande,37148,588,30.802,1.767,1.600,511,6656 -Varennes,37265,246,11.081,1.060,0.960,544,6669 -Thilouze,37257,1689,33.991,1.856,1.680,515,6679 -Trogues,37262,317,9.458,0.979,0.886,510,6671 -Thuré,86272,2881,44.042,2.112,1.912,502,6645 -Neuilly-le-Brignon,37168,306,21.975,1.492,1.351,532,6652 -Le Petit-Pressigny,37184,333,32.621,1.818,1.646,537,6648 -Villeperdue,37278,1012,12.040,1.104,1.000,523,6678 -Marcé-sur-Esves,37145,244,10.979,1.055,0.955,524,6661 -Theneuil,37256,297,9.955,1.004,0.909,503,6668 -Dangé-Saint-Romain,86092,3007,34.892,1.880,1.702,514,6654 -Noyant-de-Touraine,37176,1218,13.909,1.187,1.075,514,6671 -Saint-Rémy-sur-Creuse,86241,394,13.048,1.150,1.041,525,6654 -Lamothe-Capdeville,82090,1076,11.973,1.101,0.997,568,6332 -Leugny,86130,419,15.739,1.263,1.144,525,6650 -Chaumussay,37064,226,19.020,1.388,1.257,536,6641 -Chanceaux-près-Loches,37053,134,14.670,1.219,1.104,543,6671 -Escazeaux,82053,291,16.213,1.282,1.161,539,6308 -Antogny-le-Tillac,37005,513,17.320,1.325,1.200,516,6657 -La Celle-Guenand,37044,375,37.165,1.941,1.757,544,6651 -Ferrière-Larçon,37107,250,21.089,1.462,1.324,536,6660 -Cheillé,37067,1804,47.007,2.182,1.976,503,6681 -Vou,37280,202,22.151,1.498,1.356,537,6665 -Sorigny,37250,2577,43.455,2.098,1.900,522,6685 -La Celle-Saint-Avant,37045,1072,17.862,1.345,1.218,519,6658 -Reignac-sur-Indre,37192,1211,22.129,1.497,1.355,546,6682 -Pouzay,37188,865,14.092,1.195,1.082,517,6668 -Betz-le-Château,37026,573,46.860,2.179,1.973,542,6661 -Charnizay,37061,502,53.335,2.325,2.105,543,6645 -Chambourg-sur-Indre,37049,1325,28.477,1.699,1.538,547,6680 -Lésigny,86129,543,13.151,1.154,1.045,533,6637 -Siradan,65427,285,2.781,0.531,0.481,505,6212 -Vellèches,86280,365,19.602,1.409,1.276,509,6654 -Sainte-Marie,65391,68,0.253,0.160,0.145,507,6211 -Esves-le-Moutier,37103,149,10.625,1.038,0.940,538,6660 -Saint-Branchs,37211,2601,51.968,2.295,2.078,532,6680 -Pussigny,37190,169,8.568,0.932,0.844,515,6659 -Vaux-sur-Vienne,86279,554,6.917,0.837,0.758,516,6649 -Louans,37134,634,18.158,1.356,1.228,525,6677 -Draché,37098,745,18.572,1.372,1.242,519,6663 -Sainte-Catherine-de-Fierbois,37212,754,15.657,1.260,1.141,526,6676 -Saint-Denis-du-Payré,85207,384,16.293,1.285,1.163,369,6600 -Azay-sur-Indre,37016,381,13.695,1.178,1.067,542,6679 -Port-de-Piles,86195,563,5.773,0.765,0.693,515,6659 -Saint-Senoch,37238,559,24.138,1.564,1.416,546,6661 -Ligueil,37130,2200,29.823,1.738,1.574,538,6661 -Tavant,37255,265,5.217,0.727,0.658,504,6672 -Plaisians,26239,197,30.355,1.754,1.588,891,6352 -Chédigny,37066,563,23.179,1.532,1.387,550,6685 -Courcoué,37087,262,15.638,1.259,1.140,505,6664 -Marcilly-sur-Vienne,37147,549,11.079,1.059,0.959,512,6666 -Usseau,86275,619,19.006,1.388,1.257,511,6649 -Sepmes,37247,635,28.805,1.708,1.546,522,6669 -Villaines-les-Rochers,37271,1060,12.669,1.133,1.026,509,6684 -Razines,37191,238,14.727,1.222,1.106,505,6657 -Neuil,37165,438,18.937,1.385,1.254,510,6680 -Ciran,37078,417,14.067,1.194,1.081,540,6666 -Chouday,36052,151,30.310,1.752,1.586,632,6646 -Civray-sur-Esves,37080,203,13.308,1.161,1.051,525,6664 -Perrusson,37183,1504,29.228,1.721,1.558,549,6664 -Chambon,37048,321,18.429,1.366,1.237,536,6638 -Joué-lès-Tours,37122,37505,32.506,1.815,1.643,520,6692 -Antran,86007,1207,23.699,1.550,1.403,507,6643 -L'ÃŽle-Bouchard,37119,1581,3.593,0.603,0.546,504,6671 -Cours,47073,202,11.425,1.076,0.974,510,6360 -Mondion,86162,104,8.997,0.955,0.865,505,6651 -Veigné,37266,6159,27.017,1.655,1.498,527,6688 -La Chapelle-Blanche-Saint-Martin,37057,687,28.587,1.702,1.541,531,6671 -Saint-Christophe,86217,309,15.210,1.241,1.124,498,6652 -Lacour,82084,173,14.439,1.210,1.096,534,6357 -Barrou,37019,478,31.042,1.773,1.605,530,6642 -Courçay,37085,813,25.071,1.594,1.443,540,6690 -Chissay-en-Touraine,41051,1167,18.319,1.362,1.233,561,6694 -Chenonceaux,37070,347,4.288,0.659,0.597,555,6698 -Cinq-Mars-la-Pile,37077,3510,20.472,1.440,1.304,507,6695 -Saint-Martin-le-Beau,37225,3148,19.143,1.393,1.261,545,6700 -Montjoi,82130,164,14.779,1.224,1.108,532,6346 -Savonnières,37243,3151,17.073,1.315,1.191,515,6694 -Berthenay,37025,716,7.367,0.864,0.782,511,6698 -Montbazon,37154,4202,6.525,0.813,0.736,525,6690 -Esvres,37104,5849,35.828,1.905,1.725,533,6694 -Azay-sur-Cher,37015,3073,23.079,1.529,1.384,534,6694 -Vallères,37264,1233,14.771,1.223,1.107,506,6693 -Larçay,37124,2437,11.364,1.073,0.972,531,6699 -Langeais,37123,4612,64.721,2.561,2.319,505,6700 -Faverolles-sur-Cher,41080,1372,15.522,1.254,1.135,565,6690 -Civray-de-Touraine,37079,1842,23.164,1.532,1.387,554,6699 -Véretz,37267,4441,13.331,1.162,1.052,537,6698 -Firbeix,24180,306,23.162,1.532,1.387,536,6502 -Luzillé,37141,983,41.147,2.042,1.849,557,6685 -Raray,60525,152,6.764,0.828,0.750,681,6909 -Chisseaux,37073,611,11.744,1.091,0.988,557,6694 -Sublaines,37253,196,14.491,1.212,1.097,550,6685 -Bléré,37027,5308,31.136,1.776,1.608,545,6695 -Bréhémont,37038,773,12.936,1.145,1.037,503,6689 -Druye,37099,961,22.970,1.526,1.382,514,6689 -Santeuil,28366,320,9.296,0.971,0.879,609,6810 -Saint-Avertin,37208,14988,13.220,1.157,1.048,531,6696 -Artannes-sur-Indre,37006,2621,21.183,1.465,1.326,520,6692 -Épeigné-les-Bois,37100,436,14.661,1.219,1.104,557,6690 -Augignac,24016,814,23.348,1.538,1.393,523,6503 -La Croix-en-Touraine,37091,2241,15.250,1.243,1.125,548,6698 -Saint-Genouph,37219,1058,4.784,0.696,0.630,516,6700 -Cigogné,37075,434,21.934,1.491,1.350,543,6689 -Saint-Estèphe,24398,612,22.164,1.499,1.357,520,6504 -Ballan-Miré,37018,7943,26.352,1.634,1.479,522,6700 -Pont-de-Ruan,37186,1157,5.733,0.762,0.690,514,6689 -Castéra-Bouzet,82034,111,17.964,1.349,1.221,533,6328 -Saint-Georges-sur-Cher,41211,2667,23.762,1.552,1.405,557,6694 -Lagraulet-Saint-Nicolas,31265,247,16.131,1.278,1.157,546,6304 -Francueil,37110,1372,13.055,1.150,1.041,556,6694 -Villefollet,79348,212,12.911,1.144,1.036,450,6561 -Lignières-de-Touraine,37128,1299,10.043,1.009,0.914,502,6690 -Vitrac-Saint-Vincent,16416,517,22.296,1.503,1.361,502,6525 -Truyes,37263,2423,16.541,1.295,1.173,536,6692 -Villandry,37272,1105,17.763,1.342,1.215,507,6695 -Pensol,87115,185,14.945,1.231,1.115,529,6500 -Saint-Pierre-de-Frugie,24486,391,22.282,1.503,1.361,544,6498 -Abjat-sur-Bandiat,24001,617,28.781,1.708,1.546,522,6498 -Bussière-Galant,87027,1335,53.932,2.338,2.117,551,6508 -Rouzède,16290,238,14.415,1.209,1.095,513,6515 -Gizay,86105,389,20.726,1.449,1.312,501,6593 -Château-Garnier,86064,616,36.356,1.919,1.737,502,6572 -La Ferrière-Airoux,86097,324,27.165,1.659,1.502,497,6582 -Yvrac-et-Malleyrand,16425,539,18.944,1.385,1.254,501,6516 -Gençay,86103,1735,4.804,0.698,0.632,499,6589 -Saint-Adjutory,16293,475,14.225,1.201,1.087,506,6519 -Feuillade,16137,306,22.007,1.493,1.352,505,6505 -Teyjat,24548,275,17.422,1.329,1.203,509,6501 -Marillac-le-Franc,16209,819,14.435,1.209,1.095,500,6520 -Montbron,16223,2043,43.165,2.091,1.893,506,6516 -Écuras,16124,589,24.293,1.569,1.421,513,6515 -Étouars,24163,154,8.119,0.907,0.821,516,6503 -Colondannes,23065,267,10.776,1.045,0.946,592,6576 -Vouthon,16421,427,10.449,1.029,0.932,502,6508 -Le Lindois,16188,343,18.032,1.352,1.224,516,6521 -Mazerolles,16213,315,17.459,1.330,1.204,509,6517 -Marthon,16211,558,12.850,1.141,1.033,501,6508 -Bussière-Badil,24071,400,20.594,1.445,1.308,510,6507 -Orgedeuil,16250,228,10.419,1.027,0.930,505,6516 -Roussines,16289,275,16.036,1.275,1.154,514,6513 -Eymouthiers,16135,296,8.731,0.941,0.852,510,6507 -Montembœuf,16225,650,16.050,1.275,1.154,510,6520 -Varaignes,24565,418,17.277,1.323,1.198,508,6508 -Soudat,24541,93,9.025,0.956,0.866,508,6506 -Sagnat,23166,195,11.899,1.098,0.994,591,6579 -Lafat,23103,361,21.199,1.466,1.327,589,6583 -Laviéville,80468,172,2.165,0.468,0.424,669,6988 -Villard,23263,368,16.391,1.289,1.167,602,6583 -Dun-le-Palestel,23075,1127,9.784,0.996,0.902,598,6576 -Châteauneuf-la-Forêt,87040,1563,29.412,1.726,1.563,595,6513 -Pierre-Buffière,87119,1158,5.817,0.768,0.695,571,6513 -Saint-Martin-Terressus,87167,562,23.278,1.536,1.391,580,6537 -Saint-Julien-le-Petit,87153,286,29.246,1.721,1.558,603,6529 -Le Châtenet-en-Dognon,87042,398,20.266,1.433,1.297,584,6539 -La Geneytouse,87070,942,19.391,1.402,1.269,578,6525 -Champnétery,87035,553,30.385,1.755,1.589,593,6526 -Saint-Hilaire-Bonneval,87148,978,28.930,1.712,1.550,577,6515 -Saint-Denis-des-Murs,87142,521,23.804,1.553,1.406,589,6522 -Saint-Vitte-sur-Briance,87186,332,20.967,1.458,1.320,587,6506 -Domps,87058,122,13.696,1.178,1.067,603,6507 -Sauviat-sur-Vige,87190,910,31.129,1.776,1.608,587,6536 -Massignac,16212,392,24.020,1.560,1.412,521,6526 -Saint-Méard,87170,359,24.573,1.578,1.429,587,6506 -Cheissoux,87043,179,10.362,1.025,0.928,595,6528 -Laugnac,47140,652,17.305,1.324,1.199,506,6360 -Vicq-sur-Breuilh,87203,1320,51.408,2.282,2.066,576,6502 -Bujaleuf,87024,840,41.791,2.058,1.863,589,6522 -Moissannes,87099,381,24.421,1.573,1.424,591,6532 -Saint-Bonnet-Briance,87138,570,30.320,1.753,1.587,582,6509 -Masléon,87093,285,8.783,0.943,0.854,588,6519 -Saint-Léonard-de-Noblat,87161,4627,55.586,2.373,2.149,580,6525 -Ceyroux,23042,128,12.307,1.117,1.011,594,6550 -Neuvic-Entier,87105,935,39.873,2.010,1.820,595,6513 -La Croisille-sur-Briance,87051,665,44.133,2.115,1.915,589,6501 -Chaptelat,87038,2105,18.328,1.363,1.234,566,6534 -Saint-Priest-Ligoure,87176,672,41.767,2.057,1.862,570,6507 -Mauprévoir,86152,615,48.787,2.223,2.013,504,6567 -Sussac,87194,350,25.503,1.607,1.455,598,6506 -Saint-Germain-les-Belles,87146,1181,37.663,1.953,1.768,582,6497 -Royères,87129,889,17.307,1.324,1.199,579,6525 -Glanges,87072,515,22.775,1.519,1.375,580,6512 -Saint-Moreil,23223,221,24.256,1.568,1.420,596,6527 -Roziers-Saint-Georges,87130,181,11.851,1.096,0.992,585,6516 -Linards,87086,1061,36.505,1.923,1.741,591,6515 -Saulgond,16363,515,27.400,1.666,1.508,532,6544 -La Roche-l'Abeille,87127,619,36.725,1.929,1.747,565,6497 -Saint-Priest-Palus,23237,55,10.643,1.038,0.940,595,6534 -Rilhac-Rancon,87125,4542,17.534,1.333,1.207,572,6534 -Saint-Gilles-les-Forêts,87147,41,8.449,0.925,0.838,598,6505 -Eybouleuf,87062,426,10.849,1.048,0.949,583,6522 -Condat-sur-Vienne,87048,5122,15.304,1.245,1.127,562,6520 -Saint-Priest-Taurion,87178,2875,27.016,1.654,1.498,580,6534 -Cromac,87053,250,24.286,1.569,1.421,568,6587 -Éguzon-Chantôme,36070,1383,36.388,1.920,1.738,593,6592 -Saint-Amand-Jartoudeix,23181,171,18.673,1.375,1.245,600,6534 -Augne,87004,108,17.844,1.345,1.218,596,6519 -Saint-Jean-Ligoure,87151,528,30.589,1.760,1.594,570,6509 -Auriat,23012,110,21.728,1.484,1.344,594,6528 -Orsennes,36146,765,49.493,2.239,2.027,598,6605 -Bazelat,23018,265,13.453,1.168,1.058,589,6583 -Parnac,36150,503,47.531,2.195,1.987,587,6593 -Tilly,36223,136,14.843,1.226,1.110,563,6595 -Saint-Benoît-du-Sault,36182,607,1.772,0.424,0.384,577,6595 -La Châtre-Langlin,36047,535,27.704,1.675,1.517,577,6587 -Saint-Gilles,36196,109,7.741,0.886,0.802,579,6598 -Dunet,36067,102,9.420,0.977,0.885,567,6600 -Azerables,23015,816,39.356,1.997,1.808,578,6584 -Roussines,36174,360,23.297,1.536,1.391,574,6594 -Bonneuil,36020,81,11.667,1.087,0.984,568,6588 -Saint-Georges-les-Landes,87145,240,16.511,1.293,1.171,573,6582 -Étagnac,16132,976,29.459,1.728,1.565,532,6534 -Saint-Civran,36187,144,11.699,1.089,0.986,580,6600 -Beaulieu,36015,56,7.582,0.876,0.793,570,6590 -Rozier-en-Donzy,42193,1452,9.605,0.987,0.894,800,6527 -Les Grands-Chézeaux,87074,246,13.741,1.180,1.068,575,6588 -Crozant,23070,453,31.887,1.797,1.627,597,6589 -Mouhet,36134,447,32.601,1.817,1.645,585,6589 -Baraize,36012,345,16.463,1.292,1.170,591,6602 -Jouac,87080,186,20.318,1.435,1.299,568,6588 -Maison-Feyne,23117,304,13.268,1.159,1.049,596,6584 -Fresselines,23087,515,30.812,1.767,1.600,605,6586 -Chaillac,36035,1063,61.108,2.488,2.253,565,6590 -Saint-Sébastien,23239,655,25.354,1.603,1.451,585,6591 -Mailly,71271,155,5.501,0.747,0.676,786,6569 -Marcigny,71275,1807,8.158,0.909,0.823,779,6575 -Cuinzier,42079,737,5.626,0.755,0.684,799,6558 -La Chapelle-sous-Dun,71095,441,8.479,0.927,0.839,798,6574 -Céron,71071,265,23.561,1.545,1.399,769,6576 -Saint-Rirand,42281,142,16.557,1.295,1.173,763,6555 -Noailly,42157,805,31.985,1.800,1.630,777,6557 -Mars,42141,558,12.167,1.110,1.005,799,6563 -Cuzion,36062,443,18.842,1.382,1.251,591,6600 -Souffrignac,16372,134,9.472,0.980,0.887,505,6499 -La Sauvetat-sur-Lède,47291,649,14.087,1.195,1.082,521,6377 -Jabreilles-les-Bordes,87076,243,19.076,1.390,1.259,587,6551 -Saint-Priest-la-Plaine,23236,261,21.883,1.489,1.348,591,6570 -Saint-Amand-Magnazeix,87133,529,29.566,1.731,1.567,577,6566 -Compreignac,87047,1830,49.058,2.229,2.018,564,6542 -Saint-Coutant,16310,222,19.544,1.407,1.274,507,6546 -Naillat,23141,653,36.666,1.927,1.745,600,6573 -Ambazac,87002,5653,58.743,2.440,2.209,577,6537 -Folles,87067,498,31.580,1.789,1.620,584,6556 -Bénévent-l'Abbaye,23021,797,11.771,1.092,0.989,592,6558 -La Souterraine,23176,5296,36.915,1.934,1.751,580,6576 -Mourioux-Vieilleville,23137,513,25.102,1.595,1.444,597,6554 -Laurière,87083,571,20.821,1.452,1.315,587,6551 -Aulon,23011,156,10.763,1.044,0.945,600,6558 -Saint-Sulpice-les-Feuilles,87182,1257,35.732,1.903,1.723,578,6584 -Mailhac-sur-Benaize,87090,280,21.208,1.466,1.327,571,6584 -Saint-Maurice-la-Souterraine,23219,1227,39.719,2.006,1.816,575,6570 -Chamborand,23047,245,11.414,1.075,0.973,588,6564 -Saint-Agnant-de-Versillat,23177,1099,50.737,2.267,2.053,587,6573 -Magnac-Bourg,87088,1094,15.228,1.242,1.125,580,6499 -Lizières,23111,270,14.592,1.216,1.101,590,6566 -Saint-Martin-Sainte-Catherine,23217,341,27.157,1.659,1.502,587,6536 -Saint-Sylvestre,87183,927,31.311,1.781,1.613,571,6547 -Cussac,87054,1246,31.477,1.786,1.617,529,6511 -Bessines-sur-Gartempe,87014,2833,55.590,2.373,2.149,578,6558 -Saint-Laurent-les-Églises,87157,873,27.646,1.674,1.516,585,6540 -Saint-Sornin-la-Marche,87179,257,24.187,1.565,1.417,548,6566 -Châteauponsac,87041,2032,69.281,2.649,2.398,569,6556 -Saint-Léger-Magnazeix,87160,487,56.330,2.389,2.163,559,6579 -Saint-Germain-Beaupré,23199,440,17.219,1.321,1.196,592,6581 -Arrènes,23006,221,22.504,1.510,1.367,588,6557 -Castelnau-Durban,9082,447,13.166,1.155,1.046,563,6213 -Saint-Gervais-sous-Meymont,63355,239,10.516,1.032,0.934,746,6510 -Bonnac-la-Côe,87020,1726,25.914,1.620,1.467,570,6542 -Montboucher,23133,351,27.915,1.682,1.523,596,6538 -Saint-Priest-la-Feuille,23235,770,27.724,1.676,1.517,588,6571 -Les Billanges,87016,291,23.110,1.530,1.385,590,6543 -Saint-Goussaud,23200,162,24.462,1.574,1.425,587,6551 -Saint-Léger-Bridereix,23207,200,8.576,0.932,0.844,591,6579 -Saint-Cyr,87141,700,21.303,1.469,1.330,543,6527 -Vareilles,23258,311,17.755,1.341,1.214,580,6576 -Noth,23143,507,23.169,1.532,1.387,591,6575 -Razès,87122,1184,25.259,1.600,1.449,575,6549 -Marsac,23124,675,19.448,1.404,1.271,592,6554 -Saint-Pierre-Chérignat,23230,170,23.591,1.546,1.400,590,6544 -La Jonchère-Saint-Maurice,87079,815,15.535,1.255,1.136,583,6543 -Bersac-sur-Rivalier,87013,619,32.930,1.827,1.654,574,6553 -Saint-Bazile,87137,114,8.566,0.932,0.844,528,6518 -Fursac,23192,1524,59.117,2.447,2.216,587,6564 -Le Grand-Bourg,23095,1222,78.809,2.826,2.559,597,6570 -Saint-Sornin-Leulac,87180,665,32.558,1.816,1.644,567,6568 -Fromental,87068,551,22.847,1.521,1.377,575,6564 -Surdoux,87193,43,3.902,0.629,0.570,596,6502 -Château-Chervix,87039,799,51.470,2.284,2.068,570,6507 -Les Ageux,60006,1182,5.140,0.722,0.654,669,6913 -Luchapt,86138,256,26.399,1.635,1.480,530,6569 -Asnières-sur-Blour,86011,180,32.717,1.821,1.649,533,6562 -Adriers,86001,723,68.111,2.627,2.379,533,6579 -Lhommaizé,86131,849,30.732,1.765,1.598,511,6599 -Abzac,16001,474,33.502,1.842,1.668,521,6558 -Peyrat-de-Bellac,87116,1072,31.426,1.784,1.615,549,6564 -Millac,86159,554,40.744,2.032,1.840,520,6566 -Pindray,86191,258,26.941,1.652,1.496,533,6596 -Saint-Secondin,86248,552,38.074,1.964,1.778,512,6584 -Verrières,86285,1007,19.605,1.409,1.276,518,6594 -Plaisance,86192,161,13.053,1.150,1.041,533,6579 -Dienné,86094,554,17.411,1.328,1.202,512,6594 -Lessac,16181,546,34.392,1.867,1.690,522,6554 -Moussac,86171,442,24.933,1.589,1.439,524,6580 -Montmorillon,86165,5998,57.073,2.405,2.178,542,6589 -Bouresse,86034,575,37.352,1.945,1.761,518,6589 -Mouterre-sur-Blourde,86172,167,20.412,1.438,1.302,527,6571 -Saint-Laurent-de-Jourdes,86228,204,18.081,1.354,1.226,510,6594 -Gouex,86107,505,18.300,1.362,1.233,517,6587 -La Chapelle-Montbrandeix,87037,252,20.016,1.424,1.289,534,6505 -Chapelle-Viviers,86059,551,14.730,1.222,1.106,525,6596 -Availles-Limouzine,86015,1281,58.172,2.428,2.198,514,6567 -Bourg-Archambault,86035,190,24.412,1.573,1.424,548,6584 -Lussac-les-Châteaux,86140,2322,28.117,1.688,1.528,525,6596 -Moulismes,86170,377,29.168,1.719,1.556,534,6584 -Saulgé,86254,1016,62.621,2.519,2.281,530,6587 -Le Vigeant,86289,716,65.173,2.570,2.327,521,6572 -Saint-Léomer,86230,183,29.112,1.717,1.555,549,6592 -Saint-Pierre-la-Bourlhonne,63384,128,11.734,1.090,0.987,762,6509 -Usson-du-Poitou,86276,1271,72.849,2.717,2.460,513,6573 -Oradour-Fanais,16249,397,26.426,1.636,1.481,525,6562 -Oradour-Saint-Genest,87109,342,38.056,1.964,1.778,546,6578 -Journet,86118,371,59.255,2.450,2.218,540,6598 -Saint-Maurice-la-Clouère,86235,1318,40.226,2.019,1.828,499,6589 -Saint-Martial-sur-Isop,87163,135,23.826,1.554,1.407,533,6565 -Civaux,86077,1203,26.403,1.636,1.481,523,6598 -Saint-Bonnet-de-Bellac,87139,496,34.640,1.873,1.696,542,6569 -Vernon,86284,696,39.367,1.997,1.808,508,6600 -Nérignac,86176,124,4.507,0.676,0.612,524,6579 -Mazerolles,86153,845,21.474,1.475,1.335,518,6589 -Gajoubert,87069,148,14.212,1.200,1.086,532,6561 -L'Isle-Jourdain,86112,1160,5.915,0.774,0.701,525,6574 -Brion,86038,233,16.198,1.281,1.160,503,6589 -Lathus-Saint-Rémy,86120,1214,98.660,3.162,2.863,542,6589 -Puy-Saint-Eusèbe,5108,136,11.287,1.069,0.968,972,6394 -Vaulry,87198,408,15.606,1.257,1.138,552,6551 -Verneuil-sur-Vienne,87201,4899,34.255,1.863,1.687,556,6533 -Javerdat,87078,729,25.572,1.610,1.458,539,6541 -Chaillac-sur-Vienne,87030,1235,15.288,1.245,1.127,538,6530 -Peyrilhac,87118,1263,38.540,1.976,1.789,556,6539 -Castet-Arrouy,32085,184,8.025,0.902,0.817,517,6321 -Saint-Maurice-les-Brousses,87169,1045,10.962,1.054,0.954,563,6511 -Nieul,87107,1649,17.303,1.324,1.199,561,6537 -Champagnac-la-Rivière,87034,575,24.636,1.580,1.431,539,6511 -Cieux,87045,986,42.571,2.077,1.881,550,6541 -Saint-Quentin-sur-Charente,16345,211,14.472,1.211,1.096,520,6532 -Saint-Barthélemy-de-Bussière,24381,212,15.461,1.252,1.134,527,6510 -Lavignac,87084,147,6.198,0.792,0.717,555,6516 -Brillac,16065,659,42.478,2.075,1.879,532,6557 -Lesterps,16182,483,35.993,1.910,1.729,531,6552 -Saint-Victurnien,87185,1754,21.435,1.474,1.335,548,6536 -Pageas,87112,580,27.849,1.680,1.521,544,6515 -Saint-Hilaire-les-Places,87150,882,22.849,1.522,1.378,554,6506 -Verneuil,16398,98,7.837,0.891,0.807,522,6521 -Lésignac-Durand,16183,184,19.910,1.420,1.286,521,6527 -Champsac,87036,675,23.747,1.551,1.404,541,6517 -Piégut-Pluviers,24328,1174,18.692,1.376,1.246,518,6507 -Saint-Junien,87154,11147,58.825,2.441,2.210,539,6540 -Chabanais,16070,1693,14.978,1.232,1.115,522,6529 -Nexon,87106,2559,40.987,2.038,1.845,554,6511 -Chassenon,16086,878,23.593,1.546,1.400,524,6530 -Mouzon,16239,130,10.709,1.042,0.943,516,6524 -Sentelie,80734,205,5.569,0.751,0.680,628,6958 -Aixe-sur-Vienne,87001,5858,22.695,1.516,1.373,554,6521 -Rilhac-Lastours,87124,371,16.322,1.286,1.164,554,6506 -Saint-Yrieix-sous-Aixe,87188,416,8.716,0.940,0.851,549,6528 -Séreilhac,87191,1953,38.692,1.980,1.793,551,6518 -Meilhac,87094,529,14.943,1.230,1.114,559,6514 -Rochechouart,87126,3781,53.861,2.336,2.115,533,6531 -Saint-Christophe,16306,345,23.361,1.538,1.393,537,6550 -Mortemart,87101,114,3.641,0.607,0.550,542,6552 -Vayres,87199,753,38.111,1.965,1.779,531,6518 -Champniers-et-Reilhac,24100,467,21.183,1.465,1.326,520,6512 -Marval,87092,553,38.801,1.983,1.795,532,6504 -Châlus,87032,1611,27.942,1.683,1.524,543,6505 -Chatain,86063,251,22.247,1.501,1.359,505,6555 -Saint-Martin-de-Jussac,87164,563,14.374,1.207,1.093,541,6528 -Confolens,16106,2691,23.649,1.548,1.402,518,6552 -Saint-Auvent,87135,965,33.491,1.842,1.668,538,6530 -Saillat-sur-Vienne,87131,838,6.372,0.804,0.728,532,6534 -Saint-Mathieu,87168,1081,40.814,2.034,1.842,531,6516 -Pressignac,16270,364,28.102,1.687,1.527,521,6526 -Nantiat,87103,1596,26.164,1.628,1.474,560,6551 -Anché,86003,345,16.421,1.290,1.168,493,6587 -Esse,16131,505,30.189,1.749,1.584,525,6547 -Montrol-Sénard,87100,276,27.445,1.668,1.510,542,6552 -Saint-Martin-le-Vieux,87166,913,17.375,1.327,1.201,555,6516 -Maisonnais-sur-Tardoire,87091,393,32.143,1.805,1.634,516,6516 -Videix,87204,213,16.367,1.288,1.166,522,6525 -Exideuil-sur-Vienne,16134,1025,20.595,1.445,1.308,516,6535 -Manot,16205,563,20.391,1.437,1.301,513,6541 -Chirac,16100,748,34.491,1.869,1.692,517,6542 -Saint-Brice-sur-Vienne,87140,1663,20.806,1.452,1.315,539,6534 -Saint-Jouvent,87152,1663,24.945,1.590,1.440,563,6544 -Breuilaufa,87022,134,4.742,0.693,0.627,554,6550 -Brigueuil,16064,1086,46.941,2.181,1.975,530,6539 -Saint-Priest-sous-Aixe,87177,1722,23.137,1.531,1.386,550,6524 -Le Buis,87023,190,6.748,0.827,0.749,561,6548 -Saint-Sixte,42288,717,15.488,1.253,1.134,772,6521 -Marquefave,31320,980,18.799,1.380,1.249,561,6249 -Sauvagnac,16364,61,7.275,0.859,0.778,516,6520 -Margency,95369,2916,0.725,0.271,0.245,648,6878 -Oradour-sur-Vayres,87111,1514,39.245,1.994,1.805,531,6518 -Monclar-de-Quercy,82115,1958,37.709,1.955,1.770,582,6323 -Sainte-Marie-de-Vaux,87162,207,5.523,0.748,0.677,546,6530 -Cordelle,42070,903,26.672,1.644,1.489,779,6538 -Dournazac,87060,650,35.984,1.909,1.728,538,6508 -Cognac-la-Forêt,87046,1184,31.915,1.798,1.628,543,6532 -Chamboret,87033,788,22.346,1.505,1.363,557,6544 -Ansac-sur-Vienne,16016,830,30.956,1.771,1.603,515,6551 -Les Salles-Lavauguyon,87189,144,12.266,1.115,1.010,522,6517 -Chabrac,16071,559,22.559,1.512,1.369,522,6540 -Thouron,87197,515,13.975,1.190,1.077,562,6548 -Isle,87075,7613,20.116,1.428,1.293,560,6522 -L'Hôpital-sous-Rochefort,42109,111,1.101,0.334,0.302,773,6519 -Busserolles,24070,501,33.603,1.845,1.670,516,6516 -Saujon,17421,7183,18.719,1.377,1.247,391,6517 -Les Cars,87029,630,16.753,1.303,1.180,553,6511 -Saint-Maurice-des-Lions,16337,882,50.050,2.252,2.039,526,6541 -Chéronnac,87044,336,18.767,1.379,1.249,524,6517 -Flavignac,87066,1054,31.322,1.781,1.613,546,6515 -La Meyze,87096,819,28.023,1.685,1.526,560,6500 -Ladignac-le-Long,87082,1164,47.120,2.185,1.978,557,6498 -Saint-Ouen-sur-Gartempe,87172,216,22.170,1.499,1.357,552,6563 -La Chapelle-Bâton,86055,359,29.983,1.743,1.578,501,6573 -Saint-Martin-le-Mault,87165,127,12.589,1.129,1.022,563,6589 -Bellac,87011,3963,24.506,1.576,1.427,553,6557 -Blanzac,87017,502,23.562,1.545,1.399,552,6563 -Lignac,36094,463,67.893,2.623,2.375,568,6597 -Azat-le-Ris,87006,260,56.500,2.393,2.167,546,6578 -Balledent,87007,199,12.376,1.120,1.014,564,6557 -Dinsac,87056,270,19.362,1.401,1.268,557,6575 -Le Dorat,87059,1686,23.899,1.556,1.409,554,6570 -Thollet,86270,159,30.465,1.757,1.591,555,6599 -Tersannes,87195,138,24.721,1.583,1.433,557,6575 -Cuigy-en-Bray,60187,936,9.762,0.995,0.901,615,6928 -Brigueil-le-Chantre,86037,516,54.412,2.348,2.126,557,6591 -Verneuil-Moustiers,87200,129,19.691,1.412,1.278,556,6586 -Villefavard,87206,157,9.334,0.972,0.880,563,6564 -Coulonges,86084,239,18.538,1.371,1.241,558,6589 -Magnac-Laval,87089,1739,72.508,2.710,2.454,554,6570 -La Bazeuge,87008,137,10.315,1.022,0.925,551,6574 -Rancon,87121,497,33.627,1.846,1.671,557,6561 -Lussac-les-Églises,87087,527,41.224,2.044,1.851,559,6579 -Droux,87061,355,24.096,1.563,1.415,560,6564 -Pleuville,16264,352,33.400,1.840,1.666,508,6562 -Benest,16038,320,21.094,1.462,1.324,500,6553 -Pressac,86200,574,49.396,2.237,2.025,510,6557 -Alloue,16007,471,46.666,2.174,1.968,508,6554 -Hiesse,16164,243,24.877,1.588,1.438,513,6556 -Nieuil,16245,933,23.811,1.553,1.406,509,6537 -Saint-Martin-l'Ars,86234,383,41.975,2.062,1.867,515,6567 -Ambernac,16009,362,29.908,1.741,1.576,514,6543 -Chasseneuil-sur-Bonnieure,16085,3050,33.229,1.835,1.661,501,6524 -Joussé,86119,303,7.643,0.880,0.797,505,6575 -Le Vieux-Cérier,16403,133,9.719,0.992,0.898,504,6544 -Lussac,16195,291,11.624,1.085,0.982,501,6532 -Épenède,16128,195,15.749,1.263,1.144,509,6552 -Saint-Laurent-de-Céris,16329,775,29.756,1.736,1.572,504,6542 -Grand-Brassac,24200,531,31.799,1.795,1.625,501,6473 -Le Grand-Madieu,16157,173,8.368,0.921,0.834,503,6539 -Saint-Félix-de-Bourdeilles,24403,65,6.278,0.798,0.723,510,6484 -Le Vigan,46334,1579,34.269,1.863,1.687,575,6403 -Saint-Just,24434,131,10.824,1.047,0.948,505,6473 -Artaix,71012,325,21.382,1.472,1.333,779,6574 -Paussac-et-Saint-Vivien,24319,459,22.314,1.504,1.362,508,6478 -Léobard,46169,214,10.366,1.025,0.928,565,6406 -Chapdeuil,24105,132,7.578,0.876,0.793,502,6473 -Saint-Martin-du-Lac,71453,242,13.905,1.187,1.075,780,6570 -Creyssac,24144,100,4.632,0.685,0.620,507,6470 -Bourdeilles,24055,734,22.819,1.521,1.377,507,6470 -La Chapelle-Montabourlet,24110,65,5.802,0.767,0.694,502,6482 -Jaure,24213,169,7.753,0.886,0.802,509,6443 -Mareuil en Périgord,24253,2395,155.733,3.972,3.596,513,6491 -Le Crozet,42078,280,13.383,1.164,1.054,767,6562 -Boyer,42025,200,5.235,0.728,0.659,795,6555 -Coublanc,71148,843,8.799,0.944,0.855,799,6563 -Saint-Astier,24372,5590,35.705,1.902,1.722,501,6454 -Vareilles,71553,265,8.624,0.935,0.847,794,6579 -Saint-Nizier-sous-Charlieu,42267,1705,13.111,1.153,1.044,787,6565 -Saint-Martin-de-Lixy,71451,91,4.236,0.655,0.593,795,6565 -Saint-Jean-d'Estissac,24426,173,12.948,1.145,1.037,502,6439 -Neuvic,24309,3564,25.884,1.619,1.466,505,6447 -Montrem,24295,1254,20.791,1.451,1.314,510,6453 -Villamblard,24581,873,20.551,1.443,1.307,505,6442 -Grignols,24205,659,21.081,1.461,1.323,506,6443 -Saint-Hilaire-d'Estissac,24422,110,6.267,0.797,0.722,505,6439 -Saint-Séverin-d'Estissac,24502,105,5.272,0.731,0.662,500,6441 -Manzac-sur-Vern,24251,597,20.492,1.441,1.305,513,6447 -Montreuil-sur-Thérain,60426,247,1.518,0.392,0.355,642,6921 -Saint-Léon-sur-l'Isle,24442,2022,14.529,1.213,1.098,500,6450 -Saint-Aquilin,24371,485,22.405,1.507,1.364,506,6459 -Razac-sur-l'Isle,24350,2384,14.889,1.228,1.112,512,6452 -Corgnac-sur-l'Isle,24134,836,21.598,1.479,1.339,543,6479 -Vallereuil,24562,297,9.205,0.966,0.875,503,6442 -Montdurausse,81175,419,16.134,1.279,1.158,586,6317 -Douville,24155,453,19.878,1.419,1.285,513,6440 -Bourrou,24061,130,9.516,0.982,0.889,511,6440 -Tocane-Saint-Apre,24553,1665,33.044,1.830,1.657,500,6460 -Mensignac,24266,1537,25.567,1.609,1.457,506,6459 -Léguillac-de-l'Auche,24236,981,14.698,1.220,1.105,505,6456 -Lamécourt,60345,197,3.429,0.589,0.533,660,6926 -Bussac,24069,391,17.441,1.329,1.203,515,6465 -La Chapelle-Gonaguet,24108,1068,19.705,1.413,1.279,516,6462 -Lisle,24243,881,18.669,1.375,1.245,510,6464 -Annesse-et-Beaulieu,24010,1458,12.898,1.143,1.035,513,6459 -Montagrier,24286,526,14.347,1.206,1.092,500,6467 -Ribagnac,24351,316,11.874,1.097,0.993,502,6411 -Saint-Capraise-d'Eymet,24383,152,11.207,1.066,0.965,500,6404 -Pradines,46224,3419,16.437,1.291,1.169,569,6374 -Saint-Aubin-de-Cadelech,24373,335,13.607,1.174,1.063,500,6400 -Sadillac,24359,118,5.658,0.757,0.685,502,6408 -Sarrazac,24522,381,30.567,1.760,1.594,545,6487 -Sorges et Ligueux en Périgord,24540,1554,55.542,2.372,2.148,527,6466 -Saint-Front-la-Rivière,24410,530,18.455,1.367,1.238,524,6489 -Milhac-de-Nontron,24271,516,35.885,1.907,1.727,524,6486 -Saint-Jean-de-Côle,24425,366,12.948,1.145,1.037,533,6480 -La Coquille,24133,1348,22.982,1.526,1.382,542,6499 -Thiviers,24551,2891,28.641,1.704,1.543,540,6486 -Saint-Paul-la-Roche,24481,525,40.110,2.016,1.825,545,6492 -Saint-Priest-les-Fougères,24489,380,21.495,1.476,1.336,543,6494 -Eyzerac,24171,563,11.550,1.082,0.980,534,6479 -Biras,24042,664,19.893,1.420,1.286,513,6469 -Saint-Jory-de-Chalais,24428,579,32.621,1.818,1.646,533,6489 -Tourtoirac,24555,642,26.330,1.633,1.479,546,6468 -La Chapelle-Faucher,24107,423,19.250,1.397,1.265,523,6479 -Saint-Saud-Lacoussière,24498,839,60.042,2.466,2.233,535,6495 -Nantheuil,24304,959,17.623,1.336,1.210,539,6480 -Saint-Martial-de-Valette,24451,791,16.367,1.288,1.166,518,6493 -Agonac,24002,1755,38.166,1.966,1.780,523,6463 -Clermont-d'Excideuil,24124,236,10.439,1.028,0.931,547,6473 -Saint-Viance,19246,1823,16.493,1.293,1.171,582,6458 -Nontron,24311,3085,25.695,1.614,1.461,518,6499 -La Chapelle-Montmoreau,24111,69,8.338,0.919,0.832,518,6486 -Mialet,24269,619,38.467,1.974,1.787,535,6495 -Saint-Pierre-de-Côle,24485,448,20.711,1.449,1.312,532,6479 -Saint-Germain-des-Prés,24417,518,19.086,1.391,1.259,546,6474 -Négrondes,24308,832,20.864,1.454,1.316,537,6474 -Nanthiat,24305,240,11.202,1.065,0.964,542,6483 -Saint-Martin-le-Pin,24458,276,15.986,1.273,1.153,515,6495 -Mayac,24262,338,11.709,1.089,0.986,538,6469 -Coulaures,24137,744,30.135,1.747,1.582,541,6465 -Quinsac,24346,369,17.999,1.350,1.222,517,6485 -Saint-Pardoux-la-Rivière,24479,1182,23.278,1.536,1.391,521,6490 -Saint-Front-d'Alemps,24408,264,19.351,1.400,1.268,525,6475 -Le Bourdeix,24056,230,11.601,1.084,0.981,514,6502 -Villars,24582,467,28.816,1.709,1.547,523,6485 -Blars,46031,135,25.821,1.617,1.464,603,6388 -Château-l'Évêque,24115,2149,37.237,1.942,1.758,519,6460 -Condat-sur-Trincou,24129,474,17.252,1.322,1.197,523,6479 -Saint-Pantaly-d'Excideuil,24476,145,8.835,0.946,0.857,545,6472 -Villars-en-Pons,17469,565,13.219,1.157,1.048,415,6505 -Lempzours,24238,133,11.296,1.070,0.969,530,6477 -Saint-Martin-de-Fressengeas,24453,360,21.618,1.480,1.340,529,6483 -Saint-Sulpice-d'Excideuil,24505,333,19.346,1.400,1.268,543,6476 -Cavarc,47063,160,12.056,1.105,1.000,515,6398 -Vaunac,24567,283,14.283,1.203,1.089,532,6479 -Saint-Georges,47328,550,16.011,1.274,1.153,537,6374 -Savignac-de-Nontron,24525,190,10.067,1.010,0.914,522,6495 -Sceau-Saint-Angel,24528,123,18.031,1.352,1.224,521,6492 -Saint-Cernin-de-Labarde,24385,204,11.522,1.080,0.978,511,6410 -Champs-Romain,24101,294,20.907,1.455,1.317,527,6494 -Excideuil,24164,1181,5.236,0.728,0.659,547,6473 -Javerlhac-et-la-Chapelle-Saint-Robert,24214,852,29.149,1.719,1.556,513,6500 -Saint-Pancrace,24474,182,7.040,0.845,0.765,516,6483 -Champagnac-de-Belair,24096,733,19.242,1.396,1.264,524,6480 -Savignac-les-Églises,24527,991,22.860,1.522,1.378,537,6464 -Saint-Romain-et-Saint-Clément,24496,326,14.376,1.207,1.093,535,6485 -Saint-Front-sur-Nizonne,24411,157,13.415,1.166,1.056,514,6486 -Saint-Martial-d'Albarède,24448,469,10.673,1.040,0.942,547,6469 -Séniergues,46304,129,18.208,1.358,1.230,586,6406 -Hautefaye,24209,133,12.447,1.123,1.017,508,6496 -Puycornet,82144,728,27.398,1.666,1.508,569,6340 -Connezac,24131,76,6.037,0.782,0.708,509,6493 -Lussas-et-Nontronneau,24248,308,22.989,1.526,1.382,512,6497 -Rudeau-Ladosse,24221,161,14.234,1.201,1.087,506,6492 -Mainzac,16203,104,11.406,1.075,0.973,503,6500 -Carlucet,46059,219,33.998,1.856,1.680,589,6403 -Le Bastit,46018,155,27.977,1.684,1.525,592,6400 -Ginouillac,46121,154,9.474,0.980,0.887,585,6406 -Saint-Cirq-Souillaguet,46258,158,8.507,0.928,0.840,580,6402 -Reilhac,46235,176,13.010,1.148,1.039,597,6403 -Saint-Projet,46290,345,15.840,1.267,1.147,585,6409 -Soucirac,46308,100,11.329,1.071,0.970,581,6404 -Saint-Aubin-de-Nabirat,24375,140,6.407,0.806,0.730,565,6406 -Gourdon,46127,4202,45.694,2.152,1.948,570,6401 -Cours-de-Pile,24140,1600,10.929,1.052,0.952,505,6419 -Saint-Clair,46259,148,10.933,1.052,0.952,576,6400 -Campsegret,24077,389,13.904,1.187,1.075,510,6433 -Monsaguel,24282,156,11.567,1.083,0.981,506,6406 -Saint-Martin-des-Combes,24456,188,14.052,1.193,1.080,510,6431 -Ferrensac,47096,216,12.376,1.120,1.014,512,6399 -Saint-Sauveur,24499,844,9.355,0.974,0.882,507,6424 -Douzains,47084,265,12.677,1.133,1.026,503,6396 -Lembras,24237,1145,10.753,1.044,0.945,507,6424 -Saint-Agne,24361,438,5.902,0.773,0.700,513,6419 -Plaisance,24168,426,25.211,1.598,1.447,505,6406 -Montagnac-la-Crempse,24285,387,25.550,1.609,1.457,506,6437 -Mouleydier,24296,1136,8.575,0.932,0.844,514,6421 -Creysse,24145,1744,11.092,1.060,0.960,509,6420 -Conne-de-Labarde,24132,244,10.223,1.018,0.922,509,6413 -Saint-Georges-de-Montclard,24414,293,13.651,1.176,1.065,508,6428 -Beauregard-et-Bassac,24031,265,12.178,1.111,1.006,515,6434 -Saint-Quentin-du-Dropt,47272,197,11.912,1.099,0.995,511,6402 -Saint-Nexans,24472,958,12.452,1.123,1.017,509,6414 -Esclauzels,46092,223,17.882,1.346,1.219,590,6374 -Saint-Germain-et-Mons,24419,811,14.254,1.202,1.088,511,6416 -Cremps,46082,362,19.682,1.412,1.278,585,6364 -Issigeac,24212,766,9.243,0.968,0.876,512,6406 -Saint-Martin-Labouval,46276,182,13.403,1.165,1.055,599,6379 -Queyssac,24345,470,12.471,1.124,1.018,504,6429 -Bouniagues,24054,583,8.700,0.939,0.850,506,6410 -Monmarvès,24279,63,5.702,0.760,0.688,512,6405 -Monmadalès,24278,81,5.076,0.717,0.649,513,6411 -Colombier,24126,251,7.098,0.848,0.768,503,6411 -Lanteuil,19105,522,22.474,1.509,1.366,594,6450 -Saint-Aubin-de-Lanquais,24374,335,9.380,0.975,0.883,509,6412 -Verdon,24570,48,5.018,0.713,0.646,514,6414 -Lamonzie-Montastruc,24224,717,20.725,1.449,1.312,512,6427 -La Feuillade,24179,735,4.016,0.638,0.578,572,6447 -Saint-Perdoux,24483,135,7.445,0.869,0.787,503,6407 -Lagleygeolle,19099,219,19.476,1.405,1.272,598,6446 -Saillac,19179,208,4.332,0.663,0.600,594,6437 -Chasteaux,19049,771,18.700,1.376,1.246,582,6447 -Larche,19107,1595,5.728,0.762,0.690,577,6446 -Noailhac,19150,379,13.574,1.173,1.062,594,6445 -Albignac,19003,254,9.838,0.998,0.904,594,6450 -Nespouls,19147,632,20.353,1.436,1.300,585,6443 -Coubjours,24136,130,9.853,0.999,0.905,565,6463 -Terrasson-Lavilledieu,24547,6148,39.237,1.994,1.805,570,6450 -Chartrier-Ferrière,19047,367,15.511,1.254,1.135,574,6443 -Lissac-sur-Couze,19117,749,12.539,1.127,1.020,577,6445 -La Dornac,24153,405,16.230,1.282,1.161,572,6442 -La Cassagne,24085,153,15.187,1.240,1.123,565,6440 -Saint-Bazile-de-Meyssac,19184,132,4.521,0.677,0.613,598,6440 -Les Coteaux Périgourdins,24117,587,20.067,1.426,1.291,569,6448 -Pazayac,24321,869,6.861,0.834,0.755,570,6448 -Cosnac,19063,2984,20.308,1.434,1.298,591,6452 -Meyssac,19138,1283,11.528,1.081,0.979,595,6438 -Lanouaille,24227,1019,24.469,1.575,1.426,556,6476 -La Chapelle-aux-Brocs,19043,420,5.010,0.712,0.645,591,6450 -Jugeals-Nazareth,19093,956,11.233,1.067,0.966,585,6442 -Turenne,19273,850,27.148,1.659,1.502,590,6438 -Saint-Cernin-de-Larche,19191,655,9.305,0.971,0.879,577,6446 -Noailles,19151,895,12.505,1.126,1.019,582,6447 -Ligneyrac,19115,307,8.503,0.928,0.840,590,6438 -Saint-Raphaël,24493,96,7.300,0.860,0.779,547,6469 -Tamniès,24544,383,19.555,1.408,1.275,551,6433 -Anlhiac,24009,276,12.407,1.121,1.015,553,6474 -Valojoulx,24563,268,12.207,1.112,1.007,552,6438 -Saint-Urcisse,47281,231,10.959,1.054,0.954,524,6343 -Jumilhac-le-Grand,24218,1244,68.165,2.628,2.379,549,6486 -Génis,24196,469,27.015,1.654,1.498,555,6474 -Payzac,24320,983,49.018,2.229,2.018,563,6477 -Glandon,87071,790,27.678,1.675,1.517,565,6488 -Domme,24152,912,24.851,1.587,1.437,558,6413 -Campagnac-lès-Quercy,24075,293,20.138,1.428,1.293,559,6400 -Vitrac,24587,803,14.386,1.207,1.093,561,6419 -Lavalade,24231,84,3.993,0.636,0.576,529,6402 -Cénac-et-Saint-Julien,24091,1205,20.613,1.445,1.308,555,6413 -Saint-Cybranet,24395,399,10.727,1.043,0.944,556,6410 -Saint-Aulaire,19182,799,11.000,1.056,0.956,571,6459 -Bouzic,24063,152,12.263,1.115,1.010,557,6405 -Hautefort,24210,946,26.638,1.643,1.488,550,6462 -Salviac,46297,1214,29.737,1.736,1.572,559,6398 -La Roque-Gageac,24355,453,7.190,0.854,0.773,559,6415 -Savignac-Lédrier,24526,719,26.459,1.637,1.482,556,6480 -Sainte-Trie,24507,109,11.266,1.068,0.967,562,6469 -La Chapelle-Aubareil,24106,535,20.341,1.436,1.300,556,6439 -Boisseuilh,24046,120,12.199,1.112,1.007,558,6464 -Salagnac,24515,788,9.354,0.974,0.882,562,6471 -Dussac,24158,404,20.645,1.446,1.309,551,6476 -Angoisse,24008,605,23.805,1.553,1.406,553,6480 -Sergeac,24531,217,10.522,1.033,0.935,553,6435 -Saint-Martial-de-Nabirat,24450,595,15.696,1.261,1.142,562,6409 -Montgibaud,19144,241,14.148,1.197,1.084,574,6491 -Veyrines-de-Domme,24575,227,11.393,1.074,0.972,549,6411 -Le Chalard,87031,321,12.327,1.118,1.012,554,6495 -Cherveix-Cubas,24120,574,14.857,1.227,1.111,554,6469 -Marcillac-Saint-Quentin,24252,781,17.094,1.316,1.192,559,6432 -Limalonges,79150,842,24.398,1.572,1.423,481,6566 -Saint-Mesmin,24464,316,30.404,1.755,1.589,559,6472 -Saint-Médard-d'Excideuil,24463,537,19.017,1.388,1.257,549,6476 -Soturac,46307,634,19.783,1.416,1.282,540,6385 -Saint-Léon-sur-Vézère,24443,429,13.819,1.183,1.071,548,6441 -Saint-André-d'Allas,24366,822,29.518,1.729,1.565,550,6424 -Preyssac-d'Excideuil,24339,171,3.485,0.594,0.538,553,6474 -Thézac,47307,195,11.308,1.070,0.969,543,6375 -Sarlat-la-Canéda,24520,8946,48.580,2.219,2.009,558,6427 -Proissans,24341,1006,18.121,1.355,1.227,561,6425 -Castelnaud-la-Chapelle,24086,464,21.030,1.460,1.322,552,6417 -Vézac,24577,620,13.636,1.175,1.064,555,6415 -Yssandon,19289,684,19.643,1.411,1.278,575,6455 -Saint-Geniès,24412,947,34.738,1.876,1.699,559,6437 -Saint-Vincent-de-Cosse,24510,363,7.325,0.861,0.780,552,6417 -Florimont-Gaumier,24184,143,9.381,0.975,0.883,563,6404 -Orniac,46212,72,16.998,1.312,1.188,594,6386 -Teillots,24545,100,10.270,1.020,0.924,562,6464 -Beyssenac,19025,372,18.175,1.357,1.229,569,6482 -Saint-Yrieix-la-Perche,87187,6777,101.532,3.207,2.904,566,6488 -Marquay,24255,575,25.017,1.592,1.441,551,6426 -Daglan,24150,549,20.698,1.448,1.311,556,6410 -Doissat,24151,107,15.713,1.262,1.143,550,6400 -Beynac-et-Cazenac,24040,550,13.108,1.152,1.043,554,6417 -Lhospitalet,46172,483,14.827,1.226,1.110,574,6365 -Saint-Laurent-la-Vallée,24438,256,15.502,1.253,1.134,554,6409 -Sarlande,24519,426,35.422,1.894,1.715,556,6488 -Saint-Marcory,24446,52,4.765,0.695,0.629,535,6404 -Pezuls,24327,118,10.236,1.018,0.922,525,6426 -Peyzac-le-Moustier,24326,182,10.085,1.011,0.915,547,6436 -Monpazier,24280,478,0.542,0.234,0.212,533,6399 -Trémolat,24558,643,14.112,1.196,1.083,530,6419 -Vignols,19286,557,15.207,1.241,1.124,574,6474 -Sainte-Foy-de-Belvès,24406,138,7.630,0.879,0.796,544,6403 -Ayen,19015,721,13.365,1.164,1.054,571,6465 -Sainte-Radegonde,24492,63,4.922,0.706,0.639,517,6400 -Saint-Capraise-de-Lalinde,24382,531,3.901,0.629,0.570,516,6418 -Prats-du-Périgord,24337,147,11.325,1.071,0.970,549,6400 -Allas-les-Mines,24006,208,7.194,0.854,0.773,546,6414 -Varennes,24566,464,4.133,0.647,0.586,518,6418 -Monplaisant,24293,291,5.575,0.752,0.681,541,6412 -Aujols,46010,363,16.303,1.285,1.163,581,6371 -Bourniquel,24060,67,8.961,0.953,0.863,522,6414 -Pays de Belvès,24035,1451,31.666,1.791,1.622,537,6404 -Lalinde,24223,2799,27.711,1.676,1.517,525,6419 -Saint-Félix-de-Villadeix,24405,312,16.828,1.306,1.182,516,6431 -Labruyère,60332,684,2.465,0.500,0.453,665,6916 -Pontours,24334,194,6.646,0.821,0.743,522,6416 -Le Buisson-de-Cadouin,24068,1962,50.262,2.257,2.044,529,6419 -Carves,24084,104,10.451,1.029,0.932,549,6411 -Guignemicourt,80399,331,4.537,0.678,0.614,639,6976 -Cause-de-Clérans,24088,345,14.502,1.212,1.097,513,6420 -Pinay,42171,281,6.667,0.822,0.744,788,6529 -Limeuil,24240,338,10.422,1.028,0.931,536,6425 -Saint-Léon-d'Issigeac,24441,118,5.649,0.757,0.685,518,6406 -Siorac-en-Périgord,24538,1048,11.712,1.089,0.986,542,6416 -Saint-Chamassy,24388,525,15.448,1.251,1.133,533,6420 -Tayrac,47305,401,12.987,1.147,1.039,529,6346 -Journiac,24217,430,19.520,1.406,1.273,533,6429 -Saint-Germain-de-Belvès,24416,177,7.435,0.868,0.786,546,6415 -Saint-Avit-Sénieur,24379,457,23.423,1.541,1.395,529,6408 -Lanquais,24228,497,14.701,1.220,1.105,519,6414 -Rampieux,24347,149,11.834,1.095,0.991,525,6401 -Sainte-Foy-de-Longas,24407,235,16.232,1.282,1.161,526,6427 -Berbiguières,24036,180,5.448,0.743,0.673,546,6415 -Saint-Romain-de-Monpazier,24495,105,7.498,0.872,0.790,535,6405 -Salles-de-Belvès,24517,72,9.058,0.958,0.867,541,6402 -Cladech,24122,103,5.634,0.756,0.684,547,6413 -Marnac,24254,189,8.006,0.901,0.816,542,6416 -Alles-sur-Dordogne,24005,382,9.466,0.979,0.886,530,6419 -Saint-Avit-de-Vialard,24377,158,8.833,0.946,0.857,529,6432 -Bardou,24024,44,4.831,0.700,0.634,516,6409 -Mauzens-et-Miremont,24261,299,20.402,1.438,1.302,536,6432 -Savignac-de-Miremont,24524,174,7.939,0.897,0.812,539,6434 -Saint-Cassien,24384,33,4.735,0.693,0.627,528,6400 -Saint-Michel-de-Villadeix,24468,312,14.565,1.215,1.100,520,6432 -Veyrines-de-Vergt,24576,265,12.309,1.117,1.011,522,6436 -Le Bugue,24067,2622,30.308,1.752,1.586,532,6426 -Naussannes,24307,245,14.992,1.232,1.115,520,6406 -Brignac-la-Plaine,19030,987,18.859,1.382,1.251,566,6456 -Beaumontois en Périgord,24028,1847,73.044,2.720,2.463,517,6402 -Perpezac-le-Blanc,19161,469,18.905,1.384,1.253,571,6461 -Fleurac,24183,246,22.799,1.520,1.376,547,6436 -Boisse,24045,247,16.801,1.305,1.182,512,6404 -Bouillac,24052,125,12.389,1.120,1.014,537,6411 -Sagelat,24360,306,7.827,0.891,0.807,542,6414 -Bouloc,31079,4577,18.809,1.380,1.249,573,6304 -Castels et Bézenac,24087,804,24.621,1.579,1.430,547,6418 -Monsac,24281,194,10.874,1.050,0.951,517,6409 -Saint-Sylvestre-sur-Lot,47280,2291,21.455,1.474,1.335,523,6368 -Baneuil,24023,356,9.026,0.956,0.866,518,6418 -Coussac-Bonneval,87049,1314,66.367,2.593,2.348,566,6489 -Paunat,24318,306,17.789,1.343,1.216,532,6423 -Saint-Éloy-les-Tuileries,19198,104,9.140,0.962,0.871,563,6484 -Couze-et-Saint-Front,24143,721,8.259,0.915,0.828,518,6417 -Lolme,24244,199,7.020,0.843,0.763,528,6403 -Sainte-Croix,24393,86,12.937,1.145,1.037,530,6405 -Pierrefitte,19166,89,9.977,1.005,0.910,591,6482 -Urval,24560,112,13.380,1.164,1.054,540,6413 -Mauzac-et-Grand-Castang,24260,875,15.852,1.267,1.147,527,6420 -Saint-Haon-le-Châtel,42232,639,0.875,0.298,0.270,770,6552 -Campagne,24076,384,15.168,1.240,1.123,540,6422 -Badefols-sur-Dordogne,24022,213,6.097,0.786,0.712,525,6419 -Liorac-sur-Louyre,24242,241,20.713,1.449,1.312,512,6423 -Demi-Quartier,74099,912,8.874,0.948,0.858,984,6536 -Meyrals,24268,638,18.733,1.378,1.248,551,6426 -Montferrand-du-Périgord,24290,158,13.183,1.156,1.047,529,6408 -Montaut,24287,129,16.385,1.288,1.166,511,6408 -Sérignac,46305,297,18.678,1.376,1.246,545,6372 -FAUX,24177,622,16.117,1.278,1.157,512,6415 -Savignac-sur-Leyze,47295,310,11.512,1.080,0.978,526,6377 -Fouleix,24190,241,11.274,1.069,0.968,517,6431 -Valeilles,82185,243,13.858,1.185,1.073,534,6367 -Saint-Cyprien,24396,1579,22.226,1.501,1.359,542,6421 -Larzac,24230,139,6.970,0.840,0.761,544,6407 -Saint-Pardoux-et-Vielvic,24478,221,14.441,1.210,1.096,540,6413 -Saint-Marcel-du-Périgord,24445,146,11.369,1.073,0.972,517,6425 -Sablonceaux,17307,1412,22.208,1.500,1.358,398,6523 -Clermont-de-Beauregard,24123,98,6.275,0.797,0.722,514,6429 -Dampniat,19068,743,15.438,1.251,1.133,590,6452 -Capdrot,24080,489,44.026,2.112,1.912,541,6402 -Orliac,24313,61,10.780,1.045,0.946,545,6402 -Borrèze,24050,343,28.027,1.685,1.526,576,6429 -Tursac,24559,347,18.214,1.358,1.230,543,6433 -Pressignac-Vicq,24338,440,17.107,1.317,1.192,518,6422 -Coux et Bigaroque-Mouzens,24142,1220,27.689,1.675,1.517,542,6416 -Cavagnac,46065,468,10.339,1.024,0.927,594,6434 -Grives,24206,131,8.302,0.917,0.830,549,6411 -Donzenac,19072,2646,24.495,1.575,1.426,582,6458 -Val de Louyre et Caudeau,24362,1607,82.832,2.897,2.623,531,6433 -Payrac,46215,628,19.657,1.411,1.278,577,6410 -Marsalès,24257,238,9.488,0.980,0.887,531,6400 -Lacave,46144,267,22.008,1.493,1.352,589,6417 -Tourliac,47311,135,9.787,0.996,0.902,528,6401 -Pescadoires,46218,193,2.461,0.499,0.452,555,6380 -Bergerac,24037,27269,56.651,2.396,2.169,504,6415 -Saint-Avit-Rivière,24378,77,14.135,1.197,1.084,537,6408 -Courbiac,47072,119,9.093,0.960,0.869,546,6366 -Saint-Amand-de-Vergt,24365,246,13.032,1.149,1.040,520,6437 -Audrix,24015,282,6.403,0.805,0.729,538,6424 -Rouffignac-Saint-Cernin-de-Reilhac,24356,1590,61.387,2.494,2.258,542,6446 -Bayac,24027,350,10.255,1.019,0.923,522,6416 -Temple-Laguyon,24546,41,3.052,0.556,0.503,552,6461 -Arcinges,42007,209,3.437,0.590,0.534,799,6561 -Monbazillac,24274,849,19.617,1.410,1.277,500,6416 -La Chapelle-Saint-Jean,24113,91,3.871,0.626,0.567,556,6456 -Beleymas,24034,277,16.138,1.279,1.158,502,6432 -Aubas,24014,621,17.169,1.319,1.194,561,6444 -Brouchaud,24066,223,12.347,1.118,1.012,542,6460 -Bajamont,47019,981,12.255,1.114,1.009,518,6354 -Saint-Geyrac,24421,199,17.870,1.346,1.219,533,6445 -Briennon,42026,1678,22.316,1.504,1.362,785,6559 -Saint-Maime-de-Péreyrol,24459,283,11.159,1.063,0.962,516,6436 -La Bachellerie,24020,901,17.753,1.341,1.214,558,6450 -Villac,24580,262,21.248,1.467,1.328,559,6454 -Saint-Maurin,47260,459,21.818,1.487,1.346,535,6350 -Escoire,24162,421,3.929,0.631,0.571,532,6458 -Montagnac-d'Auberoche,24284,150,10.257,1.019,0.923,542,6457 -Chourgnac,24121,60,7.139,0.850,0.770,546,6460 -Saint-Paul-de-Serre,24480,277,10.782,1.045,0.946,512,6443 -Bars,24025,238,23.435,1.541,1.395,544,6443 -Salon,24518,276,17.540,1.333,1.207,522,6436 -Chalagnac,24094,432,14.586,1.216,1.101,521,6444 -Castillonnès,47057,1443,19.401,1.402,1.269,508,6400 -Malemort,19123,8012,19.580,1.408,1.275,592,6454 -Peyrignac,24324,586,6.564,0.816,0.739,559,6455 -Sarliac-sur-l'Isle,24521,1028,10.010,1.007,0.912,533,6459 -Voutezac,19288,1270,21.998,1.493,1.352,580,6467 -Le Lardin-Saint-Lazare,24229,1793,10.890,1.050,0.951,560,6449 -Saint-Pé-d'Ardet,31509,146,3.442,0.591,0.535,512,6213 -Limeyrat,24241,447,20.132,1.428,1.293,542,6451 -Concèze,19059,424,13.508,1.170,1.059,571,6478 -Thenon,24550,1259,26.902,1.651,1.495,545,6448 -Creyssensac-et-Pissot,24146,259,8.873,0.948,0.858,518,6444 -Antonne-et-Trigonant,24011,1258,21.030,1.460,1.322,530,6464 -Condat-sur-Vézère,24130,893,16.500,1.293,1.171,558,6446 -Estivaux,19078,425,16.731,1.302,1.179,580,6467 -Fanlac,24174,135,14.648,1.218,1.103,548,6441 -Jarnosse,42112,443,12.039,1.104,1.000,794,6558 -Chancelade,24102,4268,16.976,1.311,1.187,516,6462 -Vergt,24571,1663,33.698,1.848,1.673,521,6444 -Cornille,24135,678,13.410,1.166,1.056,523,6463 -Auriac-du-Périgord,24018,377,18.364,1.364,1.235,556,6447 -La Douze,24156,1139,23.922,1.557,1.410,535,6440 -Fossemagne,24188,540,22.541,1.511,1.368,545,6450 -Champcevinel,24098,2860,18.346,1.363,1.234,522,6463 -Montamel,46196,107,9.714,0.992,0.898,577,6389 -Beauregard-de-Terrasson,24030,716,8.339,0.919,0.832,563,6452 -Tournon-d'Agenais,47312,738,21.451,1.474,1.335,543,6365 -Bassillac et Auberoche,24026,4473,105.315,3.267,2.958,530,6457 -Mansac,19124,1420,18.798,1.380,1.249,575,6454 -Saint-Félix-de-Reillac-et-Mortemart,24404,185,20.777,1.451,1.314,532,6435 -Thonac,24552,256,11.404,1.075,0.973,553,6439 -Plazac,24330,699,34.549,1.871,1.694,544,6443 -Ajat,24004,327,22.456,1.508,1.365,548,6454 -Saint-Martin-Sepert,19223,283,15.698,1.261,1.142,581,6480 -Grun-Bordas,24208,220,12.780,1.138,1.030,513,6439 -Saint-Vincent-Lespinasse,82175,249,9.318,0.972,0.880,536,6340 -Nailhac,24302,325,19.970,1.422,1.287,555,6457 -Saint-Vincent-sur-l'Isle,24513,297,10.285,1.021,0.924,534,6464 -Varetz,19278,2407,20.516,1.442,1.306,579,6453 -Granges-d'Ans,24202,155,12.162,1.110,1.005,554,6457 -Puy-l'Évêque,46231,1984,26.454,1.637,1.482,553,6385 -Badefols-d'Ans,24021,415,18.777,1.379,1.249,558,6464 -Sainte-Eulalie-d'Ans,24401,287,11.816,1.094,0.991,546,6460 -Montayral,47185,2686,25.062,1.594,1.443,540,6374 -Châtres,24116,192,12.573,1.129,1.022,556,6456 -Montignac,24291,2788,36.283,1.917,1.736,553,6439 -Marsac-sur-l'Isle,24256,3118,10.127,1.013,0.917,517,6458 -Saint-Cirq-Lapopie,46256,204,18.086,1.354,1.226,597,6374 -Sainte-Orse,24473,360,24.062,1.561,1.413,550,6463 -Azerat,24019,445,20.686,1.448,1.311,548,6454 -Saint-Crépin-d'Auberoche,24390,348,9.837,0.998,0.904,536,6447 -Gabillou,24192,96,8.135,0.908,0.822,545,6460 -Les Farges,24175,318,7.967,0.898,0.813,560,6449 -Saint-Rabier,24491,589,16.629,1.298,1.175,554,6457 -Condat-sur-Ganaveix,19060,664,37.769,1.956,1.771,590,6493 -Chabrignac,19035,585,11.003,1.056,0.956,572,6470 -Louignac,19120,237,21.343,1.471,1.332,566,6456 -Lagraulière,19100,1104,30.898,1.769,1.602,594,6471 -Belvèze,82016,205,13.949,1.189,1.077,550,6359 -Vars-sur-Roseix,19279,375,4.416,0.669,0.606,571,6465 -Saint-Cyprien,19195,387,7.742,0.886,0.802,570,6461 -Benayes,19022,231,23.405,1.540,1.394,581,6497 -Troche,19270,560,19.996,1.423,1.288,578,6482 -Saint-Bonnet-la-Rivière,19187,381,10.097,1.011,0.915,569,6467 -Saint-Ybard,19248,681,30.557,1.760,1.594,587,6485 -Objat,19153,3652,9.601,0.986,0.893,577,6464 -Saint-Robert,19239,312,6.128,0.788,0.713,568,6465 -Rosiers-de-Juillac,19177,185,9.624,0.987,0.894,568,6465 -Saint-Clément,19194,1322,26.867,1.650,1.494,594,6471 -Arnac-Pompadour,19011,1129,15.064,1.235,1.118,574,6479 -Vigeois,19285,1202,43.768,2.106,1.907,588,6475 -Chameyrat,19038,1552,19.339,1.400,1.268,601,6464 -Saint-Germain-les-Vergnes,19207,1101,19.487,1.405,1.272,589,6464 -Chanteix,19042,601,19.387,1.402,1.269,591,6471 -Favars,19082,1058,12.031,1.104,1.000,595,6461 -Saint-Jal,19213,633,26.859,1.650,1.494,596,6476 -Saint-Pantaléon-de-Larche,19229,4787,23.720,1.550,1.403,574,6449 -Meuzac,87095,726,43.930,2.110,1.910,577,6500 -Saint-Sornin-Lavolps,19243,864,15.330,1.246,1.128,572,6474 -Cornil,19061,1369,19.762,1.415,1.281,600,6455 -Meilhards,19131,507,45.214,2.140,1.938,595,6500 -Lubersac,19121,2225,58.423,2.433,2.203,571,6487 -Beyssac,19024,623,21.339,1.470,1.331,577,6472 -Allassac,19005,3903,38.859,1.984,1.796,575,6462 -Lamongerie,19104,115,12.209,1.112,1.007,587,6496 -Ussac,19274,4169,24.987,1.591,1.441,580,6454 -Ségur-le-Château,19254,179,9.587,0.986,0.893,568,6484 -Saint-Hilaire-Peyroux,19211,966,19.224,1.396,1.264,591,6455 -Cublac,19066,1674,20.531,1.442,1.306,565,6454 -Saint-Denis-de-Cabanne,42215,1263,7.806,0.889,0.805,794,6565 -Saint-Pierre-de-Clairac,47269,877,13.254,1.159,1.049,522,6346 -Segonzac,19253,224,20.026,1.424,1.289,564,6468 -Peyrissac,19165,131,6.103,0.786,0.712,596,6491 -Saint-Pardoux-l'Ortigier,19234,480,13.013,1.148,1.039,590,6467 -Saint-Bonnet-l'Enfantier,19188,392,11.887,1.097,0.993,587,6468 -Saint-Cyr-les-Champagnes,24397,247,16.213,1.282,1.161,564,6477 -Eyburie,19079,494,29.644,1.733,1.569,595,6484 -Juillac,19094,1127,32.588,1.817,1.645,562,6468 -Uzerche,19276,2848,24.129,1.564,1.416,585,6479 -La Porcherie,87120,523,31.603,1.789,1.620,590,6496 -Saint-Cyr-la-Roche,19196,503,8.413,0.923,0.836,573,6468 -Espartignac,19076,440,14.078,1.194,1.081,591,6477 -Salon-la-Tour,19250,652,43.361,2.096,1.898,581,6489 -Saint-Pardoux-Corbier,19230,417,17.713,1.340,1.213,581,6480 -Palazinges,19156,148,5.377,0.738,0.668,599,6453 -Aubazines,19013,911,14.241,1.201,1.087,596,6457 -Saint-Mexant,19227,1309,18.898,1.384,1.253,599,6468 -Saint-Denis-lès-Martel,46265,335,7.949,0.897,0.812,592,6425 -Perpezac-le-Noir,19162,1133,24.962,1.590,1.440,584,6473 -Orgnac-sur-Vézère,19154,312,18.834,1.381,1.250,579,6475 -Saint-Solve,19242,461,5.932,0.775,0.702,575,6467 -Sainte-Féréole,19202,1893,35.572,1.898,1.718,589,6464 -Saint-Julien-le-Vendômois,19216,250,23.192,1.533,1.388,570,6482 -Rocamadour,46240,617,49.376,2.237,2.025,595,6412 -Pinsac,46220,765,19.973,1.423,1.288,586,6420 -Saint-Forgeux-Lespinasse,42220,640,16.516,1.294,1.172,772,6558 -Moncaut,47172,624,15.892,1.269,1.149,499,6344 -Rouffilhac,46241,184,6.500,0.812,0.735,575,6414 -Calviac-en-Périgord,24074,502,14.422,1.209,1.095,565,6420 -Loddes,3147,162,23.512,1.543,1.397,757,6575 -Vayrac,46330,1292,16.191,1.281,1.160,598,6431 -Anglars-Nozac,46006,353,9.774,0.995,0.901,577,6412 -Paulin,24317,258,11.755,1.091,0.988,570,6433 -Sainte-Nathalène,24471,578,13.959,1.189,1.077,567,6425 -Carsac-Aillac,24082,1603,17.278,1.323,1.198,562,6417 -Condat,46074,408,6.120,0.787,0.713,596,6435 -Saint-Crépin-et-Carlucet,24392,518,18.954,1.386,1.255,561,6430 -Groléjac,24207,649,12.358,1.119,1.013,568,6413 -Miers,46193,453,25.192,1.598,1.447,600,6420 -Saint-Cirq-Madelon,46257,131,7.515,0.873,0.790,565,6412 -Arcambal,46007,997,23.459,1.542,1.396,581,6371 -Rignac,46238,266,9.614,0.987,0.894,599,6415 -Peyrillac-et-Millac,24325,221,6.824,0.832,0.753,575,6420 -Martel,46185,1599,35.540,1.898,1.718,587,6432 -Saint-Michel-de-Bannières,46283,327,7.745,0.886,0.802,597,6433 -Masclat,46186,357,9.852,0.999,0.905,571,6418 -Crégols,46081,79,18.485,1.369,1.240,597,6374 -Prats-de-Carlux,24336,556,12.949,1.145,1.037,565,6424 -Francoulès,46112,222,13.626,1.175,1.064,579,6388 -Lanzac,46153,594,14.680,1.220,1.105,577,6421 -Cuzance,46086,595,29.502,1.729,1.565,580,6431 -Veyrignac,24574,334,9.670,0.990,0.896,570,6414 -Calès,46047,168,33.981,1.856,1.680,585,6408 -Milhac,46194,185,5.463,0.744,0.674,571,6411 -Simeyrols,24535,260,9.426,0.977,0.885,567,6425 -Bélaye,46022,230,18.654,1.375,1.245,555,6376 -Orliaguet,24314,105,9.477,0.980,0.887,570,6424 -Trentels,47315,852,19.599,1.409,1.276,527,6376 -Sainte-Mondane,24470,262,9.479,0.980,0.887,571,6414 -Nadaillac,24301,368,27.662,1.674,1.516,571,6440 -Mayrac,46337,256,7.820,0.890,0.806,587,6424 -Fumel,47106,4846,22.752,1.518,1.374,540,6385 -Reilhaguet,46236,131,15.970,1.272,1.152,580,6408 -Estivals,19077,126,8.943,0.952,0.862,578,6437 -Cazoulès,24089,462,3.657,0.609,0.551,577,6421 -Archignac,24012,355,23.367,1.539,1.393,562,6438 -Branceilles,19029,277,11.578,1.083,0.981,597,6433 -Floirac,46106,267,19.062,1.390,1.259,598,6422 -Fajoles,46098,290,8.879,0.948,0.858,570,6414 -Couzou,46078,92,21.620,1.480,1.340,588,6409 -Creysse,46084,296,9.545,0.983,0.890,587,6423 -Sénaillac-Lauzès,46303,128,26.046,1.625,1.471,596,6390 -Montvalent,46208,285,27.545,1.671,1.513,594,6419 -Nabirat,24300,373,16.867,1.307,1.183,566,6409 -Pauilhac,32306,631,25.451,1.606,1.454,511,6314 -Saint-Vincent-le-Paluel,24512,272,7.052,0.845,0.765,565,6421 -Montestruc-sur-Gers,32286,709,16.371,1.288,1.166,511,6304 -Nadaillac-de-Rouge,46209,160,7.724,0.885,0.801,578,6417 -Saint-Germain-du-Bel-Air,46267,568,21.410,1.473,1.334,575,6399 -Saint-Julien-Maumont,19217,166,6.422,0.807,0.731,597,6437 -Souillac,46309,3342,26.105,1.626,1.472,576,6428 -Le Roc,46239,216,7.011,0.843,0.763,575,6421 -Payrignac,46216,683,21.566,1.478,1.338,567,6406 -Carennac,46058,408,19.081,1.390,1.259,601,6426 -Labruyère-Dorsa,31256,277,2.214,0.474,0.429,577,6258 -Lamothe-Fénelon,46152,286,13.921,1.188,1.076,574,6418 -Saint-Sozy,46293,460,8.749,0.942,0.853,587,6420 -Brignac,56025,184,13.245,1.158,1.048,297,6791 -Meyronne,46192,283,8.155,0.909,0.823,590,6419 -Lachapelle-Auzac,46145,794,31.480,1.786,1.617,580,6431 -Saint-Julien-de-Lampon,24432,618,13.383,1.164,1.054,574,6418 -Lentillac-du-Causse,46167,99,13.664,1.177,1.066,594,6386 -Gramat,46128,3589,57.139,2.406,2.178,595,6411 -Jayac,24215,178,18.218,1.359,1.230,571,6440 -Gaudent,65186,42,1.598,0.402,0.364,499,6214 -Chauffour-sur-Vell,19050,422,7.323,0.861,0.780,597,6437 -Rayet,47219,178,10.028,1.008,0.913,523,6401 -Carlux,24081,628,13.253,1.159,1.049,573,6422 -Saint-Étienne-de-Villeréal,47240,298,14.541,1.214,1.099,522,6391 -Loupiac,46178,260,12.776,1.138,1.030,578,6417 -Salignac-Eyvigues,24516,1168,44.578,2.125,1.924,576,6428 -Anthé,47011,203,14.141,1.197,1.084,536,6363 -La Chapelle-aux-Saints,19044,259,4.933,0.707,0.640,599,6431 -Salles,47284,290,21.576,1.479,1.339,530,6381 -Castelfranc,46062,416,5.468,0.744,0.674,558,6382 -Montagnac-sur-Lède,47181,265,19.620,1.410,1.277,531,6388 -Condezaygues,47070,856,10.879,1.050,0.951,533,6376 -Pontcirq,46223,146,8.870,0.948,0.858,564,6382 -Floressas,46107,159,13.840,1.184,1.072,552,6377 -Saint-Martin-le-Redon,46277,209,10.689,1.041,0.943,544,6386 -Lacapelle-Cabanac,46142,163,8.060,0.904,0.818,547,6375 -Touzac,46321,375,4.096,0.644,0.583,545,6378 -Dausse,47079,506,6.985,0.841,0.761,533,6368 -Vire-sur-Lot,46336,357,7.763,0.887,0.803,547,6378 -Monségur,47178,401,11.349,1.072,0.971,532,6381 -Lacaussade,47124,218,10.321,1.023,0.926,526,6379 -Sauzet,46301,515,10.975,1.055,0.955,563,6368 -Mauroux,46187,522,16.339,1.287,1.165,547,6375 -Saint-Vite,47283,1167,5.568,0.751,0.680,536,6378 -Cazideroque,47064,230,12.045,1.105,1.000,534,6367 -Duravel,46089,970,15.007,1.233,1.116,545,6381 -Montaut,47184,246,14.199,1.199,1.086,514,6394 -Montcabrier,46199,354,21.788,1.486,1.345,547,6388 -Les Junies,46134,267,13.079,1.151,1.042,560,6381 -Penne-d'Agenais,47203,2352,47.101,2.185,1.978,528,6363 -Saint-Aubin,47230,428,18.495,1.369,1.240,527,6376 -Carnac-Rouffiac,46060,215,13.483,1.169,1.058,559,6372 -Trémons,47314,389,13.551,1.172,1.061,529,6372 -Grézels,46130,224,10.857,1.049,0.950,555,6376 -Labastide-du-Vert,46136,261,10.445,1.029,0.932,560,6381 -Gavaudun,47109,280,21.437,1.474,1.335,531,6391 -Monsempron-Libos,47179,2101,9.033,0.957,0.866,537,6378 -Prayssac,46225,2406,24.210,1.566,1.418,556,6378 -Préchac,32329,179,12.747,1.136,1.029,503,6302 -Saint-Créac,32371,85,8.301,0.917,0.830,524,6317 -L'Isle-Bouzon,32158,244,16.019,1.274,1.153,520,6318 -Montfaucon,46204,588,26.455,1.637,1.482,592,6400 -Marsolan,32239,465,26.629,1.643,1.488,505,6320 -Maxou,46188,304,12.548,1.128,1.021,574,6382 -Taybosc,32441,65,5.931,0.775,0.702,518,6300 -Bajonnette,32026,103,7.569,0.876,0.793,518,6306 -Goutz,32150,197,8.424,0.924,0.837,519,6303 -Castelnau-d'Arbieu,32078,235,16.272,1.284,1.163,518,6311 -Avezan,32023,104,5.689,0.759,0.687,524,6313 -Lamothe-Goas,32188,77,7.208,0.855,0.774,506,6310 -Gramont,82074,145,13.483,1.169,1.058,522,6320 -Céran,32101,218,10.542,1.034,0.936,516,6305 -Moirax,47169,1152,16.355,1.287,1.165,508,6343 -Saint-Brès,32366,78,5.956,0.777,0.704,519,6303 -La Sauvetat,32417,350,27.600,1.672,1.514,499,6308 -Cadeilhan,32068,134,8.444,0.925,0.838,522,6304 -Pis,32318,110,5.423,0.741,0.671,514,6302 -Miramont-Latour,32255,162,9.780,0.995,0.901,516,6300 -Saint-Clar,32370,1001,17.929,1.348,1.220,518,6314 -Brugnens,32066,258,13.510,1.170,1.059,519,6306 -Urdens,32457,288,7.732,0.885,0.801,513,6311 -Terraube,32442,378,25.232,1.599,1.448,505,6316 -Sainte-Radegonde,32405,183,9.870,1.000,0.905,505,6309 -Magnas,32223,63,3.187,0.568,0.514,516,6313 -Fleurance,32132,6101,43.528,2.100,1.901,515,6309 -Bivès,32055,130,10.025,1.008,0.913,524,6304 -Saint-Léonard,32385,182,13.364,1.164,1.054,522,6307 -Lectoure,32208,3663,86.039,2.953,2.674,516,6324 -Cahuzac,47044,305,8.055,0.903,0.818,505,6400 -Saint-Maurice-de-Lestapel,47259,108,7.828,0.891,0.807,506,6390 -Sérignac-Péboudou,47299,175,12.225,1.113,1.008,507,6392 -Monviel,47192,80,6.252,0.796,0.721,503,6388 -Estillac,47091,1982,8.062,0.904,0.818,506,6343 -Ségalas,47296,157,12.884,1.143,1.035,502,6390 -Montauriol,47183,176,9.955,1.004,0.909,507,6392 -Laburgade,46140,351,12.430,1.122,1.016,585,6368 -Nadillac,46210,62,7.441,0.868,0.786,583,6387 -Mechmont,46190,123,6.725,0.825,0.747,577,6389 -Sabadel-Lauzès,46245,80,8.760,0.942,0.853,588,6387 -Ussel,46323,90,6.800,0.830,0.751,581,6388 -Lugagnac,46179,127,15.808,1.266,1.146,601,6370 -Saint-Chamarand,46253,197,13.093,1.152,1.043,580,6400 -Les Pechs du Vers,46252,302,26.177,1.629,1.475,586,6385 -Bach,46013,181,21.064,1.461,1.323,597,6358 -Frayssinet,46113,305,16.833,1.306,1.182,582,6394 -Cœur de Causse,46138,958,70.983,2.682,2.428,580,6400 -Mouillac,82133,100,9.133,0.962,0.871,595,6353 -Lauzès,46162,179,6.394,0.805,0.729,588,6387 -Sauliac-sur-Célé,46299,122,25.148,1.596,1.445,598,6384 -Fontanes,46109,469,16.581,1.296,1.173,578,6358 -Cahors,46042,19405,64.876,2.564,2.321,581,6371 -Cras,46079,100,10.308,1.022,0.925,583,6387 -Saint-Pierre-Lafeuille,46340,368,8.489,0.927,0.839,576,6380 -Belmont-Sainte-Foi,46026,101,8.966,0.953,0.863,592,6356 -Belfort-du-Quercy,46023,511,36.042,1.911,1.730,581,6354 -Gigouzac,46119,264,9.927,1.003,0.908,576,6386 -Lunegarde,46181,100,10.339,1.024,0.927,598,6398 -Le Montat,46197,1040,22.526,1.511,1.368,578,6363 -Saint Géry-Vers,46268,861,31.768,1.794,1.624,583,6375 -Saint-Germain-Lespinasse,42231,1236,14.793,1.224,1.108,775,6559 -Sainte-Foy,71415,139,8.305,0.917,0.830,786,6578 -Chives,17105,338,20.651,1.447,1.310,461,6544 -La Gresle,42104,833,14.799,1.225,1.109,800,6552 -Saint-Maurice-lès-Châteauneuf,71463,575,10.905,1.051,0.952,796,6569 -Lamothe-Cassel,46151,139,11.457,1.077,0.975,580,6392 -Vaylats,46329,318,26.384,1.635,1.480,594,6356 -Flaujac-Poujols,46105,752,12.631,1.131,1.024,581,6371 -Lalbenque,46148,1672,52.248,2.301,2.083,580,6362 -Lamagdelaine,46149,704,10.491,1.031,0.933,580,6374 -Soulomès,46310,118,7.737,0.885,0.801,590,6395 -Ligny-en-Brionnais,71259,329,16.016,1.274,1.153,790,6575 -Fals,47092,367,9.441,0.978,0.885,517,6339 -Tour-de-Faure,46320,326,8.814,0.945,0.856,597,6374 -Labastide-de-Penne,82078,130,13.658,1.176,1.065,590,6354 -Bouziès,46037,80,8.248,0.914,0.828,592,6376 -Escamps,46091,205,12.317,1.117,1.011,589,6365 -Cénevières,46068,169,15.913,1.270,1.150,599,6370 -Quissac,46233,113,25.052,1.593,1.442,600,6396 -Berganty,46027,114,7.031,0.844,0.764,592,6371 -Coufouleux,81070,2819,27.162,1.659,1.502,598,6298 -Rabastens,81220,5565,66.633,2.598,2.352,594,6299 -Penne,81206,578,63.805,2.543,2.302,596,6328 -Saint-Antonin-Noble-Val,82155,1858,105.478,3.269,2.960,591,6340 -Puycelsi,81217,448,39.638,2.004,1.814,597,6317 -Tauriac,81293,334,10.134,1.013,0.917,589,6311 -Mirepoix-sur-Tarn,31346,1001,5.555,0.750,0.679,586,6303 -Villemur-sur-Tarn,31584,5882,46.805,2.178,1.972,581,6313 -Roquemaure,81228,442,15.943,1.271,1.151,591,6301 -Montvalen,81185,233,11.938,1.100,0.996,585,6307 -Layrac-sur-Tarn,31288,327,7.249,0.857,0.776,583,6303 -La Magdelaine-sur-Tarn,31311,1164,6.942,0.839,0.760,584,6303 -Bessières,31066,4050,16.718,1.301,1.178,584,6303 -Bondigoux,31073,534,7.512,0.872,0.790,581,6304 -Vacquiers,31563,1321,19.632,1.410,1.277,581,6302 -Canals,82028,754,7.384,0.865,0.783,565,6308 -Ondes,31403,718,6.648,0.821,0.743,563,6302 -Mézens,81164,480,5.990,0.779,0.705,591,6298 -Villaudric,31581,1526,12.158,1.110,1.005,575,6303 -Laroque-Timbaut,47138,1671,21.681,1.482,1.342,523,6353 -Fabas,82057,606,6.338,0.801,0.725,567,6309 -Saint-Rustice,31515,472,2.405,0.494,0.447,564,6302 -Pompignan,82142,1453,12.103,1.107,1.002,568,6303 -Castelnau-d'Estrétefonds,31118,6226,28.635,1.703,1.542,563,6302 -Riec-sur-Bélon,29236,4190,54.637,2.353,2.130,197,6766 -Villematier,31583,1031,15.002,1.233,1.116,577,6302 -Villebon-sur-Yvette,91661,10472,7.513,0.872,0.790,641,6843 -Fronton,31202,6009,46.004,2.159,1.955,572,6311 -Sempesserre,32429,299,21.065,1.461,1.323,508,6329 -Lagarde,32176,119,8.872,0.948,0.858,502,6322 -Sauvagnas,47288,528,13.616,1.175,1.064,518,6354 -Cuq,47076,262,16.933,1.310,1.186,516,6331 -Lafox,47128,1153,5.100,0.719,0.651,517,6342 -Gimbrède,32146,294,24.959,1.590,1.440,520,6329 -Sistels,82181,213,13.555,1.172,1.061,524,6330 -Aubiac,47016,1102,14.082,1.194,1.081,504,6343 -Saint-Robert,47273,182,6.717,0.825,0.747,522,6351 -Saint-Romain-le-Noble,47274,432,8.523,0.929,0.841,523,6341 -Lusignan-Petit,47154,356,7.297,0.860,0.779,499,6355 -Saint-Jean-de-Thurac,47248,552,5.087,0.718,0.650,520,6341 -Bon-Encontre,47032,6217,20.460,1.440,1.304,513,6349 -Peyrecave,32314,70,5.092,0.718,0.650,526,6325 -Miradoux,32253,502,34.790,1.877,1.699,516,6326 -Sainte-Colombe-en-Bruilhois,47238,1662,21.243,1.467,1.328,502,6349 -Layrac,47145,3591,38.293,1.970,1.784,508,6338 -Madaillan,47155,651,24.395,1.572,1.423,507,6354 -Riencourt-lès-Bapaume,62708,37,3.437,0.590,0.534,691,7000 -Roquefort,47225,1845,7.562,0.875,0.792,507,6346 -Marmont-Pachas,47158,161,8.050,0.903,0.818,508,6334 -Moliets-et-Maa,40187,1162,27.812,1.679,1.520,351,6321 -La Romieu,32345,573,27.815,1.679,1.520,496,6324 -Saint-Martin-de-Goyne,32391,129,5.716,0.761,0.689,506,6324 -Saint-Mézard,32396,220,15.155,1.239,1.122,508,6327 -Flamarens,32131,144,14.476,1.211,1.096,521,6328 -Sauveterre-Saint-Denis,47293,406,8.239,0.914,0.828,514,6343 -Laplume,47137,1426,32.861,1.825,1.652,503,6344 -Sainte-Mère,32395,218,9.505,0.981,0.888,516,6325 -Le Passage,47201,9548,12.907,1.144,1.036,510,6343 -Brax,47040,2061,8.867,0.948,0.858,504,6349 -Berrac,32047,99,8.038,0.902,0.817,502,6327 -Astaffort,47015,2057,35.420,1.894,1.715,514,6328 -Pouy-Roquelaure,32328,123,11.043,1.058,0.958,500,6328 -Catus,46064,871,21.326,1.470,1.331,570,6389 -Pergain-Taillac,32311,307,19.229,1.396,1.264,510,6331 -Agen,47001,33569,11.524,1.081,0.979,509,6349 -Foulayronnes,47100,5368,29.002,1.714,1.552,511,6350 -Caudecoste,47060,1054,17.204,1.320,1.195,517,6337 -Sérignac-sur-Garonne,47300,1161,8.915,0.950,0.860,499,6347 -Larroque-Engalin,32195,50,6.253,0.796,0.721,505,6324 -Dunes,82050,1209,23.140,1.531,1.386,520,6335 -Saint-Sixte,47279,361,5.872,0.771,0.698,524,6339 -Saint-Hilaire-de-Lusignan,47246,1497,16.865,1.307,1.183,507,6354 -Castelculier,47051,2359,14.979,1.232,1.115,514,6345 -Villesèque,46335,399,23.432,1.541,1.395,570,6368 -Saint-Avit-Frandat,32364,99,7.629,0.879,0.796,510,6324 -Lamontjoie,47133,523,17.857,1.345,1.218,504,6332 -Boé,47031,5583,16.679,1.300,1.177,515,6344 -Pont-du-Casse,47209,4244,19.270,1.397,1.265,518,6351 -La Sauvetat-de-Savères,47289,539,6.916,0.837,0.758,523,6348 -Saint-Nicolas-de-la-Balerme,47262,406,4.764,0.695,0.629,520,6341 -Montgesty,46205,335,11.918,1.099,0.995,565,6390 -Cambayrac,46050,153,7.354,0.863,0.781,567,6371 -Boissières,46032,395,13.132,1.153,1.044,574,6387 -Thédirac,46316,302,16.485,1.292,1.170,567,6387 -Martagny,27392,152,4.386,0.667,0.604,602,6921 -Nuzéjouls,46211,382,4.763,0.695,0.629,569,6383 -Douelle,46088,810,9.144,0.963,0.872,571,6377 -Parnac,46214,373,5.950,0.776,0.703,566,6379 -Labastide-Marnhac,46137,1217,28.763,1.707,1.546,571,6364 -Mercuès,46191,1072,7.202,0.854,0.773,572,6381 -Trespoux-Rassiels,46322,810,20.585,1.444,1.307,566,6370 -Espère,46095,1029,6.262,0.797,0.722,571,6382 -Uzech,46324,218,12.227,1.113,1.008,570,6388 -Calamane,46046,458,7.617,0.879,0.796,574,6380 -Pern,46217,458,25.817,1.617,1.464,578,6361 -Lavercantière,46164,241,15.015,1.233,1.116,570,6394 -Saint-Médard,46280,173,11.745,1.091,0.988,566,6383 -Saint-Denis-Catus,46264,172,10.765,1.044,0.945,574,6387 -Vaïssac,82184,855,37.622,1.952,1.767,588,6324 -Saint-Vincent-d'Autéjac,82174,283,16.398,1.289,1.167,580,6339 -Montastruc,82120,324,4.669,0.688,0.623,564,6338 -Réalville,82149,1919,25.418,1.605,1.453,576,6340 -Caussade,82037,6908,45.917,2.157,1.953,582,6337 -Montgaillard,81178,387,15.153,1.239,1.122,589,6310 -Villebrumier,82194,1376,11.303,1.070,0.969,578,6313 -Larroque,81136,163,18.275,1.361,1.232,593,6325 -Cayriech,82040,275,7.734,0.885,0.801,588,6345 -Albias,82002,3226,21.698,1.483,1.343,574,6335 -Corbarieu,82044,1659,13.057,1.150,1.041,571,6314 -Puylaroque,82148,694,35.499,1.897,1.718,593,6355 -Montricoux,82132,1192,26.450,1.637,1.482,588,6336 -Castelnau Montratier-Sainte Alauzie,46063,1902,85.317,2.940,2.662,570,6360 -Saint-Cirq,82159,544,16.052,1.275,1.154,591,6338 -Labastide-Saint-Pierre,82079,3722,20.693,1.448,1.311,568,6319 -Monteils,82126,1362,12.159,1.110,1.005,587,6341 -Molières,82113,1170,38.507,1.975,1.788,575,6343 -Bruniquel,82026,611,33.192,1.834,1.661,592,6334 -Lavaurette,82095,216,13.726,1.179,1.067,593,6344 -Saint-Urcisse,81272,211,12.121,1.108,1.003,585,6316 -Saint-Nauphary,82167,1832,24.705,1.582,1.432,572,6319 -La Salvetat-Belmontet,82176,807,18.690,1.376,1.246,584,6319 -Nohic,82135,1359,12.609,1.130,1.023,575,6309 -Puygaillard-de-Quercy,82145,394,17.385,1.327,1.201,588,6324 -Septfonds,82179,2200,27.222,1.661,1.504,593,6344 -Nègrepelisse,82134,5613,48.919,2.226,2.015,589,6332 -Montalzat,82119,660,27.537,1.670,1.512,586,6347 -Le Born,31077,525,10.914,1.052,0.952,584,6314 -Génébrières,82066,651,18.491,1.369,1.240,576,6327 -Lapenche,82092,271,8.070,0.904,0.818,584,6349 -Montvalezan,73176,687,25.990,1.623,1.469,1000,6508 -Campsas,82027,1353,15.184,1.240,1.123,565,6313 -Bressols,82025,3697,20.431,1.439,1.303,568,6319 -Valence,82186,5247,13.563,1.172,1.061,529,6339 -L'Honor-de-Cos,82076,1568,32.001,1.801,1.631,574,6335 -Beauvais-sur-Tescou,81024,349,12.202,1.112,1.007,585,6309 -Bourg-de-Visa,82022,386,14.474,1.211,1.096,534,6351 -Orgueil,82136,1637,13.983,1.190,1.077,572,6311 -Verlhac-Tescou,82192,518,22.548,1.511,1.368,582,6319 -Piquecos,82140,423,7.969,0.899,0.814,565,6338 -Saint-Étienne-de-Tulmont,82161,3752,21.404,1.473,1.334,579,6326 -Villemade,82195,733,9.227,0.967,0.876,562,6332 -Salvagnac,81276,1183,33.625,1.846,1.671,594,6318 -Varennes,82188,570,14.667,1.219,1.104,581,6313 -Reyniès,82150,859,10.045,1.009,0.914,574,6317 -Mirabel,82110,1029,32.219,1.807,1.636,575,6336 -Auty,82007,147,7.391,0.865,0.783,576,6345 -Montfermier,82128,104,6.563,0.815,0.738,574,6351 -Grayssas,47113,130,9.375,0.975,0.883,526,6342 -Cazals,82041,221,11.536,1.081,0.979,598,6336 -Asques,82004,134,10.622,1.037,0.939,538,6325 -Bioule,82018,1108,20.504,1.441,1.305,581,6335 -Labarthe,82077,388,23.275,1.536,1.391,563,6346 -Roquecor,82151,416,20.974,1.458,1.320,536,6363 -Engayrac,47087,167,10.077,1.010,0.914,533,6352 -Montagudet,82116,196,12.251,1.114,1.009,546,6354 -Montaigu-de-Quercy,82117,1341,76.751,2.789,2.525,539,6358 -Beauville,47025,570,23.292,1.536,1.391,532,6358 -Angeville,82003,239,8.376,0.921,0.834,540,6323 -Castelsagrat,82032,582,22.659,1.515,1.372,539,6346 -Saint-Paul-d'Espis,82170,584,26.071,1.625,1.471,541,6342 -Saint-Michel,82166,242,13.387,1.165,1.055,534,6327 -Massoulès,47162,209,7.923,0.896,0.811,532,6363 -Lamagistère,82089,1150,9.129,0.962,0.871,523,6341 -Lachapelle,82083,116,10.897,1.051,0.952,524,6323 -Goudourville,82073,959,11.303,1.070,0.969,534,6339 -Espalais,82054,395,7.795,0.889,0.805,530,6335 -Auradou,47017,383,11.252,1.068,0.967,525,6360 -Moissac,82112,12652,85.922,2.951,2.672,541,6342 -Dondas,47082,214,14.467,1.211,1.096,529,6352 -Saint-Cirice,82158,159,8.964,0.953,0.863,528,6330 -Touffailles,82182,349,24.763,1.584,1.434,540,6356 -Mansonville,82102,288,15.408,1.249,1.131,528,6329 -Montesquieu,82127,766,28.649,1.704,1.543,549,6342 -Saint-Aignan,82152,410,3.267,0.575,0.521,545,6328 -Saint-Nicolas-de-la-Grave,82169,2243,29.152,1.719,1.556,538,6330 -Perville,82138,135,9.297,0.971,0.879,529,6344 -Clermont-Soubiran,47067,377,10.384,1.026,0.929,529,6339 -Gasques,82065,413,13.372,1.164,1.054,531,6341 -Brassac,82024,252,20.279,1.433,1.297,536,6347 -Le Pin,82139,123,4.721,0.692,0.627,537,6330 -Cauzac,47062,426,14.608,1.217,1.102,526,6353 -Pommevic,82141,560,5.810,0.767,0.694,536,6335 -Auvillar,82008,919,15.644,1.259,1.140,529,6329 -Saint-Loup,82165,516,14.121,1.196,1.083,530,6335 -Massels,47161,115,6.216,0.794,0.719,530,6361 -Caumont,82035,324,15.214,1.242,1.125,539,6329 -Boudou,82019,727,12.469,1.124,1.018,544,6334 -Saint-Martin-de-Beauville,47255,179,7.584,0.877,0.794,526,6352 -Castelferrus,82030,467,8.470,0.926,0.838,547,6327 -Bardigues,82010,294,11.729,1.090,0.987,530,6326 -Donzac,82049,1038,13.330,1.162,1.052,524,6337 -Miramont-de-Quercy,82111,330,14.886,1.228,1.112,545,6347 -Montbarla,82122,170,7.401,0.866,0.784,547,6347 -Arnac-sur-Dourdou,12009,35,16.533,1.294,1.172,697,6293 -Golfech,82072,978,9.547,0.984,0.891,529,6339 -Castelmayran,82031,1202,15.965,1.272,1.152,545,6331 -Saint-Arroumex,82156,155,9.717,0.992,0.898,540,6323 -Malause,82101,1156,11.833,1.095,0.991,535,6334 -Merles,82109,204,7.281,0.859,0.778,538,6333 -Saint-Amans-du-Pech,82153,209,6.767,0.828,0.750,534,6358 -Fauroux,82060,241,13.173,1.155,1.046,543,6352 -Saint-Jean-du-Bouzet,82163,53,7.749,0.886,0.802,530,6321 -Saint-Clair,82160,278,8.412,0.923,0.836,535,6340 -Saint-Antoine,32358,204,9.808,0.997,0.903,524,6330 -Saint-Beauzeil,82157,100,9.852,0.999,0.905,531,6361 -Gimat,82068,225,10.167,1.015,0.919,534,6312 -Solomiac,32436,478,13.873,1.186,1.074,532,6304 -Poupas,82143,81,10.192,1.016,0.920,528,6319 -Maubec,82106,138,12.822,1.140,1.032,531,6301 -Montbartier,82123,1284,15.085,1.236,1.119,560,6313 -Aucamville,82005,1348,23.224,1.534,1.389,556,6299 -Avensac,32021,78,4.856,0.701,0.635,529,6306 -Bellesserre,31062,112,3.422,0.589,0.533,547,6302 -Estramiac,32129,139,9.764,0.995,0.901,529,6306 -Belbèze-en-Lomagne,82015,132,3.673,0.610,0.552,545,6315 -Montech,82125,6297,49.917,2.249,2.036,554,6316 -Monbéqui,82114,633,6.939,0.838,0.759,560,6313 -Maumusson,82107,49,5.099,0.719,0.651,532,6313 -Fajolles,82058,97,9.348,0.973,0.881,539,6319 -Grisolles,82075,4056,17.539,1.333,1.207,561,6307 -Gaudonville,32139,111,7.413,0.867,0.785,529,6311 -Homps,32154,104,9.368,0.974,0.882,524,6304 -Finhan,82062,1521,11.964,1.101,0.997,556,6312 -Larrazet,82093,676,15.062,1.235,1.118,547,6318 -Labourgade,82081,178,5.510,0.747,0.676,549,6319 -Montgaillard,82129,137,9.580,0.985,0.892,528,6319 -Le Burgaud,31093,955,24.349,1.571,1.422,551,6304 -Castéron,32084,51,11.122,1.062,0.962,528,6316 -Goas,82071,36,2.705,0.524,0.474,534,6303 -Verdun-sur-Garonne,82190,4745,39.607,2.003,1.814,557,6304 -Beaumont-de-Lomagne,82013,3753,46.448,2.169,1.964,545,6307 -Coutures,82046,103,6.945,0.839,0.760,538,6318 -Mauroux,32248,130,10.091,1.011,0.915,524,6313 -Tournecoupe,32452,267,19.168,1.394,1.262,524,6307 -Marignac,82103,114,5.072,0.717,0.649,531,6307 -Monfort,32269,490,22.700,1.517,1.374,522,6304 -Lafitte,82086,231,4.687,0.689,0.624,549,6323 -Saint-Martin-Longueau,60587,1507,3.637,0.607,0.550,671,6915 -Lavit,82097,1572,26.446,1.637,1.482,537,6321 -Cumont,82047,53,7.386,0.865,0.783,532,6308 -Bourret,82023,899,16.523,1.294,1.172,554,6319 -Lamothe-Cumont,82091,118,5.406,0.740,0.670,534,6312 -Saint-Sardos,82173,1121,26.861,1.650,1.494,549,6316 -Balignac,82009,39,4.065,0.642,0.581,528,6319 -Glatens,82070,75,2.334,0.486,0.440,531,6313 -Esparsac,82055,245,17.552,1.334,1.208,535,6312 -Pessoulens,32313,142,12.667,1.133,1.026,532,6308 -Comberouger,82043,281,12.375,1.120,1.014,546,6312 -Bessens,82017,1502,9.626,0.988,0.895,560,6309 -Gensac,82067,117,11.608,1.084,0.981,538,6318 -Marsac,82104,171,14.951,1.231,1.115,525,6316 -Mas-Grenier,82105,1337,24.496,1.575,1.426,554,6316 -Garganvillar,82063,682,22.315,1.504,1.362,542,6320 -Vigueron,82193,135,6.347,0.802,0.726,546,6312 -Faudoas,82059,292,19.108,1.391,1.259,535,6308 -Savenès,82178,799,22.418,1.507,1.364,553,6302 -Cabanac-Séguenville,31096,163,10.213,1.017,0.921,538,6301 -Le Causé,82036,139,9.392,0.976,0.884,539,6302 -Sauveterre,82177,175,17.458,1.330,1.204,561,6356 -Beaupuy,82014,270,11.926,1.099,0.995,551,6305 -Lizac,82099,507,9.532,0.983,0.890,553,6337 -Tréjouls,82183,244,13.932,1.188,1.076,559,6352 -Lherm,46171,230,13.467,1.168,1.058,561,6385 -Pomarède,46222,180,7.078,0.847,0.767,554,6385 -Meauzac,82108,1345,11.811,1.094,0.991,558,6331 -Cassagnes,46061,189,11.534,1.081,0.979,549,6388 -Marminiac,46184,366,22.956,1.525,1.381,559,6400 -Barry-d'Islemade,82011,933,11.363,1.073,0.972,560,6335 -La Ville-Dieu-du-Temple,82096,3189,26.195,1.629,1.475,554,6331 -Lacourt-Saint-Pierre,82085,1173,14.894,1.228,1.112,558,6325 -Saint-Porquier,82171,1407,16.410,1.289,1.167,551,6324 -Cazes-Mondenard,82042,1183,58.224,2.429,2.199,555,6352 -Saint-Amans-de-Pellagal,82154,214,14.531,1.213,1.098,549,6351 -Villefranche-du-Périgord,24585,704,25.261,1.600,1.449,551,6393 -Albefeuille-Lagarde,82001,628,8.089,0.905,0.819,561,6327 -Lafrançaise,82087,2860,50.393,2.260,2.046,557,6337 -Montcuq-en-Quercy-Blanc,46201,1707,78.467,2.820,2.553,562,6360 -Les Barthes,82012,563,8.236,0.913,0.827,554,6331 -Montlauzun,46206,125,6.478,0.810,0.733,555,6356 -Durfort-Lacapelette,82051,860,35.574,1.899,1.719,556,6341 -Les Arques,46008,197,15.058,1.235,1.118,558,6389 -Montbeton,82124,4204,16.255,1.283,1.162,564,6324 -Vergt-de-Biron,24572,196,16.337,1.287,1.165,530,6391 -Castelsarrasin,82033,13929,76.720,2.788,2.524,545,6328 -Mazeyrolles,24263,316,30.497,1.758,1.592,537,6397 -Goujounac,46126,224,10.277,1.020,0.924,558,6390 -La Croix-Blanche,47075,1013,13.063,1.150,1.041,518,6356 -Besse,24039,156,16.651,1.299,1.176,549,6400 -Vazerac,82189,712,32.718,1.821,1.649,563,6350 -Saint-Eutrope-de-Born,47241,682,38.326,1.971,1.785,514,6388 -Sainte-Juliette,82164,137,7.359,0.863,0.781,555,6358 -Monbalen,47171,421,12.982,1.147,1.039,520,6362 -Cordes-Tolosannes,82045,353,15.640,1.259,1.140,553,6320 -Labastide-du-Temple,82080,1142,10.941,1.053,0.953,558,6331 -Lendou-en-Quercy,46262,641,42.732,2.081,1.884,558,6358 -Villeréal,47324,1272,13.983,1.190,1.077,519,6395 -Bournel,47037,243,14.643,1.218,1.103,519,6395 -Dévillac,47080,132,9.254,0.968,0.876,527,6394 -Parranquet,47200,117,9.619,0.987,0.894,528,6400 -Lavaur,24232,68,9.288,0.970,0.878,544,6392 -Paulhiac,47202,307,22.390,1.506,1.364,528,6393 -Loubejac,24245,269,19.070,1.390,1.259,549,6389 -Rives,47223,230,12.794,1.139,1.031,520,6400 -Sauveterre-la-Lémance,47292,518,23.583,1.546,1.400,542,6393 -Saint-Cernin-de-l'Herm,24386,233,16.764,1.303,1.180,546,6395 -Laussou,47141,300,17.205,1.320,1.195,525,6387 -Mazières-Naresse,47164,128,8.931,0.951,0.861,517,6400 -Saint-Martin-de-Villeréal,47256,109,8.262,0.915,0.828,528,6397 -Soulaures,24542,91,10.379,1.025,0.928,537,6397 -Gaugeac,24195,115,10.245,1.019,0.923,533,6400 -Doudrac,47083,83,8.663,0.937,0.848,517,6397 -Biron,24043,177,13.096,1.152,1.043,532,6397 -Bazincourt-sur-Epte,27045,757,10.982,1.055,0.955,611,6915 -Beaugas,47023,359,22.691,1.516,1.373,512,6380 -Prayssas,47213,999,26.610,1.642,1.487,503,6356 -Montastruc,47182,278,24.776,1.584,1.434,501,6383 -Saint-Étienne-de-Fougères,47239,821,9.955,1.004,0.909,505,6369 -Bias,47027,3041,12.325,1.117,1.011,513,6369 -Sembas,47297,140,12.612,1.130,1.023,514,6362 -Monflanquin,47175,2307,62.407,2.515,2.277,522,6387 -Montpezat,47190,567,24.284,1.569,1.421,506,6360 -Allez-et-Cazeneuve,47006,578,10.786,1.045,0.946,513,6369 -Casseneuil,47049,2372,18.134,1.355,1.227,512,6376 -Pujols,47215,3611,25.218,1.598,1.447,520,6364 -Monbahus,47170,603,32.101,1.803,1.632,507,6387 -Pailloles,47198,337,9.244,0.968,0.876,511,6377 -Sainte-Livrade-sur-Lot,47252,6378,31.072,1.774,1.606,509,6366 -Hautefage-la-Tour,47117,971,20.793,1.451,1.314,524,6365 -Lédat,47146,1396,12.530,1.127,1.020,512,6372 -Fongrave,47099,625,9.488,0.980,0.887,502,6368 -Cancon,47048,1349,24.537,1.577,1.428,514,6388 -Cassignas,47050,123,7.929,0.896,0.811,522,6360 -Saint-Pastour,47265,394,14.664,1.219,1.104,506,6381 -Boudy-de-Beauregard,47033,412,10.179,1.016,0.920,514,6384 -Lacépède,47125,323,11.331,1.071,0.970,496,6363 -Villeneuve-sur-Lot,47323,22422,81.403,2.872,2.600,521,6377 -Sainte-Colombe-de-Villeneuve,47237,494,19.023,1.388,1.257,511,6364 -Le Temple-sur-Lot,47306,1016,17.014,1.313,1.189,505,6370 -Saint-Antoine-de-Ficalba,47228,718,11.021,1.057,0.957,515,6363 -Moulinet,47193,194,14.699,1.220,1.105,507,6383 -Pinel-Hauterive,47206,570,21.912,1.490,1.349,506,6381 -Dolmayrac,47081,710,19.481,1.405,1.272,510,6363 -Castelnaud-de-Gratecambe,47055,499,17.325,1.325,1.200,519,6381 -Thermes-Magnoac,65442,214,10.939,1.053,0.953,505,6249 -Lalanne,65249,99,6.470,0.810,0.733,502,6244 -Betbèze,65088,45,3.439,0.590,0.534,502,6246 -Saint-Michel,31505,316,15.564,1.256,1.137,542,6229 -Gensac-de-Boulogne,31218,133,10.973,1.054,0.954,503,6242 -Devèze,65155,65,5.121,0.720,0.652,502,6246 -Lescure,9164,505,26.012,1.623,1.469,554,6214 -Saint-Loup-en-Comminges,31498,35,4.718,0.691,0.626,503,6240 -Couladère,31153,433,2.292,0.482,0.436,546,6236 -Mont-d'Astarac,32280,109,8.343,0.919,0.832,506,6249 -Villemur,65475,58,3.660,0.609,0.551,500,6243 -Saint-Girons,9261,6353,19.005,1.388,1.257,549,6213 -Chélan,32103,175,13.976,1.190,1.077,498,6251 -Bazordan,65074,113,9.316,0.972,0.880,503,6240 -Baye,29005,1149,7.338,0.862,0.780,206,6770 -Nizan-Gesse,31398,80,8.685,0.938,0.849,502,6238 -Montberaud,31362,209,15.993,1.273,1.153,547,6230 -Arrouède,32010,109,6.518,0.813,0.736,505,6256 -Clermont-Savès,32105,298,5.202,0.726,0.657,539,6284 -Cabas-Loumassès,32067,51,4.245,0.656,0.594,506,6255 -Samatan,32410,2378,33.741,1.849,1.674,533,6265 -Manent-Montané,32228,93,7.605,0.878,0.795,507,6253 -Sariac-Magnoac,65404,152,10.927,1.052,0.952,501,6251 -Espaon,32124,188,9.024,0.956,0.866,526,6262 -Bédéchan,32040,160,7.904,0.895,0.810,523,6277 -Vals,9323,101,4.114,0.646,0.585,599,6222 -Nizas,32295,154,4.177,0.651,0.589,539,6269 -Endoufielle,32121,537,17.284,1.323,1.198,541,6278 -Savignac-Mona,32421,138,6.911,0.837,0.758,540,6266 -Empeaux,31166,249,4.563,0.680,0.616,542,6273 -Lahage,31266,215,7.596,0.877,0.794,541,6263 -Aurimont,32018,201,8.155,0.909,0.823,524,6275 -Lombez,32213,2109,19.660,1.411,1.278,528,6267 -Montamat,32277,134,6.569,0.816,0.739,525,6270 -Montbrun-Bocage,31365,477,30.480,1.757,1.591,558,6223 -Pellefigue,32309,117,12.799,1.139,1.031,522,6266 -Tirent-Pontéjac,32447,86,7.510,0.872,0.790,521,6276 -Cazaux-Savès,32098,314,5.649,0.757,0.685,539,6275 -Auradé,32016,670,21.625,1.480,1.340,542,6273 -Saint-Martin-Gimois,32392,91,6.751,0.827,0.749,522,6273 -Giscaro,32148,96,5.467,0.744,0.674,533,6280 -Monferran-Savès,32268,794,25.049,1.593,1.442,534,6282 -Montgras,31382,104,3.981,0.635,0.575,547,6262 -Carbonne,31107,5607,26.731,1.646,1.490,559,6243 -Marestaing,32234,313,8.492,0.928,0.840,541,6278 -Cérizols,9094,143,14.509,1.212,1.097,544,6228 -Pébées,32308,99,4.047,0.640,0.579,541,6263 -L'Isle-Jourdain,32160,8729,70.880,2.680,2.427,550,6282 -Sabonnères,31464,310,12.456,1.123,1.017,541,6264 -Taurignan-Castet,9307,170,6.829,0.832,0.753,544,6222 -Castillon-Savès,32090,334,12.029,1.104,1.000,535,6274 -Montiron,32288,139,10.599,1.036,0.938,529,6279 -Saint-Soulan,32407,161,12.213,1.112,1.007,528,6268 -Le Cambout,22027,442,18.263,1.360,1.231,279,6785 -Saint-André,32356,119,5.605,0.754,0.683,527,6277 -Mongausy,32270,74,7.457,0.869,0.787,520,6270 -Réclainville,28313,190,9.963,1.005,0.910,608,6805 -Pompiac,32322,188,10.218,1.017,0.921,537,6273 -Monblanc,32261,350,12.983,1.147,1.039,540,6263 -Aleu,9005,126,14.038,1.193,1.080,558,6198 -Saint-Caprais,32467,141,7.903,0.895,0.810,521,6279 -Frégouville,32134,343,12.285,1.116,1.010,534,6274 -Puylausic,32336,164,9.763,0.995,0.901,533,6260 -Rieucazé,31452,52,2.068,0.458,0.415,517,6221 -Montégut-Savès,32284,65,3.682,0.611,0.553,536,6262 -Gaujac,32140,63,5.046,0.715,0.647,523,6265 -Sabaillan,32353,149,10.923,1.052,0.952,521,6265 -Maurens,32247,313,12.956,1.146,1.038,529,6279 -Seysses-Savès,32432,242,13.243,1.158,1.048,539,6269 -Noilhan,32297,376,18.181,1.357,1.229,534,6274 -Bragayrac,31087,324,8.345,0.920,0.833,541,6267 -Lahas,32182,179,14.691,1.220,1.105,528,6277 -L'Isle-Arné,32157,179,6.934,0.838,0.759,520,6283 -Sauveterre,32418,259,16.714,1.301,1.178,528,6264 -Bézéril,32051,127,9.655,0.989,0.895,530,6270 -Montadet,32276,77,5.178,0.724,0.656,529,6262 -Rimont,9246,528,28.991,1.714,1.552,562,6207 -Saint-Loube,32387,94,6.103,0.786,0.712,540,6263 -Gimont,32147,2989,27.856,1.680,1.521,534,6283 -Labastide-Savès,32171,171,3.628,0.606,0.549,536,6273 -Eycheil,9119,555,4.890,0.704,0.637,548,6206 -Juilles,32165,221,13.973,1.190,1.077,523,6283 -Mauvezin-de-Sainte-Croix,9184,36,5.295,0.732,0.663,555,6222 -Thouars-sur-Arize,9310,51,2.346,0.488,0.442,556,6232 -Saint-Élix-le-Château,31476,889,10.624,1.038,0.940,551,6245 -Montseron,9212,90,8.797,0.944,0.855,564,6213 -Caumont,9086,324,9.325,0.972,0.880,545,6213 -Montgazin,31379,195,6.922,0.837,0.758,564,6247 -Morainville,28268,26,3.863,0.626,0.567,612,6809 -Gouzens,31226,83,5.665,0.758,0.686,552,6232 -Bax,31047,88,6.050,0.783,0.709,559,6239 -Méras,9186,107,3.686,0.611,0.553,561,6234 -Moulis,9214,763,36.727,1.929,1.747,541,6210 -Mailholas,31312,35,2.977,0.549,0.497,559,6242 -Tourtouse,9313,141,11.943,1.100,0.996,550,6224 -Soueix-Rogalle,9299,422,13.783,1.182,1.070,549,6201 -La Bastide-de-Besplas,9038,379,10.300,1.022,0.925,558,6233 -Montgauch,9208,122,9.064,0.958,0.867,542,6211 -Saint-Lizier,9268,1418,9.068,0.959,0.868,549,6213 -Lacaugne,31258,206,6.142,0.789,0.714,561,6245 -Camarade,9073,181,27.910,1.682,1.523,557,6223 -Latrape,31280,365,19.383,1.401,1.268,561,6242 -Lapeyrère,31272,68,6.297,0.799,0.723,564,6235 -Montesquieu-Avantès,9204,247,16.582,1.296,1.173,557,6218 -Alos,9008,115,23.839,1.554,1.407,550,6202 -Alzen,9009,250,17.899,1.347,1.220,574,6208 -Taurignan-Vieux,9308,206,5.961,0.777,0.704,545,6217 -Salles-sur-Garonne,31525,563,5.771,0.765,0.693,550,6242 -Saint-Christaud,31474,247,10.829,1.047,0.948,546,6236 -Barjac,9037,41,2.761,0.529,0.479,549,6220 -Erp,9114,116,9.458,0.979,0.886,554,6207 -Gensac-sur-Garonne,31219,421,10.478,1.030,0.933,550,6236 -Goutevernisse,31225,181,4.807,0.698,0.632,552,6238 -Marsoulas,31321,124,2.415,0.495,0.448,537,6226 -Gajan,9128,311,8.190,0.911,0.825,548,6218 -Charlas,31138,237,11.412,1.075,0.973,511,6241 -Lacourt,9149,198,16.554,1.295,1.173,550,6202 -Loubaut,9172,28,2.411,0.494,0.447,559,6234 -Lorp-Sentaraille,9289,1455,6.207,0.793,0.718,546,6215 -Lavelanet-de-Comminges,31286,631,13.753,1.180,1.068,544,6241 -Arrout,9018,83,3.021,0.553,0.501,537,6207 -Biert,9057,314,23.674,1.549,1.402,564,6201 -Sainte-Croix-Volvestre,9257,631,19.953,1.422,1.287,552,6223 -Saugnacq-et-Muret,40295,1005,110.007,3.339,3.023,386,6379 -Montjoie-en-Couserans,9209,1082,29.916,1.741,1.576,553,6210 -Escoulis,31591,81,4.686,0.689,0.624,540,6224 -Latour,31279,77,6.244,0.795,0.720,562,6234 -Mérigon,9190,114,6.342,0.802,0.726,554,6221 -Rivèrenert,9247,177,28.890,1.711,1.549,557,6209 -Soulan,9301,367,23.887,1.556,1.409,560,6203 -Aspremont,5008,350,18.671,1.375,1.245,919,6380 -Salies-du-Salat,31523,1802,6.789,0.829,0.751,532,6224 -Contrazy,9098,71,8.447,0.925,0.838,554,6221 -Montégut-en-Couserans,9201,72,6.285,0.798,0.723,545,6213 -Montardit,9198,189,7.341,0.862,0.780,550,6219 -Lasserre,9158,243,8.628,0.935,0.847,550,6224 -Loubières,9174,329,3.056,0.556,0.503,584,6214 -Saint-Julien-sur-Garonne,31492,547,8.121,0.907,0.821,548,6238 -Vira,9340,163,5.347,0.736,0.666,597,6217 -Encourtiech,9110,89,4.852,0.701,0.635,553,6210 -Nalzen,9215,143,5.562,0.751,0.680,596,6203 -Cazères,31135,4883,19.769,1.415,1.281,546,6236 -Daumazan-sur-Arize,9105,724,13.904,1.187,1.075,562,6226 -Prayols,9236,377,7.886,0.894,0.809,583,6202 -Fabas,9120,351,23.249,1.535,1.390,546,6224 -Rieux-Volvestre,31455,2576,32.565,1.816,1.644,559,6242 -Fornex,9123,113,9.660,0.989,0.895,558,6233 -Montfa,9205,82,8.770,0.943,0.854,558,6223 -Foix,9122,9613,19.505,1.406,1.273,583,6208 -Montesquieu-Volvestre,31375,3020,59.969,2.465,2.232,551,6235 -Montoulieu,9210,409,14.295,1.203,1.089,583,6201 -Dalou,9104,770,7.751,0.886,0.802,590,6217 -Miremont,31345,2437,22.579,1.513,1.370,572,6258 -Coussa,9101,255,7.730,0.885,0.801,591,6218 -Le Carlaret,9081,280,9.506,0.981,0.888,595,6229 -Pamiers,9225,15688,46.239,2.164,1.959,584,6222 -Ludiès,9175,84,1.900,0.439,0.397,596,6226 -Verniolle,9332,2310,11.429,1.076,0.974,590,6223 -Trémoulet,9315,123,3.873,0.626,0.567,595,6229 -Rieux-de-Pelleport,9245,1308,8.259,0.915,0.828,585,6220 -Pradières,9234,115,6.742,0.827,0.749,591,6207 -Saint-Amadou,9254,246,4.691,0.689,0.624,593,6224 -Carla-de-Roquefort,9080,164,9.516,0.982,0.889,596,6209 -Roquefort-les-Cascades,9250,91,7.044,0.845,0.765,599,6206 -Montgaillard,9207,1453,8.045,0.903,0.818,587,6206 -Lagrâce-Dieu,31264,578,8.671,0.937,0.848,570,6250 -Les Pujols,9238,790,13.272,1.160,1.050,598,6224 -Saint-Jean-de-Verges,9264,1228,12.826,1.140,1.032,589,6212 -Lignières-Châtelain,80479,380,6.570,0.816,0.739,617,6965 -Bonnac,9060,724,9.732,0.993,0.899,588,6232 -Niffer,68238,953,8.720,0.940,0.851,1035,6744 -Ségura,9284,183,8.778,0.943,0.854,594,6213 -Arvigna,9022,227,8.647,0.936,0.847,596,6220 -Vernajoul,9329,645,9.103,0.960,0.869,587,6212 -Ferrières-sur-Ariège,9121,788,3.465,0.593,0.537,585,6204 -Arabaux,9013,73,4.588,0.682,0.617,589,6209 -Gudas,9137,181,10.770,1.045,0.946,591,6215 -Saint-Félix-de-Tournegat,9259,137,10.528,1.033,0.935,598,6224 -Escosse,9116,413,14.956,1.231,1.115,583,6228 -L'Herm,9138,202,14.801,1.225,1.109,594,6209 -Villeneuve-du-Paréage,9339,771,11.514,1.080,0.978,588,6231 -Rieucros,9244,686,5.646,0.756,0.684,598,6222 -Celles,9093,143,10.363,1.025,0.928,593,6200 -Belpech,11033,1272,43.869,2.108,1.909,603,6233 -Malléon,9179,68,6.870,0.834,0.755,597,6217 -Vigoulet-Auzil,31578,891,3.462,0.592,0.536,573,6269 -Pins-Justaret,31421,4384,4.460,0.672,0.608,571,6267 -Varilhes,9324,3386,11.693,1.088,0.985,591,6219 -Gibel,31220,357,19.415,1.403,1.270,589,6249 -La Tour-du-Crieu,9312,3170,10.355,1.024,0.927,594,6222 -Saint-Félix-de-Rieutord,9258,465,6.851,0.833,0.754,591,6215 -Molandier,11236,237,20.605,1.445,1.308,596,6237 -Crampagna,9103,820,9.993,1.006,0.911,584,6214 -Montclar-Lauragais,31368,242,3.679,0.611,0.553,597,6252 -La Bastide-de-Lordat,9040,285,5.977,0.778,0.704,597,6227 -Ventenac,9327,233,19.881,1.419,1.285,598,6211 -Montgeard,31380,480,9.310,0.971,0.879,589,6249 -Marquein,11218,81,5.698,0.760,0.688,595,6246 -La Louvière-Lauragais,11208,77,6.210,0.793,0.718,599,6243 -Nuaillé-sur-Boutonne,17268,204,10.565,1.035,0.937,437,6550 -Caignac,31099,321,9.389,0.975,0.883,597,6247 -Mazères,9185,3854,44.220,2.117,1.917,593,6242 -Gardouch,31210,1259,16.231,1.282,1.161,593,6252 -Fajac-la-Relenque,11134,50,3.683,0.611,0.553,595,6243 -Beauteville,31054,171,4.558,0.680,0.616,596,6251 -Saint-Michel-de-Lanès,11359,466,13.014,1.148,1.039,599,6251 -Monestrol,31354,67,5.355,0.737,0.667,592,6250 -Cintegabelle,31145,2899,53.533,2.329,2.109,583,6242 -Renneville,31450,552,8.418,0.924,0.837,597,6253 -Nailloux,31396,3816,18.672,1.375,1.245,584,6253 -Lagarde,31262,403,11.718,1.090,0.987,592,6251 -Villemorin,17473,87,10.789,1.046,0.947,445,6550 -Saint-Orens-de-Gameville,31506,11520,13.100,1.152,1.043,584,6271 -Deyme,31161,1119,7.056,0.846,0.766,579,6265 -Espanès,31171,322,3.580,0.602,0.545,577,6263 -Vernet,31574,2758,10.632,1.038,0.940,574,6258 -Pinsaguel,31420,2767,5.161,0.723,0.655,572,6270 -Labastide-Beauvoir,31249,1278,10.229,1.018,0.922,593,6268 -Saint-Quirc,9275,375,3.763,0.617,0.559,578,6242 -Bagiry,31041,104,2.730,0.526,0.476,505,6213 -Belbèze-de-Lauragais,31058,121,3.683,0.611,0.553,583,6260 -Odars,31402,855,6.676,0.822,0.744,585,6271 -Auzeville-Tolosane,31035,4161,6.705,0.824,0.746,577,6270 -Izaourt,65230,258,2.435,0.497,0.450,504,6217 -Labarthe-sur-Lèze,31248,5838,10.349,1.024,0.927,572,6265 -Moisselles,95409,1385,1.487,0.388,0.351,651,6883 -Préserville,31439,718,12.189,1.111,1.006,591,6270 -Barbazan,31045,474,6.121,0.788,0.713,506,6217 -Fourquevaux,31192,757,10.223,1.018,0.922,586,6267 -Donneville,31162,1020,2.715,0.524,0.474,583,6264 -Grépiac,31233,988,8.185,0.911,0.825,576,6259 -Saint-Léon,31495,1257,24.299,1.569,1.421,586,6256 -Escalquens,31169,6557,8.479,0.927,0.839,582,6272 -Corronsac,31151,800,6.341,0.802,0.726,579,6266 -Clermont-le-Fort,31148,512,10.179,1.016,0.920,577,6263 -Sarrecave,31531,77,2.515,0.505,0.457,503,6238 -Roques,31458,4492,9.387,0.975,0.883,567,6268 -Montaut,31361,517,17.937,1.348,1.220,561,6248 -Auzielle,31036,1446,4.637,0.685,0.620,583,6274 -Muret,31395,25207,58.327,2.431,2.201,565,6258 -Eaunes,31165,6091,14.907,1.229,1.113,568,6264 -Vougy,42338,1452,21.065,1.461,1.323,786,6553 -Saint-Sulpice-sur-Lèze,31517,2364,14.054,1.193,1.080,562,6248 -Mervilla,31340,266,2.792,0.532,0.482,576,6268 -Vieille-Toulouse,31575,1160,5.559,0.750,0.679,573,6273 -Rebigue,31448,488,5.148,0.722,0.654,577,6268 -Frouzins,31203,8890,7.911,0.895,0.810,562,6271 -Ramonville-Saint-Agne,31446,14145,6.465,0.809,0.732,578,6274 -Péchabou,31409,2151,3.526,0.598,0.541,581,6269 -Montlaur,31384,1447,9.727,0.993,0.899,583,6267 -Sainte-Foy-d'Aigrefeuille,31480,1978,9.869,1.000,0.905,589,6273 -Venerque,31572,2554,14.482,1.211,1.096,578,6261 -Lagardelle-sur-Lèze,31263,2992,13.700,1.178,1.067,572,6258 -Créchets,65154,54,0.960,0.312,0.282,500,6214 -Grazac,31231,576,7.210,0.855,0.774,576,6248 -Cier-de-Rivière,31143,280,9.382,0.975,0.883,505,6222 -Baziège,31048,3338,19.960,1.422,1.287,589,6261 -Lauzerville,31284,1565,3.435,0.590,0.534,585,6273 -Goyrans,31227,846,5.724,0.762,0.690,571,6266 -Labège,31254,4117,7.722,0.885,0.801,579,6273 -Les Tourreilles,31556,387,12.358,1.119,1.013,504,6226 -Auragne,31024,429,13.725,1.179,1.067,579,6258 -Cazarilh,65139,51,3.119,0.562,0.509,504,6207 -Ayguesvives,31004,2641,13.302,1.161,1.051,588,6261 -Noueilles,31401,404,5.571,0.751,0.680,580,6260 -Saubens,31533,2200,6.044,0.783,0.709,566,6267 -Montesquieu-Lauragais,31374,962,24.682,1.581,1.431,588,6261 -Montbrun-Lauragais,31366,590,10.956,1.054,0.954,578,6263 -Auterive,31033,9584,37.319,1.945,1.761,580,6254 -Auribail,31027,207,9.122,0.961,0.870,569,6253 -Pompertuzat,31429,2256,5.503,0.747,0.676,579,6267 -Pouze,31437,89,3.869,0.626,0.567,582,6260 -Cugnaux,31157,17771,13.050,1.150,1.041,563,6272 -Lézat-sur-Lèze,9167,2320,40.355,2.022,1.831,563,6241 -Lacroix-Falgarde,31259,2048,6.096,0.786,0.712,571,6267 -Belberaud,31057,1502,7.512,0.872,0.790,583,6267 -Villenouvelle,31589,1390,7.926,0.896,0.811,589,6261 -Larroque,31276,293,19.917,1.421,1.287,506,6238 -Portet-sur-Garonne,31433,9718,15.445,1.251,1.133,573,6269 -Caujac,31128,836,10.872,1.050,0.951,577,6246 -Villeneuve-Tolosane,31588,9453,5.079,0.717,0.649,563,6272 -Bertren,65087,174,2.659,0.519,0.470,506,6213 -Mauressac,31330,512,4.529,0.677,0.613,572,6247 -Esperce,31173,253,16.511,1.293,1.171,569,6248 -Issus,31240,593,7.204,0.854,0.773,576,6259 -Mauvaisin,31332,241,11.098,1.060,0.960,580,6251 -Aureville,31025,875,6.784,0.829,0.751,577,6264 -Troubat,65453,73,2.835,0.536,0.485,504,6212 -Castanet-Tolosan,31113,12963,8.238,0.914,0.828,579,6267 -Cazaril-Tambourès,31130,90,6.909,0.837,0.758,500,6235 -Montréjeau,31390,2830,7.967,0.898,0.813,501,6223 -Labroquère,31255,328,4.418,0.669,0.606,502,6218 -Samuran,65402,26,2.534,0.507,0.459,505,6213 -Gembrie,65193,76,0.969,0.313,0.283,502,6212 -Ausson,31031,578,4.402,0.668,0.605,504,6223 -Seilhan,31542,204,4.753,0.694,0.628,501,6219 -Clarac,31147,616,4.714,0.691,0.626,507,6225 -Galié,31207,84,2.990,0.550,0.498,506,6213 -Saint-Bertrand-de-Comminges,31472,247,11.336,1.072,0.971,500,6215 -Aveux,65053,43,3.065,0.557,0.504,500,6214 -Anla,65012,97,2.832,0.536,0.485,503,6214 -Esbareich,65158,81,8.773,0.943,0.854,503,6204 -Loudet,31305,198,5.183,0.725,0.656,503,6231 -Sédeilhac,31539,61,6.169,0.791,0.716,497,6229 -Balesta,31043,156,7.156,0.852,0.771,501,6238 -Gourdan-Polignan,31224,1208,5.252,0.729,0.660,503,6223 -Loures-Barousse,65287,620,2.191,0.471,0.426,504,6217 -Mauléon-Barousse,65305,95,5.537,0.749,0.678,502,6210 -Huos,31238,493,4.053,0.641,0.580,505,6220 -Ponlat-Taillebourg,31430,630,8.666,0.937,0.848,502,6228 -Pointis-de-Rivière,31426,844,6.660,0.821,0.743,506,6224 -Antichan,65014,33,1.186,0.347,0.314,502,6214 -Thèbe,65441,79,7.583,0.877,0.794,505,6207 -Le Cuing,31159,460,13.033,1.149,1.040,509,6230 -Saint-Plancard,31513,366,16.063,1.276,1.155,499,6231 -Tibiran-Jaunac,65444,311,6.381,0.804,0.728,501,6219 -Signac,31548,46,3.260,0.575,0.521,503,6204 -Burgalays,31092,123,4.866,0.702,0.636,508,6200 -Binos,31590,43,1.968,0.447,0.405,503,6204 -Ercé,9113,527,40.953,2.037,1.844,566,6191 -Guran,31235,44,5.216,0.727,0.658,502,6201 -Lège,31290,43,2.758,0.529,0.479,505,6200 -Bachos,31040,39,2.604,0.514,0.465,503,6202 -Gaillac-Toulza,31206,1250,40.624,2.029,1.837,572,6245 -La Bastide-de-Sérou,9042,958,41.421,2.049,1.855,573,6218 -Cierp-Gaud,31144,738,14.508,1.212,1.097,504,6207 -Sost,65431,87,32.419,1.812,1.641,502,6200 -Saint-Ybars,9277,646,24.558,1.577,1.428,566,6240 -Castex,9084,95,7.164,0.852,0.771,564,6232 -Lescousse,9163,77,8.507,0.928,0.840,580,6227 -Saint-Martin-d'Oydes,9270,231,11.848,1.096,0.992,575,6233 -Sieuras,9294,93,7.737,0.885,0.801,563,6234 -Lissac,9170,245,3.802,0.621,0.562,578,6241 -Massat,9182,665,45.050,2.136,1.934,573,6197 -Monesple,9195,26,6.132,0.788,0.713,575,6222 -Pailhès,9224,474,21.548,1.478,1.338,573,6226 -Le Fossat,9124,1052,14.516,1.213,1.098,574,6231 -Allières,9007,71,9.066,0.958,0.867,566,6216 -Larbont,9154,54,6.165,0.790,0.715,571,6211 -Massabrac,31326,87,4.025,0.639,0.579,568,6239 -Sabarat,9253,344,9.632,0.988,0.895,571,6222 -Esplas,9117,99,7.698,0.883,0.799,579,6232 -Saint-Martin-de-Caralp,9269,350,9.204,0.966,0.875,579,6213 -Justiniac,9146,53,4.560,0.680,0.616,576,6236 -Burret,9068,39,4.956,0.709,0.642,576,6206 -Gabre,9127,118,13.695,1.178,1.067,569,6222 -Saint-Marcel,56228,1058,12.960,1.146,1.038,297,6762 -Saverdun,9282,4772,62.072,2.508,2.271,580,6234 -Madière,9177,196,10.364,1.025,0.928,582,6225 -Cadarcet,9071,227,11.113,1.061,0.961,577,6211 -Unzent,9319,119,7.945,0.897,0.812,580,6234 -Marliac,31319,137,7.209,0.855,0.774,578,6237 -Les Bordes-sur-Arize,9061,511,12.794,1.139,1.031,570,6225 -Loubens,9173,268,11.745,1.091,0.988,583,6215 -Carla-Bayle,9079,761,35.912,1.908,1.728,566,6228 -Montégut-Plantaurel,9202,338,19.302,1.398,1.266,577,6218 -Aigues-Juntes,9001,65,7.640,0.880,0.797,577,6216 -Esplas-de-Sérou,9118,175,34.550,1.871,1.694,569,6210 -Saint-Michel,9271,72,5.885,0.772,0.699,577,6229 -Villeneuve-du-Latou,9338,153,6.601,0.818,0.741,572,6237 -Lavardens,32204,393,30.482,1.757,1.591,501,6296 -Castéras,9083,26,1.830,0.431,0.390,570,6225 -Boussenac,9065,212,26.282,1.632,1.478,570,6203 -Saint-Amans,9255,45,2.707,0.524,0.474,582,6232 -Baulou,9044,168,14.775,1.224,1.108,583,6212 -Canté,9076,206,9.767,0.995,0.901,578,6240 -Jouy-Mauvoisin,78324,554,2.847,0.537,0.486,601,6877 -Brie,9067,219,7.158,0.852,0.771,578,6237 -Le Mas-d'Azil,9181,1180,39.475,2.000,1.811,569,6222 -Saint-Bauzeil,9256,59,4.422,0.669,0.606,586,6220 -Montagagne,9196,73,6.899,0.836,0.757,569,6210 -Cos,9099,394,6.521,0.813,0.736,582,6212 -Bézac,9056,351,8.361,0.920,0.833,583,6228 -Durfort,9109,147,11.086,1.060,0.960,574,6236 -Montels,9203,159,3.777,0.619,0.560,576,6213 -Lesperon,40152,1049,103.935,3.245,2.938,368,6324 -Sainte-Suzanne,9342,237,10.484,1.031,0.933,569,6234 -Saint-Victor-Rouzaud,9276,241,12.715,1.135,1.028,582,6224 -Le Vernet,9331,690,5.698,0.760,0.688,587,6234 -Bénac,9049,182,2.806,0.533,0.483,582,6208 -Campagne-sur-Arize,9075,266,13.428,1.166,1.056,564,6229 -Saint-Pierre-de-Rivière,9273,622,2.379,0.491,0.445,583,6208 -Gruny,80393,325,7.351,0.863,0.781,686,6958 -Nescus,9216,62,3.020,0.553,0.501,574,6212 -Cazaux,9090,42,7.359,0.863,0.781,578,6217 -Castagnac,31111,292,10.742,1.043,0.944,566,6240 -Durban-sur-Arize,9108,181,6.848,0.833,0.754,564,6217 -Pibrac,31417,8379,26.044,1.624,1.470,556,6284 -Artix,9021,151,7.435,0.868,0.786,585,6220 -Sengouagnet,31544,209,18.819,1.381,1.250,522,6208 -Canens,31103,57,4.883,0.703,0.637,563,6238 -Labatut,9147,175,3.605,0.604,0.547,582,6243 -Lanoux,9151,50,3.770,0.618,0.560,570,6225 -Saint-Élix-Séglan,31477,43,3.018,0.553,0.501,525,6237 -Salerm,31522,54,5.842,0.769,0.696,522,6248 -Saux-et-Pomarède,31536,282,12.730,1.136,1.029,512,6229 -Cazac,31593,88,6.244,0.795,0.720,534,6253 -Montégut-Bourjac,31370,135,5.619,0.755,0.684,538,6244 -Lattainville,60352,151,3.439,0.590,0.534,612,6906 -Roquefort-sur-Garonne,31457,798,13.637,1.175,1.064,537,6230 -Boulogne-sur-Gesse,31080,1596,24.600,1.579,1.430,506,6249 -Mirambeau,31343,64,4.015,0.638,0.578,528,6259 -Savarthès,31537,171,3.055,0.556,0.503,521,6229 -Alan,31005,315,11.424,1.076,0.974,534,6239 -Nénigan,31397,64,2.363,0.489,0.443,516,6253 -Aulon,31023,312,15.046,1.235,1.118,525,6233 -Sarcos,32413,72,6.470,0.810,0.733,513,6254 -Labarthe-Inard,31246,857,10.292,1.021,0.924,522,6227 -Montastruc-Savès,31359,75,5.757,0.764,0.692,537,6254 -Francazal,31195,28,5.544,0.749,0.678,539,6214 -Mauran,31327,224,5.251,0.729,0.660,537,6233 -Riolas,31456,47,2.858,0.538,0.487,531,6251 -Saint-Blancard,32365,340,15.155,1.239,1.122,507,6252 -Lalouret-Laffiteau,31268,134,5.449,0.743,0.673,515,6234 -Aurignac,31028,1200,18.151,1.356,1.228,524,6240 -Saman,31528,135,5.576,0.752,0.681,516,6241 -Sepx,31545,230,12.246,1.114,1.009,522,6233 -Palaminy,31406,804,11.288,1.069,0.968,541,6237 -Villefranche,32465,130,12.605,1.130,1.023,519,6260 -Boissède,31072,71,3.911,0.629,0.570,523,6260 -Bellegarde,32041,187,14.821,1.225,1.109,510,6263 -Montpézat,32289,243,15.684,1.261,1.142,538,6255 -Ciadoux,31141,243,9.713,0.992,0.898,517,6240 -Montgaillard-sur-Save,31378,85,4.140,0.648,0.587,515,6243 -Boussens,31084,1090,4.397,0.667,0.604,534,6231 -Lilhac,31301,131,7.325,0.861,0.780,521,6244 -Villeneuve,9335,37,5.086,0.718,0.650,535,6206 -Lalanne-Arqué,32185,157,11.089,1.060,0.960,511,6251 -Argut-Dessous,31015,25,2.770,0.530,0.480,512,6203 -Castelnau-Picampeau,31119,216,11.481,1.079,0.977,537,6248 -Labastide-Paumès,31251,147,8.063,0.904,0.818,535,6250 -Izaut-de-l'Hôel,31241,324,9.627,0.988,0.895,518,6213 -Cazeneuve-Montaut,31134,70,4.652,0.687,0.622,527,6234 -Génos,31217,74,3.493,0.595,0.539,509,6213 -Monties,32287,76,10.508,1.032,0.934,513,6259 -Bachas,31039,69,2.630,0.516,0.467,534,6241 -Polastron,31428,55,4.864,0.702,0.636,532,6249 -Ausseing,31030,72,5.936,0.776,0.703,542,6229 -Lestelle-de-Saint-Martory,31296,437,9.318,0.972,0.880,528,6225 -Agassac,31001,115,9.591,0.986,0.893,528,6253 -Sarremezan,31532,95,4.272,0.658,0.596,512,6238 -Saint-Ignan,31487,232,5.393,0.739,0.669,514,6232 -Yronde-et-Buron,63472,653,14.696,1.220,1.105,722,6503 -Cadeillan,32069,60,4.405,0.668,0.605,523,6260 -Laffite-Toupière,31260,107,4.848,0.701,0.635,531,6232 -Roquelaure,32348,577,21.445,1.474,1.335,508,6293 -Lespugue,31295,80,4.882,0.703,0.637,509,6239 -Lieoux,31300,126,5.815,0.768,0.695,517,6232 -Chaum,31139,186,5.759,0.764,0.692,509,6206 -Larcan,31274,177,7.104,0.848,0.768,517,6233 -Laymont,32206,209,11.052,1.058,0.958,540,6261 -Figarol,31183,299,11.804,1.094,0.991,528,6225 -Saint-Araille,31469,151,6.659,0.821,0.743,536,6254 -Puymaurin,31443,302,22.417,1.507,1.364,514,6254 -Ambax,31007,67,5.943,0.776,0.703,535,6255 -Benque,31063,161,11.413,1.075,0.973,532,6245 -Martisserre,31322,59,6.189,0.792,0.717,529,6259 -Juzet-d'Izaut,31245,193,14.837,1.226,1.110,516,6211 -Meilhan,32250,81,6.816,0.831,0.752,514,6262 -Fabas,31178,203,18.659,1.375,1.245,533,6248 -Saint-Laurent,31494,176,8.600,0.933,0.845,520,6249 -Montbernard,31363,222,18.169,1.357,1.229,516,6247 -Villeneuve-de-Rivière,31585,1786,13.877,1.186,1.074,509,6230 -Mauvezin,31333,90,4.852,0.701,0.635,531,6254 -Casties-Labrande,31122,118,8.872,0.948,0.858,535,6250 -Peyrissas,31414,82,7.888,0.894,0.809,529,6246 -Castelgaillard,31115,61,6.815,0.831,0.752,531,6254 -Saint-Lizier-du-Planté,32386,136,10.451,1.029,0.932,534,6256 -Sère,32430,76,8.896,0.949,0.859,510,6258 -Escanecrabe,31170,245,16.123,1.278,1.157,519,6246 -Proupiary,31440,71,4.937,0.707,0.640,526,6233 -Le Pin-Murelet,31419,172,12.039,1.104,1.000,541,6259 -Belbèze-en-Comminges,31059,111,9.620,0.987,0.894,537,6229 -Latoue,31278,324,17.818,1.344,1.217,517,6233 -Le Fréchet,31198,106,4.274,0.658,0.596,532,6236 -Blajan,31070,531,12.770,1.137,1.029,512,6242 -Gaujan,32141,115,10.783,1.045,0.946,518,6258 -Ore,31405,104,2.894,0.542,0.491,509,6212 -Francon,31196,243,9.595,0.986,0.893,535,6244 -Sénarens,31543,109,7.062,0.846,0.766,537,6250 -Saint-Martory,31503,963,8.279,0.916,0.829,531,6228 -Castillon-de-Saint-Martory,31124,380,10.898,1.051,0.952,531,6228 -Montoussin,31387,133,4.917,0.706,0.639,540,6243 -Auzas,31034,239,7.880,0.894,0.809,530,6235 -Garravet,32138,156,9.325,0.972,0.880,530,6258 -Martres-de-Rivière,31323,364,3.598,0.604,0.547,507,6223 -Mancioux,31314,427,7.153,0.851,0.771,533,6233 -Estancarbon,31175,598,6.349,0.802,0.726,517,6225 -Martres-Tolosane,31324,2369,23.542,1.544,1.398,541,6235 -Monès,31353,93,2.508,0.504,0.456,540,6259 -Mazères-sur-Salat,31336,601,6.823,0.831,0.752,534,6226 -Samouillan,31529,131,5.484,0.745,0.675,533,6244 -Montesquieu-Guittaut,31373,174,10.056,1.009,0.914,521,6252 -Anan,31008,240,13.672,1.177,1.066,523,6251 -Montclar-de-Comminges,31367,90,6.341,0.802,0.726,541,6231 -Terrebasse,31552,139,9.700,0.991,0.897,537,6239 -Arnaud-Guilhem,31018,232,7.706,0.884,0.800,531,6228 -Lodes,31302,290,13.961,1.189,1.077,513,6233 -Sana,31530,250,2.747,0.528,0.478,538,6239 -Goudex,31223,50,2.642,0.517,0.468,533,6255 -Saint-Médard,31504,220,5.351,0.736,0.666,525,6227 -Lussan-Adeilhac,31309,226,12.661,1.133,1.026,533,6244 -Aussos,32468,79,8.147,0.909,0.823,510,6258 -Péguilhan,31412,295,23.707,1.550,1.403,511,6251 -Saint-Lary-Boujean,31493,138,8.385,0.922,0.835,517,6240 -Lescuns,31292,71,3.029,0.554,0.502,538,6239 -Mondavezan,31349,907,21.384,1.472,1.333,539,6238 -Saint-Pé-Delbosc,31510,128,5.513,0.747,0.676,515,6243 -Saint-Ferréol-de-Comminges,31479,53,5.881,0.772,0.699,516,6253 -Boussan,31083,244,12.691,1.134,1.027,529,6242 -Esparron,31172,58,5.556,0.750,0.679,520,6243 -Illier-et-Laramade,9143,25,5.145,0.722,0.654,582,6188 -Mondilhan,31350,98,10.034,1.008,0.913,516,6248 -Luzenac,9176,508,26.506,1.639,1.484,598,6186 -Bordes-de-Rivière,31076,489,8.459,0.926,0.838,509,6230 -Cassagnabère-Tournas,31109,457,25.438,1.605,1.453,519,6237 -Monbardon,32260,86,6.592,0.817,0.740,517,6256 -Saint-André,31468,220,18.772,1.379,1.249,525,6241 -Eoux,31168,114,9.251,0.968,0.876,527,6243 -Marignac-Laspeyres,31318,220,12.409,1.121,1.015,534,6239 -Ardiège,31013,362,3.946,0.632,0.572,509,6222 -Castéra-Vignoles,31121,64,4.206,0.653,0.591,521,6245 -Landorthe,31270,985,9.763,0.995,0.901,522,6229 -Saint-Frajou,31482,216,16.860,1.307,1.183,526,6253 -Montoulieu-Saint-Bernard,31386,212,4.928,0.707,0.640,530,6237 -Cassagne,31110,629,11.031,1.057,0.957,535,6229 -Montmaurin,31385,210,8.483,0.927,0.839,509,6241 -Sajas,31520,121,4.995,0.711,0.644,538,6255 -Peyrouzet,31415,88,4.936,0.707,0.640,523,6237 -Beauchalot,31050,628,6.358,0.803,0.727,528,6225 -Lespiteau,31294,96,1.778,0.424,0.384,518,6221 -Bouzin,31086,100,4.273,0.658,0.596,530,6235 -Pouy-de-Touges,31436,406,13.881,1.186,1.074,541,6249 -Fustignac,31204,80,4.013,0.638,0.578,537,6248 -Cardeilhac,31108,270,18.442,1.367,1.238,515,6237 -Coueilles,31152,95,6.488,0.811,0.734,528,6250 -Fronsac,31199,208,4.194,0.652,0.590,507,6209 -Ganties,31208,322,12.138,1.109,1.004,525,6220 -Locunolé,29136,1152,16.873,1.308,1.184,219,6777 -Soueich,31550,533,11.415,1.075,0.973,521,6218 -Castagnède,31112,187,3.299,0.578,0.523,536,6218 -La Bastide-du-Salat,9041,172,6.708,0.824,0.746,536,6219 -Moncaup,31348,38,7.201,0.854,0.773,511,6212 -Herran,31236,75,15.628,1.258,1.139,531,6210 -His,31237,222,5.130,0.721,0.653,533,6220 -Razecueillé,31447,39,6.441,0.808,0.732,522,6208 -Marignac,31316,480,12.905,1.143,1.035,510,6200 -Castillon-en-Couserans,9085,401,4.995,0.711,0.644,543,6204 -Mauvezin-de-Prat,9183,101,1.839,0.432,0.391,537,6216 -Estadens,31174,523,17.551,1.334,1.208,520,6218 -Mont-de-Galié,31369,42,2.397,0.493,0.446,508,6212 -Touille,31554,252,6.607,0.818,0.741,536,6224 -Rouède,31461,293,6.229,0.794,0.719,528,6221 -Bezins-Garraux,31067,42,7.887,0.894,0.809,512,6208 -Labarthe-Rivière,31247,1346,13.969,1.190,1.077,510,6220 -Frontignan-de-Comminges,31200,74,2.610,0.514,0.465,508,6210 -Antichan-de-Frontignes,31009,130,4.340,0.663,0.600,509,6211 -Encausse-les-Thermes,31167,695,8.128,0.907,0.821,518,6217 -Malvezie,31313,119,8.381,0.922,0.835,512,6213 -Montastruc-de-Salies,31357,273,16.424,1.290,1.168,530,6214 -Boutx,31085,242,47.277,2.189,1.982,512,6205 -Milhas,31342,178,13.207,1.157,1.048,525,6212 -Épinay-Champlâtreux,95214,65,3.600,0.604,0.547,658,6888 -Arrien-en-Bethmale,9017,111,14.477,1.211,1.096,544,6201 -Arguenos,31014,71,10.861,1.049,0.950,514,6212 -Velennes,80786,147,3.954,0.633,0.573,636,6965 -Chein-Dessus,31140,185,12.715,1.135,1.028,525,6212 -Salsein,9279,45,5.780,0.765,0.693,538,6204 -Urau,31562,124,18.627,1.374,1.244,535,6213 -Valentine,31565,877,8.168,0.910,0.824,513,6222 -Sauveterre-de-Comminges,31535,639,30.757,1.765,1.598,513,6221 -Cescau,9095,137,5.385,0.739,0.669,540,6207 -Castelbiague,31114,256,5.826,0.768,0.695,532,6219 -Miramont-de-Comminges,31344,771,8.317,0.918,0.831,516,6222 -Eup,31177,130,2.225,0.475,0.430,509,6206 -Illartein,9141,73,3.944,0.632,0.572,532,6202 -Fougaron,31191,94,9.183,0.965,0.874,532,6210 -Cazaunous,31131,72,4.721,0.692,0.627,513,6213 -Engomer,9111,290,7.646,0.880,0.797,544,6205 -Arbas,31011,262,7.308,0.860,0.779,529,6214 -Saleich,31521,342,14.074,1.194,1.081,532,6217 -Cabanac-Cazaux,31095,128,3.864,0.626,0.567,514,6219 -Montgaillard-de-Salies,31376,102,6.133,0.788,0.713,530,6219 -Morienval,60430,1071,25.929,1.621,1.468,693,6913 -Buzan,9069,29,8.626,0.935,0.847,532,6209 -Argein,9014,196,11.121,1.062,0.962,534,6202 -Portet-d'Aspet,31431,68,13.984,1.190,1.077,525,6209 -Mercenac,9187,362,13.649,1.176,1.065,543,6221 -Cazavet,9091,232,18.065,1.353,1.225,536,6212 -Audressein,9026,137,4.056,0.641,0.580,538,6204 -Pointis-Inard,31427,913,14.944,1.231,1.115,523,6224 -Arbon,31012,100,4.490,0.674,0.610,516,6213 -Tarabel,31551,411,7.488,0.871,0.789,595,6269 -Lacave,9148,155,4.554,0.679,0.615,539,6220 -Saint-Lary,9267,132,34.149,1.860,1.684,524,6199 -Orgibet,9219,183,7.578,0.876,0.793,532,6209 -Teulat,81298,494,10.092,1.011,0.915,597,6281 -Aspet,31020,889,26.453,1.637,1.482,517,6217 -Vertolaye,63454,537,10.942,1.053,0.953,760,6508 -Balaguères,9035,197,18.015,1.351,1.223,541,6210 -Augirein,9027,75,9.691,0.991,0.897,532,6202 -Régades,31449,130,3.730,0.615,0.557,515,6219 -Saint-Germier,31485,110,3.766,0.618,0.560,596,6265 -Saint-Jean-du-Castillonnais,9263,24,4.765,0.695,0.629,532,6210 -Aspret-Sarrat,31021,139,3.873,0.626,0.567,513,6221 -Montespan,31372,453,12.736,1.136,1.029,528,6225 -Galey,9129,120,9.444,0.978,0.885,531,6206 -Saint-Hilaire,31486,1164,6.367,0.803,0.727,561,6259 -Prat-Bonrepaux,9235,933,14.629,1.217,1.102,536,6218 -Aucazein,9025,61,6.050,0.783,0.709,534,6208 -Caragoudes,31105,217,8.354,0.920,0.833,594,6268 -Verfeil,31573,3561,41.459,2.050,1.856,590,6284 -Mane,31315,973,6.596,0.818,0.741,534,6222 -Ségreville,31540,286,5.013,0.713,0.646,600,6266 -Trébons-sur-la-Grasse,31560,450,10.949,1.053,0.953,594,6264 -Saint-Allouestre,56204,621,16.661,1.299,1.176,269,6772 -Vallègue,31566,527,4.216,0.654,0.592,597,6260 -Varennes,31568,268,4.622,0.684,0.619,596,6264 -Aurin,31029,330,7.506,0.872,0.790,595,6273 -Caraman,31106,2490,30.675,1.763,1.596,595,6273 -Saint-Vincent,31519,192,3.134,0.564,0.511,599,6262 -Saussens,31534,206,3.028,0.554,0.502,599,6279 -Villefranche-de-Lauragais,31582,4376,10.508,1.032,0.934,594,6257 -Mascarville,31325,169,5.318,0.734,0.665,600,6273 -Bourg-Saint-Bernard,31082,1014,16.591,1.297,1.174,594,6282 -Belcastel,81025,229,10.835,1.048,0.949,598,6283 -Exoudun,79115,594,26.503,1.639,1.484,469,6588 -Saint-Pierre-de-Lages,31512,854,7.239,0.856,0.775,588,6275 -Mourvilles-Basses,31392,73,4.786,0.696,0.630,596,6265 -Maureville,31331,303,10.106,1.012,0.916,595,6269 -Lanta,31271,2028,30.311,1.752,1.586,596,6276 -Montgaillard-Lauragais,31377,745,11.175,1.064,0.963,594,6261 -Saint-Maudan,22314,399,6.843,0.833,0.754,272,6795 -Prunet,31441,150,4.668,0.688,0.623,596,6276 -Saint-Agnan,81236,232,6.981,0.841,0.761,598,6291 -Montcabrier,81173,293,5.458,0.744,0.674,598,6283 -Maravat,32232,44,6.536,0.814,0.737,521,6297 -Mauremont,31328,328,5.669,0.758,0.686,593,6264 -Toutens,31558,328,4.948,0.708,0.641,599,6263 -Bannières,81022,209,7.283,0.859,0.778,599,6279 -Cessales,31137,173,3.355,0.583,0.528,598,6264 -Francarville,31194,178,7.089,0.848,0.768,599,6279 -Salles-et-Pratviel,31524,133,2.090,0.460,0.416,505,6195 -Azas,31038,652,12.892,1.143,1.035,596,6292 -Cannessières,80169,72,3.761,0.617,0.559,613,6983 -Saint-Sulpice-la-Pointe,81271,8934,24.072,1.562,1.414,593,6299 -Garrigues,81102,254,10.473,1.030,0.933,597,6289 -Saint-Lieux-lès-Lavaur,81261,1027,9.552,0.984,0.891,598,6298 -Tourrenquets,32453,115,7.209,0.855,0.774,513,6298 -Lugan,81150,411,10.101,1.012,0.916,596,6292 -Paulhac,31407,1229,14.046,1.193,1.080,581,6296 -Sainte-Gemme,32376,119,10.410,1.027,0.930,522,6302 -Puységur,32337,76,7.313,0.861,0.780,504,6300 -Crastes,32112,253,19.468,1.404,1.271,514,6293 -Gavarret-sur-Aulouste,32142,143,8.361,0.920,0.833,511,6300 -Peyrusse-Massas,32316,101,6.592,0.817,0.740,505,6297 -Lespinasse,31293,2692,4.290,0.659,0.597,570,6293 -Augnax,32014,107,4.022,0.638,0.578,521,6294 -Mérens,32251,62,4.210,0.653,0.591,505,6298 -Saint-Antonin,32359,158,11.497,1.079,0.977,522,6295 -Castillon-Massas,32089,248,9.790,0.996,0.902,500,6295 -Sorbiers,5169,36,13.880,1.186,1.074,906,6369 -Mirepoix,32258,224,7.339,0.862,0.780,513,6298 -Rieumes,31454,3512,30.911,1.770,1.603,547,6262 -Sainte-Christie,32368,561,9.965,1.005,0.910,510,6296 -Bellegarde-Sainte-Marie,31061,195,11.769,1.092,0.989,543,6289 -Preignan,32331,1283,10.785,1.045,0.946,509,6296 -Roquefort,32347,295,7.322,0.861,0.780,504,6300 -Saint-Étienne-du-Gué-de-l'Isle,22288,355,15.175,1.240,1.123,280,6794 -Mansempuy,32229,87,6.508,0.812,0.735,523,6296 -Gratentour,31230,3673,4.106,0.645,0.584,574,6294 -Saint-Geniès-Bellevue,31484,2436,3.822,0.622,0.563,579,6288 -L'Union,31561,11660,6.888,0.835,0.756,579,6284 -Saint-Loup-Cammas,31497,2135,3.694,0.612,0.554,576,6288 -Saint-Alban,31467,6122,4.427,0.670,0.607,573,6288 -Vallesvilles,31567,409,8.194,0.911,0.825,588,6277 -Montaigut-sur-Save,31356,1604,12.811,1.139,1.031,556,6289 -Bonrepos-Riquet,31074,294,5.782,0.765,0.693,588,6288 -Rouffiac-Tolosan,31462,1978,4.769,0.695,0.629,582,6285 -Cépet,31136,1754,7.175,0.853,0.772,575,6293 -Marcq,78364,757,4.807,0.698,0.632,614,6865 -Drémil-Lafage,31163,2654,12.540,1.127,1.020,590,6279 -Flourens,31184,1916,9.692,0.991,0.897,581,6278 -Pin-Balma,31418,896,6.637,0.820,0.742,581,6280 -Saint-Pierre,31511,247,4.773,0.695,0.629,589,6283 -Montastruc-la-Conseillère,31358,3358,15.603,1.257,1.138,589,6292 -Fenouillet,31182,5070,9.695,0.991,0.897,571,6289 -Aigrefeuille,31003,1256,4.614,0.684,0.619,584,6276 -Bruguières,31091,5654,9.057,0.958,0.867,570,6294 -Garidech,31212,1756,7.160,0.852,0.771,583,6293 -Saint-Sauveur,31516,1762,7.132,0.850,0.770,570,6294 -Beaupuy,31053,1337,5.881,0.772,0.699,584,6286 -Gauré,31215,508,13.544,1.171,1.060,590,6279 -Saint-Jean-Lherm,31489,366,7.944,0.897,0.812,591,6288 -Labastide-Saint-Sernin,31252,1899,5.071,0.717,0.649,577,6296 -Villariès,31579,802,7.354,0.863,0.781,580,6296 -Lavalette,31285,732,13.841,1.184,1.072,586,6286 -Aussonne,31032,6980,13.959,1.189,1.077,568,6286 -Quint-Fonsegrives,31445,5606,7.480,0.871,0.789,580,6276 -Saint-Marcel-Paulel,31501,388,7.085,0.847,0.767,589,6283 -Montjoire,31383,1286,20.340,1.436,1.300,579,6298 -Roquesérière,31459,703,10.647,1.039,0.941,591,6296 -Ognes,60473,292,6.818,0.831,0.752,689,6887 -Gragnague,31228,1782,13.019,1.149,1.040,585,6286 -Saint-Jean,31488,10733,6.021,0.781,0.707,580,6284 -Wiry-au-Mont,80825,121,4.812,0.698,0.632,616,6986 -Mons,31355,1762,7.318,0.861,0.780,583,6281 -Mondouzil,31352,237,4.162,0.649,0.588,585,6281 -Tournefeuille,31557,26436,18.219,1.359,1.230,567,6275 -Antignac,31010,113,5.759,0.764,0.692,501,6196 -Montberon,31364,2932,6.440,0.808,0.732,577,6291 -Saint-Vaast-de-Longmont,60600,644,4.965,0.709,0.642,681,6909 -Gargas,31211,689,7.384,0.865,0.783,578,6297 -Fonbeauzard,31186,2964,1.330,0.367,0.332,573,6288 -Bazus,31049,559,9.201,0.966,0.875,579,6294 -Blagnac,31069,24288,17.211,1.321,1.196,568,6286 -Montauban-de-Luchon,31360,488,5.764,0.764,0.692,503,6191 -Gémil,31216,272,2.816,0.534,0.483,588,6294 -Castelmaurou,31117,4238,16.855,1.307,1.183,579,6288 -Pechbonnieu,31410,4420,7.514,0.873,0.790,576,6289 -Cazarilh-Laspènes,31129,28,2.453,0.499,0.452,501,6191 -Toulouse,31555,475438,118.010,3.458,3.131,579,6277 -Roquelaure-Saint-Aubin,32349,126,4.249,0.656,0.594,537,6286 -Aucamville,31022,8413,3.991,0.636,0.576,572,6287 -Villeneuve-lès-Bouloc,31587,1549,12.889,1.143,1.035,576,6302 -Saint-Jory,31490,5692,19.278,1.398,1.266,568,6298 -Montrabé,31389,4122,5.305,0.733,0.664,581,6285 -Laréole,31275,177,8.949,0.952,0.862,538,6296 -Beauzelle,31056,6294,4.654,0.687,0.622,569,6288 -Gagnac-sur-Garonne,31205,2986,4.636,0.685,0.620,567,6292 -Balma,31044,16394,16.700,1.301,1.178,580,6283 -Moustajon,31394,144,2.262,0.479,0.434,504,6194 -Lapeyrouse-Fossat,31273,2794,9.531,0.983,0.890,581,6292 -Montpitol,31388,389,5.982,0.779,0.705,589,6291 -Simorre,32433,705,35.709,1.902,1.722,516,6268 -Seilh,31541,3231,6.161,0.790,0.715,567,6292 -Cier-de-Luchon,31142,252,10.501,1.031,0.933,501,6199 -Faget-Abbatial,32130,218,17.566,1.334,1.208,511,6271 -Moncorneil-Grazan,32266,159,7.234,0.856,0.775,508,6265 -Montsalier,4132,136,23.956,1.558,1.411,906,6332 -Lasséran,32200,391,14.926,1.230,1.114,501,6279 -Durban,32118,162,17.310,1.324,1.199,501,6275 -Sansan,32411,98,3.688,0.611,0.553,508,6274 -Bézues-Bajon,32053,190,13.258,1.159,1.049,507,6255 -Lussan,32221,224,12.834,1.140,1.032,515,6284 -Ornézan,32302,229,12.195,1.112,1.007,508,6272 -Panassac,32304,286,9.274,0.969,0.877,501,6256 -Montaut-les-Créneaux,32279,707,26.550,1.640,1.485,514,6289 -Sémézies-Cachan,32428,66,6.960,0.840,0.761,518,6268 -Lahitte,32183,253,5.084,0.718,0.650,514,6287 -Tachoires,32438,97,9.516,0.982,0.889,507,6268 -Labarthe,32169,156,6.543,0.814,0.737,503,6268 -Orbessan,32300,278,8.221,0.913,0.827,505,6275 -Esclassan-Labastide,32122,364,12.014,1.103,0.999,502,6263 -Lamaguère,32186,81,6.679,0.823,0.745,514,6266 -Aubiet,32012,1083,39.186,1.993,1.804,516,6288 -Boulaur,32061,172,9.052,0.958,0.867,517,6275 -Ansan,32002,77,7.769,0.887,0.803,519,6291 -Nostang,56148,1529,17.206,1.320,1.195,240,6759 -Auch,32013,21618,73.405,2.727,2.469,501,6289 -Castelnau-Barbarens,32076,523,42.724,2.081,1.884,512,6278 -Monferran-Plavès,32267,123,11.295,1.070,0.969,511,6271 -Castin,32091,337,11.356,1.073,0.972,501,6289 -Saint-Haon-le-Vieux,42233,960,16.476,1.292,1.170,766,6555 -Leboulin,32207,349,9.009,0.955,0.865,515,6288 -Lourties-Monbrun,32216,152,9.609,0.987,0.894,499,6265 -Le Bersac,5021,151,8.032,0.902,0.817,918,6370 -Pouy-Loubrin,32327,84,9.752,0.994,0.900,510,6265 -Haulies,32153,157,10.245,1.019,0.923,511,6274 -Pavie,32307,2481,24.780,1.585,1.435,509,6280 -Duran,32117,878,6.589,0.817,0.740,501,6289 -Nougaroulet,32298,375,15.929,1.270,1.150,514,6289 -Auterive,32019,522,10.942,1.053,0.953,506,6279 -Montégut,32282,655,11.422,1.076,0.974,514,6286 -Cruis,4065,643,36.593,1.926,1.744,931,6334 -Traversères,32454,72,10.616,1.037,0.939,509,6272 -Pessan,32312,671,26.697,1.645,1.489,515,6282 -Saramon,32412,817,13.069,1.151,1.042,521,6271 -Masseube,32242,1511,21.497,1.476,1.336,503,6259 -Marsan,32237,465,15.102,1.237,1.120,514,6287 -La Trinité-Porhoët,56257,681,12.694,1.134,1.027,291,6792 -Lartigue,32198,180,15.205,1.241,1.124,517,6272 -Saint-Élix-d'Astarac,32374,196,8.161,0.909,0.823,518,6270 -Thiers-sur-Thève,60631,1049,6.221,0.794,0.719,671,6896 -Lasseube-Propre,32201,332,14.441,1.210,1.096,506,6276 -Boucagnères,32060,203,6.168,0.791,0.716,510,6275 -Saint-Aventin,31470,94,17.591,1.335,1.209,501,6192 -Betcave-Aguin,32048,86,10.033,1.008,0.913,510,6262 -Saint-Thomas,31518,568,14.126,1.196,1.083,546,6272 -Escornebœuf,32123,556,25.683,1.613,1.460,526,6287 -Lamasquère,31269,1431,6.184,0.792,0.717,557,6268 -Mauzac,31334,1263,9.185,0.965,0.874,560,6256 -Lautignac,31283,266,17.775,1.342,1.215,540,6254 -Bois-de-la-Pierre,31071,425,7.444,0.868,0.786,550,6252 -Plaisance-du-Touch,31424,18250,26.784,1.647,1.491,561,6279 -Lavernose-Lacasse,31287,2958,18.040,1.352,1.224,555,6255 -Noé,31399,2899,9.774,0.995,0.901,560,6256 -Pujaudran,32334,1495,17.683,1.339,1.212,551,6280 -Mérenvielle,31339,485,9.748,0.994,0.900,551,6280 -Butry-sur-Oise,95120,2265,2.785,0.531,0.481,642,6888 -Marignac-Lasclares,31317,470,10.196,1.016,0.920,547,6245 -Savères,31538,213,10.872,1.050,0.951,549,6254 -Le Fauga,31181,2028,9.123,0.961,0.870,560,6256 -Mareil-en-France,95365,693,6.989,0.842,0.762,657,6884 -Lias,32210,597,10.859,1.049,0.950,551,6275 -Seysses,31547,8787,25.297,1.601,1.450,565,6269 -Bonrepos-sur-Aussonnelle,31075,1164,10.207,1.017,0.921,552,6273 -Enghien-les-Bains,95210,11355,1.750,0.421,0.381,650,6874 -Longages,31303,3020,21.496,1.476,1.336,551,6252 -Lafitte-Vigordane,31261,1171,11.371,1.073,0.972,553,6248 -Torsac,16382,768,28.535,1.700,1.539,480,6504 -Labastidette,31253,2501,6.334,0.801,0.725,556,6265 -La Salvetat-Saint-Gilles,31526,8234,5.762,0.764,0.692,559,6276 -Fontenilles,31188,5755,20.255,1.433,1.297,558,6276 -Brax,31088,2786,4.476,0.673,0.609,555,6282 -Lherm,31299,3630,27.567,1.671,1.513,559,6260 -Labastide-Clermont,31250,663,14.591,1.216,1.101,550,6252 -Poucharramet,31435,867,22.638,1.514,1.371,550,6257 -Cambernard,31101,465,8.452,0.925,0.838,554,6267 -Sainte-Foy-de-Peyrolières,31481,2057,38.053,1.964,1.778,554,6267 -Forgues,31189,208,5.281,0.731,0.662,540,6261 -Peyssies,31416,568,6.407,0.806,0.730,550,6248 -Avrigny,60036,368,6.106,0.787,0.713,670,6922 -Beaufort,31051,451,8.478,0.927,0.839,549,6264 -Catonvielle,32092,98,3.110,0.561,0.508,536,6287 -Gratens,31229,676,15.450,1.251,1.133,552,6249 -Lasserre-Pradère,31277,1502,14.541,1.214,1.099,556,6284 -Saint-Lys,31499,9379,21.509,1.476,1.336,551,6269 -Plagnole,31423,306,7.352,0.863,0.781,542,6258 -Touget,32448,515,17.806,1.343,1.216,533,6292 -Bérat,31065,2984,24.437,1.574,1.425,551,6252 -Capens,31104,670,6.867,0.834,0.755,557,6250 -Ségoufielle,32425,1105,5.279,0.731,0.662,548,6284 -Saiguède,31466,784,11.909,1.098,0.994,552,6272 -Fonsorbes,31187,11748,19.443,1.404,1.271,561,6270 -Saint-Clar-de-Rivière,31475,1336,10.053,1.009,0.914,554,6267 -Menville,31338,762,5.145,0.722,0.654,552,6288 -Antras,9011,65,20.126,1.428,1.293,532,6202 -Pelleport,31413,517,10.455,1.029,0.932,548,6294 -Razengues,32339,236,4.378,0.666,0.603,538,6286 -Saint-Germier,32379,213,7.118,0.849,0.769,537,6290 -Le Castéra,31120,750,16.797,1.305,1.182,548,6286 -Lévignac,31297,2067,12.251,1.114,1.009,558,6285 -Labrihe,32173,209,9.552,0.984,0.891,531,6297 -Sérempuy,32431,34,3.345,0.582,0.527,525,6297 -Bretx,31089,646,8.506,0.928,0.840,555,6289 -Saint-Paul-sur-Save,31507,1574,5.187,0.725,0.656,556,6289 -Larra,31592,1828,16.529,1.294,1.172,554,6294 -Sainte-Livrade,31496,282,6.211,0.793,0.718,548,6284 -Encausse,32120,422,15.814,1.266,1.146,539,6290 -Sainte-Anne,32357,117,6.844,0.833,0.754,538,6296 -Grenade,31232,8773,37.955,1.961,1.776,568,6298 -Saint-Orens,32399,80,4.382,0.666,0.603,531,6292 -Cologne,32106,928,6.558,0.815,0.738,539,6292 -Le Grès,31234,432,8.193,0.911,0.825,548,6294 -Cadours,31098,1083,10.848,1.048,0.949,543,6292 -Cox,31156,340,4.101,0.645,0.584,543,6297 -Launac,31281,1405,22.605,1.513,1.370,554,6294 -Garac,31209,158,6.075,0.785,0.711,548,6291 -Saint-Georges,32377,180,15.981,1.272,1.152,536,6293 -Vignaux,31577,128,4.050,0.641,0.580,545,6288 -Celle-Lévescault,86045,1353,42.829,2.083,1.886,485,6590 -Drudas,31164,223,11.281,1.069,0.968,545,6298 -Mauvezin,32249,2158,32.917,1.826,1.653,526,6291 -Blanquefort,32056,56,3.371,0.584,0.529,522,6288 -Ardizas,32007,210,8.543,0.930,0.842,538,6296 -Daux,31160,2322,16.899,1.309,1.185,563,6290 -Melles,31337,88,45.908,2.157,1.953,523,6203 -Thil,31553,1191,23.871,1.555,1.408,550,6294 -Caubiac,31126,377,8.024,0.902,0.817,544,6291 -Sirac,32435,171,8.045,0.903,0.818,537,6290 -Puysségur,31444,147,5.437,0.742,0.672,546,6295 -Brignemont,31090,393,22.141,1.498,1.356,535,6301 -Beaupuy,32038,178,6.591,0.817,0.740,538,6283 -Orus,9222,24,9.032,0.957,0.866,577,6187 -Monbrun,32262,384,10.827,1.047,0.948,543,6288 -Saint-Cézert,31473,431,8.996,0.955,0.865,556,6298 -Mondonville,31351,4541,11.865,1.096,0.992,558,6285 -Garanou,9131,166,3.104,0.561,0.508,598,6186 -Thoux,32444,249,6.059,0.784,0.710,537,6290 -Saint-Cricq,32372,294,3.039,0.555,0.503,539,6290 -Saint-Sauvy,32406,332,17.621,1.336,1.210,526,6291 -Gouaux-de-Luchon,31222,47,14.418,1.209,1.095,505,6199 -Sentein,9290,152,58.520,2.435,2.205,525,6196 -Bethmale,9055,96,31.801,1.795,1.625,544,6195 -Bordes-Uchentein,9062,177,53.378,2.326,2.106,543,6191 -Cazaux-Layrisse,31132,58,2.725,0.525,0.475,502,6200 -Juzet-de-Luchon,31244,363,7.083,0.847,0.767,504,6193 -Baren,31046,12,3.071,0.558,0.505,505,6200 -Sode,31549,18,5.520,0.748,0.677,504,6194 -Château-Verdun,9096,41,0.801,0.285,0.258,591,6188 -Saint-Mamet,31500,545,11.302,1.070,0.969,507,6187 -Saccourvielle,31465,14,3.416,0.588,0.532,502,6193 -Mercus-Garrabet,9188,1181,15.043,1.235,1.118,589,6202 -Arignac,9015,710,8.650,0.936,0.847,586,6197 -Rabat-les-Trois-Seigneurs,9241,351,27.022,1.655,1.498,572,6195 -Aston,9024,225,153.866,3.948,3.575,586,6184 -Savignac-les-Ormeaux,9283,376,28.144,1.689,1.529,604,6182 -Perles-et-Castelet,9228,223,18.038,1.352,1.224,599,6184 -Saint-Bonnet-de-Cray,71393,482,22.379,1.506,1.364,788,6565 -L'Hospitalet-près-l'Andorre,9139,91,26.753,1.646,1.490,603,6165 -Miglos,9192,118,18.762,1.379,1.249,586,6184 -Albiès,9004,125,7.750,0.886,0.802,592,6183 -Tarascon-sur-Ariège,9306,3138,8.584,0.933,0.845,584,6195 -Lassur,9159,82,11.859,1.096,0.992,596,6187 -Essouvert,17277,1170,30.280,1.752,1.586,428,6554 -Alliat,9006,53,3.437,0.590,0.534,585,6193 -Axiat,9031,42,9.591,0.986,0.893,600,6192 -Bouan,9064,38,3.435,0.590,0.534,589,6191 -Caychax,9088,14,5.642,0.756,0.684,596,6188 -Gourbit,9136,82,18.085,1.354,1.226,581,6192 -Cazenave-Serres-et-Allens,9092,47,16.360,1.287,1.165,592,6192 -Saint-Georges-de-Longuepierre,17334,233,10.708,1.042,0.943,435,6555 -Génat,9133,21,8.254,0.914,0.828,582,6195 -Pech,9226,39,4.787,0.696,0.630,593,6187 -Quié,9240,302,2.506,0.504,0.456,585,6193 -Senconac,9287,12,4.583,0.681,0.617,595,6188 -Verdun,9328,224,11.708,1.089,0.986,592,6192 -Saint-Pierre-de-l'Isle,17384,266,6.488,0.811,0.734,432,6552 -Siguer,9295,99,38.201,1.967,1.781,582,6188 -Bédeilhac-et-Aynat,9045,188,6.586,0.817,0.740,584,6197 -Urs,9320,34,0.876,0.298,0.270,596,6187 -Arnave,9016,202,8.357,0.920,0.833,589,6194 -Larnat,9156,21,5.604,0.754,0.683,586,6191 -Vèbre,9326,126,5.210,0.727,0.658,596,6188 -Saurat,9280,635,44.618,2.126,1.925,582,6202 -Appy,9012,24,6.082,0.785,0.711,596,6188 -Niaux,9217,174,3.949,0.633,0.573,586,6192 -Surba,9303,334,2.206,0.473,0.428,583,6197 -Gestiès,9134,26,27.197,1.660,1.503,583,6188 -Aulus-les-Bains,9029,155,52.744,2.312,2.093,562,6190 -Les Cabannes,9070,331,0.869,0.297,0.269,593,6188 -Ornolac-Ussat-les-Bains,9221,236,12.090,1.107,1.002,590,6194 -Lapège,9152,29,8.402,0.923,0.836,579,6191 -Le Port,9231,148,50.084,2.253,2.040,570,6189 -Larcat,9155,45,9.267,0.969,0.877,586,6184 -Capoulet-et-Junac,9077,169,2.833,0.536,0.485,583,6188 -Ussat,9321,330,4.342,0.663,0.600,586,6192 -Oust,9223,540,19.115,1.392,1.260,558,6198 -Ustou,9322,315,98.676,3.162,2.863,558,6193 -Sentenac-d'Oust,9291,109,18.590,1.372,1.242,552,6200 -Couflens,9100,84,56.222,2.387,2.161,547,6186 -Léon,40150,1951,66.752,2.601,2.355,353,6313 -Seix,9285,706,87.160,2.972,2.691,544,6195 -Villaroger,73323,377,34.452,1.868,1.691,1000,6508 -Sainte-Foy-Tarentaise,73232,740,110.314,3.343,3.027,1005,6513 -Vallorcine,74290,396,44.510,2.124,1.923,998,6553 -Commensacq,40085,438,71.434,2.690,2.436,390,6358 -Liposthey,40156,523,24.209,1.566,1.418,389,6359 -Arengosse,40006,691,62.766,2.522,2.283,393,6336 -Lugos,33260,907,62.328,2.513,2.275,395,6387 -Rocquemont,60543,119,6.325,0.801,0.725,688,6906 -Fonches-Fonchette,80322,163,4.980,0.710,0.643,688,6963 -Pissos,40227,1431,141.196,3.782,3.424,393,6367 -Onesse-Laharie,40210,1001,132.465,3.664,3.317,373,6333 -Lüe,40163,562,96.669,3.130,2.834,377,6354 -Escource,40094,700,103.478,3.238,2.932,371,6354 -Solférino,40303,332,98.446,3.158,2.859,384,6335 -Labouheyre,40134,2736,36.328,1.919,1.737,387,6361 -Linxe,40155,1459,81.364,2.871,2.599,363,6318 -Belin-Béliet,33042,5375,156.065,3.977,3.601,388,6379 -Villenave,40330,319,27.533,1.670,1.512,397,6327 -Gourbera,40114,367,27.655,1.674,1.516,373,6312 -Saint-Vincent-de-Paul,40283,3102,32.561,1.816,1.644,378,6300 -Taller,40311,604,41.264,2.045,1.852,375,6313 -Sainte-Eulalie-en-Born,40257,1255,71.333,2.688,2.434,365,6357 -Laluque,40142,1014,52.612,2.309,2.091,375,6313 -Lévignacq,40154,316,42.530,2.076,1.880,365,6337 -Herm,40123,1132,52.350,2.303,2.085,363,6312 -Gastes,40108,787,43.506,2.100,1.901,366,6369 -Azur,40021,818,16.937,1.310,1.186,353,6312 -Saint-Michel-Escalus,40276,299,17.702,1.339,1.212,356,6321 -Magescq,40168,2106,77.159,2.796,2.532,364,6302 -Aureilhan,40019,1056,11.554,1.082,0.980,365,6357 -Castets,40075,2254,90.900,3.035,2.748,368,6324 -Mézos,40182,837,88.970,3.002,2.718,368,6346 -Lit-et-Mixe,40157,1607,110.439,3.345,3.029,363,6329 -Bias,40043,718,20.912,1.456,1.318,365,6344 -Le Teich,33527,7730,86.255,2.956,2.676,381,6387 -Uza,40322,184,12.879,1.142,1.034,362,6336 -Vicq-d'Auribat,40324,262,4.236,0.655,0.593,390,6304 -Vieux-Boucau-les-Bains,40328,1606,4.366,0.665,0.602,345,6310 -Saint-Paul-en-Born,40278,953,43.495,2.099,1.900,371,6354 -La Teste-de-Buch,33529,26168,176.907,4.234,3.834,363,6396 -Salles,33498,6924,138.303,3.743,3.389,381,6387 -Mios,33284,9513,137.341,3.730,3.377,399,6409 -Souprosse,40309,1112,42.498,2.075,1.879,404,6305 -Gujan-Mestras,33199,20933,50.590,2.264,2.050,376,6390 -Saint-Jean-de-Lier,40263,415,8.123,0.907,0.821,388,6308 -Lourquen,40160,175,5.913,0.774,0.701,393,6301 -Carcarès-Sainte-Croix,40066,512,15.562,1.256,1.137,401,6316 -Mugron,40201,1413,16.535,1.294,1.172,396,6303 -Laurède,40147,395,5.702,0.760,0.688,395,6301 -Gousse,40115,324,4.134,0.647,0.586,384,6304 -Gouts,40116,279,10.956,1.054,0.954,393,6306 -Poyanne,40235,682,10.841,1.048,0.949,393,6305 -Préchacq-les-Bains,40237,710,8.677,0.938,0.849,386,6304 -L'ÃŽle-Rousse,2B134,3103,2.583,0.512,0.464,1186,6188 -Murzo,2A174,96,21.442,1.474,1.335,1187,6135 -Cassen,40068,579,5.936,0.776,0.703,389,6305 -Saint-Yaguen,40285,630,37.911,1.960,1.775,402,6321 -Louer,40159,292,2.839,0.536,0.485,386,6302 -Saint-Geours-d'Auribat,40260,411,5.591,0.753,0.682,391,6301 -Goos,40113,523,10.531,1.033,0.935,382,6300 -Lesgor,40151,443,28.416,1.697,1.536,388,6316 -Ousse-Suzan,40215,273,24.518,1.576,1.427,398,6322 -Riantec,56193,5516,14.270,1.202,1.088,227,6753 -Téthieu,40315,742,11.009,1.056,0.956,380,6300 -Tartas,40313,3245,30.386,1.755,1.589,392,6309 -Beylongue,40040,371,37.538,1.950,1.766,395,6324 -Onard,40208,374,6.128,0.788,0.713,393,6306 -Gamarde-les-Bains,40104,1272,19.037,1.389,1.258,391,6300 -Bégaar,40031,1151,27.647,1.674,1.516,392,6312 -Nerbis,40204,279,4.242,0.656,0.594,399,6303 -Carcen-Ponson,40067,643,36.894,1.933,1.750,390,6318 -Audon,40018,367,7.541,0.874,0.791,393,6306 -Locqueltas,56120,1695,19.541,1.407,1.274,269,6752 -Rion-des-Landes,40243,2960,133.917,3.684,3.336,390,6318 -Pontonx-sur-l'Adour,40230,2764,49.267,2.234,2.023,386,6305 -Tréméven,29297,2312,15.423,1.250,1.132,214,6778 -Arzano,29002,1390,33.971,1.855,1.680,215,6776 -Saint-Thurien,29269,1026,21.426,1.473,1.334,205,6786 -Quimperlé,29233,12034,31.591,1.789,1.620,213,6770 -Guiscriff,56081,2127,84.656,2.929,2.652,207,6786 -Mellac,29147,3042,26.531,1.640,1.485,206,6777 -Guilligomarc'h,29071,765,23.019,1.527,1.383,218,6780 -Bannalec,29004,5645,78.029,2.812,2.546,206,6779 -Lanvénégen,56105,1175,30.365,1.754,1.588,216,6784 -Pont-Scorff,56179,3703,23.505,1.543,1.397,222,6771 -Meslan,56131,1426,38.510,1.975,1.788,223,6782 -Taupont,56249,2204,30.508,1.758,1.592,294,6781 -Querrien,29230,1748,54.346,2.347,2.125,209,6786 -Clohars-Carnoët,29031,4310,35.406,1.894,1.715,207,6761 -Le Faouët,56057,2811,35.070,1.885,1.707,214,6791 -Le Saint,56201,591,31.326,1.782,1.613,212,6792 -Guillac,56079,1357,21.992,1.493,1.352,292,6770 -Gestel,56063,2751,6.258,0.796,0.721,220,6765 -Missiriac,56133,1140,13.499,1.170,1.059,297,6760 -Guégon,56070,2291,53.512,2.328,2.108,278,6775 -Cruguel,56051,646,17.391,1.327,1.201,280,6769 -Sérent,56244,3048,60.230,2.470,2.236,291,6758 -Lizio,56112,736,16.946,1.310,1.186,290,6768 -Montertelot,56139,360,2.648,0.518,0.469,295,6767 -La Grée-Saint-Laurent,56068,339,7.934,0.897,0.812,290,6780 -Loyat,56122,1632,41.751,2.057,1.862,297,6777 -Malestroit,56124,2458,5.870,0.771,0.698,299,6759 -Helléan,56082,365,7.939,0.897,0.812,291,6775 -Saint-Servant,56236,809,22.583,1.513,1.370,288,6773 -Saint-Malo-des-Trois-Fontaines,56227,562,16.172,1.280,1.159,295,6783 -Val d'Oust,56197,2678,31.974,1.800,1.630,291,6767 -Bohal,56020,816,8.492,0.928,0.840,292,6755 -Saint-Abraham,56202,541,6.726,0.826,0.748,297,6765 -Josselin,56091,2504,4.464,0.673,0.609,288,6776 -La Croix-Helléan,56050,896,14.542,1.214,1.099,291,6775 -Gueltas,56072,512,20.789,1.451,1.314,270,6795 -Erdeven,56054,3613,30.451,1.757,1.591,236,6742 -Ploemel,56161,2841,25.429,1.605,1.453,242,6747 -Brech,56023,6635,39.877,2.010,1.820,247,6756 -Iguerande,71238,1002,21.472,1.475,1.335,780,6570 -Grand-Champ,56067,5350,67.368,2.613,2.366,261,6763 -Bono,56262,2347,6.203,0.793,0.718,255,6745 -Locmiquélic,56118,4072,4.121,0.646,0.585,225,6754 -Guern,56076,1325,47.105,2.185,1.978,252,6787 -Balogna,2A028,130,27.670,1.674,1.516,1179,6138 -Bubry,56026,2382,69.208,2.648,2.398,239,6787 -Crach,56046,3317,31.767,1.794,1.624,251,6740 -Saint-Barnabé,22275,1251,23.264,1.535,1.390,278,6800 -Sainte-Hélène,56220,1240,10.743,1.043,0.944,238,6754 -Séné,56243,8949,21.814,1.487,1.346,266,6740 -Languidic,56101,7904,105.592,3.271,2.962,238,6772 -Larmor-Baden,56106,896,3.980,0.635,0.575,256,6736 -Baden,56008,4376,23.645,1.548,1.402,255,6735 -Blangy-sur-Bresle,76101,2965,17.447,1.330,1.204,600,6983 -Colpo,56042,2227,26.673,1.644,1.489,262,6762 -Saint-Caradec-Trégomel,56210,476,16.114,1.278,1.157,228,6791 -Baud,56010,6264,48.775,2.223,2.013,251,6774 -Bonlier,60081,459,4.526,0.677,0.613,639,6929 -Kerfourn,56092,848,19.470,1.405,1.272,267,6790 -Auray,56007,13667,7.222,0.855,0.774,252,6748 -Ploemeur,56162,17911,39.913,2.011,1.821,213,6758 -Landaul,56096,2280,18.142,1.356,1.228,239,6755 -Plescop,56158,5708,23.464,1.542,1.396,260,6751 -Rohan,56198,1635,23.436,1.541,1.395,270,6792 -Réguiny,56190,2000,28.070,1.686,1.527,266,6779 -Inguiniel,56089,2139,51.426,2.283,2.067,230,6785 -Lierville,60363,234,7.808,0.889,0.805,618,6898 -Guémené-sur-Scorff,56073,1082,1.182,0.346,0.313,237,6792 -Elven,56053,5868,64.353,2.553,2.312,285,6755 -Kernascléden,56264,404,9.290,0.970,0.878,230,6785 -Gâvres,56062,673,1.992,0.449,0.407,228,6751 -Saint-Nolff,56231,3719,26.084,1.626,1.472,273,6749 -Saint-Barthélemy,56207,1178,22.175,1.499,1.357,246,6774 -Larmor-Plage,56107,8240,8.322,0.918,0.831,221,6756 -Croixanvec,56049,166,6.118,0.787,0.713,263,6800 -Meucon,56132,2249,5.768,0.764,0.692,268,6753 -Caudan,56036,6784,43.055,2.089,1.891,228,6769 -Moustoir-Ac,56141,1839,33.928,1.854,1.679,258,6763 -Locmalo,56113,906,24.209,1.566,1.418,239,6794 -Pleugriffet,56160,1255,38.572,1.977,1.790,280,6778 -Locminé,56117,4227,4.875,0.703,0.637,265,6771 -Ploeren,56164,6594,20.517,1.442,1.306,264,6745 -Pluvigner,56177,7480,83.124,2.902,2.628,257,6763 -Persquen,56156,340,20.126,1.428,1.293,234,6784 -Landévant,56097,3711,22.702,1.517,1.374,239,6756 -Lignol,56110,869,38.664,1.979,1.792,234,6784 -Theix-Noyalo,56251,7808,54.607,2.352,2.130,274,6745 -Locmaria-Grand-Champ,56115,1706,14.145,1.197,1.084,268,6759 -Bignan,56017,2787,46.250,2.165,1.960,274,6767 -Mesquer,44097,1938,16.858,1.307,1.183,291,6715 -Bréhan,56024,2314,51.715,2.289,2.072,279,6785 -Lanester,56098,22399,16.893,1.308,1.184,229,6763 -Cléguer,56040,3326,32.533,1.816,1.644,227,6774 -Ars-les-Favets,63011,225,14.655,1.219,1.104,679,6565 -Langoëlan,56099,380,22.623,1.514,1.371,239,6799 -Billio,56019,361,12.035,1.104,1.000,280,6769 -La Chèze,22039,566,2.600,0.513,0.464,280,6795 -Guéhenno,56071,794,23.285,1.536,1.391,282,6771 -Guénin,56074,1739,28.897,1.711,1.549,255,6769 -Le Sourn,56246,2112,16.111,1.278,1.157,251,6788 -Plouhinec,56169,5313,37.168,1.941,1.757,235,6750 -Plumelin,56174,2730,31.373,1.783,1.614,258,6764 -Plougoumelen,56167,2461,21.902,1.490,1.349,256,6742 -Melrand,56128,1510,40.790,2.033,1.841,249,6785 -Buléon,56027,527,12.387,1.120,1.014,276,6776 -Régny,42181,1529,13.808,1.183,1.071,797,6544 -Évellys,56144,3472,80.685,2.859,2.589,269,6784 -Plouay,56166,5604,67.150,2.608,2.361,223,6780 -Malguénac,56125,1835,38.481,1.975,1.788,247,6795 -Kervignac,56094,6578,39.332,1.996,1.807,235,6763 -Guidel,56078,11388,53.223,2.322,2.102,218,6764 -Priziac,56182,981,45.856,2.156,1.952,225,6789 -Genac-Bignac,16148,988,33.708,1.848,1.673,473,6528 -Treffléan,56255,2260,18.460,1.368,1.239,279,6743 -Séglien,56242,680,38.343,1.971,1.785,239,6799 -Kergrist,56093,722,29.812,1.738,1.574,261,6797 -Plaudren,56157,1916,41.163,2.042,1.849,270,6760 -La Chapelle-Neuve,56039,980,21.857,1.488,1.347,258,6771 -Saint-Jean-Brévelay,56222,2773,41.779,2.057,1.862,269,6764 -Quistinic,56188,1438,42.974,2.087,1.890,247,6777 -Crédin,56047,1543,33.729,1.849,1.674,268,6786 -Cléguérec,56041,2945,63.214,2.531,2.292,253,6794 -Berné,56014,1518,35.198,1.888,1.709,228,6783 -Le Croisty,56048,708,15.967,1.272,1.152,225,6789 -Locoal-Mendon,56119,3408,44.796,2.130,1.929,246,6749 -Brandivy,56022,1281,26.073,1.625,1.471,254,6756 -Brandérion,56021,1409,6.033,0.782,0.708,236,6760 -Moréac,56140,3764,60.358,2.473,2.239,272,6774 -Saint-Avé,56206,11342,26.173,1.628,1.474,269,6752 -Lanvaudan,56104,803,18.238,1.359,1.230,237,6772 -Lantillac,56103,308,7.781,0.888,0.804,280,6778 -Carnac,56034,4260,33.679,1.847,1.672,247,6744 -Plouharnel,56168,2148,18.752,1.378,1.248,242,6743 -Camors,56031,3012,37.120,1.939,1.756,254,6768 -Arradon,56003,5369,18.792,1.380,1.249,263,6740 -Saint-Gérand,56213,1109,18.339,1.363,1.234,265,6794 -Étel,56055,1942,1.864,0.435,0.394,236,6747 -Villecourt,80794,58,2.154,0.467,0.423,697,6968 -Port-Louis,56181,2626,1.223,0.352,0.319,224,6753 -Noyal-Pontivy,56151,3659,53.514,2.329,2.109,260,6795 -Vannes,56260,53218,33.312,1.837,1.663,265,6746 -Belz,56013,3725,15.931,1.270,1.150,235,6749 -Milly-sur-Thérain,60403,1659,19.225,1.396,1.264,632,6937 -Neulliac,56146,1417,31.128,1.776,1.608,256,6801 -Merlevenez,56130,3212,17.761,1.341,1.214,237,6756 -Plumelec,56172,2684,58.483,2.434,2.204,284,6759 -Saint-Thuriau,56237,1858,21.556,1.478,1.338,258,6782 -Inzinzac-Lochrist,56090,6498,44.952,2.134,1.932,231,6766 -Lorient,56121,57274,15.000,1.233,1.116,224,6755 -Surzur,56248,4326,59.070,2.446,2.215,283,6737 -La Trinité-sur-Mer,56258,1613,6.764,0.828,0.750,248,6739 -Le Hézo,56084,798,5.433,0.742,0.672,271,6737 -Locmaria,56114,870,20.768,1.451,1.314,235,6706 -Saint-Armel,56205,893,8.313,0.918,0.831,268,6733 -ÃŽle-aux-Moines,56087,604,3.277,0.576,0.522,259,6736 -Saint-Gildas-de-Rhuys,56214,1634,15.428,1.250,1.132,259,6731 -Quiberon,56186,4842,9.062,0.958,0.867,243,6725 -Sarzeau,56240,7842,59.910,2.464,2.231,265,6733 -Saint-Pierre-Quiberon,56234,2068,7.785,0.888,0.804,237,6732 -Brassy,80134,73,2.421,0.495,0.448,632,6961 -Arzon,56005,2085,9.057,0.958,0.867,253,6731 -Damgan,56052,1700,12.320,1.117,1.011,283,6727 -Locmariaquer,56116,1566,11.207,1.066,0.965,254,6732 -La Trinité-Surzur,56259,1563,2.397,0.493,0.446,281,6738 -Le Palais,56152,2555,17.510,1.332,1.206,234,6714 -Hœdic,56085,101,2.252,0.478,0.433,260,6707 -Bangor,56009,990,25.687,1.613,1.460,228,6709 -Le Tour-du-Parc,56252,1241,9.908,1.002,0.907,278,6729 -ÃŽle-d'Arz,56088,226,3.152,0.565,0.512,265,6734 -Coëtlogon,22043,221,16.698,1.301,1.178,290,6795 -Ménéac,56129,1576,68.730,2.639,2.389,289,6798 -Mohon,56134,992,38.688,1.980,1.793,291,6792 -Plumieux,22241,1016,39.849,2.009,1.819,287,6790 -Évriguet,56056,171,4.956,0.709,0.642,299,6789 -Guilliers,56080,1327,35.114,1.886,1.708,297,6789 -Arzal,56004,1631,24.127,1.564,1.416,293,6731 -Saint-Lyphard,44175,4699,24.569,1.578,1.429,299,6708 -Le Cours,56045,669,15.741,1.263,1.144,286,6751 -Moëze,17237,553,21.187,1.465,1.326,387,6543 -Rochefort-en-Terre,56196,627,1.267,0.358,0.324,300,6747 -Limerzel,56111,1348,25.250,1.599,1.448,301,6737 -Batz-sur-Mer,44010,2947,9.440,0.978,0.885,287,6702 -Saint-Guyomard,56219,1358,19.809,1.417,1.283,285,6758 -Ambon,56002,1822,38.128,1.965,1.779,280,6730 -Billiers,56018,946,6.037,0.782,0.708,286,6728 -Berric,56015,1843,21.547,1.478,1.338,282,6740 -Le Guerno,56077,960,9.687,0.991,0.897,294,6733 -Marlers,80515,139,3.943,0.632,0.572,619,6963 -Assérac,44006,1797,33.692,1.848,1.673,292,6723 -La Baule-Escoublac,44055,15455,26.618,1.642,1.487,295,6704 -Pénestin,56155,1878,21.687,1.482,1.342,287,6719 -La Turballe,44211,4502,18.591,1.372,1.242,289,6711 -Lauzach,56109,1133,10.885,1.050,0.951,281,6737 -Pleucadeuc,56159,1778,35.063,1.885,1.707,298,6758 -Piriac-sur-Mer,44125,2261,12.240,1.114,1.009,287,6712 -Saint-Molf,44183,2560,23.262,1.535,1.390,295,6713 -La Vraie-Croix,56261,1454,16.695,1.301,1.178,287,6744 -Camoël,56030,1002,13.830,1.184,1.072,295,6721 -Sainte-Segrée,80719,59,2.271,0.480,0.435,622,6963 -Le Croisic,44049,4066,4.505,0.676,0.612,284,6703 -Marzan,56126,2286,34.223,1.862,1.686,301,6727 -Sulniac,56247,3591,28.124,1.688,1.528,288,6743 -Bourseville,80124,696,8.050,0.903,0.818,595,7003 -Péaule,56153,2651,39.267,1.995,1.806,302,6735 -Larré,56108,1029,17.179,1.319,1.194,289,6751 -Noyal-Muzillac,56149,2525,49.341,2.236,2.025,285,6736 -Questembert,56184,7454,65.703,2.580,2.336,295,6738 -Férel,56058,3179,30.139,1.747,1.582,302,6726 -Guérande,44069,16186,81.763,2.878,2.606,284,6703 -Laverrière,60354,39,3.711,0.613,0.555,630,6955 -Muzillac,56143,4999,38.096,1.965,1.779,287,6729 -Neuf-Marché,76463,676,17.960,1.349,1.221,605,6923 -Équihen-Plage,62300,2767,3.946,0.632,0.572,598,7067 -Vaudricourt,80780,395,3.033,0.554,0.502,596,7001 -Le Portel,62667,9262,3.829,0.623,0.564,599,7071 -Fort-Mahon-Plage,80333,1219,13.390,1.165,1.055,600,7030 -Brutelles,80146,205,6.262,0.797,0.722,596,7004 -Pendé,80618,1083,16.398,1.289,1.167,600,7006 -Cayeux-sur-Mer,80182,2491,27.233,1.661,1.504,597,7013 -Lanchères,80464,909,15.745,1.263,1.144,595,7007 -Vaudreuille,31569,377,11.424,1.076,0.974,616,6258 -Woignarue,80826,835,16.236,1.283,1.162,592,7001 -Saint-Blimont,80700,878,6.659,0.821,0.743,597,7001 -Saint-Quentin-en-Tourmont,80713,290,26.257,1.631,1.477,596,7024 -Ault,80039,1498,6.000,0.780,0.706,590,7001 -Berck,62108,14368,14.521,1.213,1.098,598,7039 -Épiais-lès-Louvres,95212,110,3.465,0.593,0.537,665,6881 -Avilly-Saint-Léonard,60033,886,12.190,1.111,1.006,665,6897 -Chennevières-lès-Louvres,95154,307,4.591,0.682,0.617,667,6884 -Saint-Witz,95580,2387,7.647,0.880,0.797,668,6889 -Pontarmé,60505,801,13.164,1.155,1.046,667,6894 -Plailly,60494,1732,16.378,1.288,1.166,670,6887 -Vémars,95641,2434,8.238,0.914,0.828,670,6887 -Survilliers,95604,4149,5.433,0.742,0.672,666,6889 -Puiseux-en-France,95509,3493,5.212,0.727,0.658,664,6885 -Saint-Leu-la-Forêt,95563,15597,5.226,0.728,0.659,645,6878 -Montigny-lès-Cormeilles,95424,20927,4.063,0.642,0.581,641,6879 -Deuil-la-Barre,95197,22320,3.755,0.617,0.559,651,6873 -Ermont,95219,29112,4.156,0.649,0.588,647,6875 -Louvres,95351,10284,11.384,1.074,0.972,665,6881 -Valmondois,95628,1202,4.605,0.683,0.618,642,6888 -Le Mesnil-en-Thelle,60398,2237,6.086,0.785,0.711,648,6896 -Mériel,95392,5059,5.343,0.736,0.666,641,6886 -Beauvoir,60058,252,10.333,1.023,0.926,652,6948 -Paizay-Naudouin-Embourie,16253,375,25.835,1.618,1.465,464,6551 -Orry-la-Ville,60482,3365,11.998,1.103,0.999,663,6896 -Parmain,95480,5583,8.865,0.948,0.858,640,6890 -Villiers-le-Sec,95682,183,3.245,0.573,0.519,656,6888 -Bruyères-sur-Oise,95116,4303,8.906,0.950,0.860,653,6894 -Villiers-Adam,95678,863,9.856,0.999,0.905,647,6887 -Fosses,95250,9622,3.637,0.607,0.550,666,6889 -Belloy-en-France,95056,2177,9.483,0.980,0.887,656,6890 -Viarmes,95652,5188,8.280,0.916,0.829,656,6891 -Le Thillay,95612,4427,3.995,0.636,0.576,659,6879 -Beauchamp,95051,8691,3.032,0.554,0.502,643,6878 -Hédouville,95304,278,5.343,0.736,0.666,639,6897 -La Frette-sur-Seine,95257,4668,2.037,0.454,0.411,640,6874 -Gonesse,95277,26336,20.307,1.434,1.298,659,6879 -Cormeilles-en-Parisis,95176,23924,8.436,0.925,0.838,639,6873 -Boran-sur-Oise,60086,2171,11.568,1.083,0.981,654,6896 -Échiré,79109,3337,31.320,1.781,1.613,436,6598 -Ronquerolles,95529,876,4.774,0.695,0.629,641,6897 -Marly-la-Ville,95371,5696,8.784,0.943,0.854,665,6885 -Roissy-en-France,95527,2899,14.196,1.199,1.086,663,6879 -Sérévillers,60615,134,3.334,0.581,0.526,659,6947 -Méry-sur-Oise,95394,9712,9.879,1.000,0.905,641,6886 -Persan,95487,12665,5.183,0.725,0.656,645,6895 -Jagny-sous-Bois,95316,258,4.239,0.655,0.593,658,6887 -Chavençon,60144,172,5.772,0.765,0.693,629,6899 -La Chapelle-en-Serval,60142,3026,10.845,1.048,0.949,663,6890 -Nerville-la-Forêt,95445,692,6.704,0.824,0.746,648,6887 -Baillet-en-France,95042,2000,8.032,0.902,0.817,648,6883 -Le Mesnil-Aubry,95395,930,6.737,0.826,0.748,657,6884 -Bessancourt,95060,7065,6.385,0.804,0.728,643,6883 -Nointel,95452,792,3.242,0.573,0.519,647,6892 -Taverny,95607,26296,10.433,1.028,0.931,643,6879 -Fontenay-en-Parisis,95241,1963,11.040,1.058,0.958,657,6883 -Andilly,95014,2604,2.734,0.526,0.476,648,6878 -Bornel,60088,4828,23.776,1.552,1.405,640,6898 -Herblay-sur-Seine,95306,29066,12.598,1.130,1.023,636,6880 -Chantilly,60141,10789,16.088,1.277,1.156,665,6896 -Béthemont-la-Forêt,95061,421,3.792,0.620,0.561,644,6884 -Saint-Martin-du-Tertre,95566,2773,11.732,1.090,0.987,652,6887 -Bernes-sur-Oise,95058,2689,5.520,0.748,0.677,648,6896 -Champagne-sur-Oise,95134,5029,9.503,0.981,0.888,644,6893 -Beaumont-sur-Oise,95052,9597,5.601,0.753,0.682,650,6892 -Saint-Gratien,95555,20824,2.727,0.526,0.476,647,6875 -Attainville,95028,1731,7.247,0.857,0.776,654,6885 -Montsoult,95430,3405,3.865,0.626,0.567,647,6887 -Arnouville,95019,14353,2.848,0.537,0.486,658,6875 -L'Isle-Adam,95313,12395,15.682,1.261,1.142,642,6888 -Chaumontel,95149,3283,4.246,0.656,0.594,659,6893 -Frouville,95258,363,7.477,0.870,0.788,636,6896 -Saint-Prix,95574,7201,7.923,0.896,0.811,648,6881 -Le Plessis-Luzarches,95493,141,0.915,0.304,0.275,660,6889 -Garges-lès-Gonesse,95268,42598,5.468,0.744,0.674,656,6876 -Luzarches,95352,4553,20.517,1.442,1.306,656,6889 -Eaubonne,95203,25161,4.414,0.669,0.606,648,6878 -Bouffémont,95091,6204,4.563,0.680,0.616,650,6884 -Frépillon,95256,3336,3.384,0.586,0.531,644,6884 -Presles,95504,3837,10.186,1.016,0.920,646,6889 -Lassy,95331,170,1.963,0.446,0.404,658,6888 -Lamorlaye,60346,8918,15.193,1.241,1.124,659,6894 -Pierrelaye,95488,8168,8.974,0.954,0.864,639,6882 -Souleuvre en Bocage,14061,8789,189.743,4.385,3.970,409,6877 -Neuville-sur-Oise,95450,2051,4.264,0.657,0.595,632,6878 -Goussainville,95280,30948,11.430,1.076,0.974,659,6879 -Labbeville,95328,617,8.054,0.903,0.818,635,6894 -Maffliers,95353,1848,6.859,0.834,0.755,649,6888 -Domont,95199,15401,8.521,0.929,0.841,648,6881 -Seugy,95594,1001,1.716,0.417,0.378,656,6891 -Auvers-sur-Oise,95039,6955,12.794,1.139,1.031,636,6885 -Groslay,95288,8722,3.087,0.559,0.506,654,6877 -Écouen,95205,7192,7.594,0.877,0.794,657,6881 -Hérouville-en-Vexin,95308,619,8.492,0.928,0.840,636,6889 -Gouvieux,60282,9162,23.397,1.540,1.394,656,6901 -Toussus-le-Noble,78620,1185,4.024,0.639,0.579,637,6850 -Sarcelles,95585,57781,8.428,0.924,0.837,655,6875 -Moussy,95438,132,4.777,0.696,0.630,619,6894 -Piscop,95489,691,4.153,0.649,0.588,650,6879 -Saint-Ouen-l'Aumône,95572,24087,14.004,1.191,1.078,636,6881 -Asnières-sur-Oise,95026,2661,14.191,1.199,1.086,652,6894 -Nesles-la-Vallée,95446,1822,13.485,1.169,1.058,641,6895 -Theuville,95611,38,4.999,0.712,0.645,633,6895 -Chambly,60139,10098,12.876,1.142,1.034,646,6896 -Mours,95436,1552,2.479,0.501,0.454,647,6892 -Coye-la-Forêt,60172,3884,7.053,0.845,0.765,659,6893 -Villiers-le-Bel,95680,27247,7.319,0.861,0.780,657,6881 -Montmagny,95427,13602,2.917,0.544,0.493,651,6873 -Menouville,95387,62,2.800,0.533,0.483,636,6895 -Bellefontaine,95055,483,7.564,0.875,0.792,660,6888 -Serbannes,3271,827,14.254,1.202,1.088,726,6553 -Chauvry,95151,302,5.021,0.713,0.646,647,6886 -Le Plessis-Gassot,95492,73,4.158,0.649,0.588,657,6881 -Saint-Brice-sous-Forêt,95539,14815,5.997,0.780,0.706,653,6879 -Nanteuil-le-Haudouin,60446,4224,21.037,1.460,1.322,687,6896 -Davron,78196,310,6.082,0.785,0.711,624,6862 -Belle-Église,60060,612,7.842,0.891,0.807,641,6897 -Aulnay-sur-Mauldre,78033,1143,2.240,0.476,0.431,614,6870 -Trébons-de-Luchon,31559,4,0.879,0.298,0.270,500,6193 -Cergy,95127,63820,14.564,1.215,1.100,634,6881 -Saint-Romain-d'Urfé,42282,270,15.174,1.240,1.123,766,6533 -Bouafle,78090,2143,6.965,0.840,0.761,618,6872 -Ennery,95211,2423,7.473,0.870,0.788,634,6886 -Andrésy,78015,12924,6.909,0.837,0.758,630,6874 -Romagne,86211,879,41.271,2.045,1.852,497,6576 -Santeuil,95584,664,5.377,0.738,0.668,625,6892 -Courdimanche,95183,6712,5.644,0.756,0.684,627,6885 -Sagy,95535,1111,10.568,1.035,0.937,627,6885 -Brignancourt,95110,202,3.075,0.558,0.505,624,6894 -Seraincourt,95592,1304,11.388,1.074,0.972,618,6881 -Sainte-Soline,79297,358,25.700,1.614,1.461,473,6573 -Montgeroult,95422,382,5.001,0.712,0.645,628,6887 -Bréançon,95102,376,10.690,1.041,0.943,629,6893 -Pontoise,95500,30690,7.173,0.853,0.772,636,6885 -Brux,86039,726,36.110,1.913,1.732,480,6575 -Vaux-sur-Seine,78638,4857,8.450,0.925,0.838,626,6877 -Chapet,78140,1288,5.204,0.726,0.657,624,6873 -Cormeilles-en-Vexin,95177,1379,9.564,0.984,0.891,628,6893 -Conflans-Sainte-Honorine,78172,35404,9.888,1.001,0.906,632,6877 -Marines,95370,3504,8.228,0.913,0.827,626,6897 -Chanteloup-les-Vignes,78138,10387,3.430,0.590,0.534,629,6874 -Génicourt,95271,526,6.441,0.808,0.732,633,6888 -Le Bellay-en-Vexin,95054,245,5.150,0.722,0.654,618,6894 -Condécourt,95170,566,6.980,0.841,0.761,624,6881 -Chars,95142,2142,16.889,1.308,1.184,622,6894 -Évecquemont,78227,784,2.531,0.506,0.458,622,6881 -Vigny,95658,1082,6.806,0.830,0.751,624,6887 -Épiais-Rhus,95213,623,10.471,1.030,0.933,634,6891 -Grisy-les-Plâtres,95287,695,7.168,0.852,0.771,631,6895 -Éragny,95218,16980,4.726,0.692,0.627,635,6881 -Frémécourt,95254,563,4.321,0.662,0.599,626,6890 -Boissy-l'Aillerie,95078,1809,5.710,0.761,0.689,629,6889 -Triel-sur-Seine,78624,11834,13.836,1.184,1.072,627,6879 -Charroux,86061,1138,44.650,2.127,1.926,505,6562 -Ableiges,95002,1149,7.986,0.900,0.815,626,6890 -Seine-Port,77447,1892,8.583,0.933,0.845,669,6827 -Haravilliers,95298,547,11.049,1.058,0.958,629,6899 -Courcelles-sur-Viosne,95181,274,3.624,0.606,0.549,627,6885 -Us,95625,1305,10.985,1.055,0.955,623,6892 -Charmont,95141,33,3.594,0.603,0.546,610,6893 -Gaillon-sur-Montcient,78261,683,4.984,0.711,0.644,620,6884 -Meulan-en-Yvelines,78401,9080,3.451,0.591,0.535,620,6880 -Arronville,95023,666,15.912,1.270,1.150,639,6897 -Commeny,95169,465,4.745,0.693,0.627,617,6894 -Maurecourt,78382,4390,3.688,0.611,0.553,629,6878 -Osny,95476,16869,12.320,1.117,1.011,633,6888 -Rosières,60546,136,9.245,0.968,0.876,685,6900 -Mézy-sur-Seine,78403,2112,4.817,0.699,0.633,617,6880 -Vauréal,95637,16258,3.747,0.616,0.558,628,6881 -Jouy-le-Moutier,95323,16044,7.316,0.861,0.780,629,6878 -Berville,95059,349,8.517,0.929,0.841,630,6900 -Lavilletertre,60356,517,16.368,1.288,1.166,622,6902 -Chèvreville,60148,428,10.347,1.024,0.927,690,6893 -Flins-sur-Seine,78238,2381,8.790,0.944,0.855,616,6877 -Vallangoujard,95627,620,7.569,0.876,0.793,635,6891 -Théméricourt,95610,291,7.557,0.875,0.792,619,6886 -Tessancourt-sur-Aubette,78609,1017,4.451,0.672,0.608,620,6883 -Longuesse,95348,536,8.526,0.929,0.841,621,6883 -Saint-Vincent-la-Châtre,79301,658,21.309,1.469,1.330,463,6576 -Le Perchay,95483,549,5.468,0.744,0.674,621,6890 -La Hérelle,60311,238,5.104,0.719,0.651,660,6945 -Antilly,60020,268,3.745,0.616,0.558,700,6894 -Pontcarré,77374,2222,9.650,0.989,0.895,680,6853 -Saint-Germain-sur-École,77412,358,2.527,0.506,0.458,664,6821 -Esmans,77172,905,17.849,1.345,1.218,700,6804 -Lognes,77258,13999,3.999,0.637,0.577,675,6859 -Thoury-Férottes,77465,674,16.457,1.291,1.169,696,6802 -Saint-Mammès,77419,3309,2.256,0.478,0.433,686,6810 -Vauhallan,91635,2046,3.342,0.582,0.527,640,6849 -Héricy,77226,2603,10.733,1.043,0.944,687,6814 -Courdimanche-sur-Essonne,91184,262,5.700,0.760,0.688,654,6815 -Auffreville-Brasseuil,78031,650,2.349,0.488,0.442,605,6874 -Fontenay-le-Fleury,78242,13437,5.569,0.751,0.680,630,6859 -Oncy-sur-École,91463,1024,5.412,0.741,0.671,658,6807 -Thomery,77463,3493,3.736,0.615,0.557,681,6812 -Soisy-sur-École,91599,1268,11.528,1.081,0.979,663,6818 -Verdaches,4235,61,23.915,1.557,1.410,964,6355 -Tousson,77471,390,13.240,1.158,1.048,662,6805 -Péroy-les-Gombries,60489,1125,11.190,1.065,0.964,690,6894 -Maisse,91359,2726,21.535,1.477,1.337,657,6813 -Montmachoux,77313,241,4.432,0.670,0.607,699,6802 -Buno-Bonnevaux,91121,445,15.984,1.273,1.153,658,6807 -Nanteau-sur-Essonne,77328,439,12.905,1.143,1.035,657,6800 -Saint-Fraigne,16317,447,32.246,1.808,1.637,469,6545 -La Verrière,78644,6225,2.131,0.465,0.421,622,6851 -Autouillet,78036,473,5.061,0.716,0.648,611,6860 -Villecerf,77501,721,10.928,1.052,0.952,690,6801 -Vendres,34329,2693,37.935,1.961,1.776,722,6237 -La Genevraye,77202,777,13.319,1.162,1.052,680,6802 -Rennemoulin,78518,112,2.221,0.474,0.429,629,6859 -Boigneville,91069,392,15.774,1.264,1.144,650,6804 -Fontaine-le-Port,77188,988,7.916,0.896,0.811,681,6821 -Jouars-Pontchartrain,78321,5589,9.742,0.994,0.900,622,6854 -Milly-la-Forêt,91405,4668,33.752,1.849,1.674,656,6810 -Dannemois,91195,824,8.462,0.926,0.838,663,6818 -Prunay-sur-Essonne,91507,302,5.126,0.721,0.653,651,6805 -Grez-sur-Loing,77216,1414,13.061,1.150,1.041,676,6803 -Montcourt-Fromonville,77302,1994,8.069,0.904,0.818,681,6799 -Bourbourg,59094,7112,38.398,1.972,1.785,648,7096 -Villemoisson-sur-Orge,91667,6952,2.321,0.485,0.439,651,6841 -Ville-Saint-Jacques,77516,793,10.702,1.041,0.943,691,6806 -Jouy-en-Josas,78322,8257,10.245,1.019,0.923,637,6855 -Draveil,91201,29279,15.936,1.271,1.151,655,6844 -Ballainvilliers,91044,4539,3.986,0.636,0.576,647,6840 -Montigny-le-Bretonneux,78423,32986,10.707,1.042,0.943,630,6856 -Loubillé,79154,388,21.531,1.477,1.337,465,6555 -Le Kremlin-Bicêtre,94043,25292,1.541,0.395,0.358,652,6856 -Vigneux-sur-Seine,91657,31256,8.984,0.954,0.864,659,6847 -Milon-la-Chapelle,78406,280,3.088,0.559,0.506,629,6848 -Bailly,78043,3826,6.629,0.820,0.742,632,6862 -Les Loges-en-Josas,78343,1567,2.508,0.504,0.456,637,6853 -Bièvres,91064,4628,9.736,0.993,0.899,641,6849 -Thieux,60634,429,9.198,0.965,0.874,652,6939 -Villiers-le-Bâcle,91679,1249,6.064,0.784,0.710,634,6847 -Saint-Forget,78548,513,6.008,0.780,0.706,626,6848 -Bois-d'Arcy,78073,14703,5.599,0.753,0.682,630,6856 -Saint-Aubin,91538,700,3.567,0.601,0.544,636,6847 -Épinay-sur-Orge,91216,11166,4.363,0.665,0.602,650,6841 -Les Ulis,91692,24868,5.482,0.745,0.675,641,6844 -Saint-Lambert,78561,453,6.621,0.819,0.742,627,6847 -Boullay-les-Troux,91093,637,4.868,0.702,0.636,628,6841 -Vélizy-Villacoublay,78640,21517,8.940,0.952,0.862,643,6854 -Saclay,91534,3967,13.759,1.181,1.069,641,6847 -Morsang-sur-Orge,91434,21149,4.390,0.667,0.604,653,6839 -Versailles,78646,85346,26.149,1.628,1.474,637,6859 -Saint-Cyr-l'École,78545,18084,5.109,0.719,0.651,630,6856 -Verrières-le-Buisson,91645,15434,9.991,1.006,0.911,644,6849 -Saulx-les-Chartreux,91587,5319,7.725,0.885,0.801,647,6841 -Saint-Rémy-lès-Chevreuse,78575,7800,9.805,0.997,0.903,634,6844 -Bures-sur-Yvette,91122,9686,4.509,0.676,0.612,638,6842 -Soisy-sur-Seine,91600,7075,8.687,0.938,0.849,663,6842 -Voisins-le-Bretonneux,78688,11239,3.612,0.605,0.548,632,6851 -Chilly-Mazarin,91161,20133,5.607,0.754,0.683,649,6847 -Chaunay,86068,1193,38.779,1.982,1.795,481,6568 -Nozay,91458,4741,7.375,0.864,0.782,644,6842 -Les Clayes-sous-Bois,78165,17512,6.107,0.787,0.713,624,6860 -Buc,78117,5781,8.064,0.904,0.818,634,6851 -La Ville-du-Bois,91665,7435,3.544,0.599,0.542,647,6841 -Viroflay,78686,16034,3.486,0.594,0.538,638,6857 -Longjumeau,91345,21618,4.901,0.705,0.638,649,6842 -Magny-les-Hameaux,78356,9258,16.717,1.301,1.178,634,6847 -Gometz-la-Ville,91274,1482,9.694,0.991,0.897,636,6840 -Marolles-en-Beauce,91374,226,5.985,0.779,0.705,642,6808 -Villepreux,78674,10858,10.467,1.030,0.933,630,6861 -Crosne,91191,9110,2.472,0.500,0.453,661,6848 -Villiers-sur-Orge,91685,4554,1.780,0.425,0.385,648,6839 -Trappes,78621,32679,13.707,1.178,1.067,626,6856 -Choisel,78162,550,8.983,0.954,0.864,627,6840 -Gif-sur-Yvette,91272,20927,11.902,1.098,0.994,634,6844 -Orsay,91471,16678,7.428,0.868,0.786,642,6845 -Montgeron,91421,23972,11.189,1.065,0.964,659,6847 -Wissous,91689,7674,9.150,0.963,0.872,650,6846 -Ormoy,91468,2018,1.893,0.438,0.397,661,6831 -Châteaufort,78143,1380,4.897,0.704,0.637,634,6847 -Villejust,91666,2315,5.363,0.737,0.667,644,6843 -Champlan,91136,2796,3.720,0.614,0.556,648,6846 -Massy,91377,49924,9.403,0.976,0.884,644,6848 -Gometz-le-Châtel,91275,2577,5.055,0.716,0.648,638,6842 -Blandy,91067,119,7.901,0.895,0.810,644,6802 -Cheptainville,91156,2012,7.223,0.855,0.774,648,6827 -Guyancourt,78297,28385,13.214,1.157,1.048,632,6851 -Noisy-le-Roi,78455,7581,5.556,0.750,0.679,631,6859 -Igny,91312,9924,3.843,0.624,0.565,644,6849 -Torfou,91619,271,3.525,0.598,0.541,643,6827 -Les Molières,91411,1957,7.042,0.845,0.765,630,6840 -Grigny,91286,28958,5.031,0.714,0.646,655,6838 -Chevreuse,78160,5681,13.587,1.173,1.062,630,6843 -Gourdon,6068,387,22.548,1.511,1.368,1022,6299 -Sainte-Geneviève-des-Bois,91549,35859,9.391,0.975,0.883,652,6836 -Fontenay-le-Vicomte,91244,1214,6.890,0.836,0.757,656,6826 -Breux-Jouy,91106,1247,4.773,0.695,0.629,638,6827 -Lardy,91330,5514,7.672,0.882,0.799,645,6826 -Longvilliers,78349,500,14.069,1.194,1.081,629,6834 -Roinville,91525,1368,13.518,1.170,1.059,630,6828 -Fontenay-Mauvoisin,78245,365,3.319,0.580,0.525,602,6875 -Le Val-Saint-Germain,91630,1456,12.624,1.131,1.024,634,6829 -Chauvac-Laux-Montaux,26091,43,24.581,1.578,1.429,899,6363 -Courson-Monteloup,91186,582,3.760,0.617,0.559,636,6834 -Saint-Sulpice-de-Favières,91578,305,4.422,0.669,0.606,640,6825 -Tinchebray-Bocage,61486,4964,90.652,3.031,2.744,431,6849 -Saint-Chéron,91540,5045,11.543,1.081,0.979,635,6826 -Guibeville,91292,713,2.629,0.516,0.467,647,6831 -Janvry,91319,637,8.325,0.918,0.831,638,6840 -Leuville-sur-Orge,91333,4384,2.526,0.506,0.458,647,6836 -Mennecy,91386,14170,11.191,1.065,0.964,657,6830 -Avrainville,91041,957,9.287,0.970,0.878,645,6826 -Marcoussis,91363,8137,16.743,1.302,1.179,643,6837 -Pecqueuse,91482,561,7.450,0.869,0.787,628,6838 -Carrières-sous-Poissy,78123,16035,7.273,0.858,0.777,630,6874 -Rochefort-en-Yvelines,78522,895,12.778,1.138,1.030,623,6833 -Boissy-sous-Saint-Yon,91085,3826,8.133,0.908,0.822,642,6826 -Mauchamps,91378,273,3.184,0.568,0.514,642,6826 -Bonnelles,78087,1905,10.816,1.047,0.948,629,6837 -Les Omergues,4140,131,34.328,1.865,1.689,910,6343 -Linas,91339,6882,7.590,0.877,0.794,644,6835 -Méreuil,5076,82,11.037,1.057,0.957,914,6370 -Lisses,91340,7541,10.457,1.029,0.932,659,6831 -Saint-Germain-lès-Arpajon,91552,10609,6.326,0.801,0.725,646,6834 -Vert-le-Grand,91648,2373,16.138,1.279,1.158,652,6829 -Hattencourt,80421,289,3.655,0.609,0.551,684,6965 -Saint-Michel-sur-Orge,91570,19866,5.310,0.733,0.664,651,6836 -Limay,78335,16567,11.471,1.078,0.976,607,6876 -Écharcon,91204,791,6.870,0.834,0.755,656,6829 -Chauffour-lès-Étréchy,91148,137,4.839,0.700,0.634,637,6824 -Janville-sur-Juine,91318,1959,10.637,1.038,0.940,647,6823 -Villeconin,91662,728,14.672,1.219,1.104,635,6826 -Nucourt,95459,717,7.726,0.885,0.801,618,6898 -Ollainville,91461,4732,11.421,1.076,0.974,641,6837 -Les Granges-le-Roi,91284,1212,12.790,1.138,1.030,629,6823 -La Forêt-Sainte-Croix,91248,163,5.349,0.736,0.666,642,6811 -Brétigny-sur-Orge,91103,26275,14.645,1.218,1.103,649,6831 -Villabé,91659,5385,4.688,0.689,0.624,659,6831 -Verton,62849,2408,11.037,1.057,0.957,607,7034 -Breuillet,91105,8440,6.778,0.829,0.751,636,6830 -Fontenay-lès-Briis,91243,2076,9.821,0.998,0.904,641,6837 -Vert-le-Petit,91649,2779,6.847,0.833,0.754,653,6826 -Marolles-en-Hurepoix,91376,5300,6.534,0.814,0.737,647,6829 -Saint-Vrain,91579,3059,11.567,1.083,0.981,653,6826 -Angervilliers,91017,1681,9.117,0.961,0.870,629,6833 -Maisons-Laffitte,78358,23470,6.936,0.838,0.759,640,6874 -Sermaise,91593,1633,13.832,1.184,1.072,631,6828 -Umpeau,28397,391,11.460,1.078,0.976,599,6819 -Longpont-sur-Orge,91347,6362,5.095,0.718,0.650,647,6836 -Champcueil,91135,2870,16.484,1.292,1.170,656,6823 -Pussay,91511,2250,11.601,1.084,0.981,625,6804 -Chamarande,91132,1144,5.758,0.764,0.692,643,6823 -Arpajon,91021,10227,2.389,0.492,0.445,644,6831 -Forges-les-Bains,91249,3815,14.745,1.222,1.106,629,6837 -Bouray-sur-Juine,91095,2219,7.239,0.856,0.775,648,6825 -Limours,91338,6695,14.131,1.197,1.084,635,6838 -Souzy-la-Briche,91602,419,7.389,0.865,0.783,639,6825 -Saint-Yon,91581,887,4.720,0.692,0.627,641,6831 -Le Plessis-Pâté,91494,4083,7.604,0.878,0.795,651,6832 -La Norville,91457,4090,4.577,0.681,0.617,648,6831 -Chevannes,91159,1671,10.263,1.020,0.924,656,6826 -Bondoufle,91086,9357,6.827,0.832,0.753,653,6834 -Égly,91207,5645,3.985,0.635,0.575,642,6830 -Leudeville,91332,1454,7.857,0.892,0.808,650,6833 -Fleury-Mérogis,91235,11430,6.381,0.804,0.728,653,6836 -Vaugrigneuse,91634,1275,6.131,0.788,0.713,633,6833 -Briis-sous-Forges,91111,3501,11.177,1.064,0.963,635,6839 -Montlhéry,91425,7561,3.318,0.580,0.525,647,6837 -Saint-Maurice-Montcouronne,91568,1573,9.127,0.962,0.871,638,6831 -Ris-Orangis,91521,28796,8.367,0.921,0.834,658,6839 -Bruyères-le-Châtel,91115,3321,12.923,1.144,1.036,637,6832 -Aigremont,78007,1090,3.046,0.556,0.503,627,6866 -Mareil-sur-Mauldre,78368,1726,4.383,0.666,0.603,618,6864 -Louveciennes,78350,7144,5.451,0.743,0.673,635,6860 -Bougival,78092,8749,2.759,0.529,0.479,638,6863 -Hargeville,78300,444,7.016,0.843,0.763,610,6867 -Morainvilliers,78431,2833,7.446,0.869,0.787,623,6873 -Villette,78677,530,4.639,0.686,0.621,603,6870 -Nanterre,92050,94258,12.230,1.113,1.008,643,6868 -Courgent,78185,381,2.015,0.452,0.409,602,6866 -Marly-le-Roi,78372,16147,6.691,0.823,0.745,632,6864 -Maule,78380,5857,17.450,1.330,1.204,616,6866 -Flacourt,78234,155,4.364,0.665,0.602,599,6871 -Bazemont,78049,1560,6.709,0.824,0.746,618,6869 -Breuil-Bois-Robert,78104,729,3.768,0.618,0.560,606,6874 -Montesson,78418,15277,7.341,0.862,0.780,636,6867 -Guerville,78291,2140,10.124,1.013,0.917,607,6876 -Magnanville,78354,5947,4.283,0.659,0.597,602,6875 -Orgeval,78466,6134,15.479,1.252,1.134,627,6869 -Rosay,78530,361,4.512,0.676,0.612,605,6869 -Jumeauville,78325,609,7.677,0.882,0.799,611,6866 -Sartrouville,78586,52648,8.477,0.927,0.839,639,6870 -Thoiry,78616,1414,7.142,0.851,0.771,612,6863 -Boinville-en-Mantois,78070,294,4.918,0.706,0.639,609,6872 -Le Mesnil-le-Roi,78396,6276,3.818,0.622,0.563,635,6868 -Mézières-sur-Seine,78402,3656,10.831,1.048,0.949,611,6875 -Léglantiers,60357,550,7.838,0.891,0.807,666,6931 -Plainville,60496,160,4.309,0.661,0.598,659,6947 -Médan,78384,1385,2.890,0.541,0.490,625,6872 -Septeuil,78591,2344,9.578,0.985,0.892,604,6864 -Boinvilliers,78072,291,3.604,0.604,0.547,602,6868 -Nézel,78451,1062,1.323,0.366,0.331,614,6873 -Le Vaumain,60660,357,8.111,0.907,0.821,619,6915 -Saint-Jean-d'Angély,17347,7066,18.871,1.383,1.252,425,6546 -Villennes-sur-Seine,78672,5232,5.012,0.713,0.646,627,6872 -Soindres,78597,675,5.232,0.728,0.659,602,6872 -Saint-Nom-la-Bretèche,78571,4908,11.807,1.094,0.991,628,6865 -Saint-Martin-des-Champs,78565,309,6.210,0.793,0.718,606,6866 -Arnouville-lès-Mantes,78020,931,9.911,1.002,0.907,605,6871 -Bonneuil-en-France,95088,1035,4.778,0.696,0.630,660,6873 -Ecquevilly,78206,4319,11.306,1.070,0.969,621,6875 -Mantes-la-Ville,78362,19825,6.249,0.796,0.721,607,6877 -Favrieux,78231,142,3.188,0.568,0.514,601,6873 -Les Alluets-le-Roi,78010,1213,7.482,0.871,0.789,619,6871 -L'Étang-la-Ville,78224,4539,5.376,0.738,0.668,632,6864 -Montainville,78415,512,4.758,0.694,0.628,614,6865 -Goussonville,78281,618,4.683,0.689,0.624,608,6869 -Feucherolles,78233,2862,13.209,1.157,1.048,625,6867 -La Falaise,78230,581,3.064,0.557,0.504,615,6872 -Chambourcy,78133,5657,7.987,0.900,0.815,627,6866 -Herbeville,78305,251,6.415,0.806,0.730,618,6869 -Crespières,78189,1578,15.008,1.233,1.116,623,6867 -Le Port-Marly,78502,5493,1.440,0.382,0.346,635,6866 -Carrières-sur-Seine,78124,15275,5.100,0.719,0.651,641,6869 -Mulcent,78439,109,3.588,0.603,0.546,601,6866 -Rivecourt,60540,580,4.036,0.639,0.579,682,6916 -Le Pecq,78481,15880,2.891,0.541,0.490,635,6866 -Aubergenville,78029,11625,9.071,0.959,0.868,613,6876 -Asnières-la-Giraud,17022,1041,18.734,1.378,1.248,425,6538 -Prunay-le-Temple,78505,425,6.748,0.827,0.749,602,6864 -Versigny,60671,375,14.840,1.226,1.110,686,6899 -Épône,78217,6507,13.367,1.164,1.054,615,6873 -Boisville-la-Saint-Père,28047,706,25.194,1.598,1.447,603,6809 -Montlognon,60422,193,5.229,0.728,0.659,680,6893 -Fontaine-Chaalis,60241,353,33.516,1.843,1.669,675,6891 -Baron,60047,767,21.615,1.480,1.340,679,6900 -Mont-l'Évêque,60421,404,14.291,1.203,1.089,673,6901 -Borest,60087,330,12.832,1.140,1.032,676,6901 -Acy-en-Multien,60005,842,11.466,1.078,0.976,698,6888 -Ormoy-Villers,60479,627,10.433,1.028,0.931,691,6899 -La Chapelle-d'Aunainville,28074,279,7.471,0.870,0.788,613,6814 -Étavigny,60224,157,7.168,0.852,0.771,698,6893 -Vincy-Manœuvre,77526,296,4.974,0.710,0.643,698,6888 -Boissy-Fresnoy,60079,1019,16.055,1.275,1.154,690,6899 -Ormoy-le-Davien,60478,349,3.944,0.632,0.572,698,6901 -Moinville-la-Jeulin,28255,170,6.074,0.784,0.710,605,6807 -Betz,60069,1181,15.609,1.258,1.139,693,6897 -Villers-Saint-Genest,60683,383,9.639,0.988,0.895,692,6892 -Cherbonnières,17101,347,16.753,1.303,1.180,444,6544 -Rosoy-en-Multien,60548,531,8.526,0.929,0.841,699,6886 -Bargny,60046,329,7.631,0.879,0.796,698,6899 -Réez-Fosse-Martin,60527,150,7.154,0.851,0.771,693,6887 -Penchard,77358,1085,4.338,0.663,0.600,691,6877 -Saint-Ferriol,11341,120,10.077,1.010,0.914,635,6201 -Oysonville,28294,520,9.639,0.988,0.895,624,6812 -Isles-lès-Villenoy,77232,907,7.007,0.843,0.763,686,6868 -Intréville,28197,142,8.965,0.953,0.863,623,6801 -Landes,17202,610,16.041,1.275,1.154,419,6549 -Villemareuil,77505,415,10.679,1.040,0.942,698,6871 -Germigny-l'Évêque,77203,1312,11.740,1.091,0.988,696,6875 -Saint-Germain-sur-Morin,77413,3612,4.789,0.697,0.631,690,6864 -Fontaine-Chalendray,17162,205,19.024,1.388,1.257,457,6542 -Vignely,77498,310,3.581,0.602,0.545,686,6869 -Lumigny-Nesles-Ormeaux,77264,1530,36.367,1.920,1.738,695,6851 -Condé-Sainte-Libiaire,77125,1410,2.125,0.464,0.420,689,6868 -Villenoy,77513,4697,7.354,0.863,0.781,687,6872 -Saulx-Marchais,78588,928,2.157,0.467,0.423,615,6860 -Tacoignières,78605,1034,3.202,0.570,0.516,603,6860 -Saint-Loup,17356,311,16.563,1.295,1.173,420,6553 -Vieille-Église-en-Yvelines,78655,706,9.740,0.993,0.899,620,6840 -Vaucourtois,77484,246,4.660,0.687,0.622,698,6868 -Mazeray,17226,950,19.617,1.410,1.277,426,6541 -Saint-Arnoult-en-Yvelines,78537,6090,12.700,1.134,1.027,621,6832 -Auffargis,78030,1990,17.312,1.324,1.199,622,6844 -Saint-Julien-de-l'Escap,17350,901,8.967,0.953,0.863,432,6544 -Coignières,78168,4372,8.092,0.905,0.819,619,6849 -Blanzay-sur-Boutonne,17049,86,5.805,0.767,0.694,437,6556 -Plaisir,78490,31680,17.667,1.338,1.211,624,6860 -Dampierre-en-Yvelines,78193,1043,11.290,1.070,0.969,622,6844 -Sainte-Mesme,78569,923,8.317,0.918,0.831,621,6828 -Les Mesnuls,78398,862,6.565,0.816,0.739,613,6852 -Grosrouvre,78289,917,12.567,1.128,1.021,606,6855 -Méré,78389,1682,10.529,1.033,0.935,615,6858 -Villiers-le-Mahieu,78681,761,6.901,0.836,0.757,611,6862 -La Celle-les-Bordes,78125,831,22.901,1.523,1.379,620,6840 -Le Mesnil-Saint-Denis,78397,6751,9.084,0.959,0.868,624,6851 -Cernay-la-Ville,78128,1589,10.090,1.011,0.915,626,6840 -Le Tremblay-sur-Mauldre,78623,920,6.066,0.784,0.710,617,6856 -Auteuil,78034,938,4.419,0.669,0.606,612,6860 -Maurepas,78383,18646,8.421,0.924,0.837,619,6853 -Gibourne,17176,112,11.057,1.058,0.958,445,6543 -Les Bréviaires,78108,1215,19.789,1.416,1.282,616,6851 -Antezant-la-Chapelle,17013,351,18.719,1.377,1.247,432,6552 -Poigny-la-Forêt,78497,943,23.595,1.546,1.400,612,6843 -Neauphle-le-Château,78442,3293,2.178,0.470,0.426,620,6858 -Orcemont,78464,990,10.570,1.035,0.937,614,6831 -Varaize,17459,559,20.249,1.432,1.297,433,6538 -Les Essarts-le-Roi,78220,6758,19.635,1.410,1.277,622,6846 -Élancourt,78208,25529,9.248,0.968,0.876,625,6851 -Galluis,78262,1187,4.499,0.675,0.611,611,6854 -Boinville-le-Gaillard,78071,610,12.687,1.134,1.027,617,6824 -Levainville,28208,393,5.561,0.751,0.680,607,6821 -Montfort-l'Amaury,78420,2943,5.733,0.762,0.690,614,6853 -Senlisse,78590,499,8.100,0.906,0.820,622,6843 -Thiverval-Grignon,78615,1086,11.308,1.070,0.969,621,6859 -Saint-Germain-de-la-Grange,78550,1887,5.283,0.732,0.663,619,6861 -Vicq,78653,381,4.476,0.673,0.609,614,6860 -Saint-Martin-de-Bréthencourt,78564,646,16.631,1.298,1.175,619,6822 -Béhoust,78053,460,5.429,0.742,0.672,606,6858 -Gazeran,78269,1283,25.785,1.616,1.463,606,6839 -Lévis-Saint-Nom,78334,1607,8.379,0.921,0.834,622,6846 -Beynes,78062,7569,18.652,1.375,1.245,615,6859 -Villiers-Saint-Frédéric,78683,2801,5.104,0.719,0.651,618,6857 -Courant,17124,407,15.777,1.264,1.144,425,6557 -Garancières,78265,2342,10.413,1.027,0.930,610,6860 -Mareil-le-Guyon,78366,371,4.086,0.643,0.582,617,6856 -La Queue-les-Yvelines,78513,2184,5.783,0.765,0.693,609,6855 -Aincourt,95008,930,10.102,1.012,0.916,612,6886 -Saint-Léger-en-Yvelines,78562,1376,35.120,1.886,1.708,605,6847 -Neauphle-le-Vieux,78443,953,7.641,0.880,0.797,617,6860 -Asnières-en-Poitou,79015,202,19.189,1.394,1.262,450,6555 -Rambouillet,78517,26202,35.896,1.907,1.727,611,6842 -Orphin,78470,898,16.665,1.299,1.176,610,6829 -Précy-sur-Marne,77376,797,4.822,0.699,0.633,684,6871 -Boissy-sans-Avoir,78084,638,4.075,0.643,0.582,612,6860 -Le Perray-en-Yvelines,78486,6776,13.568,1.172,1.061,615,6847 -Bazoches-sur-Guyonne,78050,604,5.625,0.755,0.684,617,6852 -Saint-Rémy-l'Honoré,78576,1565,10.252,1.019,0.923,619,6852 -Sonchamp,78601,1640,46.372,2.168,1.963,614,6830 -Prunay-en-Yvelines,78506,853,27.287,1.663,1.506,614,6831 -Flexanville,78236,594,8.888,0.949,0.859,608,6864 -Clairefontaine-en-Yvelines,78164,832,17.284,1.323,1.198,619,6840 -Ablis,78003,3436,26.210,1.630,1.476,618,6827 -Marles-en-Brie,77277,1601,12.823,1.140,1.032,689,6848 -Rozay-en-Brie,77393,2846,3.161,0.566,0.512,698,6841 -Bréau,77052,318,1.352,0.370,0.335,692,6829 -Mandres-les-Roses,94047,4703,3.369,0.584,0.529,665,6845 -Boussy-Saint-Antoine,91097,7282,2.918,0.544,0.493,667,6843 -Servon,77450,3233,7.420,0.867,0.785,668,6845 -Mortefontaine,60432,846,15.345,1.247,1.129,669,6888 -Plessis-Saint-Benoist,91495,318,9.179,0.964,0.873,626,6815 -Épinay-sous-Sénart,91215,12760,3.593,0.603,0.546,665,6845 -Yerres,91691,28820,9.976,1.005,0.910,661,6848 -La Vergne,17465,589,13.819,1.183,1.071,426,6548 -Les Chapelles-Bourbon,77091,453,6.446,0.808,0.732,689,6848 -Authon-la-Plaine,91035,375,10.501,1.031,0.933,622,6816 -Brunoy,91114,26055,6.620,0.819,0.742,663,6842 -Orveau,91473,196,4.282,0.659,0.597,648,6818 -Hautefeuille,77224,258,9.807,0.997,0.903,697,6854 -Dammartin-sur-Tigeaux,77154,1045,9.058,0.958,0.867,694,6858 -Guérard,77219,2402,19.800,1.416,1.282,699,6860 -Crèvecœur-en-Brie,77144,394,9.240,0.968,0.876,694,6849 -Villeneuve-le-Comte,77508,1859,19.102,1.391,1.259,688,6859 -Aslonnes,86010,1104,22.942,1.525,1.381,496,6595 -Mortcerf,77318,1452,17.849,1.345,1.218,696,6851 -Lezay,79148,2028,45.657,2.151,1.948,467,6575 -Villeneuve-Saint-Denis,77510,892,7.411,0.867,0.785,686,6859 -Longperrier,77259,2414,4.645,0.686,0.621,674,6885 -Saint-Romans-lès-Melle,79295,722,8.901,0.950,0.860,453,6570 -La Celle-sur-Morin,77063,1318,7.581,0.876,0.793,699,6853 -Tigeaux,77466,380,6.120,0.787,0.713,694,6859 -Haute-Isle,95301,279,2.521,0.505,0.457,604,6887 -Prahecq,79216,2157,25.019,1.592,1.441,446,6578 -Vienne-en-Arthies,95656,434,3.782,0.619,0.560,605,6887 -Faremoutiers,77176,2751,10.900,1.051,0.952,702,6851 -Cléry-en-Vexin,95166,456,5.154,0.723,0.655,615,6894 -Pomponne,77372,3959,7.299,0.860,0.779,675,6864 -Villers-en-Arthies,95676,506,8.325,0.918,0.831,608,6890 -Guernes,78290,1089,8.637,0.935,0.847,599,6882 -La Mothe-Saint-Héray,79184,1699,15.144,1.239,1.122,459,6586 -Vaires-sur-Marne,77479,13580,6.060,0.784,0.710,675,6864 -Annet-sur-Marne,77005,3259,13.142,1.154,1.045,680,6867 -Iverny,77233,589,1.754,0.422,0.382,684,6878 -Saint-Gelais,79249,2066,16.657,1.299,1.176,442,6592 -Ver-sur-Launette,60666,1173,13.231,1.158,1.048,674,6891 -Marchémoret,77273,565,7.032,0.844,0.764,679,6883 -Chérence,95157,150,8.623,0.935,0.847,602,6889 -Banthelu,95046,157,8.235,0.913,0.827,613,6894 -Villeneuve-la-Comtesse,17474,740,16.109,1.278,1.157,427,6560 -Fontenay-Saint-Père,78246,996,13.085,1.151,1.042,608,6884 -Saint-Sauvant,86244,1263,59.938,2.464,2.231,472,6590 -Jablines,77234,685,8.079,0.905,0.819,681,6869 -Ermenonville,60213,1009,16.715,1.301,1.178,681,6889 -Romans,79231,706,11.500,1.079,0.977,453,6587 -Secondigné-sur-Belle,79310,520,24.592,1.579,1.430,448,6569 -Saint-Félix,17327,300,15.426,1.250,1.132,418,6562 -Frémainville,95253,489,5.620,0.755,0.684,619,6886 -Guiry-en-Vexin,95295,166,6.193,0.792,0.717,614,6891 -Brueil-en-Vexin,78113,693,7.438,0.868,0.786,614,6883 -Chaussy,95150,591,14.803,1.225,1.109,603,6894 -Jambville,78317,854,4.883,0.703,0.637,617,6885 -Buchelay,78118,3167,4.931,0.707,0.640,602,6875 -Magny-en-Vexin,95355,5555,14.545,1.214,1.099,611,6895 -Brûlain,79058,746,24.958,1.590,1.440,442,6574 -Saint-Martin-la-Garenne,78567,1003,15.948,1.271,1.151,601,6883 -Genainville,95270,544,10.601,1.036,0.938,609,6889 -Saint-Gervais,95554,932,13.450,1.167,1.057,611,6899 -Mantes-la-Jolie,78361,43969,9.441,0.978,0.885,602,6879 -Wy-dit-Joli-Village,95690,335,8.479,0.927,0.839,614,6887 -Maudétour-en-Vexin,95379,191,6.667,0.822,0.744,611,6888 -La Roche-Guyon,95523,471,4.670,0.688,0.623,598,6887 -Ambleville,95011,378,8.057,0.904,0.818,605,6893 -Amenucourt,95012,213,8.786,0.944,0.855,603,6891 -Juziers,78327,3758,8.754,0.942,0.853,617,6877 -Marigny,79166,873,32.154,1.805,1.634,441,6572 -Vétheuil,95651,843,4.393,0.667,0.604,607,6884 -Guitrancourt,78296,609,7.381,0.865,0.783,610,6877 -Lainville-en-Vexin,78329,798,7.752,0.886,0.802,612,6885 -Rouillé,86213,2467,52.093,2.297,2.080,476,6593 -Gargenville,78267,7201,8.659,0.937,0.848,614,6876 -Brouy,91112,138,8.497,0.928,0.840,646,6802 -Montreuil-sur-Epte,95429,422,7.334,0.862,0.780,603,6898 -Vierville,28408,134,6.726,0.826,0.748,617,6809 -Serans,60614,223,8.712,0.940,0.851,615,6903 -Bray-et-Lû,95101,954,3.742,0.616,0.558,602,6896 -Hodent,95309,218,4.431,0.670,0.607,611,6896 -Issou,78314,4142,4.794,0.697,0.631,612,6875 -Hadancourt-le-Haut-Clocher,60293,361,8.638,0.936,0.847,618,6898 -Oinville-sur-Montcient,78460,1082,3.820,0.622,0.563,616,6882 -Drocourt,78202,555,3.868,0.626,0.567,609,6884 -Follainville-Dennemont,78239,2050,9.764,0.995,0.901,607,6884 -Bassy,74029,410,7.557,0.875,0.792,917,6548 -Vernoux-sur-Boutonne,79343,222,8.225,0.913,0.827,445,6566 -Avernes,95040,858,17.207,1.320,1.195,620,6891 -Aubigné,79018,212,29.665,1.734,1.570,453,6552 -Boissettes,77038,406,1.567,0.398,0.360,673,6825 -Vouillé,79355,3283,22.319,1.504,1.362,442,6589 -Étiolles,91225,3157,11.738,1.091,0.988,663,6841 -Argentières,77007,387,2.572,0.510,0.462,692,6838 -Saint-Germain-lès-Corbeil,91553,7477,4.057,0.641,0.580,661,6836 -Néré,17257,734,30.176,1.749,1.584,450,6551 -Beaussais-Vitré,79030,979,25.813,1.617,1.464,459,6580 -Corbeil-Essonnes,91174,51049,11.029,1.057,0.957,661,6831 -Boissise-la-Bertrand,77039,1160,7.783,0.888,0.804,668,6826 -Verneuil-l'Étang,77493,3226,7.815,0.890,0.806,690,6837 -Saint-Mandé-sur-Brédoire,17358,308,23.329,1.537,1.392,445,6551 -La Chapelle-Gauthier,77086,1462,17.335,1.325,1.200,685,6825 -Saintry-sur-Seine,91577,5709,3.324,0.580,0.525,662,6831 -Châtillon-la-Borde,77103,217,7.248,0.857,0.776,685,6826 -La Chapelle-Rablais,77089,965,15.469,1.252,1.134,695,6821 -Livry-sur-Seine,77255,2027,5.355,0.737,0.667,676,6821 -Beauvoir,77029,206,3.958,0.633,0.573,689,6839 -Champeaux,77082,824,13.082,1.151,1.042,688,6835 -Chartrettes,77096,2565,10.099,1.012,0.916,681,6821 -Brioux-sur-Boutonne,79057,1505,15.616,1.258,1.139,452,6568 -Sers,16368,862,14.197,1.199,1.086,493,6501 -Voise,28421,286,10.331,1.023,0.926,605,6810 -Denonville,28129,759,13.005,1.148,1.039,612,6809 -Mespuits,91399,208,9.970,1.005,0.910,645,6808 -Louville-la-Chenard,28215,252,19.915,1.420,1.286,612,6807 -Saint-Sauveur-sur-École,77435,1120,7.355,0.863,0.781,664,6821 -Mérobert,91393,602,10.626,1.038,0.940,628,6816 -Ormoy-la-Rivière,91469,933,10.480,1.030,0.933,641,6811 -Roinvilliers,91526,102,7.178,0.853,0.772,644,6804 -Abbéville-la-Rivière,91001,300,15.058,1.235,1.118,639,6802 -Arrancourt,91022,148,7.583,0.877,0.794,638,6802 -Monnerville,91414,388,8.294,0.917,0.830,628,6807 -Gironville-sur-Essonne,91273,762,13.307,1.161,1.051,648,6806 -Chalou-Moulineux,91131,430,10.761,1.044,0.945,629,6807 -Angerville,91016,4202,25.821,1.617,1.464,623,6801 -Fontaine-la-Rivière,91240,231,3.736,0.615,0.557,640,6807 -Congerville-Thionville,91613,224,8.423,0.924,0.837,623,6809 -Rouvres-Saint-Jean,45263,272,10.136,1.013,0.917,644,6804 -Sermaises,45310,1642,21.262,1.468,1.329,639,6802 -Boissy-la-Rivière,91079,548,12.550,1.128,1.021,635,6810 -Guillerval,91294,817,17.336,1.325,1.200,631,6811 -Mérouville,28243,221,9.712,0.992,0.898,619,6799 -Valpuiseaux,91629,610,18.791,1.380,1.249,651,6812 -Allonnes,28004,312,10.331,1.023,0.926,599,6803 -Puiselet-le-Marais,91508,275,11.289,1.069,0.968,646,6808 -Champmotteux,91137,367,7.573,0.876,0.793,650,6806 -Beauvilliers,28032,336,23.278,1.536,1.391,604,6800 -Baudreville,28026,265,13.131,1.153,1.044,619,6806 -Francourville,28160,832,18.651,1.375,1.245,598,6811 -Maisons,28230,370,9.578,0.985,0.892,613,6812 -Léthuin,28207,228,7.103,0.848,0.768,617,6812 -Sainville,28363,1012,22.050,1.495,1.354,613,6814 -Châtenay,28092,243,10.396,1.026,0.929,616,6804 -Moutiers,28274,253,21.429,1.474,1.335,611,6801 -Saint-Léger-des-Aubées,28344,270,13.396,1.165,1.055,609,6812 -Gommerville,28183,680,32.646,1.819,1.647,625,6808 -Gouillons,28184,336,12.125,1.108,1.003,616,6807 -Orgerus,78465,2331,14.497,1.212,1.097,606,6862 -Richebourg,78520,1460,10.651,1.039,0.941,599,6861 -Orvilliers,78474,829,5.930,0.775,0.702,601,6861 -Aunay-sous-Auneau,28013,1468,19.614,1.410,1.277,612,6819 -Orsonville,78472,334,9.754,0.994,0.900,614,6818 -Roinville,28317,548,6.836,0.832,0.753,609,6815 -Allainville,78009,304,16.287,1.285,1.163,620,6818 -Béville-le-Comte,28039,1633,20.267,1.433,1.297,604,6814 -Oinville-sous-Auneau,28285,342,10.459,1.029,0.932,607,6821 -Millemont,78404,249,5.799,0.767,0.694,605,6856 -Émancé,78209,879,12.184,1.111,1.006,604,6832 -Le Gué-de-Longroi,28188,938,6.940,0.839,0.760,602,6822 -Écrosnes,28137,864,23.917,1.557,1.410,608,6831 -Adainville,78006,765,10.199,1.017,0.921,601,6846 -Épernon,28140,5503,6.566,0.816,0.739,604,6831 -Hanches,28191,2709,16.356,1.287,1.165,600,6838 -Droue-sur-Drouette,28135,1251,5.359,0.737,0.667,603,6835 -Pomérols,34207,2246,11.015,1.056,0.956,743,6259 -Ymeray,28425,631,6.868,0.834,0.755,603,6823 -Saint-Christophe-en-Brionnais,71399,523,15.236,1.242,1.125,790,6575 -Raizeux,78516,937,10.369,1.025,0.928,601,6838 -Saint-Hilarion,78557,907,14.275,1.203,1.089,605,6835 -Bazainville,78048,1443,12.046,1.105,1.000,605,6857 -Chatignonville,91145,61,5.165,0.723,0.655,621,6818 -Gambaiseuil,78264,57,19.218,1.395,1.263,603,6850 -Champseru,28073,326,15.102,1.237,1.120,599,6819 -Hermeray,78307,959,18.407,1.366,1.237,605,6838 -La Boissière-École,78077,773,25.602,1.611,1.459,605,6844 -Condé-sur-Vesgre,78171,1188,10.782,1.045,0.946,599,6849 -Bourdonné,78096,497,10.924,1.052,0.952,604,6852 -Gambais,78263,2447,22.754,1.518,1.374,606,6856 -Cerny,91129,3317,17.184,1.320,1.195,646,6820 -D'Huison-Longueville,91198,1515,9.930,1.003,0.908,650,6815 -Corbreuse,91175,1750,15.933,1.271,1.151,626,6821 -Saint-Martin-de-Bernegoue,79273,780,17.741,1.341,1.214,445,6576 -Bouville,91100,649,20.905,1.455,1.317,650,6816 -Boissy-le-Sec,91081,683,19.306,1.399,1.267,632,6818 -Mondeville,91412,712,6.791,0.830,0.751,656,6823 -Saint-Escobille,91547,550,12.020,1.104,1.000,624,6816 -Moigny-sur-École,91408,1261,12.254,1.114,1.009,657,6817 -Garancières-en-Beauce,28169,218,11.375,1.074,0.972,620,6818 -Videlles,91654,600,8.783,0.943,0.854,658,6820 -Étréchy,91226,6529,14.245,1.201,1.087,640,6825 -Boutigny-sur-Essonne,91099,3023,16.264,1.284,1.163,654,6815 -Semur-en-Brionnais,71510,639,15.526,1.254,1.135,784,6573 -Saint-Edmond,71408,388,10.347,1.024,0.927,794,6566 -Arfeuilles,3006,660,59.603,2.457,2.225,757,6566 -Étampes,91223,24422,46.001,2.159,1.955,643,6811 -Chalo-Saint-Mars,91130,1093,29.111,1.717,1.555,626,6812 -Saint-Hilaire,91556,404,6.805,0.830,0.751,634,6815 -La Forêt-le-Roi,91247,523,7.976,0.899,0.814,630,6821 -Auvers-Saint-Georges,91038,1294,12.744,1.136,1.029,642,6822 -La Ferté-Alais,91232,3880,4.566,0.680,0.616,655,6819 -Boutervilliers,91098,425,7.164,0.852,0.771,631,6819 -Boissy-le-Cutté,91080,1317,4.640,0.686,0.621,647,6818 -Villeneuve-sur-Auvers,91671,618,7.116,0.849,0.769,646,6820 -Guigneville-sur-Essonne,91293,968,9.235,0.967,0.876,652,6819 -Vayres-sur-Essonne,91639,921,8.419,0.924,0.837,653,6817 -Cherveux,79086,1896,22.250,1.501,1.359,445,6595 -Brières-les-Scellés,91109,1228,8.632,0.935,0.847,635,6819 -Ambleville,16010,186,5.052,0.715,0.647,450,6500 -Saint-Genis-d'Hiersac,16320,912,19.323,1.399,1.267,468,6519 -Biron,17047,226,8.604,0.934,0.846,426,6504 -Azay-le-Brûlé,79024,1926,22.191,1.499,1.357,450,6592 -Juillac-le-Coq,16171,652,14.589,1.216,1.101,449,6503 -Saint-Martial-sur-Né,17364,450,11.911,1.099,0.995,438,6505 -Cierzac,17106,300,5.430,0.742,0.672,443,6501 -Lignières-Sonneville,16186,601,16.453,1.291,1.169,449,6502 -Échebrune,17145,486,17.344,1.326,1.201,432,6503 -Celles,17076,326,5.978,0.778,0.704,437,6508 -Germignac,17175,663,14.356,1.206,1.092,441,6499 -Saint-Fort-sur-le-Né,16316,365,6.759,0.828,0.750,443,6501 -Bouteville,16057,323,12.129,1.109,1.004,459,6505 -Bougneau,17056,609,14.782,1.224,1.108,425,6508 -Bonneuil,16050,263,13.642,1.176,1.065,454,6504 -Saint-Preuil,16343,288,12.541,1.127,1.020,455,6504 -Coulonges,17122,246,9.259,0.969,0.877,435,6508 -Le Plessier-sur-Saint-Just,60498,507,7.731,0.885,0.801,662,6933 -Avy,17027,477,14.591,1.216,1.101,429,6499 -Jarnac-Champagne,17192,788,21.797,1.486,1.345,438,6500 -Verrières,16399,349,13.409,1.166,1.056,446,6499 -La Crèche,79048,5576,34.614,1.873,1.696,445,6586 -Sainte-Eanne,79246,618,13.899,1.187,1.075,461,6594 -Godenvillers,60276,225,5.115,0.720,0.652,668,6941 -Sommières-du-Clain,86264,806,26.170,1.628,1.474,497,6582 -Avon,79023,68,12.730,1.136,1.029,472,6590 -Périgné,79204,1008,21.301,1.469,1.330,449,6573 -Marigny-Chemereau,86147,604,11.522,1.080,0.978,485,6598 -François,79128,961,9.376,0.975,0.883,444,6594 -Sainte-Néomaye,79283,1330,10.747,1.044,0.945,447,6588 -Messé,79177,190,12.342,1.118,1.012,476,6577 -Villers-aux-Érables,80797,121,4.379,0.666,0.603,665,6966 -Les Fosses,79126,446,12.212,1.112,1.007,441,6571 -Rioux,17298,942,19.022,1.388,1.257,412,6508 -Chauray,79081,6931,14.586,1.216,1.101,438,6589 -Saint-Martin-de-Saint-Maixent,79276,1097,12.824,1.140,1.032,451,6593 -Rom,79230,858,52.550,2.307,2.089,475,6583 -Grandjean,17181,293,6.069,0.784,0.710,419,6536 -Vivonne,86293,4318,41.642,2.054,1.860,486,6589 -Souvigné,79319,914,26.557,1.640,1.485,459,6590 -La Villedieu-du-Clain,86290,1591,7.213,0.855,0.774,502,6601 -Germond-Rouvre,79133,1171,17.848,1.345,1.218,439,6597 -Fors,79125,1789,18.916,1.384,1.253,439,6579 -Vançais,79336,225,17.050,1.314,1.190,470,6585 -Nanteuil,79189,1717,20.482,1.441,1.305,458,6599 -Bougon,79042,179,11.917,1.099,0.995,462,6590 -Chenay,79084,471,21.741,1.484,1.344,464,6585 -Villiers-en-Bois,79350,125,18.640,1.374,1.244,440,6566 -Saivres,79302,1451,21.328,1.470,1.331,450,6600 -Salles,79303,333,7.973,0.899,0.814,464,6592 -Saint-Romans-des-Champs,79294,179,4.101,0.645,0.584,441,6571 -Pamproux,79201,1733,36.168,1.914,1.733,464,6592 -Cloué,86080,503,12.181,1.111,1.006,484,6599 -Grivillers,80391,83,3.388,0.586,0.531,679,6952 -Saint-Maixent-l'École,79270,6756,5.218,0.727,0.658,453,6594 -Saint-Christophe-sur-Roc,79241,551,10.941,1.053,0.953,440,6600 -Voulon,86296,449,8.376,0.921,0.834,488,6587 -Augé,79020,923,23.353,1.538,1.393,448,6604 -Aiffres,79003,5510,25.945,1.621,1.468,435,6579 -Chey,79087,568,21.676,1.482,1.342,463,6579 -Juscorps,79144,366,6.549,0.815,0.738,441,6572 -Champagné-Saint-Hilaire,86052,1017,46.923,2.180,1.974,490,6584 -Séligné,79312,115,9.861,1.000,0.905,450,6566 -Fressines,79129,1658,9.641,0.988,0.895,445,6586 -Grassac,16158,330,28.352,1.695,1.535,496,6498 -Birac,16045,359,11.879,1.097,0.993,464,6502 -Lichères,16184,89,4.916,0.706,0.639,483,6538 -Saint-Amant-de-Boixe,16295,1393,22.523,1.511,1.368,479,6531 -Verdille,16397,340,14.450,1.210,1.096,462,6535 -Fouqueure,16144,391,16.525,1.294,1.172,471,6536 -Saint-Ouen-la-Thène,17377,108,7.048,0.845,0.765,454,6532 -Val-de-Bonnieure,16300,1311,28.094,1.687,1.527,491,6528 -Aussac-Vadalle,16024,515,17.583,1.335,1.209,483,6532 -Mouton,16237,221,9.074,0.959,0.868,484,6534 -La Chapelle,16081,220,7.736,0.885,0.801,469,6530 -La Tâche,16377,113,7.250,0.857,0.776,494,6535 -Coulonges,16108,141,3.005,0.552,0.500,475,6532 -Xambes,16423,312,5.332,0.735,0.665,476,6531 -Neuvicq-le-Château,17261,333,15.167,1.240,1.123,455,6525 -Vouharte,16419,327,10.753,1.044,0.945,472,6524 -Mansle,16206,1658,5.683,0.759,0.687,482,6535 -Saint-Mary,16336,350,21.772,1.485,1.345,497,6532 -Villejoubert,16412,333,7.891,0.894,0.809,481,6529 -Saint-Groux,16326,139,4.496,0.675,0.611,480,6535 -Coulgens,16107,538,11.818,1.094,0.991,487,6529 -Fontclaireau,16140,435,5.641,0.756,0.684,481,6537 -Tourriers,16383,758,6.785,0.829,0.751,484,6527 -Cellefrouin,16068,575,40.064,2.015,1.824,497,6532 -Luxé,16196,722,12.221,1.113,1.008,478,6539 -Cellettes,16069,412,9.404,0.976,0.884,478,6536 -Nanclars,16241,200,5.809,0.767,0.694,483,6532 -Maine-de-Boixe,16200,478,9.350,0.973,0.881,481,6529 -Marcillac-Lanville,16207,536,18.556,1.371,1.241,471,6536 -Valence,16392,208,10.907,1.051,0.952,493,6533 -Vervant,16401,147,9.539,0.983,0.890,479,6531 -Mons,16221,250,20.231,1.432,1.297,463,6538 -Saint-Ciers-sur-Bonnieure,16307,335,10.420,1.028,0.931,486,6532 -La Rochette,16282,532,11.157,1.063,0.962,491,6528 -Cozes,17131,2136,16.650,1.299,1.176,402,6502 -Villognon,16414,324,9.181,0.964,0.873,477,6532 -Puyréaux,16272,529,8.143,0.908,0.822,484,6534 -Saint-Front,16318,367,13.307,1.161,1.051,489,6540 -Givrezac,17178,68,2.704,0.523,0.474,416,6500 -Grézac,17183,916,20.184,1.430,1.295,402,6511 -Tanzac,17438,316,11.461,1.078,0.976,416,6500 -Mazerolles,17227,233,5.166,0.723,0.655,419,6503 -Saint-Simon-de-Pellouaille,17404,653,9.054,0.958,0.867,412,6507 -Saint-André-de-Lidon,17310,1104,24.418,1.573,1.424,409,6508 -Jazennes,17196,531,10.865,1.049,0.950,418,6503 -Gémozac,17172,2843,32.163,1.805,1.634,416,6503 -Saint-Léger,17354,628,15.893,1.269,1.149,425,6509 -Aubéguimont,76028,202,4.890,0.704,0.637,604,6970 -Thaims,17442,382,8.846,0.947,0.857,405,6507 -Virollet,17479,262,10.181,1.016,0.920,408,6500 -Saint-Martin-de-Fraigneau,85244,815,13.554,1.172,1.061,410,6598 -Maillé,85132,765,17.643,1.337,1.211,412,6589 -Benet,85020,4029,50.279,2.257,2.044,427,6591 -Damvix,85078,748,11.603,1.084,0.981,414,6586 -Le Vanneau-Irleau,79337,876,14.221,1.200,1.086,418,6586 -Saint-Maxire,79281,1289,14.243,1.201,1.087,432,6592 -Doix lès Fontaines,85080,1720,24.005,1.560,1.412,409,6600 -Bouillé-Courdault,85028,584,9.807,0.997,0.903,417,6592 -Bessines,79034,1659,11.460,1.078,0.976,429,6582 -Arçais,79010,614,15.149,1.239,1.122,413,6585 -Maillezais,85133,956,20.458,1.440,1.304,415,6590 -La Ronde,17303,1055,20.823,1.453,1.316,412,6582 -Le Mazeau,85139,456,8.412,0.923,0.836,419,6586 -Saint-Rémy,79293,1086,13.664,1.177,1.066,431,6591 -Sciecq,79308,639,4.455,0.672,0.608,431,6591 -Saint-Sigismond,85269,400,10.335,1.023,0.926,416,6587 -Taugon,17439,795,15.779,1.264,1.144,406,6589 -Niort,79191,59005,68.407,2.633,2.384,436,6590 -Villiers-en-Plaine,79351,1770,28.149,1.689,1.529,428,6593 -Magné,79162,2656,14.788,1.224,1.108,427,6583 -Liez,85123,276,8.514,0.929,0.841,417,6592 -Montreuil,85148,794,12.030,1.104,1.000,403,6594 -Sainte-Ouenne,79284,817,11.494,1.079,0.977,433,6597 -Vix,85303,1802,28.874,1.710,1.548,403,6587 -Faye-sur-Ardin,79117,623,15.097,1.237,1.120,433,6597 -Saint-Coutant,79243,286,12.028,1.104,1.000,469,6571 -Turgon,16389,86,7.239,0.856,0.775,501,6541 -Saint-Léger-sur-Bresle,80707,84,1.113,0.336,0.304,608,6975 -Caunay,79060,183,14.502,1.212,1.097,475,6573 -Alloinay,79136,868,32.810,1.823,1.651,462,6565 -Charmé,16083,354,11.473,1.078,0.976,479,6544 -La Chapelle-Pouilloux,79074,184,7.937,0.897,0.812,473,6562 -Loubigné,79153,162,11.224,1.066,0.965,464,6557 -Foucaucourt-Hors-Nesle,80336,77,2.991,0.551,0.499,607,6981 -Maisonnay,79164,255,5.201,0.726,0.657,465,6571 -Lonnes,16191,176,7.518,0.873,0.790,483,6543 -Saint-Georges,16321,57,2.224,0.475,0.430,488,6545 -Fontenille,16141,328,9.505,0.981,0.888,479,6537 -Luché-sur-Brioux,79158,139,5.179,0.724,0.656,458,6565 -Port-d'Envaux,17285,1159,22.629,1.514,1.371,414,6534 -Taizé-Aizie,16378,583,14.870,1.227,1.111,487,6557 -Brettes,16059,176,12.411,1.121,1.015,468,6549 -Oradour,16248,173,14.476,1.211,1.096,467,6539 -Voulême,86295,372,11.269,1.069,0.968,489,6561 -Inval-Boiron,80450,114,3.342,0.582,0.527,609,6976 -Asnois,86012,161,16.334,1.286,1.164,497,6559 -Villemain,79349,152,16.908,1.309,1.185,458,6548 -Chassiecq,16087,144,13.133,1.154,1.045,494,6541 -Empuré,16127,101,8.496,0.928,0.840,474,6552 -Meursac,17232,1469,26.445,1.637,1.482,403,6510 -Vieux-Ruffec,16404,106,12.792,1.138,1.030,500,6552 -Saint-Romain,86242,397,20.619,1.445,1.308,496,6574 -Saint-Romain-de-Benet,17393,1701,33.078,1.831,1.658,397,6517 -Surin,86266,130,12.074,1.106,1.001,499,6555 -Saint-Georges-des-Coteaux,17336,2677,19.302,1.398,1.266,412,6523 -Saint-Macoux,86231,468,10.735,1.043,0.944,483,6560 -Montalembert,79180,287,11.908,1.098,0.994,484,6561 -Romegoux,17302,614,13.313,1.161,1.051,405,6538 -Moutonneau,16238,111,4.248,0.656,0.594,483,6539 -Bernac,16039,496,8.560,0.931,0.843,480,6553 -Corme-Royal,17120,1805,27.261,1.662,1.505,402,6521 -Civray,86078,2657,8.700,0.939,0.850,493,6563 -Saint-Martin-du-Clocher,16335,124,6.814,0.831,0.752,478,6554 -Pierrecourt,76500,475,9.622,0.987,0.894,604,6977 -Linazay,86134,223,9.227,0.967,0.876,482,6566 -Rétaud,17296,1073,19.908,1.420,1.286,407,6517 -Ébréon,16122,148,10.152,1.014,0.918,468,6541 -Pliboux,79212,207,15.437,1.251,1.133,477,6569 -Ligné,16185,161,8.002,0.900,0.815,477,6541 -Beurlay,17045,1032,9.820,0.997,0.903,404,6535 -Salles-de-Villefagnan,16361,329,13.039,1.149,1.040,479,6542 -Champagné-le-Sec,86051,203,8.026,0.902,0.817,481,6568 -Lusseray,79160,153,8.174,0.910,0.824,455,6564 -Champniers,86054,350,20.125,1.428,1.293,497,6570 -Saint-Porchaire,17387,1856,17.434,1.329,1.203,410,6529 -Saint-Sulpice-de-Ruffec,16356,31,2.392,0.492,0.445,494,6541 -La Chèvrerie,16098,136,4.689,0.689,0.624,480,6554 -Theil-Rabier,16381,174,7.568,0.876,0.793,470,6555 -Bessé,16042,130,7.727,0.885,0.801,472,6543 -Saint-Pierre-d'Exideuil,86237,741,19.470,1.405,1.272,491,6566 -Longré,16190,194,14.807,1.225,1.109,467,6547 -Mairé-Levescault,79163,546,17.583,1.335,1.209,474,6563 -Juillé,16173,188,8.666,0.937,0.848,477,6539 -Montjean,16229,233,8.137,0.908,0.822,476,6555 -Blanzay,86029,790,35.617,1.900,1.720,485,6571 -La Forêt-de-Tessé,16142,190,10.929,1.052,0.952,472,6556 -Poursac,16268,198,11.436,1.076,0.974,487,6543 -Parzac,16255,138,11.342,1.072,0.971,498,6541 -Clussais-la-Pommeraie,79095,591,31.316,1.781,1.613,471,6573 -Vanzay,79338,223,11.428,1.076,0.974,478,6572 -Soulignonne,17431,716,14.454,1.210,1.096,406,6523 -Condac,16104,473,9.593,0.986,0.893,486,6554 -Dœuil-sur-le-Mignon,17139,339,19.556,1.408,1.275,427,6566 -Bioussac,16044,228,15.863,1.268,1.148,490,6554 -Le Bouchage,16054,159,16.484,1.292,1.170,495,6555 -Villefagnan,16409,1009,24.008,1.560,1.412,475,6547 -Fontcouverte,17164,2384,11.786,1.093,0.990,420,6526 -La Magdeleine,16197,121,6.750,0.827,0.749,475,6556 -Ruffec,16292,3442,13.514,1.170,1.059,485,6555 -Londigny,16189,250,9.797,0.996,0.902,477,6559 -Muron,17253,1332,39.708,2.006,1.816,405,6556 -Lorigné,79152,299,11.090,1.060,0.960,472,6562 -La Faye,16136,616,13.616,1.175,1.064,481,6549 -Genouillé,17174,869,34.639,1.873,1.696,407,6558 -Lupsault,16194,97,11.488,1.079,0.977,460,6542 -Aunac-sur-Charente,16023,616,12.862,1.142,1.034,488,6540 -Tusson,16390,222,13.991,1.191,1.078,472,6543 -Saint-Bris-des-Bois,17313,391,9.037,0.957,0.866,432,6524 -Saint-Gourson,16325,139,10.064,1.010,0.914,494,6543 -Saint-Hilaire-la-Palud,79257,1557,34.114,1.859,1.683,418,6578 -Verteuil-sur-Charente,16400,650,14.267,1.202,1.088,485,6544 -Beaulieu-sur-Sonnette,16035,221,10.244,1.019,0.923,499,6539 -Chenon,16095,136,10.489,1.031,0.933,483,6542 -Saint-Pierre-d'Amilly,17382,524,19.773,1.415,1.281,415,6573 -Souvigné,16373,214,10.517,1.032,0.934,474,6546 -Tonnay-Charente,17449,7990,34.965,1.882,1.704,395,6546 -Saint-Gaudent,86220,308,11.819,1.094,0.991,489,6563 -Savigné,86255,1345,36.638,1.927,1.745,497,6569 -Les Gours,16155,109,11.450,1.077,0.975,460,6546 -Saint-Césaire,17314,878,10.414,1.027,0.930,427,6526 -Lizant,86136,411,16.975,1.311,1.187,491,6555 -Courcoury,17128,686,12.777,1.138,1.030,424,6515 -Barro,16031,413,10.673,1.040,0.942,488,6551 -Genouillé,86104,519,30.068,1.745,1.580,493,6562 -Raix,16273,149,6.920,0.837,0.758,475,6547 -Benon,17041,1599,47.543,2.195,1.987,412,6571 -Ventouse,16396,128,10.102,1.012,0.916,492,6540 -Barbezières,16027,125,9.400,0.976,0.884,459,6541 -Surgères,17434,6820,28.668,1.704,1.543,413,6565 -Les Adjots,16002,529,11.305,1.070,0.969,484,6559 -Couture-d'Argenson,79106,368,24.325,1.570,1.422,464,6548 -Pers,79205,73,4.801,0.697,0.631,475,6575 -La Devise,17457,1092,26.925,1.652,1.496,411,6555 -Nanteuil-en-Vallée,16242,1346,68.726,2.639,2.389,492,6555 -Champagne-Mouton,16076,889,22.706,1.517,1.374,498,6547 -Couture,16114,157,10.493,1.031,0.933,491,6542 -Landrais,17203,738,15.622,1.258,1.139,403,6558 -Bouhet,17057,894,15.245,1.243,1.125,400,6569 -Vouhé,17482,665,15.792,1.265,1.145,406,6571 -Puyravault,17293,662,13.757,1.181,1.069,403,6567 -Breuil-la-Réorte,17063,456,16.151,1.279,1.158,417,6559 -Puy-du-Lac,17292,478,14.897,1.229,1.113,409,6548 -Cramchaban,17132,654,16.043,1.275,1.154,415,6576 -Saint-Cyr-du-Doret,17322,637,17.134,1.318,1.193,404,6578 -La Laigne,17201,477,4.343,0.663,0.600,411,6577 -Saint-Coutant-le-Grand,17320,416,12.984,1.147,1.039,406,6543 -Saint-Mard,17359,1204,21.041,1.460,1.322,417,6562 -Chambon,17080,911,18.688,1.376,1.246,400,6561 -Courçon,17127,1757,19.254,1.397,1.265,409,6583 -Brindas,69028,6067,11.407,1.075,0.973,833,6512 -La Grève-sur-Mignon,17182,556,11.572,1.083,0.981,412,6582 -Virson,17480,758,9.999,1.007,0.912,402,6568 -Le Gué-d'Alleré,17186,910,7.676,0.882,0.799,403,6572 -Saint-Georges-du-Bois,17338,1764,27.879,1.681,1.522,409,6570 -Annezay,17012,167,7.521,0.873,0.790,412,6553 -Saint-Sauveur-d'Aunis,17396,1692,19.254,1.397,1.265,401,6578 -Saint-Crépin,17321,342,14.161,1.198,1.085,408,6549 -Moragne,17246,503,12.248,1.114,1.009,408,6549 -Chermignac,17102,1251,13.506,1.170,1.059,412,6519 -Saint-Savinien,17397,2425,47.169,2.186,1.979,414,6533 -Les Nouillers,17266,684,23.812,1.553,1.406,415,6546 -Bords,17053,1360,15.647,1.259,1.140,404,6541 -Thénac,17444,1688,19.423,1.403,1.270,416,6519 -Le Mung,17252,306,7.519,0.873,0.790,413,6535 -Les Essards,17154,704,9.709,0.992,0.898,405,6531 -Geay,17171,742,15.989,1.273,1.153,409,6538 -La Vallée,17455,681,16.456,1.291,1.169,400,6542 -Champdolent,17085,399,12.079,1.106,1.001,404,6542 -Montpellier-de-Médillan,17244,678,15.013,1.233,1.116,409,6508 -Luchat,17214,514,4.747,0.694,0.628,406,6518 -Montils,17242,844,23.899,1.556,1.409,424,6515 -Pisany,17278,733,6.686,0.823,0.745,404,6517 -Archingeay,17017,673,16.482,1.292,1.170,411,6541 -Crazannes,17134,441,4.871,0.703,0.637,414,6534 -Chérac,17100,1094,29.870,1.740,1.575,430,6516 -Balanzac,17030,548,12.854,1.141,1.033,402,6527 -Thézac,17445,326,12.520,1.126,1.019,406,6514 -Tesson,17441,1045,12.326,1.118,1.012,413,6510 -Saint-Sulpice-d'Arnoult,17408,841,16.261,1.284,1.163,401,6531 -Annepont,17011,369,8.907,0.950,0.860,422,6534 -Juicq,17198,288,9.403,0.976,0.884,421,6532 -Le Bourdet,79046,592,8.357,0.920,0.833,416,6576 -Plaine-d'Argenson,79078,976,45.850,2.155,1.951,427,6568 -Rouffiac,17304,449,5.915,0.774,0.701,429,6516 -Bercloux,17042,443,9.607,0.987,0.894,433,6531 -Nantillé,17256,326,10.910,1.051,0.952,430,6537 -Épannes,79112,856,8.089,0.905,0.819,423,6574 -Mauzé-sur-le-Mignon,79170,2788,24.123,1.563,1.415,418,6570 -Saint-Symphorien,79298,1902,19.188,1.394,1.262,434,6583 -Les Gonds,17179,1697,13.070,1.151,1.042,421,6518 -Écoyeux,17147,1352,20.422,1.438,1.302,425,6532 -La Rochénard,79229,581,8.555,0.931,0.843,427,6573 -Sainte-Même,17374,246,6.227,0.794,0.719,433,6538 -Le Douhet,17143,708,18.570,1.372,1.242,421,6531 -Saint-Georges-de-Rex,79254,436,17.722,1.340,1.213,421,6582 -Saint-Sauvant,17395,489,7.050,0.845,0.765,426,6520 -Sansais,79304,741,15.019,1.234,1.117,421,6582 -Vénérand,17462,761,9.671,0.990,0.896,424,6529 -Prin-Deyrançon,79220,610,16.167,1.280,1.159,416,6575 -Amuré,79009,432,14.822,1.225,1.109,420,6579 -Taillebourg,17436,737,14.529,1.213,1.098,421,6531 -Saint-Sever-de-Saintonge,17400,617,8.189,0.911,0.825,426,6518 -Granzay-Gript,79137,905,21.659,1.481,1.341,430,6574 -Préguillac,17289,458,6.658,0.821,0.743,416,6512 -Warsy,80822,142,3.024,0.554,0.502,673,6956 -Berneuil,17044,1144,25.608,1.611,1.459,423,6514 -Saintes,17415,25355,45.921,2.157,1.953,412,6519 -Vallans,79335,795,9.145,0.963,0.872,429,6573 -Brives-sur-Charente,17069,241,5.986,0.779,0.705,432,6515 -Brizambourg,17070,888,21.989,1.493,1.352,428,6527 -La Chapelle-des-Pots,17089,993,10.292,1.021,0.924,427,6523 -Saint-Vaize,17412,642,4.683,0.689,0.624,418,6531 -Bussac-sur-Charente,17073,1276,10.103,1.012,0.916,417,6528 -La Jard,17191,416,8.444,0.925,0.838,421,6510 -Coivert,17114,212,14.994,1.233,1.116,436,6557 -Dompierre-sur-Charente,17141,451,8.337,0.919,0.832,428,6517 -Loulay,17211,777,7.366,0.864,0.782,429,6554 -Les Églises-d'Argenteuil,17150,520,14.407,1.208,1.094,437,6550 -Saint-Pierre-de-Juillers,17383,371,17.672,1.338,1.211,440,6545 -La Jarrie-Audouin,17195,269,8.476,0.927,0.839,432,6552 -Gourvillette,17180,93,8.031,0.902,0.817,448,6537 -Orto,2A196,57,16.024,1.274,1.153,1190,6137 -Loiré-sur-Nie,17206,285,14.538,1.214,1.099,445,6543 -Saleignes,17416,61,7.958,0.898,0.813,453,6552 -Trois-Palis,16388,953,4.199,0.652,0.590,472,6509 -Paizay-le-Chapt,79198,262,20.422,1.438,1.302,453,6554 -Torxé,17450,205,11.420,1.076,0.974,420,6546 -Ranville-Breuillaud,16275,181,12.879,1.142,1.034,456,6541 -Seigné,17422,77,6.474,0.810,0.733,452,6546 -Bussy-Albieux,42030,537,19.619,1.410,1.277,778,6523 -Voissay,17481,157,5.045,0.715,0.647,421,6546 -Vars,16393,2067,27.521,1.670,1.512,481,6523 -Les Éduts,17149,64,8.130,0.908,0.822,454,6549 -Garat,16146,2027,19.415,1.403,1.270,490,6509 -Le Vert,79346,128,11.866,1.096,0.992,439,6560 -Bagnizeau,17029,201,9.745,0.994,0.900,442,6538 -Contré,17117,142,12.345,1.118,1.012,445,6550 -La Villedieu,17471,208,22.344,1.505,1.363,443,6555 -Saint-Martin-de-Juillers,17367,157,8.438,0.925,0.838,441,6542 -Champniers,16078,5184,45.306,2.143,1.940,484,6521 -Vervant,17467,239,5.554,0.750,0.679,433,6548 -Vergné,17464,141,8.027,0.902,0.817,427,6559 -Le Gicq,17177,133,6.010,0.780,0.706,446,6542 -Eccica-Suarella,2A104,1162,14.390,1.207,1.093,1194,6110 -Beauvais-sur-Matha,17037,629,12.618,1.131,1.024,457,6539 -La Croix-Comtesse,17137,223,2.655,0.519,0.470,430,6560 -Mosnac,16233,457,6.330,0.801,0.725,466,6505 -Romazières,17301,71,8.725,0.940,0.851,456,6550 -Dampierre-sur-Boutonne,17138,279,14.111,1.196,1.083,437,6559 -Ternant,17440,376,5.529,0.748,0.677,422,6546 -Saint-Amant-de-Nouère,16298,403,11.199,1.065,0.964,467,6522 -Vinax,17478,63,9.323,0.972,0.880,453,6554 -Saint-Cybardeaux,16312,835,21.008,1.459,1.321,463,6521 -Saint-Martial,17361,119,4.122,0.646,0.585,432,6556 -Roullet-Saint-Estèphe,16287,4257,41.747,2.057,1.862,465,6505 -Chérigné,79085,157,7.934,0.897,0.812,453,6565 -Brieuil-sur-Chizé,79055,119,8.118,0.907,0.821,445,6562 -Nachamps,17254,197,4.228,0.655,0.593,420,6553 -Chazelles,16093,1552,25.953,1.622,1.469,498,6511 -Chizé,79090,871,23.169,1.532,1.387,443,6559 -Villiers-sur-Chizé,79352,160,11.446,1.077,0.975,443,6562 -Châteauneuf-sur-Charente,16090,3545,24.078,1.562,1.414,458,6505 -Villiers-Couture,17477,121,8.443,0.925,0.838,454,6546 -Fenioux,17157,159,9.454,0.979,0.886,420,6539 -Fontenille-Saint-Martin-d'Entraigues,79122,553,15.353,1.247,1.129,459,6561 -Ensigné,79111,288,20.272,1.433,1.297,447,6556 -Bazauges,17035,121,8.174,0.910,0.824,456,6541 -Paillé,17271,316,12.591,1.129,1.022,437,6547 -Aumagne,17025,710,20.462,1.440,1.304,436,6539 -Chantemerle-sur-la-Soie,17087,175,5.783,0.765,0.693,416,6548 -Vibrac,16402,293,2.838,0.536,0.485,462,6508 -Bignay,17046,413,8.736,0.941,0.852,422,6544 -Poursay-Garnaud,17288,317,5.261,0.730,0.661,432,6544 -Les Touches-de-Périgny,17451,576,21.516,1.476,1.336,445,6541 -Juillé,79142,99,4.926,0.706,0.639,450,6562 -Saint-Pardoult,17381,237,5.566,0.751,0.680,434,6552 -La Brousse,17071,509,18.862,1.382,1.251,440,6542 -Cressé,17135,239,10.968,1.054,0.954,450,6542 -Saint-Séverin-sur-Boutonne,17401,102,8.033,0.902,0.817,436,6563 -Taillant,17435,184,5.017,0.713,0.646,420,6539 -Soyaux,16374,9356,12.744,1.136,1.029,481,6510 -Puymoyen,16271,2388,7.418,0.867,0.785,481,6507 -La Couronne,16113,7694,28.739,1.706,1.545,476,6508 -Marsac,16210,831,13.351,1.163,1.053,474,6519 -Saint-Yrieix-sur-Charente,16358,7243,14.739,1.222,1.106,474,6516 -Saint-Simeux,16351,610,9.443,0.978,0.885,465,6510 -Asnières-sur-Nouère,16019,1216,21.466,1.475,1.335,473,6516 -Bunzac,16067,465,13.439,1.167,1.057,491,6513 -Sireuil,16370,1158,10.072,1.010,0.914,466,6505 -Angoulême,16015,41935,21.745,1.484,1.344,481,6507 -Vouzan,16422,772,16.335,1.286,1.164,494,6506 -Champmillon,16077,510,9.579,0.985,0.892,465,6510 -Tavaco,2A323,352,10.902,1.051,0.952,1186,6123 -Taponnat-Fleurignac,16379,1523,21.584,1.479,1.339,497,6524 -Cottenchy,80213,579,10.654,1.039,0.941,656,6968 -Ruelle-sur-Touvre,16291,7215,10.626,1.038,0.940,487,6515 -Isserpent,3131,525,26.491,1.638,1.483,745,6558 -Pranzac,16269,908,15.107,1.237,1.120,492,6510 -Hiersac,16163,1065,7.451,0.869,0.787,466,6514 -Dirac,16120,1520,29.532,1.730,1.566,485,6501 -Anais,16011,587,9.872,1.000,0.905,485,6521 -Jauldes,16168,790,25.736,1.615,1.462,489,6525 -Bouëx,16055,902,15.741,1.263,1.144,490,6509 -Gond-Pontouvre,16154,5995,7.451,0.869,0.787,481,6513 -Échallat,16123,498,15.278,1.244,1.126,463,6521 -Vaux-Rouillac,16395,298,13.361,1.164,1.054,457,6520 -Magnac-sur-Touvre,16199,3100,7.838,0.891,0.807,487,6509 -Saint-Michel,16341,3234,2.486,0.502,0.455,474,6509 -Montignac-Charente,16226,733,8.753,0.942,0.853,473,6524 -Fleurac,16139,245,2.173,0.469,0.425,461,6518 -Angeac-Charente,16013,340,10.848,1.048,0.949,459,6505 -Angeac-Champagne,16012,509,14.357,1.206,1.092,441,6504 -Mornac,16232,2189,23.320,1.537,1.392,490,6509 -Agris,16003,860,18.697,1.376,1.246,490,6523 -Linars,16187,2094,6.023,0.781,0.707,474,6509 -Le Translay,80767,245,5.705,0.760,0.688,605,6986 -Fléac,16138,3741,12.589,1.129,1.022,474,6509 -Moulidars,16234,719,17.235,1.321,1.196,466,6511 -Douzat,16121,483,11.526,1.081,0.979,469,6515 -Balzac,16026,1338,9.740,0.993,0.899,475,6516 -Brie,16061,4241,34.229,1.862,1.686,490,6520 -Touvre,16385,1218,9.170,0.964,0.873,490,6509 -Mons,17239,436,15.779,1.264,1.144,441,6526 -Vindelle,16415,1064,11.002,1.056,0.956,475,6516 -Saint-Simon,16352,202,3.758,0.617,0.559,459,6510 -Ercourt,80280,121,4.235,0.655,0.593,607,6994 -L'Isle-d'Espagnac,16166,5615,6.080,0.785,0.711,480,6511 -Pons,17283,4152,27.815,1.679,1.520,424,6500 -Nersac,16244,2410,9.258,0.969,0.877,471,6505 -Monticello,2B168,1935,10.657,1.039,0.941,1191,6188 -Vœuil-et-Giget,16418,1490,8.529,0.930,0.842,477,6503 -Genté,16151,897,11.610,1.085,0.982,441,6512 -Saint-Germain-de-Montbron,16323,491,15.006,1.233,1.116,496,6506 -Rivières,16280,1999,21.757,1.485,1.345,490,6519 -Sigogne,16369,998,22.167,1.499,1.357,457,6520 -Javrezac,16169,591,3.647,0.608,0.550,438,6515 -Châteaubernard,16089,3690,13.426,1.166,1.056,443,6511 -Bréville,16060,484,15.665,1.260,1.141,443,6526 -Louzignac,17212,161,6.138,0.789,0.714,447,6531 -Aujac,17023,359,8.708,0.939,0.850,437,6530 -Saint-Seurin-de-Palenne,17398,166,3.988,0.636,0.576,427,6508 -Pérignac,17273,1008,27.707,1.676,1.517,430,6512 -Réparsac,16277,615,11.181,1.064,0.963,444,6522 -Cherves-Richemont,16097,2385,37.192,1.941,1.757,444,6522 -Triac-Lautrait,16387,452,6.490,0.811,0.734,457,6513 -Courcerac,17126,302,6.355,0.802,0.726,440,6533 -Salignac-sur-Charente,17418,606,10.188,1.016,0.920,432,6513 -Thors,17446,458,5.695,0.760,0.688,444,6532 -Houlette,16165,367,7.246,0.857,0.776,450,6525 -Colombiers,17115,315,7.216,0.855,0.774,421,6510 -Authon-Ébéon,17026,399,11.913,1.099,0.995,437,6531 -Courbillac,16109,727,11.925,1.099,0.995,453,6526 -Saint-Même-les-Carrières,16340,1082,15.152,1.239,1.122,454,6507 -Burie,17072,1272,9.219,0.966,0.875,435,6527 -Louzac-Saint-André,16193,1005,10.165,1.015,0.919,437,6518 -Gimeux,16152,712,7.465,0.870,0.788,437,6508 -Salles-d'Angles,16359,1035,21.743,1.484,1.344,438,6505 -Merpins,16217,1113,10.517,1.032,0.934,437,6515 -Migron,17235,730,15.039,1.234,1.117,433,6531 -Bassac,16032,532,7.691,0.883,0.799,460,6512 -Ballans,17031,198,7.047,0.845,0.765,451,6530 -Les Métairies,16220,733,5.249,0.729,0.660,455,6516 -Villars-les-Bois,17470,256,8.594,0.933,0.845,431,6527 -Massac,17223,169,9.223,0.967,0.876,452,6536 -Siecq,17427,215,11.743,1.091,0.988,452,6529 -Brie-sous-Matha,17067,183,6.364,0.803,0.727,448,6528 -Cognac,16102,18702,14.915,1.229,1.113,440,6514 -Blanzac-lès-Matha,17048,336,9.584,0.985,0.892,442,6538 -Foussignac,16145,628,15.179,1.240,1.123,457,6520 -Nercillac,16243,1098,16.382,1.288,1.166,445,6517 -Mesnac,16218,409,6.570,0.816,0.739,439,6526 -Belgodère,2B034,588,13.044,1.150,1.041,1196,6183 -Bourg-Charente,16056,894,11.982,1.102,0.998,447,6514 -Chilly,80191,187,4.930,0.707,0.640,684,6968 -Mareuil,16208,406,11.543,1.081,0.979,455,6525 -Pastricciola,2A204,97,46.349,2.167,1.962,1200,6139 -Saint-Laurent-de-Cognac,16330,832,10.882,1.050,0.951,437,6518 -Chassors,16088,1107,13.403,1.165,1.055,449,6518 -Graves-Saint-Amant,16297,342,8.994,0.955,0.865,457,6508 -Cuy,60192,217,4.356,0.664,0.601,694,6944 -Ars,16018,733,11.726,1.090,0.987,436,6509 -Saint-Brice,16304,966,9.349,0.973,0.881,447,6514 -Boutiers-Saint-Trojan,16058,1446,7.115,0.849,0.769,443,6516 -Lachapelle,80455,81,2.540,0.507,0.459,625,6962 -Sainte-Sévère,16349,531,18.436,1.367,1.238,449,6526 -Macqueville,17217,291,11.291,1.070,0.969,450,6525 -Julienne,16174,510,6.379,0.804,0.728,448,6514 -Segonzac,16366,2105,35.172,1.888,1.709,453,6509 -Gensac-la-Pallue,16150,1571,19.127,1.392,1.260,444,6515 -Erquery,60215,618,5.965,0.777,0.704,661,6922 -Cateri,2B084,213,3.209,0.570,0.516,1186,6181 -Algajola,2B010,358,1.688,0.414,0.375,1182,6186 -Letia,2A141,117,36.591,1.925,1.743,1189,6147 -Mausoléo,2B156,18,19.418,1.403,1.270,1187,6173 -Albertacce,2B007,197,96.882,3.133,2.837,1189,6147 -Feliceto,2B112,221,15.269,1.244,1.126,1189,6182 -Sant'Antonino,2B296,124,4.114,0.646,0.585,1187,6183 -Costa,2B097,63,1.072,0.330,0.299,1193,6182 -Moncale,2B165,324,7.236,0.856,0.775,1180,6174 -Palasca,2B199,163,49.841,2.247,2.034,1197,6196 -Pigna,2B231,99,2.210,0.473,0.428,1184,6184 -Cristinacce,2A100,60,20.586,1.444,1.307,1186,6148 -Zilia,2B361,290,13.978,1.190,1.077,1186,6178 -Grébault-Mesnil,80388,223,2.577,0.511,0.463,609,6991 -Muro,2B173,236,7.926,0.896,0.811,1188,6176 -Lozzi,2B147,121,30.609,1.761,1.594,1189,6160 -Lavatoggio,2B138,150,6.844,0.833,0.754,1183,6180 -Aregno,2B020,600,9.296,0.971,0.879,1183,6186 -Vallica,2B339,26,12.096,1.107,1.002,1198,6175 -Nessa,2B175,110,5.880,0.772,0.699,1190,6178 -Speloncato,2B290,278,17.626,1.336,1.210,1190,6187 -Calenzana,2B049,2323,183.802,4.315,3.907,1187,6174 -Lumio,2B150,1140,19.458,1.404,1.271,1181,6181 -Ville-di-Paraso,2B352,215,9.427,0.977,0.885,1190,6187 -Olmi-Cappella,2B190,177,51.134,2.276,2.061,1187,6170 -Méharicourt,80524,585,7.133,0.850,0.770,680,6965 -Calacuccia,2B047,284,18.193,1.358,1.230,1201,6154 -Asco,2B023,122,123.769,3.541,3.206,1193,6162 -Vero,2A345,559,23.642,1.548,1.402,1188,6125 -Corscia,2B095,132,58.912,2.443,2.212,1193,6162 -Corbara,2B093,932,10.120,1.013,0.917,1186,6189 -Avapessa,2B025,83,3.250,0.574,0.520,1183,6180 -Montegrosso,2B167,426,22.849,1.522,1.378,1177,6179 -Santa-Reparata-di-Balagna,2B316,1022,10.133,1.013,0.917,1186,6185 -Salice,2A266,91,22.018,1.494,1.353,1188,6134 -Manso,2B153,113,120.864,3.499,3.168,1176,6153 -Coggia,2A090,704,31.335,1.782,1.613,1172,6129 -Ota,2A198,529,38.121,1.965,1.779,1171,6142 -Marignana,2A154,109,55.150,2.364,2.140,1172,6138 -Rosazia,2A262,50,19.696,1.413,1.279,1183,6132 -Rezza,2A259,51,13.629,1.175,1.064,1191,6135 -Ambiegna,2A014,68,6.156,0.790,0.715,1178,6129 -Casaglione,2A070,389,14.793,1.224,1.108,1180,6124 -Lopigna,2A144,102,19.625,1.410,1.277,1189,6126 -Arbori,2A019,54,20.130,1.428,1.293,1181,6130 -Évisa,2A108,213,67.129,2.608,2.361,1183,6155 -Renno,2A258,60,12.629,1.131,1.024,1181,6139 -Partinello,2A203,102,18.591,1.372,1.242,1169,6156 -Buverchy,80158,46,1.885,0.437,0.396,698,6958 -Tavera,2A324,399,32.423,1.812,1.641,1206,6124 -Ucciani,2A330,492,28.605,1.702,1.541,1193,6129 -Vico,2A348,917,52.200,2.300,2.082,1172,6138 -Azzana,2A027,49,11.900,1.098,0.994,1189,6134 -Casamaccioli,2B073,105,36.253,1.917,1.736,1198,6152 -Peri,2A209,1943,24.025,1.560,1.412,1185,6116 -Poggiolo,2A240,106,12.156,1.110,1.005,1190,6134 -Espinasse-Vozelle,3110,1003,17.872,1.346,1.219,726,6557 -Azilone-Ampaza,2A026,179,7.989,0.900,0.815,1199,6106 -Ocana,2A181,581,25.995,1.623,1.469,1187,6110 -Grosseto-Prugna,2A130,2990,31.731,1.793,1.623,1182,6107 -Albitreccia,2A008,1672,45.768,2.153,1.949,1188,6098 -Punchy,80646,86,3.150,0.565,0.512,686,6965 -Cardo-Torgia,2A064,31,3.886,0.627,0.568,1195,6102 -Santa-Maria-Siché,2A312,441,10.666,1.040,0.942,1195,6107 -Tolla,2A326,127,25.380,1.604,1.452,1193,6117 -Afa,2A001,3132,11.914,1.099,0.995,1182,6119 -Appietto,2A017,1819,34.411,1.867,1.690,1181,6119 -Sant'Andréa-d'Orcino,2A295,108,8.866,0.948,0.858,1183,6122 -Campo,2A056,106,3.279,0.576,0.522,1200,6107 -Bastelicaccia,2A032,3914,18.079,1.353,1.225,1183,6113 -Cannelle,2A060,60,3.442,0.591,0.535,1180,6124 -Cauro,2A085,1403,27.686,1.675,1.517,1185,6108 -Sarrola-Carcopino,2A271,2846,26.847,1.649,1.493,1181,6119 -Valle-di-Mezzana,2A336,414,7.058,0.846,0.766,1184,6122 -Vauchelles-lès-Authie,80777,157,4.785,0.696,0.630,662,7001 -Alata,2A006,3186,30.555,1.760,1.594,1170,6116 -Quasquara,2A253,52,6.141,0.789,0.714,1197,6109 -Talmas,80746,1067,19.157,1.393,1.261,656,6995 -Montonvillers,80565,84,1.489,0.388,0.351,649,6990 -Namps-Maisnil,80582,991,21.969,1.492,1.351,634,6966 -Étalon,80292,136,4.553,0.679,0.615,688,6961 -Hébécourt,80424,540,4.949,0.708,0.641,646,6967 -Fresnoy-au-Val,80357,244,8.132,0.908,0.822,633,6972 -Saint-Fuscien,80702,1101,10.068,1.010,0.914,652,6971 -Amiens,80021,133755,50.356,2.259,2.045,653,6981 -Bacouel-sur-Selle,80050,504,6.330,0.801,0.725,641,6971 -Prouzel,80643,542,5.246,0.729,0.660,640,6967 -Bussy-lès-Poix,80157,99,4.416,0.669,0.606,629,6968 -Allonville,80020,741,10.554,1.034,0.936,656,6984 -Saint-Priest-Bramefant,63387,868,19.075,1.390,1.259,735,6551 -Sains-en-Amiénois,80696,1197,9.924,1.003,0.908,650,6967 -Canny-sur-Matz,60127,391,6.906,0.836,0.757,684,6946 -Saleux,80724,2861,8.003,0.900,0.815,646,6973 -Halloy-lès-Pernois,80408,347,6.121,0.788,0.713,641,6993 -Campagne,60121,166,4.572,0.681,0.617,696,6950 -Cardonnette,80173,502,5.544,0.749,0.678,652,6982 -Saint-Aubin-Montenoy,80698,227,10.362,1.025,0.928,629,6970 -Fossemanant,80334,95,2.734,0.526,0.476,643,6967 -Fricamps,80365,173,5.640,0.756,0.684,627,6971 -Vers-sur-Selle,80791,728,11.346,1.072,0.971,642,6974 -Quevauvillers,80656,1111,8.937,0.952,0.862,634,6967 -Saveuse,80730,917,4.069,0.642,0.581,644,6979 -Naours,80584,1079,16.563,1.295,1.173,649,6997 -Wargnies,80819,91,2.819,0.534,0.483,647,6992 -Rivery,80674,3544,6.459,0.809,0.732,652,6977 -Saint-Auban-d'Oze,5131,88,13.343,1.163,1.053,929,6378 -Dreuil-lès-Amiens,80256,1620,3.217,0.571,0.517,644,6981 -Canaples,80166,705,10.202,1.017,0.921,646,6995 -Ailly-sur-Somme,80011,2994,15.148,1.239,1.122,639,6979 -Camon,80164,4397,13.052,1.150,1.041,656,6980 -Plachy-Buyon,80627,903,10.173,1.015,0.919,645,6970 -Vaux-en-Amiénois,80782,404,11.277,1.069,0.968,645,6984 -Revelles,80670,524,14.607,1.217,1.102,633,6971 -Poulainville,80639,1184,12.530,1.127,1.020,648,6984 -Saint-Vaast-en-Chaussée,80722,499,4.892,0.704,0.637,643,6985 -Beaulencourt,62093,237,4.911,0.705,0.638,692,6997 -Villers-Bocage,80798,1408,14.230,1.201,1.087,653,6987 -Villers-au-Flos,62855,266,5.847,0.770,0.697,692,6997 -Pernois,80619,730,8.872,0.948,0.858,641,6993 -Thieulloy-l'Abbaye,80754,367,14.787,1.224,1.108,622,6967 -Vignacourt,80793,2361,29.053,1.716,1.554,641,6993 -Dury,80261,1366,11.044,1.058,0.958,647,6971 -Lamaronde,80460,63,2.538,0.507,0.459,621,6968 -Longueau,80489,5550,3.451,0.591,0.535,653,6974 -Havernas,80423,400,4.491,0.675,0.611,645,6992 -Salouël,80725,4044,4.325,0.662,0.599,646,6975 -Fieffes-Montrelet,80566,320,9.716,0.992,0.898,642,7000 -Pont-de-Metz,80632,2399,7.859,0.892,0.808,645,6978 -Rocquigny,62715,284,3.716,0.614,0.556,693,6996 -Flesselles,80316,2083,20.789,1.451,1.314,646,6992 -La Vicogne,80792,253,4.837,0.700,0.634,651,6997 -Argœuves,80024,547,10.268,1.020,0.924,648,6985 -Bertincourt,62117,921,7.521,0.873,0.790,700,7001 -Saint-Sauveur,80718,1399,9.149,0.963,0.872,644,6986 -Lafresguimont-Saint-Martin,80456,545,26.781,1.647,1.491,610,6968 -Cagny,80160,1202,5.350,0.736,0.666,653,6974 -Rumigny,80690,594,8.059,0.904,0.818,648,6965 -Bertangles,80092,598,8.651,0.936,0.847,648,6984 -Ytres,62909,435,4.306,0.661,0.598,700,6995 -Gueudecourt,80397,94,4.894,0.704,0.637,689,6993 -Bus,62189,125,3.249,0.574,0.520,697,6995 -Ligny-Thilloy,62515,542,10.314,1.022,0.925,688,7000 -Guillemont,80401,140,3.278,0.576,0.522,687,6992 -Maurepas,80521,189,10.898,1.051,0.952,688,6989 -Ginchy,80378,62,5.872,0.771,0.698,690,6992 -Bouchavesnes-Bergen,80115,298,10.164,1.015,0.919,696,6987 -Moislains,80552,1206,20.770,1.451,1.314,695,6991 -Barastre,62082,306,7.641,0.880,0.797,696,6995 -Étricourt-Manancourt,80298,527,11.069,1.059,0.959,700,6991 -Mesnil-en-Arrouaise,80538,128,6.483,0.810,0.733,696,6995 -Bussy-lès-Daours,80156,372,8.133,0.908,0.822,656,6980 -Démuin,80237,477,11.265,1.068,0.967,667,6967 -Sailly-Laurette,80693,307,6.548,0.815,0.738,674,6980 -Fontaine-lès-Cappy,80325,52,3.485,0.594,0.538,685,6977 -Hangard,80414,123,6.382,0.804,0.728,663,6972 -Gentelles,80376,629,5.510,0.747,0.676,662,6971 -Berteaucourt-lès-Thennes,80094,437,2.662,0.519,0.470,661,6968 -Hamelet,80412,626,5.925,0.775,0.702,668,6975 -Thennes,80751,535,8.117,0.907,0.821,665,6967 -Fouilloy,80338,1847,5.722,0.761,0.689,663,6978 -Chuignolles,80195,154,4.857,0.702,0.636,681,6977 -Caix,80162,760,12.113,1.108,1.003,676,6966 -Hallu,80409,190,3.817,0.622,0.563,686,6965 -Suzanne,80743,182,8.702,0.939,0.850,682,6983 -Herleville,80432,187,6.180,0.791,0.716,683,6973 -Cachy,80159,274,6.138,0.789,0.714,664,6973 -Lihons,80481,437,12.194,1.112,1.007,683,6968 -Bonnay,80112,235,5.869,0.771,0.698,666,6983 -Guillaucourt,80400,426,6.876,0.835,0.756,675,6970 -Rosières-en-Santerre,80680,3008,13.484,1.169,1.058,681,6969 -Foucaucourt-en-Santerre,80335,280,7.006,0.843,0.763,682,6976 -Bray-sur-Somme,80136,1275,17.002,1.313,1.189,682,6983 -Frise,80367,186,6.231,0.795,0.720,687,6984 -Aubercourt,80035,84,3.886,0.627,0.568,667,6973 -Cappy,80172,527,11.943,1.100,0.996,684,6983 -Chaulnes,80186,2014,8.673,0.937,0.848,688,6968 -Hailles,80405,418,5.138,0.722,0.654,660,6967 -Vaux-sur-Somme,80784,309,5.158,0.723,0.655,666,6981 -Framerville-Rainecourt,80342,462,10.236,1.018,0.922,681,6977 -Vecquemont,80785,538,1.852,0.433,0.392,658,6977 -Marcelcave,80507,1190,12.602,1.130,1.023,670,6970 -Ignaucourt,80449,78,4.030,0.639,0.579,669,6970 -Étinehem-Méricourt,80295,587,18.270,1.361,1.232,678,6985 -Dommartin,80246,349,6.785,0.829,0.751,655,6966 -Fouencamps,80337,214,3.690,0.611,0.553,656,6968 -Dompierre-Becquincourt,80247,703,11.140,1.062,0.962,687,6981 -Beaucourt-en-Santerre,80064,182,6.027,0.781,0.707,670,6965 -Blangy-Tronville,80107,553,12.442,1.123,1.017,659,6976 -Éclusier-Vaux,80264,81,6.339,0.801,0.725,685,6982 -Cerisy,80184,529,10.899,1.051,0.952,671,6978 -Boves,80131,3138,25.515,1.608,1.456,652,6970 -Ville-sur-Ancre,80807,270,5.951,0.777,0.704,674,6986 -Fay,80304,105,3.917,0.630,0.570,684,6977 -Lamotte-Warfusée,80463,704,9.422,0.977,0.885,672,6975 -Larbroye,60348,507,2.194,0.471,0.426,698,6941 -Thézy-Glimont,80752,623,6.771,0.828,0.750,661,6970 -Gury,60292,243,5.018,0.713,0.646,684,6941 -Harbonnières,80417,1645,15.176,1.240,1.123,675,6975 -Plessis-de-Roye,60499,233,6.254,0.796,0.721,689,6942 -Querrieu,80650,651,10.078,1.011,0.915,656,6980 -Le Hamel,80411,504,9.129,0.962,0.871,672,6978 -Wiencourt-l'Équipée,80824,260,5.815,0.768,0.695,671,6973 -Méricourt-l'Abbé,80530,599,6.931,0.838,0.759,670,6985 -Beaurains-lès-Noyon,60055,337,3.860,0.625,0.566,699,6947 -Cayeux-en-Santerre,80181,120,5.467,0.744,0.674,670,6970 -Vermandovillers,80789,148,5.912,0.774,0.701,684,6973 -Pont-Noyelles,80634,849,8.628,0.935,0.847,662,6982 -Castellar,6035,1059,12.279,1.115,1.010,1061,6313 -Aubigny,80036,480,9.705,0.992,0.898,663,6975 -Lahoussoye,80458,481,4.115,0.646,0.585,662,6985 -Domart-sur-la-Luce,80242,428,8.641,0.936,0.847,661,6971 -Glisy,80379,714,5.527,0.748,0.677,654,6976 -La Neuville-lès-Bray,80593,266,3.994,0.636,0.576,679,6979 -Villers-Bretonneux,80799,4425,14.454,1.210,1.096,668,6975 -Pierlas,6096,101,31.378,1.783,1.614,1021,6331 -Lamotte-Brebière,80461,227,4.283,0.659,0.597,657,6978 -Vrély,80814,429,5.762,0.764,0.692,679,6967 -Proyart,80644,697,9.819,0.997,0.903,679,6980 -Soyécourt,80741,175,5.156,0.723,0.655,686,6972 -Chipilly,80192,173,6.870,0.834,0.755,675,6978 -Morlancourt,80572,372,11.910,1.099,0.995,673,6982 -Catigny,60132,191,6.687,0.823,0.745,695,6947 -Morcourt,80569,300,7.592,0.877,0.794,677,6976 -Vaire-sous-Corbie,80774,284,6.815,0.831,0.752,668,6975 -Sailly-le-Sec,80694,351,6.774,0.828,0.750,672,6982 -Treux,80769,249,2.296,0.482,0.436,670,6983 -Élincourt-Sainte-Marguerite,60206,865,10.994,1.055,0.955,688,6935 -Chiry-Ourscamp,60150,1175,13.420,1.166,1.056,699,6939 -Cannectancourt,60126,514,7.547,0.874,0.791,691,6937 -Passel,60488,287,3.626,0.606,0.549,699,6939 -Lassigny,60350,1399,16.746,1.303,1.180,687,6946 -Mareuil-la-Motte,60379,654,9.094,0.960,0.869,686,6937 -Nesle,80585,2358,7.780,0.888,0.804,696,6962 -Biarre,80103,67,2.337,0.487,0.441,692,6957 -Thiescourt,60632,752,13.085,1.151,1.042,688,6939 -Margny-aux-Cerises,60381,255,4.608,0.683,0.618,690,6954 -Pont-l'Évêque,60506,669,1.143,0.340,0.308,700,6940 -Vauchelles,60657,273,2.352,0.488,0.442,698,6942 -Verpillières,80790,158,4.957,0.709,0.642,686,6951 -Ville,60676,764,6.019,0.781,0.707,694,6938 -Sempigny,60610,796,4.437,0.670,0.607,699,6939 -Breuil,80139,47,2.226,0.475,0.430,697,6959 -Écuvilly,60204,315,5.807,0.767,0.694,697,6951 -Porquéricourt,60511,386,3.765,0.618,0.560,699,6944 -Herly,80433,46,3.860,0.625,0.566,691,6962 -Fresnières,60258,164,3.012,0.552,0.500,687,6947 -Roiglise,80676,156,5.647,0.756,0.684,689,6953 -Rethonvillers,80669,360,7.108,0.849,0.769,692,6960 -Crapeaumesnil,60174,201,4.893,0.704,0.637,685,6948 -Curchy,80230,296,9.733,0.993,0.899,688,6965 -Candor,60124,296,8.995,0.955,0.865,692,6946 -Dives,60198,399,8.364,0.921,0.834,691,6946 -Lagny,60340,530,10.710,1.042,0.943,694,6948 -Voyennes,80811,611,9.256,0.968,0.876,699,6966 -Mesnil-Saint-Nicaise,80542,562,6.821,0.831,0.752,695,6966 -Cressy-Omencourt,80224,122,7.814,0.890,0.806,695,6958 -Rouy-le-Grand,80683,109,3.753,0.617,0.559,698,6965 -Genvry,60270,318,5.134,0.721,0.653,701,6945 -Liancourt-Fosse,80473,294,6.511,0.812,0.735,686,6963 -Ercheu,80279,796,14.304,1.204,1.090,694,6957 -Ognolles,60474,289,6.611,0.818,0.741,692,6956 -Béthencourt-sur-Somme,80097,129,2.953,0.547,0.495,698,6965 -Libermont,60362,191,11.455,1.077,0.975,699,6956 -Frétoy-le-Château,60263,257,4.985,0.711,0.644,697,6953 -Solente,60621,129,3.068,0.558,0.505,691,6957 -Billancourt,80105,176,4.971,0.710,0.643,694,6961 -Avricourt,60035,254,7.061,0.846,0.766,689,6952 -Amy,60011,389,12.664,1.133,1.026,686,6951 -Moyencourt,80576,315,4.174,0.650,0.589,695,6959 -Grez,60289,272,5.877,0.772,0.699,628,6948 -Beaulieu-les-Fontaines,60053,611,12.633,1.131,1.024,692,6952 -Villers-sur-Bonnières,60688,162,4.017,0.638,0.578,626,6937 -Saint-Aubin-en-Bray,60567,1128,6.452,0.809,0.732,619,6923 -Hescamps,80436,520,34.589,1.872,1.695,623,6959 -Oudeuil,60484,260,6.115,0.787,0.713,628,6940 -Gaudechart,60269,374,5.756,0.764,0.692,626,6946 -Troissereux,60646,1138,14.005,1.191,1.078,632,6930 -Feuquières,60233,1431,12.248,1.114,1.009,617,6948 -Blacourt,60073,630,11.571,1.083,0.981,619,6927 -Moyencourt-lès-Poix,80577,180,10.448,1.029,0.932,630,6966 -Hanvoile,60298,621,5.859,0.770,0.697,617,6935 -Catheux,60131,110,11.821,1.094,0.991,633,6952 -Offignies,80604,71,4.509,0.676,0.612,619,6967 -Beauvais,60057,56020,32.951,1.827,1.654,633,6923 -Frocourt,60264,522,6.482,0.810,0.733,635,6920 -Auneuil,60029,2927,27.561,1.671,1.513,627,6916 -Contre,80210,159,9.756,0.994,0.900,632,6961 -Le Mont-Saint-Adrien,60428,649,7.809,0.890,0.806,627,6929 -Fontaine-Lavaganne,60242,501,6.759,0.828,0.750,622,6945 -Sommereux,60622,475,12.996,1.148,1.039,631,6955 -Villers-Saint-Barthélemy,60681,493,9.913,1.002,0.907,623,6921 -Meigneux,80525,173,4.001,0.637,0.577,619,6962 -Lavacquerie,60353,208,8.279,0.916,0.829,637,6955 -Vrocourt,60697,34,4.327,0.662,0.599,618,6936 -Goincourt,60277,1304,6.471,0.810,0.733,629,6926 -Haute-Épine,60304,270,6.780,0.829,0.751,627,6941 -Offoy,60472,115,4.236,0.655,0.593,630,6955 -Le Saulchoy,60608,98,4.995,0.711,0.644,637,6950 -Crèvecœur-le-Grand,60178,3552,12.373,1.120,1.014,633,6948 -Choqueuse-les-Bénards,60153,103,4.242,0.656,0.594,633,6952 -Ons-en-Bray,60477,1403,13.908,1.187,1.075,621,6927 -Francastel,60253,480,12.609,1.130,1.023,640,6944 -Hétomesnil,60314,307,7.812,0.890,0.806,633,6949 -Allonne,60009,1548,15.351,1.247,1.129,635,6920 -Auchy-la-Montagne,60026,576,8.003,0.900,0.815,638,6941 -Luchy,60372,636,10.853,1.049,0.950,634,6938 -Saint-Paul,60591,1533,9.804,0.997,0.903,629,6926 -Rothois,60550,227,3.171,0.567,0.513,626,6943 -Saint-Maur,60588,384,7.822,0.890,0.806,624,6946 -La Neuville-sur-Oudeuil,60458,329,3.725,0.614,0.556,630,6943 -Marseille-en-Beauvaisis,60387,1474,8.122,0.907,0.821,626,6945 -Espaubourg,60220,509,6.078,0.785,0.711,618,6924 -Éplessier,80273,370,14.140,1.197,1.084,624,6964 -Méréaucourt,80528,6,3.043,0.555,0.503,622,6960 -Thieuloy-Saint-Antoine,60633,406,2.463,0.500,0.453,625,6949 -Saint-Germain-la-Poterie,60576,453,5.940,0.776,0.703,624,6927 -Frémontiers,80352,153,12.801,1.139,1.031,632,6961 -Prévillers,60514,227,5.255,0.730,0.661,626,6947 -Conteville,60161,77,3.613,0.605,0.548,631,6951 -Rouville,60552,259,6.947,0.839,0.760,693,6902 -Muidorge,60442,140,5.340,0.736,0.666,638,6936 -Songeons,60623,1071,13.715,1.179,1.067,619,6942 -Fontaine-Bonneleau,60240,251,16.404,1.289,1.167,636,6952 -Le Mesnil-Conteville,60397,90,3.481,0.594,0.538,633,6952 -Aux Marais,60703,813,5.764,0.764,0.692,630,6922 -Fleury,80317,228,9.490,0.981,0.888,636,6958 -Crillon,60180,485,8.617,0.934,0.846,623,6939 -Briot,60108,279,6.462,0.809,0.732,622,6952 -Lachapelle-sous-Gerberoy,60335,148,4.986,0.711,0.644,620,6939 -Saint-Deniscourt,60571,87,4.803,0.698,0.632,618,6948 -Herchies,60310,638,4.406,0.668,0.605,626,6932 -Pierrefitte-en-Beauvaisis,60490,359,5.707,0.760,0.688,623,6932 -Thérines,60629,205,9.725,0.993,0.899,619,6947 -Hautbos,60303,187,4.278,0.658,0.596,619,6947 -Croixrault,80227,428,8.904,0.950,0.860,624,6968 -Glatigny,60275,227,3.548,0.600,0.543,621,6933 -Haucourt,60301,137,3.967,0.634,0.574,622,6934 -Guizancourt,80402,122,5.911,0.774,0.701,626,6961 -Courcelles-sous-Thoix,80219,67,4.349,0.664,0.601,635,6958 -Saint-Omer-en-Chaussée,60590,1259,10.431,1.028,0.931,626,6937 -Lalandelle,60344,469,11.339,1.072,0.971,619,6920 -Blicourt,60077,345,14.644,1.218,1.103,630,6941 -Équennes-Éramecourt,80276,299,9.043,0.957,0.866,626,6961 -Halloy,60295,454,3.846,0.624,0.565,624,6951 -Grémévillers,60288,453,6.871,0.834,0.755,619,6942 -Tillé,60639,1118,14.854,1.227,1.111,636,6933 -Achy,60004,400,12.787,1.138,1.030,623,6940 -Saint-Martin-le-Nœud,60586,1044,5.451,0.743,0.673,632,6921 -Le Vauroux,60662,506,9.839,0.998,0.904,622,6922 -Sarcus,60604,264,13.082,1.151,1.042,617,6956 -Villembray,60677,258,6.818,0.831,0.752,620,6932 -Bergicourt,80083,151,6.856,0.833,0.754,631,6959 -La Neuville-Vault,60460,183,4.536,0.678,0.614,624,6932 -Élencourt,60205,54,1.328,0.367,0.332,619,6956 -Caulières,80179,199,5.469,0.744,0.674,621,6965 -Bonnières,60084,160,8.475,0.927,0.839,623,6936 -Grandvilliers,60286,3002,6.618,0.819,0.742,624,6954 -Verderel-lès-Sauqueuse,60668,739,12.618,1.131,1.024,636,6934 -Saint-Léger-en-Bray,60583,349,4.393,0.667,0.604,629,6923 -Le Hamel,60297,179,7.854,0.892,0.808,631,6951 -Cempuis,60136,527,9.428,0.977,0.885,625,6952 -Dargies,60194,255,14.447,1.210,1.096,624,6954 -Belleuse,80079,359,7.882,0.894,0.809,634,6957 -Thoix,80757,144,11.194,1.065,0.964,631,6955 -Famechon,80301,260,4.878,0.703,0.637,631,6964 -Poix-de-Picardie,80630,2406,11.714,1.089,0.986,628,6958 -Hodenc-en-Bray,60315,492,9.775,0.995,0.901,619,6930 -Saulchoy-sous-Poix,80728,70,3.728,0.615,0.557,622,6963 -Martincourt,60388,128,5.172,0.724,0.656,623,6940 -Morvillers,60435,474,5.138,0.722,0.654,619,6942 -Therdonne,60628,1055,9.063,0.958,0.867,640,6923 -Pisseleu,60493,486,2.865,0.539,0.488,633,6938 -Lihus,60365,404,15.963,1.272,1.152,633,6948 -Brombos,60109,263,6.905,0.836,0.757,620,6948 -Rainvillers,60523,888,6.652,0.821,0.743,629,6924 -Thury-sous-Clermont,60638,681,5.419,0.741,0.671,652,6916 -Breuil-le-Vert,60107,3072,7.381,0.865,0.783,659,6920 -Maimbeville,60375,421,5.872,0.771,0.698,665,6923 -Creil,60175,35747,11.062,1.059,0.959,664,6906 -Verneuil-en-Halatte,60670,4652,22.368,1.505,1.363,663,6908 -Sacy-le-Grand,60562,1523,17.678,1.338,1.211,669,6919 -La Rue-Saint-Pierre,60559,800,8.133,0.908,0.822,650,6924 -Nogent-sur-Oise,60463,19595,7.455,0.869,0.787,663,6908 -Esches,60218,1555,7.735,0.885,0.801,640,6906 -Berthecourt,60065,1635,7.094,0.848,0.768,643,6918 -Mouy,60439,5321,10.242,1.019,0.923,647,6913 -Rieux,60539,1561,2.350,0.488,0.442,665,6912 -Dieudonné,60197,826,10.427,1.028,0.931,642,6906 -Bailleval,60042,1485,8.036,0.902,0.817,661,6918 -Villers-sous-Saint-Leu,60686,2344,4.618,0.684,0.619,656,6901 -Noailles,60462,2842,10.091,1.011,0.915,642,6916 -Novillers,60469,361,4.805,0.698,0.632,643,6906 -Épineuse,60210,245,7.214,0.855,0.774,667,6920 -Saint-Vaast-lès-Mello,60601,1102,7.930,0.896,0.811,657,6911 -Saint-Maximin,60589,3005,12.341,1.118,1.012,662,6902 -Maysel,60391,249,3.757,0.617,0.559,654,6905 -Ully-Saint-Georges,60651,1858,18.776,1.379,1.249,644,6906 -Saint-Leu-d'Esserent,60584,4686,13.192,1.156,1.047,660,6905 -Saint-Aubin-sous-Erquery,60568,334,6.487,0.811,0.734,664,6926 -Montataire,60414,13345,10.617,1.037,0.939,660,6905 -Neuilly-sous-Clermont,60451,1671,7.806,0.889,0.805,659,6916 -Sainte-Geneviève,60575,3159,8.010,0.901,0.816,642,6908 -Villers-Saint-Paul,60684,6428,4.976,0.710,0.643,663,6911 -Aumont-en-Halatte,60028,480,6.848,0.833,0.754,666,6905 -Ponchon,60504,1108,9.825,0.998,0.904,639,6915 -Laversines,60355,1151,13.923,1.188,1.076,644,6927 -Thiverny,60635,1056,2.080,0.459,0.416,658,6905 -Fitz-James,60234,2469,9.809,0.997,0.903,659,6920 -Verderonne,60669,491,3.330,0.581,0.526,662,6913 -Angy,60015,1184,3.519,0.597,0.541,651,6917 -Courteuil,60170,619,5.324,0.734,0.665,666,6901 -Étouy,60225,777,9.556,0.984,0.891,655,6927 -Apremont,60022,673,13.651,1.176,1.065,664,6906 -Cires-lès-Mello,60155,3974,16.789,1.304,1.181,653,6910 -Balagny-sur-Thérain,60044,1708,6.817,0.831,0.752,651,6912 -Raincheval,80659,287,6.891,0.836,0.757,658,6997 -Cauvigny,60135,1629,17.377,1.327,1.201,647,6913 -Nointel,60464,998,9.397,0.976,0.884,664,6923 -Neuilly-en-Thelle,60450,3448,15.793,1.265,1.145,649,6903 -Beaurepaire,60056,67,5.138,0.722,0.654,667,6911 -Bailleul-sur-Thérain,60041,2102,9.506,0.981,0.888,642,6921 -La Neuville-en-Hez,60454,984,28.987,1.714,1.552,648,6921 -Rochy-Condé,60542,991,6.421,0.807,0.731,641,6922 -Mello,60393,633,3.361,0.584,0.529,654,6910 -Liancourt,60360,6986,4.768,0.695,0.629,662,6916 -Hermes,60313,2494,11.874,1.097,0.993,647,6921 -Coivrel,60158,255,6.210,0.793,0.718,666,6942 -Bailleul-le-Soc,60040,642,14.408,1.208,1.094,671,6927 -Puiseux-le-Hauberger,60517,844,5.406,0.740,0.670,645,6902 -Bresles,60103,4129,21.200,1.466,1.327,648,6921 -Villers-Saint-Sépulcre,60685,980,7.291,0.859,0.778,642,6921 -Laigneville,60342,4571,8.576,0.932,0.844,657,6911 -Monceaux,60406,816,6.648,0.821,0.743,671,6915 -Clermont,60157,10193,5.855,0.770,0.697,656,6919 -Mouchy-le-Châtel,60437,81,3.371,0.584,0.529,647,6913 -Cramoisy,60173,803,6.366,0.803,0.727,658,6905 -Blaincourt-lès-Précy,60074,1192,8.303,0.917,0.830,651,6901 -Hondainville,60317,699,6.220,0.794,0.719,648,6915 -Airion,60008,416,6.827,0.832,0.753,656,6926 -Heilles,60307,623,6.032,0.782,0.708,648,6916 -Brenouille,60102,2041,4.311,0.661,0.598,669,6912 -Warluis,60700,1163,11.580,1.083,0.981,639,6923 -Bury,60116,2982,17.041,1.314,1.190,655,6910 -Senlis,60612,14590,24.241,1.567,1.419,667,6906 -Belloy,60061,94,3.015,0.553,0.501,674,6936 -Agnetz,60007,3050,13.226,1.158,1.048,656,6919 -Monchy-Saint-Éloi,60409,2153,3.907,0.629,0.570,663,6912 -Fouilleuse,60247,139,2.963,0.548,0.496,666,6926 -Foulangues,60249,197,5.189,0.725,0.656,651,6909 -Litz,60366,353,10.077,1.010,0.914,653,6924 -Cauffry,60134,2500,4.712,0.691,0.626,657,6912 -Andeville,60012,3208,4.203,0.653,0.591,640,6908 -Saint-Félix,60574,630,5.003,0.712,0.645,647,6916 -Louvencourt,80493,278,7.793,0.889,0.805,665,6998 -Bertrancourt,80095,229,6.193,0.792,0.717,670,7002 -Bazentin,80059,80,5.134,0.721,0.653,682,6994 -Molliens-au-Bois,80553,321,7.325,0.861,0.780,658,6987 -Authuille,80045,167,3.568,0.601,0.544,678,6994 -Puchevillers,80645,552,14.410,1.208,1.094,656,6994 -Courcelette,80216,153,4.665,0.688,0.623,682,6994 -Heilly,80426,418,9.459,0.979,0.886,665,6987 -Léalvillers,80470,167,2.236,0.476,0.431,664,6998 -Montigny-sur-l'Hallue,80562,211,4.910,0.705,0.638,657,6988 -Montauban-de-Picardie,80560,225,7.710,0.884,0.800,684,6988 -Mesnil-Martinsart,80540,234,8.729,0.940,0.851,674,6997 -Contay,80207,366,8.501,0.928,0.840,664,6989 -Aveluy,80047,523,6.791,0.830,0.751,678,6994 -Hardecourt-aux-Bois,80418,84,5.277,0.731,0.662,685,6989 -Ovillers-la-Boisselle,80615,448,9.606,0.987,0.894,678,6994 -Senlis-le-Sec,80733,297,8.387,0.922,0.835,669,6990 -Flers,80314,189,6.328,0.801,0.725,685,6995 -Bécordel-Bécourt,80073,161,3.645,0.608,0.550,678,6990 -Le Sars,62777,179,5.093,0.718,0.650,683,6996 -Clairy-Saulchoix,80198,366,6.644,0.820,0.742,638,6973 -Hérissart,80431,610,7.428,0.868,0.786,660,6993 -Thiepval,80753,131,4.423,0.669,0.606,677,6997 -Dernancourt,80238,534,6.468,0.810,0.733,672,6988 -Bresle,80138,130,3.580,0.602,0.545,666,6988 -Mailly-Maillet,80498,619,11.245,1.067,0.966,670,7000 -Beaumont-Hamel,80069,215,8.356,0.920,0.833,675,7000 -Beaucourt-sur-l'Hallue,80066,287,5.449,0.743,0.673,657,6991 -Laleu,80459,115,1.570,0.399,0.361,623,6982 -Toutencourt,80766,472,14.536,1.214,1.099,660,6993 -Forceville,80329,174,7.684,0.882,0.799,669,6998 -Pozières,80640,263,3.272,0.576,0.522,680,6995 -Englebelmer,80266,302,9.187,0.965,0.874,671,6996 -Pierregot,80624,278,2.506,0.504,0.456,656,6989 -Varennes,80776,220,7.310,0.861,0.780,667,6994 -Rainneville,80661,974,7.154,0.851,0.771,656,6986 -Béhencourt,80077,335,7.094,0.848,0.768,663,6988 -Mirvaux,80550,151,2.297,0.482,0.436,656,6991 -Ribemont-sur-Ancre,80672,667,9.260,0.969,0.877,669,6988 -Harponville,80420,186,2.784,0.531,0.481,663,6993 -Hédauville,80425,125,4.087,0.644,0.583,668,6994 -Beaucourt-sur-l'Ancre,80065,98,3.518,0.597,0.541,679,6998 -Buire-sur-l'Ancre,80151,310,5.285,0.732,0.663,670,6987 -Rubempré,80686,723,10.198,1.017,0.921,657,6991 -Valbelle,4229,278,33.123,1.832,1.659,929,6339 -Méaulte,80523,1266,10.752,1.044,0.945,674,6985 -Fouilloy,60248,193,4.637,0.685,0.620,613,6959 -Pys,80648,119,5.038,0.714,0.646,683,6997 -Ménerval,76423,178,12.706,1.135,1.028,602,6943 -Warlencourt-Eaucourt,62876,143,3.702,0.612,0.554,686,6996 -Acheux-en-Amiénois,80003,606,7.190,0.854,0.773,665,6996 -Bavelincourt,80056,116,7.720,0.884,0.800,661,6987 -Auchonvillers,80038,143,5.718,0.761,0.689,675,6997 -Curlu,80231,159,5.943,0.776,0.703,687,6984 -Grandcourt,80384,178,8.422,0.924,0.837,680,6995 -Fréchencourt,80351,267,5.657,0.757,0.685,660,6986 -Millencourt,80547,214,5.882,0.772,0.699,670,6989 -Beauquesne,80070,1360,20.240,1.432,1.297,653,6997 -Franvillers,80350,519,4.780,0.696,0.630,664,6988 -Saint-Gratien,80704,375,7.015,0.843,0.763,656,6984 -Hénencourt,80429,195,3.275,0.576,0.522,670,6989 -Vadencourt,80773,97,4.965,0.709,0.642,664,6989 -Arquèves,80028,166,7.688,0.883,0.799,664,6998 -Albert,80016,9951,13.804,1.183,1.071,674,6992 -Le Castellet,4041,289,18.961,1.386,1.255,938,6314 -Fricourt,80366,495,11.492,1.079,0.977,678,6986 -Pissy,80626,276,6.683,0.823,0.745,639,6975 -Warloy-Baillon,80820,762,15.336,1.247,1.129,668,6993 -Saint-Michel-d'Halescourt,76623,121,4.920,0.706,0.639,602,6948 -Bouchevilliers,27098,82,4.357,0.664,0.601,607,6924 -Ergnies,80281,180,1.994,0.449,0.407,631,6999 -Dampierre-en-Bray,76209,459,12.862,1.142,1.034,605,6940 -Aumale,76035,2100,9.028,0.956,0.866,610,6966 -Grumesnil,76332,449,11.258,1.068,0.967,606,6950 -Moliens,60405,1147,9.403,0.976,0.884,614,6951 -Saumont-la-Poterie,76666,412,16.130,1.278,1.157,600,6945 -Hannaches,60296,143,9.591,0.986,0.893,615,6937 -Loueuse,60371,149,7.393,0.865,0.783,616,6945 -Hécourt,60306,157,7.510,0.872,0.790,613,6938 -Puiseux-en-Bray,60516,424,8.081,0.905,0.819,611,6923 -Villers-sur-Auchy,60687,381,8.785,0.943,0.854,611,6930 -Bouvresse,60098,161,2.816,0.534,0.483,611,6951 -Gerberoy,60271,93,4.540,0.678,0.614,615,6939 -Saint-Thibault,60599,304,10.623,1.037,0.939,613,6954 -Senantes,60611,628,19.972,1.423,1.288,615,6928 -Gournay-en-Bray,76312,6183,10.396,1.026,0.929,609,6930 -Criquiers,76199,652,22.830,1.521,1.377,610,6956 -Marques,76411,229,13.210,1.157,1.048,607,6968 -Héricourt-sur-Thérain,60312,132,4.358,0.664,0.601,610,6942 -Amécourt,27010,164,6.015,0.781,0.707,610,6919 -Doudeauville,76218,88,3.991,0.636,0.576,606,6942 -Fourcigny,80340,189,4.576,0.681,0.617,616,6961 -Canny-sur-Thérain,60128,230,5.964,0.777,0.704,608,6949 -Ronchois,76537,168,8.723,0.940,0.851,599,6959 -Saint-Pierre-es-Champs,60592,711,10.892,1.051,0.952,609,6924 -Lalande-en-Son,60343,667,6.043,0.782,0.708,613,6923 -Bazancourt,60049,129,3.183,0.568,0.514,609,6941 -Sully,60624,170,4.863,0.702,0.636,610,6940 -Pommereux,76505,97,5.367,0.737,0.667,602,6945 -Saint-Arnoult,60566,216,7.927,0.896,0.811,614,6951 -Mesnil-sous-Vienne,27405,114,5.709,0.761,0.689,601,6921 -Talmontiers,60626,687,9.338,0.973,0.881,610,6919 -Haudricourt,76344,422,29.694,1.735,1.571,610,6961 -Morvillers-Saint-Saturnin,80573,406,12.839,1.141,1.033,612,6963 -Illois,76372,400,14.626,1.217,1.102,600,6961 -Escames,60217,216,11.717,1.090,0.987,615,6942 -Quincampoix-Fleuzy,60521,393,9.221,0.967,0.876,613,6960 -Lacroix-Saint-Ouen,60338,4521,20.841,1.453,1.316,688,6919 -Lannoy-Cuillère,60347,281,15.096,1.237,1.120,609,6961 -Saint-Valery,60602,65,4.527,0.677,0.613,607,6958 -Blargies,60076,538,10.015,1.007,0.912,608,6952 -Haussez,76345,275,13.223,1.157,1.048,605,6942 -Conteville,76186,497,13.792,1.182,1.070,599,6957 -Fontaine-le-Sec,80324,154,7.467,0.870,0.788,615,6982 -Morienne,76606,176,8.957,0.953,0.863,606,6964 -Wambez,60699,164,4.601,0.683,0.618,618,6936 -Elbeuf-en-Bray,76229,418,10.891,1.050,0.951,602,6931 -Ferrières-en-Bray,76260,1673,15.861,1.268,1.148,612,6933 -Ernemont-la-Villette,76242,188,7.518,0.873,0.790,609,6929 -Le Coudray-Saint-Germer,60164,928,13.604,1.174,1.063,613,6921 -Molagnies,76440,171,4.641,0.686,0.621,607,6935 -Escles-Saint-Pierre,60219,159,3.368,0.584,0.529,614,6962 -Fontenay-Torcy,60244,124,5.982,0.779,0.705,610,6940 -Cuy-Saint-Fiacre,76208,664,9.679,0.990,0.896,607,6935 -Saint-Germer-de-Fly,60577,1715,20.058,1.426,1.291,609,6929 -Mureaumont,60444,152,4.795,0.697,0.631,614,6946 -Ernemont-Boutavent,60214,203,9.032,0.957,0.866,611,6946 -Romescamps,60545,560,10.495,1.031,0.933,613,6959 -Avesnes-en-Bray,76048,307,11.886,1.097,0.993,601,6931 -Montroty,76450,273,10.866,1.049,0.950,602,6923 -Saint-Quentin-des-Prés,60594,287,10.831,1.048,0.949,609,6939 -Landes-Vieilles-et-Neuves,76381,137,7.135,0.850,0.770,599,6967 -Buicourt,60114,143,3.515,0.597,0.541,615,6937 -Vaumoise,60661,979,3.206,0.570,0.516,700,6904 -Saint-Jean-aux-Bois,60579,316,25.296,1.601,1.450,689,6917 -Camps-en-Amiénois,80165,185,4.596,0.682,0.617,625,6978 -Fresnoy-la-Rivière,60260,637,6.782,0.829,0.751,697,6908 -Béthisy-Saint-Martin,60067,1101,9.836,0.998,0.904,687,6908 -Duvy,60203,454,8.540,0.930,0.842,688,6905 -Bonneuil-en-Valois,60083,1043,12.958,1.146,1.038,701,6909 -Retheuil,2644,369,15.040,1.234,1.117,701,6915 -Séry-Magneval,60618,284,5.963,0.777,0.704,688,6905 -Béthancourt-en-Valois,60066,228,4.131,0.647,0.586,691,6908 -Crépy-en-Valois,60176,15231,16.525,1.294,1.172,695,6902 -Gilocourt,60272,665,6.925,0.838,0.759,693,6910 -Gondreville,60279,209,7.168,0.852,0.771,695,6904 -Russy-Bémont,60561,204,9.789,0.996,0.902,697,6904 -Auger-Saint-Vincent,60027,507,14.180,1.199,1.086,687,6904 -Orrouy,60481,589,16.480,1.292,1.170,691,6915 -Tricot,60643,1463,12.021,1.104,1.000,669,6943 -Feigneux,60231,437,11.581,1.083,0.981,693,6910 -Glaignes,60274,365,5.429,0.742,0.672,690,6908 -Erquinvillers,60216,178,3.757,0.617,0.559,665,6929 -Coyolles,2232,346,24.886,1.588,1.438,703,6898 -Domfront,60200,308,2.752,0.528,0.478,669,6944 -Pierrefonds,60491,1819,22.434,1.508,1.365,698,6919 -La Neuville-Roy,60456,952,12.676,1.133,1.026,671,6933 -Broyes,60111,181,4.793,0.697,0.631,660,6949 -Maignelay-Montigny,60374,2699,18.847,1.382,1.251,663,6937 -La Neuville-Sire-Bernard,80595,281,4.398,0.668,0.605,666,6959 -Pronleroy,60515,386,9.015,0.956,0.866,666,6931 -Le Plessier-Rozainvillers,80628,749,10.269,1.020,0.924,666,6962 -Royaucourt,60556,207,9.484,0.980,0.887,665,6948 -Ayencourt,80049,189,4.687,0.689,0.624,669,6947 -Welles-Pérennes,60702,257,13.512,1.170,1.059,664,6945 -Angivillers,60014,183,6.213,0.793,0.718,664,6934 -Braches,80132,258,7.263,0.858,0.777,664,6957 -Villers-Tournelle,80805,157,5.945,0.776,0.703,660,6949 -Montiers,60418,424,7.919,0.896,0.811,670,6935 -Noroy,60466,222,5.477,0.745,0.675,663,6927 -Montdidier,80561,6274,12.593,1.130,1.023,670,6952 -Ravenel,60526,1115,11.518,1.080,0.978,666,6936 -Fontaine-sous-Montdidier,80326,108,9.056,0.958,0.867,662,6949 -Sauvillers-Mongival,80729,174,5.191,0.725,0.656,661,6956 -Mézières-en-Santerre,80545,581,10.793,1.046,0.947,666,6965 -Dompierre,60201,242,2.766,0.529,0.479,665,6942 -Lieuvillers,60364,713,9.572,0.985,0.892,661,6933 -Bouillancourt-la-Bataille,80121,154,3.676,0.610,0.552,667,6955 -Cuignières,60186,249,6.294,0.799,0.723,664,6928 -Mesnil-Saint-Georges,80541,185,6.016,0.781,0.707,666,6948 -Grivesnes,80390,398,18.861,1.382,1.251,663,6955 -Morisel,80571,509,6.485,0.811,0.734,663,6962 -Le Cardonnois,80174,84,2.352,0.488,0.442,662,6947 -Aubvillers,80037,140,4.888,0.704,0.637,664,6956 -Saint-Martin-aux-Bois,60585,288,9.392,0.976,0.884,666,6935 -Mailly-Raineval,80499,298,14.396,1.208,1.094,659,6962 -Montgérain,60416,184,4.924,0.706,0.639,671,6938 -Ferrières,60232,494,4.826,0.699,0.633,664,6943 -Malpart,80504,81,4.273,0.658,0.596,665,6954 -Ramburelles,80662,275,4.597,0.682,0.617,606,6986 -Courtemanche,80220,101,4.184,0.651,0.589,666,6950 -Richemont,76527,462,10.759,1.044,0.945,602,6971 -Senarpont,80732,664,7.061,0.846,0.766,606,6978 -Vismes,80809,486,13.579,1.173,1.062,603,6992 -Bouttencourt,80126,938,7.754,0.886,0.802,603,6982 -Nesle-l'Hôpital,80586,157,4.769,0.695,0.629,606,6979 -Doudelainville,80251,333,5.011,0.713,0.646,610,6989 -Moyenneville,80578,715,14.113,1.196,1.083,614,6998 -Neuville-au-Bois,80591,153,3.005,0.552,0.500,613,6985 -Martainneville,80518,428,7.596,0.877,0.794,609,6991 -Framicourt,80343,183,4.962,0.709,0.642,606,6985 -Bermesnil,80084,223,4.132,0.647,0.586,611,6979 -Valines,80775,636,5.234,0.728,0.659,601,6997 -Fresnes-Tilloloy,80354,202,3.534,0.598,0.541,612,6987 -Campneuseville,76154,480,12.436,1.123,1.017,605,6977 -Beaucamps-le-Jeune,80061,213,6.728,0.826,0.748,611,6971 -Acheux-en-Vimeu,80004,528,12.316,1.117,1.011,603,6994 -Saint-Germain-sur-Bresle,80703,206,8.759,0.942,0.853,610,6968 -Nesle-Normandeuse,76460,568,9.088,0.960,0.869,606,6979 -Mouflières,80575,89,2.773,0.530,0.480,609,6981 -Ellecourt,76233,145,4.412,0.669,0.606,610,6967 -Citerne,80196,244,6.370,0.803,0.727,617,6988 -Hodeng-au-Bosc,76363,573,8.787,0.944,0.855,607,6976 -Chépy,80190,1266,7.340,0.862,0.780,603,6999 -Béhen,80076,500,9.852,0.999,0.905,612,6994 -Bouillancourt-en-Séry,80120,557,16.209,1.282,1.161,603,6983 -Cerisy-Buleux,80183,267,5.684,0.759,0.687,611,6987 -Huppy,80446,805,10.755,1.044,0.945,612,6994 -Tœufles,80764,303,8.851,0.947,0.857,609,6995 -Neslette,80587,83,2.016,0.452,0.409,605,6981 -Frettemeule,80362,320,7.485,0.871,0.789,601,6988 -Aigneville,80008,881,10.797,1.046,0.947,601,6995 -Saint-Martin-au-Bosc,76612,246,7.167,0.852,0.771,602,6972 -Neuville-Coppegueule,80592,526,8.603,0.934,0.846,611,6974 -Oisemont,80606,1175,8.009,0.901,0.816,611,6987 -Tours-en-Vimeu,80765,835,13.380,1.164,1.054,603,6992 -Réalcamp,76520,642,11.552,1.082,0.980,603,6973 -Rambures,80663,348,9.937,1.003,0.908,605,6983 -Avesnes-Chaussoy,80048,64,6.133,0.788,0.713,617,6977 -Andainville,80022,242,8.366,0.921,0.834,611,6979 -Quesnoy-sur-Airaines,80655,443,16.205,1.281,1.160,626,6982 -Fontaine-sur-Somme,80328,514,15.174,1.240,1.123,624,6989 -Woirel,80828,57,1.857,0.434,0.393,614,6985 -Brucamps,80145,140,6.405,0.806,0.730,635,6996 -Seux,80735,169,3.532,0.598,0.541,634,6976 -Frucourt,80372,132,5.179,0.724,0.656,614,6988 -Arguel,80026,29,2.585,0.512,0.464,615,6977 -Fresneville,80355,105,3.423,0.589,0.533,617,6978 -Huchenneville,80444,669,11.521,1.080,0.978,614,6993 -Brocourt,80143,100,2.470,0.500,0.453,614,6973 -Allery,80019,797,13.103,1.152,1.043,620,6983 -Le Mesge,80535,180,8.750,0.942,0.853,632,6982 -Cocquerel,80200,232,9.543,0.983,0.890,626,6998 -Saint-Ouen,80711,1910,4.376,0.666,0.603,636,6992 -Oissy,80607,226,5.539,0.749,0.678,632,6977 -Sorel-en-Vimeu,80736,217,4.075,0.643,0.582,620,6992 -Berteaucourt-les-Dames,80093,1161,4.630,0.685,0.620,638,6994 -Vauchelles-lès-Domart,80778,122,3.931,0.631,0.571,631,6996 -Eaucourt-sur-Somme,80262,422,4.468,0.673,0.609,619,6997 -Gorenflos,80380,250,6.278,0.798,0.723,634,6998 -Fourdrinoy,80341,425,9.152,0.963,0.872,635,6983 -Bovelles,80130,438,6.908,0.837,0.758,640,6977 -Ville-le-Marclet,80795,475,8.979,0.954,0.864,636,6995 -Villers-Campsart,80800,152,4.482,0.674,0.610,617,6977 -Breilly,80137,616,5.729,0.762,0.690,641,6983 -Tailly,80744,59,4.068,0.642,0.581,626,6983 -Long,80486,624,9.300,0.971,0.879,629,6995 -Mouflers,80574,93,3.563,0.601,0.544,631,6995 -Bettencourt-Saint-Ouen,80100,624,8.034,0.902,0.817,638,6992 -Bouchon,80117,152,4.565,0.680,0.616,629,6995 -L'Étoile,80296,1223,7.881,0.894,0.809,629,6992 -Fresnoy-Andainville,80356,87,4.009,0.637,0.577,614,6979 -Berneuil,80089,258,5.541,0.749,0.678,642,7000 -Lanches-Saint-Hilaire,80466,129,5.447,0.743,0.673,640,7002 -Airaines,80013,2371,24.888,1.588,1.438,624,6989 -Vaux-Marquenneville,80783,86,3.969,0.634,0.574,612,6987 -Pont-Remy,80635,1474,10.054,1.009,0.914,621,6998 -Avelesges,80046,58,4.928,0.707,0.640,625,6980 -Yonval,80836,227,3.963,0.634,0.574,614,7000 -Hornoy-le-Bourg,80443,1671,51.574,2.286,2.070,622,6977 -Longpré-les-Corps-Saints,80488,1656,8.076,0.905,0.819,628,6993 -Montagne-Fayel,80559,152,6.953,0.839,0.760,627,6982 -Liomer,80484,402,3.878,0.627,0.568,614,6973 -Estrées-Deniécourt,80288,325,6.473,0.810,0.733,687,6973 -Soues,80738,128,8.671,0.937,0.848,635,6983 -Bougainville,80119,446,10.285,1.021,0.924,633,6974 -Warlus,80821,223,8.224,0.913,0.827,626,6978 -Limeux,80482,143,8.710,0.939,0.850,614,6993 -Bailleul,80051,274,14.040,1.193,1.080,615,6993 -Berny-en-Santerre,80090,155,4.501,0.675,0.611,690,6975 -Belloy-Saint-Léonard,80081,93,6.598,0.818,0.741,621,6978 -Liercourt,80476,356,5.512,0.747,0.676,620,6992 -Molliens-Dreuil,80554,934,22.859,1.522,1.378,627,6973 -Riencourt,80673,177,10.230,1.018,0.922,629,6982 -Hangest-sur-Somme,80416,758,12.493,1.125,1.019,632,6991 -Méricourt-en-Vimeu,80531,102,3.324,0.580,0.525,624,6978 -Érondelle,80282,502,3.995,0.636,0.576,618,6995 -Aumont,80041,141,3.349,0.583,0.528,622,6977 -Mareuil-Caubert,80512,820,9.187,0.965,0.874,619,6997 -Saint-Maulvis,80709,268,6.227,0.794,0.719,615,6977 -Dromesnil,80259,99,5.389,0.739,0.669,620,6978 -Picquigny,80622,1357,10.317,1.022,0.925,639,6978 -Ailly-le-Haut-Clocher,80009,951,10.857,1.049,0.950,628,6996 -Ferrières,80305,474,3.515,0.597,0.541,642,6976 -Bray-lès-Mareuil,80135,238,5.411,0.740,0.670,619,6996 -Étréjust,80297,46,3.807,0.621,0.562,619,6980 -Hallencourt,80406,1343,20.697,1.448,1.311,620,6992 -Crouy-Saint-Pierre,80229,338,10.443,1.029,0.932,635,6983 -Frettecuisse,80361,74,5.293,0.732,0.663,613,6983 -Briquemesnil-Floxicourt,80142,244,7.387,0.865,0.783,635,6977 -Domart-en-Ponthieu,80241,1114,17.912,1.347,1.220,637,7001 -Condé-Folie,80205,916,10.345,1.024,0.927,629,6988 -Saint-Léger-lès-Domart,80706,1853,7.096,0.848,0.768,637,6994 -Flixecourt,80318,3142,11.788,1.093,0.990,635,6993 -Mérélessart,80529,198,3.745,0.616,0.558,616,6986 -Belloy-sur-Somme,80082,754,13.230,1.158,1.048,637,6984 -La Chaussée-Tirancourt,80187,659,12.475,1.124,1.018,641,6983 -Épagne-Épagnette,80268,555,6.804,0.830,0.751,621,6999 -Précy-sur-Oise,60513,3217,9.830,0.998,0.904,654,6902 -Amblainville,60010,1733,21.048,1.460,1.322,634,6899 -Crouy-en-Thelle,60185,1104,5.887,0.772,0.699,649,6901 -Fresnoy-en-Thelle,60259,928,6.295,0.799,0.723,644,6901 -Vineuil-Saint-Firmin,60695,1362,7.910,0.895,0.810,661,6901 -Neuville-Bosc,60452,524,8.933,0.951,0.861,630,6900 -Hénonville,60309,830,6.898,0.836,0.757,633,6902 -Monneville,60411,823,9.207,0.966,0.875,627,6904 -Mory-Montcrux,60436,88,4.703,0.690,0.625,657,6943 -Belloy-en-Santerre,80080,152,5.425,0.741,0.671,691,6976 -Éterpigny,80294,173,4.007,0.637,0.577,692,6976 -Péronne,80620,7628,14.206,1.200,1.086,696,6978 -Allaines,80017,457,8.390,0.922,0.835,694,6985 -Licourt,80474,397,6.933,0.838,0.759,694,6968 -Morchain,80568,353,5.788,0.766,0.694,696,6966 -Barleux,80054,227,7.555,0.875,0.792,690,6978 -Hypercourt,80621,728,15.862,1.268,1.148,688,6969 -Bussu,80154,213,6.884,0.835,0.756,700,6983 -Cléry-sur-Somme,80199,558,18.933,1.385,1.254,692,6982 -Puzeaux,80647,300,3.773,0.618,0.560,686,6967 -Flaucourt,80313,291,7.457,0.869,0.787,690,6978 -Y,80829,93,2.732,0.526,0.476,699,6966 -Villers-Carbonnel,80801,349,7.853,0.892,0.808,694,6974 -Assevillers,80033,293,5.491,0.746,0.675,688,6979 -Ablaincourt-Pressoir,80002,269,9.811,0.997,0.903,686,6972 -Doingt,80240,1431,8.749,0.942,0.853,699,6980 -Pargny,80616,204,3.696,0.612,0.554,696,6966 -Fresnes-Mazancourt,80353,136,5.521,0.748,0.677,691,6971 -Potte,80638,105,3.339,0.582,0.527,692,6968 -Ennemain,80267,257,6.790,0.829,0.751,695,6970 -Herbécourt,80430,218,4.473,0.673,0.609,688,6979 -Athies,80034,595,10.861,1.049,0.950,696,6973 -Bonvillers,60085,208,5.914,0.774,0.701,652,6941 -Saint-Christ-Briost,80701,439,7.784,0.888,0.804,696,6974 -Falvy,80300,148,6.147,0.789,0.714,698,6968 -Mesnil-Bruntel,80536,289,7.353,0.863,0.781,699,6977 -Brie,80141,334,6.926,0.838,0.759,695,6977 -Tartigny,60627,281,7.011,0.843,0.763,653,6947 -Valescourt,60653,290,6.920,0.837,0.758,655,6932 -Thory,80758,189,5.184,0.725,0.656,657,6958 -Saint-Remy-en-l'Eau,60595,403,10.118,1.013,0.917,661,6930 -Remiencourt,80668,178,4.871,0.703,0.637,654,6965 -Fouquerolles,60251,283,10.323,1.023,0.926,645,6930 -Wavignies,60701,1200,9.890,1.001,0.906,653,6937 -Catillon-Fumechon,60133,526,13.301,1.161,1.051,653,6937 -Reuil-sur-Brêche,60535,327,12.721,1.135,1.028,641,6936 -Froissy,60265,890,6.619,0.819,0.742,642,6941 -Chaussoy-Epagny,80188,576,11.552,1.082,0.980,654,6960 -Louvrechy,80494,199,5.795,0.766,0.694,654,6959 -Ansauvillers,60017,1202,7.054,0.845,0.765,654,6942 -Jumel,80452,516,8.977,0.954,0.864,649,6961 -La Neuville-Saint-Pierre,60457,163,4.177,0.651,0.589,641,6937 -Breteuil,60104,4436,17.303,1.324,1.199,646,6947 -Quiry-le-Sec,80657,326,6.825,0.832,0.753,657,6951 -Fournival,60252,511,11.099,1.060,0.960,655,6927 -Gouy-les-Groseillers,60283,28,3.058,0.557,0.504,642,6956 -Bulles,60115,906,16.871,1.307,1.183,652,6925 -Rouvrel,80681,304,7.006,0.843,0.763,656,6963 -Croissy-sur-Celle,60183,267,11.062,1.059,0.959,637,6954 -La Faloise,80299,223,9.750,0.994,0.900,652,6954 -Fléchy,60237,98,4.775,0.696,0.630,643,6952 -Maulers,60390,311,7.532,0.874,0.791,642,6939 -Montreuil-sur-Brêche,60425,494,10.671,1.040,0.942,647,6933 -Paillart,60486,583,14.365,1.206,1.092,652,6954 -Hardivillers,60299,550,9.708,0.992,0.898,642,6948 -Avrechy,60034,1150,12.491,1.125,1.019,661,6927 -Abbeville-Saint-Lucien,60003,483,5.293,0.732,0.663,641,6936 -Chirmont,80193,121,7.868,0.893,0.809,654,6957 -Gannes,60268,349,8.606,0.934,0.846,656,6942 -Hallivillers,80407,153,7.149,0.851,0.771,651,6955 -Velennes,60663,239,6.157,0.790,0.715,641,6929 -Nampty,80583,282,5.276,0.731,0.662,642,6966 -Bucamps,60113,187,5.808,0.767,0.694,648,6937 -Essertaux,80285,264,6.598,0.818,0.741,645,6960 -Monsures,80558,227,9.007,0.955,0.865,642,6956 -Guyencourt-sur-Noye,80403,173,3.846,0.624,0.565,654,6963 -Quinquempoix,60522,321,5.892,0.773,0.700,659,6938 -Bonneuil-les-Eaux,60082,813,18.398,1.365,1.236,645,6956 -Doméliers,60199,243,6.094,0.786,0.712,640,6946 -Fouquescourt,80339,164,5.886,0.772,0.699,681,6963 -Rhuis,60536,142,2.761,0.529,0.479,678,6913 -Essuiles,60222,560,13.636,1.175,1.064,645,6930 -Grattepanche,80387,313,6.407,0.806,0.730,651,6964 -Saint-André-Farivillers,60565,512,11.478,1.078,0.976,652,6943 -Rogy,80675,128,6.762,0.828,0.750,641,6959 -Saint-Sauflieu,80717,1005,7.875,0.893,0.809,646,6967 -Lawarde-Mauger-l'Hortoy,80469,178,9.363,0.974,0.882,647,6955 -Coullemelle,80214,339,9.423,0.977,0.885,660,6952 -Estrées-sur-Noye,80291,274,6.041,0.782,0.708,654,6966 -Le Mesnil-Saint-Firmin,60399,197,4.143,0.648,0.587,658,6948 -Rouvroy-les-Merles,60555,55,4.058,0.641,0.580,653,6952 -Campremy,60123,497,10.284,1.021,0.924,649,6941 -Rocquencourt,60544,194,9.739,0.993,0.899,660,6951 -Oresmaux,80611,913,11.043,1.058,0.958,645,6962 -Sainte-Eusoye,60573,314,8.519,0.929,0.841,645,6940 -Folleville,80321,147,6.086,0.785,0.711,654,6952 -Le Mesnil-sur-Bulles,60400,264,6.293,0.799,0.723,655,6932 -Bosquel,80114,333,9.593,0.986,0.893,645,6959 -Fransures,80349,134,4.305,0.660,0.598,643,6958 -Conty,80211,1722,23.797,1.553,1.406,641,6959 -Nivillers,60461,189,7.714,0.884,0.800,640,6930 -Le Quesnel-Aubry,60520,214,4.820,0.699,0.633,652,6935 -Le Fay-Saint-Quentin,60230,530,7.256,0.857,0.776,644,6928 -Puits-la-Vallée,60518,201,4.322,0.662,0.599,641,6942 -Changy,42049,629,13.761,1.181,1.069,767,6562 -Blancfossé,60075,145,5.191,0.725,0.656,643,6952 -Saint-Just-en-Chaussée,60581,5992,14.657,1.219,1.104,657,6938 -Cormeilles,60163,436,7.238,0.856,0.775,643,6949 -Vendeuil-Caply,60664,478,10.942,1.053,0.953,647,6943 -Troussencourt,60648,339,5.355,0.737,0.667,646,6944 -Énencourt-Léage,60208,142,4.514,0.676,0.612,615,6914 -Pouilly,60512,153,3.837,0.624,0.565,630,6911 -Liancourt-Saint-Pierre,60361,593,12.667,1.133,1.026,619,6905 -Saint-Sulpice,60598,1008,8.832,0.946,0.857,635,6915 -Valdampierre,60652,941,8.777,0.943,0.854,630,6914 -Fleury,60239,551,6.302,0.799,0.723,624,6909 -Le Mesnil-Théribus,60401,796,6.656,0.821,0.743,628,6913 -Saint-Crépin-Ibouvillers,60570,1526,19.676,1.412,1.278,634,6905 -Chambors,60140,316,6.706,0.824,0.746,614,6906 -Éragny-sur-Epte,60211,619,8.609,0.934,0.846,611,6911 -Thibivillers,60630,170,6.410,0.806,0.730,619,6911 -Dangu,27199,579,7.960,0.898,0.813,605,6907 -Reilly,60528,125,8.248,0.914,0.828,617,6907 -Corbeil-Cerf,60162,344,3.947,0.632,0.572,636,6910 -Vesly,27682,689,11.993,1.102,0.998,599,6907 -Méru,60395,14640,23.058,1.528,1.383,636,6909 -Saint-Clair-sur-Epte,95541,986,12.332,1.118,1.012,603,6901 -Flavacourt,60235,663,18.524,1.370,1.240,616,6914 -Saint-Denis-le-Ferment,27533,485,17.994,1.350,1.222,605,6917 -Chauvincourt-Provemont,27153,369,10.836,1.048,0.949,602,6908 -Boubiers,60089,412,10.367,1.025,0.928,619,6905 -Chaumont-en-Vexin,60143,3237,18.584,1.372,1.242,619,6912 -Sancourt,27614,155,6.621,0.819,0.742,605,6917 -Jouy-sous-Thelle,60327,1030,13.025,1.149,1.040,623,6916 -Vaudancourt,60659,173,4.657,0.687,0.622,610,6905 -Berneuil-en-Bray,60063,782,15.140,1.239,1.122,631,6921 -Grandvillers-aux-Bois,60285,316,6.602,0.818,0.741,670,6929 -Trie-Château,60644,1951,13.549,1.172,1.061,613,6909 -Montjavoult,60420,482,16.803,1.305,1.182,611,6899 -Jaméricourt,60322,320,4.285,0.659,0.597,617,6911 -Gisors,27284,11918,16.709,1.301,1.178,612,6906 -Blincourt,60078,97,2.842,0.537,0.486,672,6922 -Fresne-Léguillon,60257,446,7.386,0.865,0.783,626,6908 -Delincourt,60195,478,8.033,0.902,0.817,616,6903 -Trie-la-Ville,60645,313,4.548,0.679,0.615,615,6912 -Auteuil,60030,563,12.181,1.111,1.006,635,6920 -Porcheux,60510,581,4.751,0.694,0.628,621,6914 -Lormaison,60370,1301,5.016,0.713,0.646,634,6908 -Bézu-Saint-Éloi,27067,1491,11.453,1.077,0.975,607,6911 -Hodenc-l'Évêque,60316,250,3.445,0.591,0.535,639,6916 -Silly-Tillard,60620,442,11.191,1.065,0.964,637,6911 -Labosse,60331,444,14.310,1.204,1.090,617,6919 -Sérifontaine,60616,2758,20.705,1.448,1.311,610,6918 -Bernouville,27059,298,6.090,0.786,0.712,602,6912 -Fay-les-Étangs,60228,469,8.618,0.934,0.846,624,6904 -Le Coudray-sur-Thelle,60165,542,3.791,0.620,0.561,636,6911 -Neaufles-Saint-Martin,27426,1261,9.051,0.958,0.867,609,6909 -Hébécourt,27324,570,11.293,1.070,0.969,606,6920 -Ivry-le-Temple,60321,749,12.564,1.128,1.021,626,6903 -Abbecourt,60002,768,7.450,0.869,0.787,639,6916 -Tourly,60640,176,3.331,0.581,0.526,623,6902 -Monts,60427,170,3.676,0.610,0.552,629,6903 -Loconville,60367,340,5.515,0.748,0.677,622,6908 -La Drenne,60196,993,14.011,1.191,1.078,635,6912 -Guerny,27304,173,6.029,0.782,0.708,606,6904 -Parnes,60487,345,12.724,1.135,1.028,611,6899 -Montagny-en-Vexin,60412,670,4.063,0.642,0.581,612,6899 -Buhy,95119,323,6.951,0.839,0.760,606,6901 -Longueil-Annel,60368,2608,6.016,0.781,0.707,689,6928 -Marest-sur-Matz,60378,410,3.236,0.573,0.519,687,6935 -Rethondes,60534,670,9.600,0.986,0.893,695,6924 -Montmacq,60423,1060,7.297,0.860,0.779,695,6933 -Le Plessis-Brion,60501,1372,7.508,0.872,0.790,691,6929 -Chevincourt,60147,867,8.117,0.907,0.821,688,6934 -Thourotte,60636,4571,4.377,0.666,0.603,691,6930 -Vieux-Moulin,60674,642,17.922,1.348,1.220,698,6920 -Saint-Crépin-aux-Bois,60569,229,16.372,1.288,1.166,698,6925 -Saint-Léger-aux-Bois,60582,798,8.325,0.918,0.831,698,6932 -Ribécourt-Dreslincourt,60537,3763,12.998,1.148,1.039,694,6938 -Giraumont,60273,543,3.554,0.600,0.543,689,6931 -Cambronne-lès-Ribécourt,60119,1953,6.956,0.840,0.761,692,6932 -Bailly,60043,643,4.285,0.659,0.597,699,6933 -Berneuil-sur-Aisne,60064,1007,10.504,1.032,0.934,702,6923 -Mélicocq,60392,724,6.605,0.818,0.741,687,6932 -Coudun,60166,1038,10.549,1.034,0.936,689,6928 -Vandélicourt,60654,281,4.672,0.688,0.623,685,6933 -Trosly-Breuil,60647,2091,10.984,1.055,0.955,698,6920 -Margny-lès-Compiègne,60382,8218,6.689,0.823,0.745,684,6927 -Compiègne,60159,40258,53.166,2.321,2.101,694,6925 -Machemont,60373,687,6.355,0.802,0.726,691,6937 -Fransart,80347,149,2.941,0.546,0.494,683,6962 -Choisy-au-Bac,60151,3300,15.898,1.269,1.149,690,6928 -Andechy,80023,262,7.657,0.881,0.798,678,6956 -Pontpoint,60508,3240,19.217,1.395,1.263,676,6913 -Sacy-le-Petit,60563,553,7.421,0.867,0.785,673,6921 -Antheuil-Portes,60019,412,10.710,1.042,0.943,683,6932 -Montmartin,60424,259,3.409,0.588,0.532,679,6931 -Saint-Mard,80708,171,4.116,0.646,0.585,681,6953 -Moyenneville,60440,634,7.183,0.853,0.772,675,6932 -Bouchoir,80116,305,5.899,0.773,0.700,678,6960 -Chevrières,60149,1965,12.670,1.133,1.026,675,6918 -Warvillers,80823,147,4.193,0.652,0.590,677,6963 -Braisnes-sur-Aronde,60099,170,2.624,0.516,0.467,683,6932 -Assainvillers,80032,114,7.275,0.859,0.778,669,6947 -Roye-sur-Matz,60558,460,10.923,1.052,0.952,683,6947 -Laberlière,60329,195,3.506,0.596,0.540,684,6941 -Rouvillers,60553,277,12.131,1.109,1.004,671,6926 -Brasseuse,60100,105,8.317,0.918,0.831,676,6904 -Goyencourt,80383,95,5.438,0.742,0.672,682,6957 -Faverolles,80302,157,6.716,0.825,0.747,674,6951 -Estrées-Saint-Denis,60223,3758,8.109,0.906,0.820,672,6923 -Maucourt,80520,180,3.386,0.586,0.531,682,6968 -Dancourt-Popincourt,80233,152,5.933,0.775,0.702,682,6951 -Guerbigny,80395,300,8.357,0.920,0.833,674,6954 -Becquigny,80074,125,6.101,0.786,0.712,674,6954 -Rully,60560,723,15.564,1.256,1.137,681,6907 -Villers-lès-Roye,80803,277,6.298,0.799,0.723,681,6958 -L'Échelle-Saint-Aurin,80263,54,5.145,0.722,0.654,679,6954 -Erches,80278,186,8.333,0.919,0.832,678,6960 -Arsy,60024,772,7.333,0.862,0.780,680,6924 -Fignières,80311,153,6.624,0.819,0.742,670,6952 -Margny-sur-Matz,60383,534,7.350,0.863,0.781,686,6937 -Mortemer,60434,224,6.592,0.817,0.740,675,6941 -Vignemont,60675,433,4.355,0.664,0.601,684,6935 -Néry,60447,663,16.473,1.292,1.170,683,6906 -Fresnoy-le-Luat,60261,510,11.616,1.085,0.982,680,6901 -Davenescourt,80236,562,11.790,1.093,0.990,670,6959 -Rollot,80678,741,12.069,1.106,1.001,676,6943 -Laucourt,80467,198,6.410,0.806,0.730,683,6951 -Gournay-sur-Aronde,60281,576,15.109,1.237,1.120,679,6931 -Damery,80232,239,4.955,0.709,0.642,679,6959 -Le Meux,60402,2254,7.765,0.887,0.803,682,6916 -Saintines,60578,1056,2.846,0.537,0.486,682,6912 -Grandfresnoy,60284,1758,10.767,1.044,0.945,674,6917 -Barbery,60045,564,7.738,0.885,0.801,675,6904 -Baugy,60048,247,7.273,0.858,0.777,681,6928 -Remy,60531,1791,20.466,1.440,1.304,680,6930 -Folies,80320,142,5.765,0.764,0.692,677,6964 -Le Quesnel,80652,798,11.539,1.081,0.979,674,6962 -Montépilloy,60415,145,5.914,0.774,0.701,679,6900 -Armancourt,60023,559,2.071,0.458,0.415,683,6918 -Conchy-les-Pots,60160,700,9.757,0.994,0.900,680,6947 -Hangest-en-Santerre,80415,1018,15.141,1.239,1.122,672,6959 -Neufvy-sur-Aronde,60449,281,7.553,0.875,0.792,674,6936 -Venette,60665,2830,8.550,0.931,0.843,685,6923 -Piennes-Onvillers,80623,364,12.301,1.116,1.010,673,6946 -Roberval,60541,372,4.794,0.697,0.631,677,6912 -Marquivillers,80517,185,5.815,0.768,0.695,678,6956 -La Neuville-sur-Ressons,60459,216,2.733,0.526,0.476,683,6938 -Pont-Sainte-Maxence,60509,12470,14.734,1.222,1.106,671,6916 -Ménévillers,60394,106,4.912,0.705,0.638,671,6934 -Jaux,60325,2559,8.619,0.934,0.846,682,6923 -Méry-la-Bataille,60396,632,11.307,1.070,0.969,674,6936 -Beaufort-en-Santerre,80067,203,4.439,0.671,0.608,677,6964 -Lignières,80478,132,6.354,0.802,0.726,673,6953 -Fescamps,80306,141,5.060,0.716,0.648,676,6949 -Chamant,60138,909,12.054,1.105,1.000,674,6902 -Longueil-Sainte-Marie,60369,1921,17.238,1.322,1.197,681,6915 -Hémévillers,60308,457,6.902,0.836,0.757,675,6931 -Orvillers-Sorel,60483,525,8.578,0.932,0.844,680,6943 -Francières,60254,546,8.537,0.930,0.842,674,6927 -Laboissière-en-Santerre,80453,156,7.234,0.856,0.775,674,6950 -Biermont,60071,175,3.935,0.631,0.571,681,6941 -Arvillers,80031,785,12.791,1.138,1.030,674,6957 -Andelaroche,3004,258,20.353,1.436,1.300,754,6574 -Beuvraignes,80101,860,14.727,1.222,1.106,685,6952 -Parvillers-le-Quesnoy,80617,234,9.680,0.990,0.896,679,6959 -Ricquebourg,60538,283,5.039,0.715,0.647,684,6941 -Lataule,60351,114,7.401,0.866,0.784,675,6939 -Lachelle,60337,645,9.212,0.966,0.875,682,6924 -Moyvillers,60441,655,9.219,0.966,0.875,674,6922 -Ressons-sur-Matz,60533,1707,9.380,0.975,0.883,680,6939 -Monchy-Humières,60408,749,7.979,0.899,0.814,680,6930 -Roye,80685,5864,15.578,1.256,1.137,687,6953 -Saint-Julien-de-Jonzy,71434,342,22.643,1.515,1.372,789,6575 -Cuvilly,60191,632,8.570,0.932,0.844,679,6937 -Fresnoy-en-Chaussée,80358,153,3.838,0.624,0.565,669,6963 -Verberie,60667,3921,15.168,1.240,1.123,678,6913 -Trumilly,60650,520,13.141,1.154,1.045,685,6903 -Bazicourt,60050,330,3.865,0.626,0.567,674,6917 -Volx,4245,3153,18.692,1.376,1.246,926,6315 -Houdancourt,60318,664,6.822,0.831,0.752,676,6913 -Saint-Pierre-la-Noaille,42273,381,7.500,0.872,0.790,785,6567 -Sevelinges,42300,647,8.173,0.910,0.824,801,6554 -Saint-Hilaire-sous-Charlieu,42236,545,13.777,1.181,1.069,793,6560 -Chambilly,71077,512,13.729,1.179,1.067,779,6577 -Pirou,50403,1461,29.263,1.722,1.559,371,6902 -Briant,71060,222,13.554,1.172,1.061,791,6579 -Chenay-le-Châtel,71123,389,32.081,1.803,1.632,770,6568 -Saint-Martin-d'Estréaux,42257,848,30.087,1.746,1.581,762,6571 -La Pacaudière,42163,1050,20.835,1.453,1.316,769,6569 -Mably,42127,7689,33.331,1.838,1.664,785,6557 -La Bénisson-Dieu,42016,417,11.195,1.065,0.964,780,6564 -Pouilly-sous-Charlieu,42177,2484,16.540,1.295,1.173,789,6558 -Charlieu,42052,3652,6.622,0.819,0.742,790,6562 -Urbise,42317,133,15.743,1.263,1.144,765,6574 -Vauban,71561,225,13.697,1.178,1.067,791,6574 -Montrieux-en-Sologne,41152,662,34.155,1.860,1.684,605,6715 -Saint-Pardoux,63382,409,16.010,1.274,1.153,701,6554 -Saint-Hilaire,3238,539,20.953,1.457,1.319,701,6602 -Chassigny-sous-Dun,71110,572,13.272,1.160,1.050,801,6573 -Maizilly,42131,338,5.151,0.722,0.654,794,6565 -Villers,42333,577,5.832,0.769,0.696,796,6559 -Ambierle,42003,1905,30.818,1.767,1.600,773,6555 -Nandax,42152,508,8.165,0.910,0.824,788,6558 -Baudemont,71022,647,7.954,0.898,0.813,799,6580 -Chandon,42048,1461,12.630,1.131,1.024,793,6560 -Coutansouze,3089,153,13.672,1.177,1.066,699,6565 -Lalizolle,3135,358,23.732,1.551,1.404,702,6565 -Saint-Marcel-en-Murat,3243,126,16.947,1.310,1.186,702,6583 -Vaumas,3300,538,35.095,1.886,1.708,750,6591 -Saint-Sornin,3260,227,19.516,1.406,1.273,699,6588 -Saint-Sylvestre-Pragoulin,63400,1077,23.851,1.555,1.408,726,6549 -Sérézin-du-Rhône,69294,2626,3.845,0.624,0.565,844,6504 -Vic-le-Comte,63457,5075,18.116,1.355,1.227,715,6506 -Cusset,3095,12757,31.775,1.794,1.624,740,6560 -Le Vernet,3306,1932,10.213,1.017,0.921,734,6557 -Billezois,3028,387,15.696,1.261,1.142,742,6568 -Bost,3033,192,9.646,0.989,0.895,737,6566 -Chavroches,3071,253,10.004,1.007,0.912,749,6583 -Saint-Pourçain-sur-Besbre,3253,437,33.396,1.839,1.665,753,6596 -Nizerolles,3201,327,17.666,1.338,1.211,747,6559 -Magnet,3157,982,12.803,1.139,1.031,740,6570 -Sanssat,3266,271,8.414,0.923,0.836,736,6571 -Creuzier-le-Neuf,3093,1157,11.004,1.056,0.956,738,6564 -Saint-Léon,3240,575,33.956,1.855,1.680,750,6591 -La Chapelle,3056,372,21.155,1.464,1.326,747,6553 -Châtel-Montagne,3066,359,36.699,1.928,1.746,751,6559 -Saint-Clément,3224,309,26.132,1.627,1.473,759,6550 -Abrest,3001,2923,10.344,1.024,0.927,733,6555 -Thionne,3284,325,27.114,1.657,1.500,741,6588 -Saint-Étienne-de-Vicq,3230,521,19.271,1.397,1.265,740,6560 -Boucé,3034,514,21.996,1.493,1.352,736,6577 -Jaligny-sur-Besbre,3132,587,9.738,0.993,0.899,748,6586 -Treteau,3289,536,31.494,1.786,1.617,736,6585 -Bert,3024,247,24.364,1.571,1.422,753,6584 -Saint-Voir,3263,194,25.175,1.597,1.446,736,6592 -Droiturier,3105,325,22.185,1.499,1.357,753,6572 -Rongères,3215,568,9.008,0.955,0.865,736,6580 -Saint-Félix,3232,324,5.194,0.725,0.656,738,6571 -Chapeau,3054,230,33.777,1.850,1.675,741,6602 -Langy,3137,276,7.380,0.865,0.783,736,6577 -Servilly,3272,295,12.291,1.116,1.010,743,6575 -Sorbier,3274,313,17.126,1.317,1.192,754,6586 -Cindré,3079,301,22.785,1.519,1.375,744,6577 -Montaigu-le-Blin,3179,306,13.028,1.149,1.040,741,6579 -Le Mayet-de-Montagne,3165,1384,29.623,1.732,1.568,752,6555 -Varennes-sur-Tèche,3299,253,18.904,1.384,1.253,747,6577 -Mercy,3171,263,29.236,1.721,1.558,744,6597 -Seuillet,3273,507,9.966,1.005,0.910,737,6569 -Châtelperron,3067,147,20.732,1.449,1.312,748,6591 -Molles,3174,888,26.798,1.648,1.492,740,6555 -Saint-Yorre,3264,2637,6.486,0.811,0.734,735,6552 -Romagnat,63307,7634,16.971,1.311,1.187,703,6513 -Louvemont-Côe-du-Poivre,55307,0,8.361,0.920,0.833,873,6908 -Lapalisse,3138,3105,32.817,1.823,1.651,751,6572 -Barrais-Bussolles,3017,194,25.473,1.607,1.455,757,6575 -Saint-Christophe,3223,479,27.936,1.682,1.523,748,6566 -Châtelus,3068,112,6.571,0.816,0.739,757,6570 -Laps,63188,596,7.099,0.848,0.768,722,6509 -La Renaudie,63298,120,17.981,1.350,1.222,758,6516 -Sayat,63417,2300,8.408,0.923,0.836,703,6527 -Saint-Sandoux,63395,948,9.841,0.999,0.905,710,6505 -Saint-Bonnet-lès-Allier,63325,432,1.522,0.393,0.356,720,6515 -Le Malzieu-Forain,48089,468,49.547,2.241,2.029,733,6423 -Saint-Genès-Champanelle,63345,3525,51.865,2.292,2.075,704,6509 -Bongheat,63044,432,11.283,1.069,0.968,732,6516 -Cournols,63123,239,10.868,1.049,0.950,703,6507 -Veyre-Monton,63455,3489,12.146,1.109,1.004,714,6508 -Neuville,63252,380,11.649,1.086,0.983,736,6519 -Ravel,63296,708,10.134,1.013,0.917,729,6519 -Glaine-Montaigut,63168,565,13.053,1.150,1.041,732,6516 -Nohanent,63254,2229,4.285,0.659,0.597,706,6523 -Sallèdes,63405,589,18.924,1.385,1.254,725,6503 -Busséol,63059,219,5.695,0.760,0.688,722,6511 -Balbigny,42011,3027,17.011,1.313,1.189,795,6525 -Pignols,63280,334,9.320,0.972,0.880,724,6503 -Durtol,63141,2006,4.049,0.641,0.580,706,6523 -Isserteaux,63177,416,17.649,1.337,1.211,732,6503 -La Roche-Noire,63306,608,3.119,0.562,0.509,717,6513 -Chas,63096,373,3.532,0.598,0.541,725,6517 -Mirefleurs,63227,2442,9.147,0.963,0.872,719,6510 -Aulnat,63019,4027,4.319,0.662,0.599,715,6522 -Aubière,63014,10185,7.802,0.889,0.805,710,6516 -Neulise,42156,1345,23.054,1.528,1.383,790,6531 -Seychalles,63420,768,9.212,0.966,0.875,725,6521 -Saint-Jean-d'Heurs,63364,657,11.183,1.064,0.963,733,6523 -Bussières,42029,1560,16.716,1.301,1.178,798,6525 -Vertaizon,63453,3190,12.893,1.143,1.035,720,6519 -Lempdes,63193,8306,12.295,1.116,1.010,717,6518 -Billom,63040,4732,16.921,1.309,1.185,726,6512 -Saint-Amant-Tallende,63315,1757,5.074,0.717,0.649,709,6508 -La Roche-Blanche,63302,3341,11.682,1.088,0.985,712,6515 -Orcet,63262,2637,6.149,0.789,0.714,715,6511 -Clermont-Ferrand,63113,142686,43.126,2.090,1.892,706,6523 -Saint-Maurice,63378,831,5.395,0.739,0.669,717,6508 -Chanat-la-Mouteyre,63083,948,14.411,1.208,1.094,701,6526 -Chamalières,63075,17282,3.770,0.618,0.560,705,6518 -Peschadoires,63276,2120,20.858,1.454,1.316,739,6526 -Bort-l'Étang,63045,651,15.651,1.259,1.140,731,6519 -Beaumont,63032,10976,4.006,0.637,0.577,707,6516 -Cezay,42035,224,10.502,1.032,0.934,773,6524 -Le Cendre,63069,5330,4.294,0.660,0.598,716,6514 -Trézioux,63438,470,17.603,1.335,1.209,738,6516 -Granville,50218,12900,10.016,1.007,0.912,365,6870 -Moissat,63229,1228,13.124,1.153,1.044,729,6521 -Les Martres-d'Artière,63213,2178,14.974,1.232,1.115,720,6527 -Lempty,63194,389,4.808,0.698,0.632,725,6525 -Pont-du-Château,63284,11191,21.671,1.482,1.342,714,6521 -Royat,63308,4798,6.654,0.821,0.743,705,6518 -Saint-Saturnin,63396,1167,16.919,1.309,1.185,704,6509 -Tallende,63425,1539,6.114,0.787,0.713,711,6506 -Saint-Victor-sur-Rhins,42293,1177,11.444,1.077,0.975,801,6546 -Les Martres-de-Veyre,63214,3955,9.255,0.968,0.876,714,6510 -Authezat,63021,673,5.814,0.768,0.695,717,6504 -Nervieux,42155,985,19.669,1.412,1.278,792,6524 -Cébazat,63063,8275,10.131,1.013,0.917,707,6524 -Saint-Flour,63343,282,9.615,0.987,0.894,740,6514 -Saint-Georges-sur-Allier,63350,1244,9.431,0.978,0.885,720,6515 -Blanzat,63042,3735,6.980,0.841,0.761,704,6527 -Reignat,63297,382,4.124,0.646,0.585,727,6516 -Saint-Marcel-de-Félines,42254,818,22.500,1.510,1.367,790,6531 -Beauregard-l'Évêque,63034,1473,12.074,1.106,1.001,723,6527 -La Sauvetat,63413,715,8.052,0.903,0.818,711,6505 -Lussat,63200,919,9.162,0.963,0.872,716,6528 -Estandeuil,63155,450,9.631,0.988,0.895,734,6511 -Mauzun,63216,113,1.016,0.321,0.291,734,6511 -Corent,63120,727,2.714,0.524,0.474,716,6508 -Pérignat-lès-Sarliève,63272,2675,3.897,0.628,0.569,712,6516 -Saint-Jean-des-Ollières,63365,461,19.815,1.417,1.283,737,6504 -Cournon-d'Auvergne,63124,20126,18.968,1.386,1.255,713,6514 -Gerzat,63164,10534,16.458,1.291,1.169,711,6528 -Montmorin,63239,725,13.866,1.185,1.073,727,6507 -Le Crest,63126,1270,6.907,0.837,0.758,709,6511 -Chauriat,63106,1666,8.717,0.940,0.851,723,6517 -Fayet-le-Château,63157,351,12.572,1.129,1.022,734,6511 -Bouzel,63049,719,4.233,0.655,0.593,724,6522 -Saint-Dier-d'Auvergne,63334,507,20.400,1.438,1.302,739,6505 -Commelle-Vernay,42069,2927,12.708,1.135,1.028,780,6542 -Pouilly-les-Nonains,42176,2086,10.429,1.028,0.931,774,6552 -Débats-Rivière-d'Orpra,42084,156,3.407,0.588,0.532,773,6519 -Saint-Germain-Laval,42230,1646,17.095,1.316,1.192,782,6524 -Villemontais,42331,1015,13.206,1.157,1.048,769,6544 -Sail-sous-Couzan,42195,943,7.560,0.875,0.792,775,6514 -Vendranges,42325,370,11.138,1.062,0.962,787,6534 -Saint-Alban-les-Eaux,42198,972,7.870,0.893,0.809,774,6545 -Roanne,42187,34685,16.126,1.278,1.157,785,6553 -Pradines,42178,794,11.509,1.080,0.978,789,6543 -Salt-en-Donzy,42296,543,9.260,0.969,0.877,802,6516 -Leigneux,42119,380,4.474,0.673,0.609,775,6518 -Chirassimont,42063,400,10.683,1.040,0.942,799,6533 -Cleppé,42066,544,15.420,1.250,1.132,789,6519 -Parigny,42166,602,9.205,0.966,0.875,786,6545 -Lens-Lestang,26162,859,16.439,1.291,1.169,862,6468 -Saint-Jodard,42241,426,6.712,0.825,0.747,786,6532 -Boën-sur-Lignon,42019,3308,5.969,0.778,0.704,779,6516 -Feurs,42094,8093,23.912,1.557,1.410,793,6519 -Sainte-Agathe-la-Bouteresse,42197,1012,11.656,1.087,0.984,781,6515 -Saint-Jean-Saint-Maurice-sur-Loire,42239,1142,24.413,1.573,1.424,780,6542 -Luré,42125,146,6.229,0.794,0.719,774,6531 -Andancette,26009,1338,6.066,0.784,0.710,843,6460 -Le Coteau,42071,6845,4.907,0.705,0.638,783,6547 -Fourneaux,42098,598,12.596,1.130,1.023,799,6543 -Trelins,42313,648,8.260,0.915,0.828,779,6516 -Épercieux-Saint-Paul,42088,727,8.173,0.910,0.824,792,6523 -Arthun,42009,553,13.941,1.188,1.076,780,6517 -Mizérieux,42143,434,7.065,0.846,0.766,789,6521 -Villerest,42332,4840,14.126,1.196,1.083,782,6547 -Saint-Just-la-Pendue,42249,1650,19.914,1.420,1.286,796,6529 -Salvizinet,42297,595,10.937,1.053,0.953,798,6520 -Saint-Martin-la-Sauveté,42260,993,29.723,1.735,1.571,771,6530 -Argagnon,64042,703,9.316,0.972,0.880,401,6269 -Bournos,64146,329,5.760,0.764,0.692,424,6268 -Saint-André-d'Apchon,42199,1953,13.560,1.172,1.061,775,6547 -Neaux,42153,479,17.497,1.331,1.205,788,6542 -Montagny,42145,1061,25.610,1.611,1.459,796,6545 -Palogneux,42164,79,7.103,0.848,0.768,773,6515 -Saint-Polgues,42274,259,5.828,0.768,0.695,776,6534 -Saint-Étienne-le-Molard,42219,1010,16.614,1.297,1.174,788,6516 -Saint-Cyr-de-Favières,42212,892,14.246,1.201,1.087,783,6542 -Saint-Vincent-de-Boisset,42294,946,4.145,0.648,0.587,786,6546 -Pommiers,42173,361,24.210,1.566,1.418,786,6524 -Lentigny,42120,1717,11.506,1.080,0.978,774,6547 -Riorges,42184,10669,15.656,1.259,1.140,778,6548 -Morganx,40198,177,5.268,0.731,0.662,412,6283 -Saint-Georges-de-Baroille,42226,411,15.403,1.249,1.131,785,6531 -Pouilly-lès-Feurs,42175,1257,13.173,1.155,1.046,793,6524 -Nollieux,42160,201,7.030,0.844,0.764,778,6523 -Sainte-Foy-Saint-Sulpice,42221,514,29.365,1.725,1.562,786,6524 -Néronde,42154,458,8.591,0.933,0.845,795,6530 -Jarjayes,5068,435,22.945,1.525,1.381,947,6380 -Perreux,42170,2128,41.479,2.050,1.856,786,6553 -Renaison,42182,3107,23.379,1.539,1.393,770,6548 -Notre-Dame-de-Boisset,42161,565,9.086,0.959,0.868,790,6546 -Saint-Symphorien-de-Lay,42289,1895,32.752,1.822,1.650,798,6541 -Boisset-lès-Montrond,42020,1162,8.260,0.915,0.828,792,6502 -Grézolles,42106,269,5.594,0.753,0.682,772,6531 -Bars,32030,142,10.769,1.045,0.946,484,6271 -Chambéon,42041,541,16.912,1.309,1.185,789,6509 -Saint-Julien-d'Oddes,42243,269,10.327,1.023,0.926,775,6529 -Saint-Bonnet-le-Courreau,42205,691,50.439,2.261,2.047,768,6502 -Montverdun,42150,1292,16.627,1.298,1.175,783,6511 -Montrond-les-Bains,42149,5301,10.144,1.014,0.918,795,6506 -Champdieu,42046,1888,18.081,1.354,1.226,779,6506 -Lérigneux,42121,145,9.766,0.995,0.901,776,6501 -Grézieux-le-Fromental,42105,224,10.358,1.024,0.927,792,6503 -Saint-Georges-en-Couzan,42227,432,23.664,1.548,1.402,776,6513 -Saint-Laurent-la-Conche,42251,621,15.683,1.261,1.142,797,6509 -Saint-Paul-d'Uzore,42269,166,9.663,0.989,0.895,786,6512 -Marclopt,42135,509,8.594,0.933,0.845,795,6506 -Noyant-d'Allier,3202,653,21.117,1.463,1.325,706,6598 -Chalain-d'Uzore,42037,539,8.071,0.904,0.818,781,6509 -Roche,42188,259,23.050,1.528,1.383,774,6504 -Cuzieu,42081,1510,11.648,1.086,0.983,797,6503 -Chalain-le-Comtal,42038,712,18.801,1.380,1.249,793,6507 -Saint-André-le-Puy,42200,1545,8.700,0.939,0.850,798,6508 -Pralong,42179,857,8.083,0.905,0.819,778,6508 -Magneux-Haute-Rive,42130,557,12.577,1.129,1.022,794,6510 -Lachau,26154,228,25.667,1.613,1.460,914,6347 -Unias,42315,439,5.441,0.742,0.672,796,6501 -Paray-le-Monial,71342,9160,25.372,1.603,1.451,783,6593 -Saligny-sur-Roudon,3265,687,57.720,2.418,2.189,756,6592 -Trescléoux,5172,317,18.683,1.376,1.246,918,6368 -Vitry-en-Charollais,71588,1108,21.347,1.471,1.332,783,6597 -Coulanges,3086,349,24.368,1.571,1.422,765,6602 -Varenne-Saint-Germain,71557,706,15.773,1.264,1.144,776,6592 -Chassenard,3063,969,25.038,1.593,1.442,776,6592 -Nochize,71331,113,11.146,1.063,0.962,790,6592 -Monétay-sur-Loire,3177,266,31.482,1.786,1.617,767,6594 -Liernolles,3144,210,37.434,1.948,1.764,762,6588 -Champlecy,71082,222,22.907,1.523,1.379,791,6595 -Volesvres,71590,608,21.612,1.480,1.340,790,6602 -Saint-Yan,71491,1178,26.280,1.632,1.478,776,6591 -Changy,71086,462,20.232,1.432,1.297,797,6588 -Digoin,71176,7811,35.150,1.887,1.709,776,6602 -Charolles,71106,2759,20.038,1.425,1.290,799,6592 -Saint-Léger-lès-Paray,71439,718,13.553,1.172,1.061,782,6598 -Le Pin,3208,403,21.885,1.489,1.348,767,6594 -Coudes,63121,1231,4.700,0.690,0.625,717,6501 -Montpeyroux,63241,341,3.371,0.584,0.529,717,6504 -Sugères,63423,607,20.750,1.450,1.313,734,6502 -Olloix,63259,316,12.032,1.104,1.000,706,6501 -Parent,63269,841,3.768,0.618,0.560,717,6503 -Manglieu,63205,462,21.279,1.468,1.329,730,6503 -Plauzat,63282,1638,13.262,1.159,1.049,709,6503 -Ludesse,63199,485,8.713,0.940,0.851,706,6501 -Vichy,3310,24383,5.907,0.774,0.701,732,6560 -Le Theil,3281,410,29.187,1.720,1.557,710,6587 -Charmeil,3060,948,7.417,0.867,0.785,732,6562 -Gannat,3118,5836,36.778,1.930,1.747,716,6558 -Verneuil-en-Bourbonnais,3307,250,14.094,1.195,1.082,719,6582 -Hauterive,3126,1181,7.981,0.899,0.814,736,6553 -Bellerive-sur-Allier,3023,8501,18.821,1.381,1.250,734,6557 -Saint-Bonnet-de-Rochefort,3220,691,16.381,1.288,1.166,713,6559 -Chezelle,3075,182,7.323,0.861,0.780,709,6570 -Deux-Chaises,3099,399,41.359,2.047,1.853,702,6583 -La Ferté-Hauterive,3114,294,21.806,1.486,1.345,726,6584 -Chareil-Cintrat,3059,358,12.701,1.134,1.027,720,6575 -Saint-Loup,3242,559,17.657,1.338,1.211,733,6583 -Naves,3194,115,8.177,0.910,0.824,709,6566 -Châtel-de-Neuvre,3065,547,19.239,1.396,1.264,720,6591 -Marcenat,3160,403,19.545,1.407,1.274,731,6574 -Bayet,3018,707,23.301,1.537,1.392,719,6572 -Paray-sous-Briailles,3204,635,22.286,1.503,1.361,731,6576 -Target,3277,257,26.816,1.648,1.492,702,6575 -Ébreuil,3107,1260,23.140,1.531,1.386,705,6560 -Deneuille-lès-Chantelle,3096,81,8.270,0.915,0.828,711,6574 -Cesset,3049,406,12.162,1.110,1.005,717,6576 -Saint-Rémy-en-Rollat,3258,1695,21.020,1.459,1.321,732,6564 -Treban,3287,394,25.779,1.616,1.463,709,6591 -Fleuriel,3115,337,28.342,1.695,1.535,713,6574 -Fourilles,3116,196,7.060,0.846,0.766,716,6574 -Châtel-Guyon,63103,6155,14.100,1.195,1.082,703,6535 -Taxat-Senat,3278,205,13.715,1.179,1.067,710,6565 -Saint-Cyr,7227,1358,8.304,0.917,0.830,835,6464 -Varennes-sur-Allier,3298,3561,24.419,1.573,1.424,727,6582 -Montord,3188,211,4.566,0.680,0.616,720,6576 -Monestier,3175,283,29.762,1.737,1.573,705,6573 -Jenzat,3133,511,11.864,1.096,0.992,713,6562 -Brugheas,3044,1473,26.999,1.654,1.498,732,6553 -Monétay-sur-Allier,3176,505,11.952,1.100,0.996,720,6586 -Mazerier,3166,299,7.329,0.862,0.780,713,6559 -Neuilly-le-Réal,3197,1458,47.444,2.193,1.986,736,6593 -Saulcet,3267,712,7.969,0.899,0.814,720,6579 -Valignat,3295,77,2.301,0.483,0.437,707,6564 -Bègues,3021,227,8.346,0.920,0.833,709,6558 -Creuzier-le-Vieux,3094,3295,11.359,1.073,0.972,732,6564 -Montoldre,3187,638,19.199,1.395,1.263,732,6583 -Billy,3029,781,10.244,1.019,0.923,732,6572 -Saint-Quintin-sur-Sioule,63390,381,14.334,1.205,1.091,708,6554 -Montfuron,4128,216,18.908,1.384,1.253,914,6306 -Saint-Germain-des-Fossés,3236,3694,7.981,0.899,0.814,732,6568 -Cognat-Lyonne,3080,702,12.586,1.129,1.022,720,6556 -Saulzet,3268,389,9.206,0.966,0.875,718,6558 -Bransat,3038,504,15.479,1.252,1.134,716,6584 -Le Montet,3183,467,1.880,0.436,0.395,703,6589 -Tronget,3292,907,31.343,1.782,1.613,706,6596 -Louchy-Montfand,3149,440,5.333,0.735,0.665,719,6578 -Marcillat,63208,280,11.724,1.090,0.987,705,6552 -Besson,3026,771,47.286,2.189,1.982,722,6601 -Contigny,3083,597,17.822,1.344,1.217,727,6582 -Charmes,3061,396,8.331,0.919,0.832,720,6556 -Laféline,3134,203,23.081,1.529,1.384,713,6579 -Saint-Priest-d'Andelot,3255,144,8.245,0.914,0.828,714,6552 -Mane,4111,1358,21.931,1.491,1.350,920,6321 -Charroux,3062,362,10.506,1.032,0.934,715,6564 -Vendat,3304,2199,16.743,1.302,1.179,728,6561 -Sussat,3276,102,7.992,0.900,0.815,703,6562 -Aiglun,6001,89,15.387,1.249,1.131,1015,6311 -Ussel-d'Allier,3294,160,8.096,0.906,0.820,713,6566 -Saint-Germain-de-Salles,3237,424,11.718,1.090,0.987,718,6564 -Veauce,3302,37,3.523,0.597,0.541,706,6563 -Le Mayet-d'École,3164,270,6.886,0.835,0.756,718,6564 -Vicq,3311,330,13.470,1.168,1.058,709,6558 -Voussac,3319,478,34.913,1.881,1.703,702,6579 -Meillard,3169,315,25.862,1.619,1.466,716,6590 -Saint-Pont,3252,644,12.477,1.124,1.018,720,6563 -Champs,63082,396,15.176,1.240,1.123,705,6552 -Biozat,3030,832,16.400,1.289,1.167,723,6552 -Bonson,6021,737,6.667,0.822,0.744,1037,6318 -Bellenaves,3022,1022,34.832,1.879,1.701,702,6565 -Étroussat,3112,636,13.185,1.156,1.047,719,6571 -Chantelle,3053,1064,11.007,1.056,0.956,710,6571 -Saint-Genès-du-Retz,63347,492,8.261,0.915,0.828,716,6550 -Bessay-sur-Allier,3025,1339,34.770,1.877,1.699,725,6594 -Créchy,3091,463,11.936,1.100,0.996,734,6572 -Cressanges,3092,630,42.145,2.066,1.871,716,6591 -Combronde,63116,2182,18.005,1.351,1.223,706,6541 -Saint-Victor-Montvianeix,63402,248,45.105,2.138,1.936,743,6538 -Barberier,3016,143,8.122,0.907,0.821,719,6567 -Loriges,3148,353,9.493,0.981,0.888,726,6576 -Sardon,63406,313,8.403,0.923,0.836,715,6540 -Chaptuzat,63090,493,8.258,0.915,0.828,713,6546 -Volvic,63470,4429,27.710,1.676,1.517,698,6527 -Beaumont-lès-Randan,63033,289,6.033,0.782,0.708,729,6542 -Châteldon,63102,775,28.533,1.700,1.539,743,6544 -Saint-André-le-Coq,63317,524,17.952,1.349,1.221,722,6537 -Villeneuve-les-Cerfs,63459,537,10.003,1.007,0.912,726,6549 -Orléat,63265,2139,26.520,1.639,1.484,737,6530 -Charnat,63095,212,5.302,0.733,0.664,735,6539 -Puy-Guillaume,63291,2743,25.072,1.594,1.443,735,6539 -Mozac,63245,3899,4.018,0.638,0.578,706,6534 -Palladuc,63267,551,13.409,1.166,1.056,753,6538 -Bussières-et-Pruns,63061,438,11.707,1.089,0.986,721,6546 -Maringues,63210,3118,21.972,1.492,1.351,726,6539 -Saint-Myon,63379,469,5.558,0.750,0.679,708,6544 -Limons,63196,739,15.699,1.261,1.142,733,6540 -Bas-et-Lezat,63030,326,12.651,1.132,1.025,721,6546 -Marsat,63212,1322,4.143,0.648,0.587,707,6531 -Arconsat,63008,613,22.630,1.514,1.371,759,6532 -Joze,63180,1103,19.371,1.401,1.268,724,6527 -Saint-Bonnet-près-Riom,63327,2142,7.017,0.843,0.763,711,6537 -Chabreloche,63072,1227,9.668,0.990,0.896,756,6528 -Aigueperse,63001,2720,10.552,1.034,0.936,717,6544 -Varennes-sur-Morge,63443,402,5.074,0.717,0.649,715,6540 -Vollore-Montagne,63468,307,21.184,1.465,1.326,757,6518 -Jozerand,63181,555,10.870,1.049,0.950,708,6549 -La Guillermie,3125,129,12.512,1.126,1.019,752,6540 -Saint-Laure,63372,647,7.161,0.852,0.771,724,6533 -Riom,63300,19029,32.618,1.818,1.646,714,6531 -Lavoine,3141,151,17.485,1.331,1.205,754,6537 -Châteaugay,63099,3179,9.108,0.961,0.870,708,6529 -Randan,63295,1571,15.559,1.256,1.137,731,6548 -Effiat,63143,1113,20.138,1.428,1.293,725,6551 -Yssac-la-Tourette,63473,380,2.150,0.467,0.423,708,6538 -Appeville,50016,177,13.342,1.163,1.053,388,6923 -Bulhon,63058,532,12.517,1.126,1.019,728,6532 -Malauzat,63203,1137,6.002,0.780,0.706,704,6527 -Gimeaux,63167,401,2.193,0.471,0.426,707,6538 -Crevant-Laveine,63128,969,19.826,1.417,1.283,735,6535 -Saint-Beauzire,63322,2141,16.490,1.293,1.171,712,6530 -Chambaron sur Morge,63244,1713,14.048,1.193,1.080,712,6543 -Montcel,63235,487,9.476,0.980,0.887,707,6546 -Saint-Agoulin,63311,334,9.364,0.974,0.882,710,6547 -Enval,63150,1471,4.958,0.709,0.642,702,6533 -Dorat,63138,710,17.481,1.331,1.205,740,6534 -Mariol,3163,795,10.091,1.011,0.915,737,6549 -Paslières,63271,1525,27.932,1.682,1.523,735,6539 -Lachaux,63184,280,22.440,1.508,1.365,746,6540 -Charbonnières-les-Vieilles,63093,1079,32.829,1.824,1.651,698,6546 -Chappes,63089,1667,10.448,1.029,0.932,719,6530 -Ménétrol,63224,1631,9.179,0.964,0.873,712,6528 -Saint-Hilaire-la-Croix,63358,344,16.158,1.280,1.159,702,6551 -Martres-sur-Morge,63215,667,8.388,0.922,0.835,717,6536 -Olmet,63260,162,15.751,1.263,1.144,749,6512 -Le Cheix,63108,641,4.651,0.686,0.621,716,6540 -Sainte-Agathe,63310,190,18.234,1.359,1.230,751,6524 -Surat,63424,567,9.018,0.956,0.866,718,6539 -Noalhat,63253,246,5.156,0.723,0.655,735,6535 -Saint-Clément-de-Régnat,63332,554,14.995,1.233,1.116,721,6546 -Beauregard-Vendon,63035,1172,7.305,0.860,0.779,709,6542 -Artonne,63012,890,17.665,1.338,1.211,708,6544 -Entraigues,63149,655,10.000,1.007,0.912,720,6534 -Thiers,63430,11700,44.784,2.130,1.929,737,6530 -Prompsat,63288,417,4.230,0.655,0.593,706,6537 -Ennezat,63148,2485,18.819,1.381,1.250,717,6536 -Coaraze,6043,837,17.005,1.313,1.189,1047,6320 -Ferrières-sur-Sichon,3113,563,38.601,1.978,1.791,747,6544 -Aubiat,63013,882,14.783,1.224,1.108,713,6541 -Thuret,63432,925,16.702,1.301,1.178,720,6545 -Sauviat,63414,543,15.549,1.255,1.136,741,6515 -Ceilloux,63065,178,9.062,0.958,0.867,740,6508 -Duranus,6055,135,16.068,1.276,1.155,1041,6318 -Aubusson-d'Auvergne,63015,256,6.917,0.837,0.758,749,6518 -Augerolles,63016,894,32.859,1.825,1.652,753,6515 -Cunlhat,63132,1251,29.905,1.741,1.576,746,6501 -Grandval,63174,114,9.818,0.997,0.903,753,6499 -Olliergues,63258,751,16.371,1.288,1.166,746,6511 -Bertignat,63037,455,24.406,1.573,1.424,756,6504 -Escoutoux,63151,1359,27.410,1.666,1.508,746,6524 -Vollore-Ville,63469,758,30.574,1.760,1.594,743,6521 -Marat,63207,823,30.024,1.744,1.579,752,6509 -Cervières,42034,126,7.632,0.879,0.796,757,6529 -Saint-Just-en-Bas,42247,286,20.802,1.452,1.315,768,6518 -Chausseterre,42339,231,16.721,1.302,1.179,756,6535 -Job,63179,1014,42.762,2.082,1.885,760,6508 -Le Brugeron,63057,247,27.597,1.672,1.514,754,6514 -La Chambonie,42045,43,4.456,0.672,0.608,757,6518 -La Valla-sur-Rochefort,42321,107,8.948,0.952,0.862,767,6519 -Chalmazel-Jeansagnière,42039,451,53.144,2.320,2.101,762,6517 -Sauvain,42298,379,30.767,1.766,1.599,763,6507 -Saint-Just-en-Chevalet,42248,1145,29.204,1.720,1.557,761,6536 -La Chamba,42040,51,5.183,0.725,0.656,757,6518 -Champoly,42047,328,15.058,1.235,1.118,767,6526 -Saint-Priest-la-Prugne,42276,435,37.275,1.943,1.759,761,6536 -Valcivières,63441,209,33.045,1.830,1.657,767,6502 -Les Noës,42158,208,15.650,1.259,1.140,764,6546 -Juré,42116,241,12.146,1.109,1.004,772,6529 -Saint-Didier-sur-Rochefort,42217,412,22.727,1.517,1.374,768,6518 -Saint-Jean-la-Vêtre,42238,322,16.230,1.282,1.161,764,6521 -Saint-Priest-la-Vêtre,42278,150,5.215,0.727,0.658,761,6523 -La Côe-en-Couzan,42072,70,9.122,0.961,0.870,763,6517 -Saint-Véran,5157,236,44.734,2.129,1.928,1010,6403 -Sainte-Gemme,17330,1307,41.035,2.039,1.846,397,6523 -Saint-Palais-sur-Mer,17380,3889,15.635,1.259,1.140,377,6516 -Saint-Agnant,17308,2673,22.795,1.520,1.376,396,6539 -Saint-Sulpice-de-Royan,17409,3159,20.975,1.458,1.320,390,6519 -Grues,85104,832,47.548,2.195,1.987,364,6593 -Upaix,5173,450,23.279,1.536,1.391,930,6365 -Triaize,85297,1019,56.887,2.401,2.174,380,6599 -Ceillac,5026,293,96.132,3.121,2.826,995,6401 -Arces,17015,746,26.278,1.632,1.478,398,6505 -Molines-en-Queyras,5077,303,53.502,2.328,2.108,1003,6407 -Corme-Écluse,17119,1111,17.632,1.337,1.211,402,6511 -Tignes,73296,2358,91.344,3.042,2.754,1005,6500 -Breuillet,17064,2847,20.421,1.438,1.302,385,6523 -Bonneval-sur-Arc,73047,258,112.088,3.370,3.051,1022,6478 -Val-d'Isère,73304,1570,107.468,3.300,2.988,1013,6482 -Bessans,73040,345,154.222,3.953,3.579,1012,6482 -La Faute-sur-Mer,85307,658,8.355,0.920,0.833,370,6586 -Le Verdon-sur-Mer,33544,1343,41.032,2.039,1.846,387,6504 -Talmont-sur-Gironde,17437,102,18.162,1.357,1.229,397,6501 -Les Mathes,17225,1962,35.005,1.883,1.705,377,6517 -Meschers-sur-Gironde,17230,3103,28.235,1.691,1.531,389,6501 -Saint-Georges-de-Didonne,17333,5356,16.418,1.290,1.168,391,6510 -Soubise,17429,2966,11.299,1.070,0.969,390,6545 -Le Chay,17097,765,12.246,1.114,1.009,397,6514 -Nancras,17255,789,3.070,0.558,0.505,400,6523 -La Tremblade,17452,4489,63.553,2.538,2.298,379,6531 -Trizay,17453,1480,14.253,1.202,1.088,396,6543 -Le Château-d'Oléron,17093,4174,15.620,1.258,1.139,374,6537 -Médis,17228,2855,23.659,1.548,1.402,389,6514 -Nieulle-sur-Seudre,17265,1236,22.230,1.501,1.359,383,6526 -Saint-Just-Luzac,17351,1981,49.207,2.233,2.022,380,6529 -Royan,17306,18372,19.544,1.407,1.274,391,6510 -Saint-Froult,17329,340,6.486,0.811,0.734,387,6543 -Gœrsdorf,67160,1078,13.174,1.155,1.046,1048,6881 -Chaillevette,17079,1542,9.569,0.985,0.892,383,6520 -Sainte-Radegonde,17389,580,11.295,1.070,0.969,398,6534 -La Gripperie-Saint-Symphorien,17184,596,18.603,1.373,1.243,394,6526 -Saint-Trojan-les-Bains,17411,1323,16.031,1.274,1.153,373,6538 -Arvert,17021,3412,20.321,1.435,1.299,383,6526 -Saint-Augustin,17311,1342,18.590,1.372,1.242,377,6517 -Mornac-sur-Seudre,17247,834,9.769,0.995,0.901,387,6518 -Échillais,17146,3512,15.003,1.233,1.116,396,6543 -Dolus-d'Oléron,17140,3270,28.906,1.711,1.549,373,6543 -Bourcefranc-le-Chapus,17058,3447,12.703,1.134,1.027,382,6537 -L'Éguille,17151,876,5.628,0.755,0.684,391,6517 -Le Gua,17185,2092,37.730,1.955,1.770,393,6525 -Le Grand-Village-Plage,17485,1048,5.956,0.777,0.704,371,6540 -Étaules,17155,2398,12.013,1.103,0.999,384,6525 -Saint-Hippolyte,17346,1402,23.563,1.545,1.399,399,6539 -Saint-Laurent-de-la-Prée,17353,2083,27.631,1.673,1.515,386,6547 -Anais,17007,323,9.522,0.982,0.889,401,6571 -Ars-en-Ré,17019,1312,10.525,1.033,0.935,355,6577 -Angoulins,17010,3880,7.911,0.895,0.810,383,6566 -Port-des-Barques,17484,1788,6.199,0.793,0.718,385,6547 -Loix,17207,715,6.288,0.798,0.723,358,6578 -Loire-les-Marais,17205,382,12.435,1.122,1.016,395,6547 -La Rochelle,17300,75736,30.176,1.749,1.584,376,6574 -Saint-Denis-d'Oléron,17323,1349,11.913,1.099,0.995,362,6554 -Saint-Médard-d'Aunis,17373,2232,22.701,1.517,1.374,391,6571 -Saint-Pierre-d'Oléron,17385,6762,40.487,2.025,1.833,361,6548 -Bourgneuf,17059,1216,2.573,0.511,0.463,389,6570 -Saint-Clément-des-Baleines,17318,628,6.922,0.837,0.758,352,6580 -La Croix-sur-Roudoule,6051,98,29.882,1.740,1.575,1007,6331 -Saint-Nazaire-sur-Charente,17375,1181,19.969,1.422,1.287,388,6543 -Aytré,17028,8706,12.240,1.114,1.009,385,6568 -Saint-Rogatien,17391,2187,5.178,0.724,0.656,385,6567 -Forges,17166,1286,13.704,1.178,1.067,400,6561 -Sainte-Soulle,17407,4401,22.056,1.495,1.354,388,6576 -Ardillières,17018,846,15.992,1.273,1.153,399,6554 -Le Thou,17447,1876,19.378,1.401,1.268,392,6563 -Andilly,17008,2217,28.738,1.706,1.545,391,6584 -Le Bois-Plage-en-Ré,17051,2283,12.247,1.114,1.009,364,6572 -Saint-Xandre,17414,4718,13.492,1.169,1.058,388,6576 -Longèves,17208,955,13.150,1.154,1.045,395,6582 -Montroy,17245,881,4.023,0.638,0.578,389,6570 -Lagord,17200,7100,8.013,0.901,0.816,382,6575 -Thairé,17443,1675,18.835,1.381,1.250,391,6558 -Saint-Georges-d'Oléron,17337,3700,46.571,2.172,1.967,361,6554 -Fouras,17168,4046,9.953,1.004,0.909,385,6547 -L'Houmeau,17190,2842,4.385,0.667,0.604,378,6573 -Rivedoux-Plage,17297,2285,4.849,0.701,0.635,369,6570 -Nuaillé-d'Aunis,17267,1143,16.490,1.293,1.171,400,6578 -Breuil-Magné,17065,1657,22.402,1.507,1.364,391,6555 -Embrun,5046,6174,35.706,1.902,1.722,973,6393 -La Brée-les-Bains,17486,698,7.386,0.865,0.783,362,6554 -Barcugnan,32028,107,9.205,0.966,0.875,489,6254 -Le Brouilh-Monbert,32065,227,12.903,1.143,1.035,490,6286 -Laveraët,32205,108,12.017,1.103,0.999,476,6275 -Clermont-Pouyguillès,32104,157,12.839,1.141,1.033,502,6267 -Saint-Christophe,17315,1364,13.680,1.177,1.066,399,6567 -Vérines,17466,2220,13.534,1.171,1.060,391,6577 -Croix-Chapeau,17136,1240,4.875,0.703,0.637,393,6564 -La Couarde-sur-Mer,17121,1205,8.785,0.943,0.854,355,6577 -Rochefort,17299,24047,22.028,1.494,1.353,395,6547 -La Jarrie,17194,3224,9.550,0.984,0.891,393,6566 -Rabou,5112,76,26.394,1.635,1.480,936,6398 -Sainte-Marie-de-Ré,17360,3373,9.979,1.006,0.911,368,6572 -Les Portes-en-Ré,17286,612,8.100,0.906,0.820,352,6581 -Aigrefeuille-d'Aunis,17003,3958,17.173,1.319,1.194,393,6564 -Nieul-sur-Mer,17264,5767,10.945,1.053,0.953,382,6575 -Périgny,17274,8281,11.009,1.056,0.956,383,6572 -Saint-Apollinaire,5130,141,7.174,0.853,0.772,967,6391 -Angliers,17009,1029,10.851,1.049,0.950,398,6572 -La Roche-des-Arnauds,5123,1514,52.825,2.314,2.095,931,6389 -Vergeroux,17463,1198,5.982,0.779,0.705,391,6551 -ÃŽle-d'Aix,17004,236,1.392,0.376,0.340,374,6553 -Saint-Vivien,17413,1252,8.351,0.920,0.833,385,6562 -Marans,17218,4517,83.898,2.916,2.640,395,6581 -La Taillée,85286,579,11.564,1.082,0.980,399,6596 -La Bâtie-Neuve,5017,2506,27.491,1.669,1.511,951,6391 -L'ÃŽle-d'Elle,85111,1534,19.117,1.392,1.260,399,6587 -Puyravault,85185,672,16.906,1.309,1.185,386,6597 -Le Gué-de-Velluire,85105,546,12.802,1.139,1.031,398,6592 -Chaillé-les-Marais,85042,1909,40.267,2.020,1.829,391,6600 -Beaujeu,4024,133,46.061,2.160,1.956,964,6355 -Charron,17091,1981,35.128,1.887,1.709,384,6582 -Champagné-les-Marais,85049,1757,49.788,2.246,2.034,380,6590 -Châteauneuf-d'Oze,5035,28,26.653,1.643,1.488,935,6383 -Montmaur,5087,517,48.768,2.223,2.013,933,6396 -Rambaud,5113,375,10.695,1.041,0.943,950,6386 -Châteauneuf-Miravail,4051,71,19.634,1.410,1.277,914,6342 -Puy-Sanières,5111,270,11.553,1.082,0.980,975,6389 -Gap,5061,40805,108.770,3.320,3.006,942,6399 -Chabottes,5029,828,10.028,1.008,0.913,950,6398 -Saint-Laurent-du-Cros,5148,531,12.565,1.128,1.021,945,6400 -La Bâtie-Vieille,5018,350,9.104,0.960,0.869,951,6386 -Furmeyer,5060,153,14.229,1.201,1.087,927,6387 -Saint-Léger-les-Mélèzes,5149,344,6.743,0.827,0.749,957,6399 -Montgardin,5084,467,14.897,1.229,1.113,956,6385 -Forest-Saint-Julien,5056,323,6.974,0.841,0.761,948,6399 -Châteauroux-les-Alpes,5036,1171,91.796,3.050,2.762,976,6406 -La Rochette,5124,469,10.306,1.022,0.925,951,6394 -Vaumeilh,4233,259,25.725,1.614,1.461,933,6355 -Esparron,5049,45,24.256,1.568,1.420,929,6378 -Monêtier-Allemont,5078,288,7.511,0.872,0.790,934,6368 -Auzet,4017,98,34.940,1.882,1.704,963,6365 -Faucon-du-Caire,4085,50,20.054,1.425,1.290,944,6372 -Gigors,4093,59,13.795,1.182,1.070,951,6376 -Oze,5099,107,12.064,1.106,1.001,924,6381 -Valserres,5176,262,11.301,1.070,0.969,948,6380 -Sisteron,4209,7341,50.534,2.263,2.049,933,6354 -Lazer,5073,368,22.025,1.494,1.353,928,6369 -Saint-Pierre-Avez,5155,30,11.888,1.097,0.993,923,6353 -La Saulce,5162,1516,7.452,0.869,0.787,941,6376 -Fouillouse,5057,241,7.522,0.873,0.790,937,6377 -Théus,5171,201,16.534,1.294,1.172,952,6381 -Thèze,4216,233,11.231,1.067,0.966,932,6364 -Val Buëch-Méouge,5118,1352,69.828,2.660,2.408,921,6360 -Valernes,4231,253,28.771,1.707,1.546,933,6354 -Le Lauzet-Ubaye,4102,198,67.322,2.612,2.365,970,6372 -Pontis,4154,84,16.107,1.277,1.156,965,6385 -Piégut,4150,178,11.112,1.061,0.961,951,6379 -Saint-Geniez,4179,94,38.928,1.986,1.798,949,6352 -Vitrolles,5184,205,14.500,1.212,1.097,937,6372 -Entrepierres,4075,380,48.557,2.218,2.008,948,6350 -Chabestan,5028,133,12.328,1.118,1.012,919,6380 -Ventavon,5178,548,42.374,2.072,1.876,932,6364 -Sigoyer,4207,105,15.403,1.249,1.131,933,6360 -Saint-Martin-lès-Seyne,4191,13,12.216,1.113,1.008,957,6370 -Savournon,5165,255,39.476,2.000,1.811,927,6375 -Laragne-Montéglin,5070,3485,22.705,1.517,1.374,927,6360 -Châteauvieux,5037,488,7.154,0.851,0.771,943,6379 -Turriers,4222,321,19.993,1.423,1.288,950,6369 -Mison,4123,1117,31.641,1.791,1.622,929,6359 -Saint-Étienne-le-Laus,5140,288,8.618,0.934,0.846,949,6385 -Le Poët,5103,804,15.184,1.240,1.123,933,6360 -Venterol,4234,249,22.647,1.515,1.372,943,6377 -Le Caire,4037,68,17.699,1.339,1.212,947,6367 -Claret,4058,268,20.972,1.458,1.320,937,6372 -Lettret,5074,177,4.221,0.654,0.592,945,6380 -Barcillonnette,5013,143,19.705,1.413,1.279,932,6372 -Seyne,4205,1348,86.313,2.957,2.677,970,6372 -Bayons,4023,180,126.407,3.579,3.240,960,6365 -Hautes-Duyes,4177,43,23.068,1.529,1.384,953,6352 -Nibles,4137,43,12.341,1.118,1.012,938,6358 -Curbans,4066,576,29.088,1.717,1.555,941,6376 -Rochebrune,5121,168,12.093,1.107,1.002,956,6379 -Tallard,5170,2168,14.486,1.212,1.097,943,6377 -Clamensane,4057,174,23.939,1.557,1.410,945,6367 -Authon,4016,57,40.294,2.021,1.830,955,6353 -La Robine-sur-Galabre,4167,306,56.432,2.391,2.165,960,6354 -Le Saix,5158,102,22.397,1.506,1.364,923,6380 -Garde-Colombe,5053,549,34.827,1.878,1.700,919,6362 -Le Vernet,4237,130,23.263,1.535,1.390,976,6362 -Châteaufort,4050,29,13.812,1.183,1.071,939,6356 -Selonnet,4203,451,29.754,1.736,1.572,960,6365 -Neffes,5092,741,8.457,0.926,0.838,941,6385 -Valavoire,4228,42,16.732,1.302,1.179,945,6355 -Orpierre,5097,352,27.451,1.668,1.510,919,6362 -Villebois-les-Pins,26374,19,10.739,1.043,0.944,906,6363 -Barret-de-Lioure,26026,80,34.871,1.880,1.702,905,6345 -Redortiers,4159,80,46.094,2.161,1.957,907,6339 -Aspres-sur-Buëch,5010,830,42.613,2.078,1.881,919,6380 -Chanousse,5033,40,20.495,1.441,1.305,911,6364 -Sainte-Colombe,5135,56,17.219,1.321,1.196,910,6359 -Salérans,5160,92,13.976,1.190,1.077,914,6356 -Montclus,5081,60,21.429,1.474,1.335,913,6375 -L'Épine,5048,193,33.579,1.845,1.670,911,6375 -Ballons,26022,83,17.095,1.316,1.192,914,6356 -Ribeyret,5117,109,17.985,1.350,1.222,906,6374 -Saint-André-de-Rosans,5129,148,37.097,1.939,1.756,905,6363 -Serres,5166,1293,18.428,1.366,1.237,917,6370 -Nossage-et-Bénévent,5094,15,4.361,0.665,0.602,920,6359 -Valdrôme,26361,146,41.166,2.042,1.849,903,6384 -Ongles,4141,371,31.708,1.792,1.623,921,6325 -Saumane,4201,115,3.224,0.572,0.518,915,6335 -Moydans,5091,45,10.544,1.034,0.936,898,6373 -Banon,4018,970,39.953,2.012,1.822,915,6332 -Lardiers,4101,119,30.211,1.750,1.584,915,6335 -Montfroc,26200,75,14.791,1.224,1.108,912,6347 -Montjay,5086,104,27.077,1.656,1.499,906,6369 -Séderon,26340,267,20.418,1.438,1.302,908,6347 -Val-Maravel,26136,57,21.012,1.459,1.321,907,6389 -Lurs,4106,383,22.464,1.509,1.366,933,6321 -Curel,4067,57,10.645,1.039,0.941,915,6344 -L'Hospitalet,4095,90,19.633,1.410,1.277,918,6340 -La Piarre,5102,92,22.000,1.493,1.352,909,6381 -Montrond,5089,68,4.406,0.668,0.605,919,6367 -La Haute-Beaume,5066,9,7.181,0.853,0.772,907,6389 -Les Prés,26255,23,16.248,1.283,1.162,907,6383 -Montbrand,5080,64,25.409,1.605,1.453,908,6391 -La Rochegiron,4169,97,30.157,1.748,1.583,912,6342 -Barret-sur-Méouge,5014,220,26.311,1.633,1.479,918,6351 -Archail,4009,15,12.982,1.147,1.039,964,6338 -Andance,7009,1177,6.630,0.820,0.742,841,6463 -Sainte-Tulle,4197,3409,17.083,1.316,1.192,919,6303 -Mirabeau,4122,511,19.054,1.389,1.258,946,6337 -Bevons,4027,235,11.407,1.075,0.973,932,6344 -Les Salles-sur-Verdon,83122,255,12.829,1.140,1.032,956,6301 -Entrevennes,4077,165,29.900,1.741,1.576,944,6317 -La Palud-sur-Verdon,4144,344,81.700,2.877,2.605,972,6299 -Aiglun,4001,1412,14.650,1.218,1.103,949,6334 -Valensole,4230,3195,127.836,3.599,3.259,942,6306 -Tartonne,4214,136,45.284,2.142,1.939,974,6333 -Revest-Saint-Martin,4164,77,7.563,0.875,0.792,928,6328 -Senez,4204,167,71.212,2.686,2.432,969,6319 -Puimoisson,4157,739,35.524,1.897,1.718,951,6309 -Rougon,4171,105,35.994,1.910,1.729,977,6306 -Montagnac-Montpezat,4124,421,35.080,1.885,1.707,949,6297 -Aubignosc,4013,586,15.016,1.233,1.116,933,6340 -Beynes,4028,128,41.250,2.044,1.851,961,6321 -Bras-d'Asse,4031,574,26.245,1.631,1.477,950,6316 -Mallefougasse-Augès,4109,326,19.486,1.405,1.272,935,6335 -Brunet,4035,267,28.830,1.709,1.547,941,6316 -Sainte-Croix-du-Verdon,4176,119,19.878,1.419,1.285,957,6303 -Digne-les-Bains,4070,16186,109.710,3.334,3.019,961,6347 -Chaudon-Norante,4055,184,37.633,1.953,1.768,969,6325 -Barras,4021,138,20.964,1.457,1.319,949,6334 -Les Mées,4116,3700,64.679,2.560,2.318,933,6321 -Estoublon,4084,483,34.406,1.867,1.690,956,6324 -Champtercier,4047,818,18.732,1.378,1.248,953,6336 -Montlaux,4130,192,19.833,1.418,1.284,925,6332 -Ganagobie,4091,91,10.573,1.035,0.937,932,6329 -Saint-Jurs,4184,138,33.538,1.843,1.669,961,6316 -Puimichel,4156,232,36.870,1.933,1.750,941,6321 -Fontienne,4087,129,8.215,0.912,0.826,925,6327 -Riez,4166,1848,40.357,2.022,1.831,944,6308 -L'Escale,4079,1399,20.285,1.434,1.298,940,6333 -Draix,4072,118,23.145,1.531,1.386,966,6344 -Allemagne-en-Provence,4004,529,33.125,1.832,1.659,942,6301 -Moustiers-Sainte-Marie,4135,701,90.444,3.027,2.741,961,6306 -Le Chaffaut-Saint-Jurson,4046,696,29.417,1.726,1.563,953,6327 -Volonne,4244,1648,25.256,1.600,1.449,942,6338 -Peyruis,4149,2867,23.344,1.538,1.393,938,6331 -Saint-Martin-de-Brômes,4189,571,21.271,1.468,1.329,942,6306 -Clumanc,4059,211,53.962,2.338,2.117,967,6334 -Le Brusquet,4036,957,22.296,1.503,1.361,961,6347 -Manosque,4112,21868,56.726,2.397,2.170,919,6310 -Salignac,4200,633,14.387,1.207,1.093,936,6344 -Pierrerue,4151,479,11.008,1.056,0.956,927,6325 -Niozelles,4138,273,10.603,1.036,0.938,931,6318 -Majastres,4107,4,30.180,1.749,1.584,960,6319 -Blieux,4030,61,58.229,2.429,2.199,975,6314 -Sourribes,4211,179,20.061,1.426,1.291,947,6346 -Oraison,4143,5917,38.671,1.979,1.792,938,6320 -Peipin,4145,1468,13.481,1.169,1.058,938,6342 -Châteauneuf-Val-Saint-Donat,4053,506,21.207,1.466,1.327,931,6339 -Gréoux-les-Bains,4094,2611,69.582,2.655,2.404,935,6300 -Saint-Lions,4187,52,11.559,1.082,0.980,975,6325 -Entrages,4074,106,22.620,1.514,1.371,963,6328 -La Brillanne,4034,1142,6.936,0.838,0.759,930,6320 -Forcalquier,4088,4966,43.297,2.094,1.896,921,6325 -Saint-Julien-d'Asse,4182,204,25.694,1.613,1.460,947,6324 -Châteauredon,4054,72,10.643,1.038,0.940,957,6331 -Saint-Martin-d'Entraunes,6125,131,39.665,2.005,1.815,998,6342 -Saint-Jacques,4180,71,4.702,0.690,0.625,972,6326 -La Motte-d'Aigues,84084,1339,14.671,1.219,1.104,903,6297 -Castellet-lès-Sausses,4042,134,54.484,2.350,2.128,996,6335 -Vachères,4227,274,23.558,1.545,1.399,912,6324 -Valderoure,6154,441,25.257,1.600,1.449,1003,6308 -Braux,4032,123,11.771,1.092,0.989,998,6328 -Ubraye,4224,88,35.768,1.904,1.724,999,6321 -Séranon,6134,506,23.241,1.535,1.390,999,6301 -Simiane-la-Rotonde,4208,594,68.076,2.626,2.378,902,6319 -Vitrolles-en-Lubéron,84151,182,16.087,1.277,1.156,909,6302 -Pierrevert,4152,3743,27.861,1.680,1.521,923,6305 -Villemus,4241,185,9.654,0.989,0.895,917,6309 -Montjustin,4129,57,10.176,1.015,0.919,917,6309 -Oppedette,4142,50,8.593,0.933,0.845,909,6320 -Aubenas-les-Alpes,4012,101,7.973,0.899,0.814,916,6320 -Sainte-Croix-à-Lauze,4175,86,8.684,0.938,0.849,908,6313 -Gignac,84048,67,8.146,0.908,0.822,902,6319 -Revest-des-Brousses,4162,270,23.051,1.528,1.383,914,6320 -Saint-André-les-Alpes,4173,1008,49.179,2.232,2.021,983,6320 -La Bastide,83013,199,11.818,1.094,0.991,993,6303 -Demandolx,4069,135,20.535,1.442,1.306,990,6312 -Le Fugeret,4090,195,28.419,1.697,1.536,989,6330 -La Mure-Argens,4136,330,34.976,1.883,1.705,983,6336 -Châteauvieux,83040,87,14.839,1.226,1.110,989,6307 -La Garde,4092,75,16.790,1.304,1.181,986,6312 -Dambach-la-Ville,67084,2154,29.277,1.722,1.559,1023,6810 -Brenon,83022,31,5.793,0.766,0.694,984,6301 -Lambruisse,4099,98,21.963,1.492,1.351,977,6330 -Allons,4005,149,41.971,2.062,1.867,987,6323 -Saint-Julien-du-Verdon,4183,146,7.512,0.872,0.790,985,6320 -Geffosses,50198,434,16.936,1.310,1.186,365,6904 -Vergons,4236,112,45.994,2.159,1.955,987,6317 -Angles,4007,66,9.988,1.006,0.911,987,6323 -Annot,4008,1046,29.881,1.740,1.575,994,6321 -Moriez,4133,231,37.375,1.946,1.762,976,6329 -Peyroules,4148,234,33.434,1.841,1.667,993,6306 -La Martre,83074,213,20.707,1.448,1.311,993,6305 -Colmars,4061,463,81.694,2.877,2.605,997,6354 -Enchastrayes,4073,394,44.543,2.124,1.923,996,6374 -Thorame-Haute,4219,237,109.568,3.332,3.017,984,6345 -Castellane,4039,1547,122.132,3.518,3.185,985,6304 -Thorame-Basse,4218,222,98.629,3.161,2.862,974,6341 -Soleilhas,4210,110,34.668,1.874,1.697,995,6317 -La Condamine-Châtelard,4062,158,56.636,2.396,2.169,989,6383 -Baratier,5012,593,15.860,1.268,1.148,978,6389 -Méolans-Revel,4161,337,128.007,3.601,3.260,985,6378 -Doville,50166,318,11.307,1.070,0.969,367,6926 -Prads-Haute-Bléone,4155,184,166.901,4.112,3.723,977,6362 -Les Orres,5098,575,73.831,2.735,2.476,985,6378 -Faucon-de-Barcelonnette,4086,304,17.127,1.317,1.192,993,6378 -Les Thuiles,4220,395,32.684,1.820,1.648,983,6366 -Uvernet-Fours,4226,584,135.696,3.708,3.357,998,6357 -Saint-André-d'Embrun,5128,646,38.668,1.979,1.792,989,6393 -Vars,5177,527,90.796,3.033,2.746,989,6393 -Villars-Colmars,4240,252,41.024,2.039,1.846,988,6347 -Allos,4006,747,117.212,3.446,3.120,983,6365 -Crévoux,5044,135,54.445,2.349,2.127,992,6385 -Barcelonnette,4019,2610,16.632,1.298,1.175,992,6372 -Remilly Les Marais,50431,1098,22.269,1.502,1.360,388,6909 -Amigny,50006,143,3.724,0.614,0.556,395,6902 -Saint-Martin-d'Aubigny,50510,595,15.144,1.239,1.122,383,6903 -Le Mesnil-Eury,50310,176,3.499,0.595,0.539,391,6902 -Montreuil-sur-Lozon,50352,328,6.492,0.811,0.734,390,6903 -Le Mesnil,50299,218,3.509,0.596,0.540,360,6930 -La Feuillie,50182,270,12.449,1.123,1.017,374,6910 -Muneville-le-Bingard,50364,688,20.102,1.427,1.292,371,6901 -Sénoville,50572,207,7.305,0.860,0.779,353,6935 -Pierreville,50401,728,10.257,1.019,0.923,356,6940 -Sotteville,50580,467,6.225,0.794,0.719,355,6950 -Helleville,50240,513,5.995,0.779,0.705,355,6952 -Surtainville,50585,1192,14.662,1.219,1.104,352,6941 -Saint-Maurice-en-Cotentin,50522,258,7.590,0.877,0.794,358,6934 -La Haye-d'Ectot,50235,247,7.360,0.864,0.782,358,6930 -Saint-Sauveur-de-Pierrepont,50548,133,8.235,0.913,0.827,363,6924 -Héauville,50238,474,11.112,1.061,0.961,355,6953 -Saint-Martin-le-Gréard,50519,489,2.889,0.541,0.490,365,6949 -Rauville-la-Bigot,50425,1149,17.390,1.327,1.201,365,6948 -Martinvast,50294,1255,10.387,1.026,0.929,363,6952 -Canville-la-Rocque,50097,132,5.424,0.741,0.671,363,6925 -Bricquebec-en-Cotentin,50082,5939,77.772,2.807,2.541,357,6941 -Saint-Nicolas-de-Pierrepont,50528,303,8.162,0.909,0.823,366,6925 -Grosville,50222,788,13.803,1.183,1.071,360,6944 -Les Moitiers-d'Allonne,50332,675,17.455,1.330,1.204,350,6935 -Nouainville,50382,577,3.831,0.623,0.564,362,6956 -Saint-Christophe-du-Foc,50454,431,3.628,0.606,0.549,355,6950 -Barneville-Carteret,50031,2227,10.489,1.031,0.933,356,6930 -Neuville-en-Beaumont,50374,39,1.702,0.415,0.376,367,6926 -Teurthéville-Hague,50594,1047,12.784,1.138,1.030,355,6950 -Flamanville,50184,1742,7.760,0.887,0.803,350,6948 -Breuville,50079,421,8.596,0.933,0.845,360,6946 -Benoîtville,50045,622,8.470,0.926,0.838,355,6945 -Sottevast,50579,1352,11.057,1.058,0.958,369,6945 -Le Rozel,50442,253,5.649,0.757,0.685,352,6942 -Couville,50149,1125,8.675,0.938,0.849,363,6948 -Bricquebosq,50083,585,8.220,0.913,0.827,360,6949 -Bassemberg,67022,255,1.894,0.438,0.397,1016,6812 -Les Pieux,50402,3225,15.650,1.259,1.140,353,6947 -Saint-Pierre-d'Arthéglise,50536,131,5.472,0.745,0.675,362,6936 -Besneville,50049,666,18.449,1.367,1.238,363,6928 -Fierville-les-Mines,50183,335,7.536,0.874,0.791,362,6933 -Saint-Jacques-de-Néhou,50486,600,21.660,1.481,1.341,366,6937 -Baubigny,50033,146,6.473,0.810,0.733,353,6935 -Saint-Jean-de-la-Rivière,50490,347,3.666,0.609,0.551,354,6928 -Sideville,50575,703,7.691,0.883,0.799,363,6955 -Rocheville,50435,616,10.207,1.017,0.921,369,6942 -Hardinvast,50230,874,7.342,0.862,0.780,362,6952 -Sortosville-en-Beaumont,50577,316,10.318,1.022,0.925,358,6934 -Taillepied,50587,23,2.187,0.471,0.426,367,6927 -Saint-Jean-de-Daye,50488,623,4.242,0.656,0.594,397,6912 -Pont-Hébert,50409,2042,30.322,1.753,1.587,397,6901 -Magneville,50285,339,9.731,0.993,0.899,372,6938 -Rampan,50423,206,4.150,0.648,0.587,398,6900 -Tamerville,50588,652,18.216,1.359,1.230,378,6944 -Cavigny,50106,257,6.884,0.835,0.756,400,6906 -Tournefort,6146,164,9.901,1.002,0.907,1031,6326 -Le Mesnil-Véneron,50324,129,2.866,0.539,0.488,398,6910 -Saint-Patrice-de-Claids,50533,172,5.691,0.759,0.687,378,6911 -Saint-André-de-Bohon,50445,337,10.489,1.031,0.933,392,6915 -Bretteville-sur-Ay,50078,384,9.960,1.005,0.910,365,6916 -Le Broc,6025,1409,18.737,1.378,1.248,1032,6309 -Raids,50422,187,6.794,0.830,0.751,385,6910 -Saint-Sébastien-de-Raids,50552,340,5.232,0.728,0.659,380,6909 -Millières,50328,788,20.382,1.437,1.301,375,6905 -Lessay,50267,2246,29.596,1.732,1.568,367,6912 -Nay,50368,72,2.541,0.507,0.459,381,6912 -Périers,50394,2301,14.620,1.217,1.102,378,6911 -Marchésieux,50289,720,19.898,1.420,1.286,388,6910 -Gonfreville,50208,149,9.044,0.957,0.866,381,6912 -Terre-et-Marais,50564,1282,35.658,1.901,1.721,388,6911 -Saint-Germain-sur-Ay,50481,910,14.753,1.223,1.107,367,6912 -Graignes-Mesnil-Angot,50216,793,18.446,1.367,1.238,391,6912 -Laulne,50265,185,9.061,0.958,0.867,377,6916 -Gorges,50210,348,22.863,1.522,1.378,383,6919 -Saint-Germain-sur-Sèves,50482,180,8.300,0.917,0.830,379,6911 -Auxais,50024,173,7.905,0.895,0.810,388,6912 -Méautis,50298,647,17.111,1.317,1.192,384,6917 -Fresville,50194,365,14.030,1.192,1.079,387,6936 -Yvetot-Bocage,50648,1126,12.207,1.112,1.007,375,6942 -Saint-Joseph,50498,793,9.835,0.998,0.904,373,6944 -Rauville-la-Place,50426,381,12.044,1.105,1.000,375,6928 -Montsenelle,50273,1398,43.287,2.094,1.896,382,6922 -Fermanville,50178,1286,11.807,1.094,0.991,380,6962 -Crasville,50150,254,7.316,0.861,0.780,385,6949 -Sauze,6133,74,27.530,1.670,1.512,1001,6338 -Videcosville,50634,80,2.551,0.508,0.460,383,6949 -Picauville,50400,3301,65.106,2.568,2.325,380,6936 -La Bonneville,50064,194,6.387,0.804,0.728,376,6928 -Montebourg,50341,2085,5.884,0.772,0.699,381,6943 -Hiesville,50246,62,4.039,0.640,0.579,391,6926 -Hémevez,50241,181,4.313,0.661,0.598,379,6939 -Sainte-Geneviève,50469,320,5.007,0.712,0.645,387,6960 -Néhou,50370,618,16.205,1.281,1.160,368,6932 -Brix,50087,2127,32.236,1.807,1.636,370,6946 -Saint-Germain-de-Tournebut,50478,428,13.880,1.186,1.074,382,6948 -Anneville-en-Saire,50013,394,6.079,0.785,0.711,389,6956 -Brillevast,50086,326,9.165,0.964,0.873,383,6957 -L'Étang-Bertrand,50176,338,8.861,0.948,0.858,367,6941 -Neuville-au-Plain,50373,91,4.701,0.690,0.625,384,6934 -Joganville,50258,106,2.860,0.538,0.487,384,6939 -Morville,50360,265,7.200,0.854,0.773,375,6940 -Orglandes,50387,366,9.380,0.975,0.883,377,6936 -Azeville,50026,90,3.025,0.554,0.502,389,6937 -Saint-Germain-de-Varreville,50479,115,5.900,0.773,0.700,390,6933 -Le Vicel,50633,126,4.780,0.696,0.630,387,6957 -Négreville,50369,803,11.600,1.084,0.981,370,6945 -Catteville,50105,103,4.642,0.686,0.621,370,6926 -Écausseville,50169,100,5.259,0.730,0.661,383,6939 -Le Ham,50227,309,3.853,0.625,0.566,380,6936 -Sébeville,50571,32,2.889,0.541,0.490,388,6930 -Colomby,50138,528,11.352,1.072,0.971,376,6936 -Bretteville,50077,1092,5.808,0.767,0.694,375,6961 -Varouville,50618,266,4.215,0.654,0.592,383,6960 -Le Plessis-Lastelle,50405,241,15.002,1.233,1.116,380,6919 -La Haye,50236,4020,64.618,2.559,2.317,365,6923 -Puget-Théniers,6099,1900,21.344,1.471,1.332,1012,6322 -Clitourps,50135,200,6.398,0.805,0.729,383,6957 -Auvers,50023,675,18.944,1.385,1.254,384,6917 -Neufmesnil,50372,200,5.326,0.735,0.665,369,6922 -Barfleur,50030,577,0.612,0.249,0.225,393,6960 -Canteloup,50096,215,4.327,0.662,0.599,386,6957 -Audouville-la-Hubert,50021,82,6.416,0.806,0.730,396,6934 -Quinéville,50421,279,4.653,0.687,0.622,387,6942 -Liesville-sur-Douve,50269,204,5.307,0.733,0.664,385,6927 -Ozeville,50390,156,4.764,0.695,0.629,386,6943 -Gonneville-Le Theil,50209,1574,29.412,1.726,1.563,379,6952 -Crosville-sur-Douve,50156,63,4.123,0.646,0.585,375,6928 -Éroudeville,50175,236,4.926,0.706,0.639,381,6938 -Vaudreville,50621,72,3.048,0.556,0.503,385,6945 -Beuzeville-la-Bastille,50052,145,4.389,0.667,0.604,384,6927 -La Pernelle,50395,254,7.240,0.856,0.775,385,6953 -Saussemesnil,50567,897,21.655,1.481,1.341,374,6953 -Saint-Martin-d'Audouville,50511,133,3.644,0.608,0.550,383,6946 -Baupte,50036,432,2.329,0.486,0.440,384,6921 -Réville,50433,1051,10.693,1.041,0.943,393,6958 -Le Mesnil-au-Val,50305,728,13.504,1.170,1.059,372,6952 -Octeville-l'Avenel,50384,216,6.924,0.838,0.759,385,6949 -Golleville,50207,174,6.573,0.816,0.739,371,6936 -Étienville,50177,373,7.449,0.869,0.787,376,6928 -Vicq-sur-Mer,50142,1027,20.694,1.448,1.311,380,6961 -Reigneville-Bocage,50430,39,2.299,0.483,0.437,374,6933 -Fontenay-sur-Mer,50190,180,8.238,0.914,0.828,387,6942 -Émondeville,50172,356,5.358,0.737,0.667,386,6939 -Turqueville,50609,147,5.262,0.730,0.661,392,6931 -Teurthéville-Bocage,50593,593,21.703,1.483,1.343,382,6955 -Théville,50596,319,7.917,0.896,0.811,380,6957 -Valognes,50615,6779,15.811,1.266,1.146,374,6946 -Huberville,50251,369,5.756,0.764,0.692,378,6941 -Sortosville,50578,93,2.463,0.500,0.453,379,6939 -Moulinet,6086,281,40.983,2.038,1.845,1051,6328 -Sainte-Colombe,50457,216,5.021,0.713,0.646,374,6933 -Flottemanville,50186,185,4.873,0.703,0.637,377,6938 -Marie,6080,104,14.635,1.218,1.103,1037,6336 -Carneville,50101,236,6.956,0.840,0.761,378,6960 -Andon,6003,589,54.360,2.347,2.125,1011,6304 -Maupertus-sur-Mer,50296,220,3.443,0.591,0.535,377,6961 -Digosville,50162,1520,9.358,0.974,0.882,374,6958 -Saint-Cyr,50461,185,5.683,0.759,0.687,381,6943 -Lieusaint,50270,427,5.282,0.732,0.663,375,6940 -Saint-Martin-de-Varreville,50517,188,8.404,0.923,0.836,391,6932 -Saint-Sauveur-le-Vicomte,50551,2166,34.489,1.869,1.692,371,6932 -Lestre,50268,247,7.738,0.885,0.801,385,6946 -Urville,50610,207,5.206,0.726,0.657,380,6936 -Saint-Pierre-Église,50539,1799,8.137,0.908,0.822,384,6962 -Hautteville-Bocage,50233,152,4.274,0.658,0.596,377,6936 -Ilonse,6072,193,40.612,2.029,1.837,1028,6330 -Tocqueville,50598,282,5.914,0.774,0.701,387,6960 -Sallagriffon,6131,47,9.616,0.987,0.894,1016,6317 -Valcanville,50613,410,6.523,0.813,0.736,389,6958 -Montaigu-la-Brisette,50335,509,14.708,1.221,1.106,379,6952 -Montfarville,50342,811,5.419,0.741,0.671,391,6959 -Levens,6075,4703,29.678,1.734,1.570,1037,6315 -Saint-Floxel,50467,491,8.448,0.925,0.838,386,6939 -Beausoleil,6012,13884,2.787,0.531,0.481,1055,6305 -Falicon,6060,1978,4.940,0.707,0.640,1043,6306 -Bézaudun-les-Alpes,6017,242,21.623,1.480,1.340,1033,6308 -Tourrette-Levens,6147,4919,16.532,1.294,1.172,1046,6305 -Roubion,6110,120,26.975,1.653,1.497,1021,6348 -Daluis,6053,146,39.593,2.003,1.814,1009,6334 -Tende,6163,2184,177.210,4.237,3.836,1074,6347 -La Rochette,4170,67,18.681,1.376,1.246,1013,6318 -Bendejun,6014,955,6.290,0.798,0.723,1044,6311 -Amirat,6002,73,12.964,1.146,1.038,1008,6321 -Bischoffsheim,67045,3332,12.342,1.118,1.012,1029,6830 -Cantaron,6031,1322,7.315,0.861,0.780,1049,6308 -Péone,6094,798,48.437,2.215,2.005,1010,6349 -Puget-Rostang,6098,131,22.394,1.506,1.364,1016,6335 -Castillon,6036,373,7.558,0.875,0.792,1060,6316 -Menton,6083,28486,14.209,1.200,1.086,1060,6308 -Villeneuve-d'Entraunes,6160,74,27.979,1.684,1.525,1000,6339 -Breil-sur-Roya,6023,2166,81.863,2.880,2.608,1057,6325 -Sainte-Agnès,6113,1271,9.455,0.979,0.886,1057,6310 -Entrevaux,4076,869,60.858,2.483,2.248,999,6321 -La Tour,6144,573,36.274,1.917,1.736,1036,6323 -Belvédère,6013,674,75.346,2.763,2.502,1047,6332 -Cartigny-l'Épinay,14138,301,10.494,1.031,0.933,406,6910 -Tourette-du-Château,6145,128,9.614,0.987,0.894,1032,6315 -Toudon,6141,338,18.489,1.369,1.240,1033,6320 -Gars,6063,71,15.420,1.250,1.132,1006,6312 -Bouyon,6022,516,12.386,1.120,1.014,1033,6313 -Saint-Blaise,6117,1013,7.969,0.899,0.814,1038,6309 -Val-de-Chalvagne,4043,88,32.658,1.819,1.647,1004,6317 -Thiéry,6139,107,21.977,1.492,1.351,1020,6326 -Beuil,6016,510,74.526,2.748,2.488,1013,6351 -Guillaumes,6071,636,86.456,2.960,2.680,1006,6342 -Sausses,4202,124,14.905,1.229,1.113,1005,6329 -Sospel,6136,3815,62.328,2.513,2.275,1053,6322 -Villars-sur-Var,6158,757,25.429,1.605,1.453,1027,6330 -Roure,6111,200,39.652,2.004,1.814,1028,6347 -Saint-Jeannet,6122,4099,14.586,1.216,1.101,1037,6303 -Fontan,6062,352,49.506,2.240,2.028,1067,6336 -La Turbie,6150,3105,7.382,0.865,0.783,1053,6305 -Utelle,6151,853,67.838,2.622,2.374,1037,6316 -Gorbio,6067,1468,7.045,0.845,0.765,1060,6308 -Carros,6033,11614,15.421,1.250,1.132,1038,6309 -Venanson,6156,157,17.966,1.349,1.221,1037,6336 -Touët-sur-Var,6143,673,14.412,1.208,1.094,1019,6323 -Caussols,6037,274,27.661,1.674,1.516,1011,6304 -Ascros,6005,166,17.465,1.330,1.204,1025,6321 -Lantosque,6074,1313,44.720,2.129,1.928,1051,6325 -Lieuche,6076,45,13.136,1.154,1.045,1022,6328 -Cap-d'Ail,6032,4658,2.134,0.465,0.421,1054,6302 -Aspremont,6006,2144,9.273,0.969,0.877,1042,6304 -Saint-André-de-la-Roche,6114,5340,2.846,0.537,0.486,1045,6303 -La Trinité,6149,10083,14.758,1.223,1.107,1053,6306 -Colomars,6046,3397,6.220,0.794,0.719,1038,6305 -Châteauneuf-Villevieille,6039,922,8.414,0.923,0.836,1045,6307 -Saint-Léger,6124,57,4.511,0.676,0.612,1008,6329 -Roquebrune-Cap-Martin,6104,12903,9.486,0.980,0.887,1056,6306 -Vence,6157,18599,39.401,1.998,1.809,1033,6301 -Saint-Martin-Vésubie,6127,1394,97.634,3.145,2.848,1042,6337 -Auvare,6008,32,17.957,1.349,1.221,1012,6326 -Saint-Auban,6116,227,42.749,2.081,1.884,998,6313 -La Penne,6093,229,17.976,1.350,1.222,1017,6319 -Peille,6091,2365,42.805,2.083,1.886,1058,6313 -Peillon,6092,1470,8.678,0.938,0.849,1049,6306 -Bairols,6009,104,15.051,1.235,1.118,1032,6328 -Roquestéron,6106,583,6.338,0.801,0.725,1025,6315 -Conségudes,6047,103,12.513,1.126,1.019,1025,6315 -Drap,6054,4508,5.498,0.746,0.675,1048,6305 -Lucéram,6077,1285,65.178,2.570,2.327,1045,6325 -Brando,2B043,1613,22.166,1.499,1.357,1225,6210 -La Roquette-sur-Var,6109,923,4.199,0.652,0.590,1039,6311 -Courmes,6049,125,15.884,1.269,1.149,1021,6305 -Malaussène,6078,308,19.457,1.404,1.271,1036,6319 -Touët-de-l'Escarène,6142,285,4.588,0.682,0.617,1050,6315 -Cuébris,6052,168,22.969,1.526,1.382,1021,6319 -Caille,6028,436,16.999,1.312,1.188,999,6305 -Castagniers,6034,1596,6.984,0.841,0.761,1038,6309 -Briançonnet,6024,222,24.579,1.578,1.429,999,6316 -Contes,6048,7420,19.522,1.406,1.273,1050,6311 -Saorge,6132,461,84.550,2.927,2.650,1054,6335 -Les Ferres,6061,106,13.803,1.183,1.071,1032,6315 -Valdeblore,6153,851,92.987,3.069,2.779,1039,6338 -Farinole,2B109,217,14.792,1.224,1.108,1223,6204 -Saint-Martin-du-Var,6126,2940,4.876,0.703,0.637,1037,6312 -Sarras,7308,2147,11.594,1.084,0.981,837,6455 -Saint-Dalmas-le-Selvage,6119,122,80.951,2.864,2.593,1008,6368 -Luri,2B152,829,27.580,1.672,1.514,1229,6220 -La Brigue,6162,698,93.464,3.077,2.786,1072,6333 -Val d'Oronaye,4120,118,110.921,3.352,3.035,1001,6379 -Entraunes,6056,128,80.044,2.848,2.579,1005,6354 -Jausiers,4096,1129,108.283,3.312,2.999,1008,6369 -Hettenschlag,68136,334,7.695,0.883,0.799,1033,6775 -Centuri,2B086,221,8.601,0.934,0.846,1217,6228 -Santa-Maria-di-Lota,2B309,1718,13.215,1.157,1.048,1229,6204 -Ersa,2B107,152,20.324,1.435,1.299,1222,6233 -Pino,2B233,158,7.225,0.856,0.775,1221,6222 -Nonza,2B178,73,8.447,0.925,0.838,1220,6211 -San-Martino-di-Lota,2B305,2906,9.573,0.985,0.892,1224,6204 -Rogliano,2B261,568,26.732,1.646,1.490,1222,6233 -Barrettali,2B030,132,18.248,1.360,1.231,1222,6215 -Bray-Dunes,59107,4541,8.587,0.933,0.845,665,7107 -Sisco,2B281,1145,24.861,1.587,1.437,1222,6214 -Tomino,2B327,218,5.836,0.769,0.696,1228,6226 -Ville-di-Pietrabugno,2B353,3292,7.502,0.872,0.790,1224,6202 -Morsiglia,2B170,128,13.463,1.168,1.058,1218,6228 -Canari,2B058,307,16.911,1.309,1.185,1218,6217 -Olmeta-di-Capocorso,2B187,147,21.531,1.477,1.337,1222,6209 -Ogliastro,2B183,102,9.526,0.982,0.889,1222,6214 -Olcani,2B184,82,14.341,1.205,1.091,1225,6209 -Dunkerque,59183,88108,41.757,2.057,1.862,648,7106 -Loon-Plage,59359,6209,42.249,2.069,1.873,642,7099 -Zuydcoote,59668,1738,2.626,0.516,0.467,664,7109 -Ghyvelde,59260,4192,35.819,1.905,1.725,666,7102 -Téteghem-Coudekerque-Village,59588,8113,30.660,1.763,1.596,657,7100 -Grande-Synthe,59271,23294,21.013,1.459,1.321,652,7100 -Eguisheim,68078,1728,13.986,1.190,1.077,1016,6779 -Uxem,59605,1411,8.043,0.903,0.818,666,7103 -Heiteren,68130,1042,22.447,1.508,1.365,1038,6770 -Grand-Fort-Philippe,59272,5081,1.813,0.429,0.388,637,7102 -Logelheim,68189,824,4.348,0.664,0.601,1028,6779 -Herrlisheim-près-Colmar,68134,1797,7.712,0.884,0.800,1024,6776 -Obermorschwihr,68244,360,1.589,0.401,0.363,1021,6777 -Geiswasser,68104,315,8.114,0.907,0.821,1043,6771 -Zimmerbach,68385,846,2.247,0.477,0.432,1016,6783 -Vœgtlinshoffen,68350,504,3.971,0.634,0.574,1016,6779 -Pfaffenheim,68255,1441,14.732,1.222,1.106,1012,6777 -Andolsheim,68007,2180,11.576,1.083,0.981,1029,6785 -Sundhoffen,68331,1947,12.757,1.137,1.029,1030,6779 -Vogelgrun,68351,659,4.987,0.711,0.644,1040,6780 -Algolsheim,68001,1147,7.237,0.856,0.775,1042,6776 -Osenbach,68251,892,5.743,0.763,0.691,1013,6774 -Volgelsheim,68352,2644,8.735,0.941,0.852,1040,6780 -Biesheim,68036,2567,16.559,1.295,1.173,1035,6784 -Dessenheim,68069,1398,19.123,1.392,1.260,1032,6771 -Westhalten,68364,977,11.141,1.062,0.962,1017,6768 -Ammerschwihr,68005,1799,19.779,1.416,1.282,1022,6789 -Sainte-Croix-en-Plaine,68295,2952,25.887,1.620,1.467,1032,6773 -Hattstatt,68123,788,6.068,0.784,0.710,1020,6777 -Obersaasheim,68246,1029,12.913,1.144,1.036,1036,6775 -Muhlbach-sur-Munster,68223,765,7.850,0.892,0.808,1005,6779 -Gueberschwihr,68111,837,8.917,0.951,0.861,1014,6777 -Eschbach-au-Val,68083,361,4.835,0.700,0.634,1010,6778 -Niederhergheim,68235,1120,12.410,1.121,1.015,1024,6776 -Widensolen,68367,1184,10.649,1.039,0.941,1033,6781 -Biltzheim,68037,439,7.117,0.849,0.769,1023,6771 -Rouffach,68287,4523,40.061,2.015,1.824,1022,6776 -Zimmersheim,68386,1026,3.160,0.566,0.512,1029,6746 -Oberhergheim,68242,1206,19.935,1.421,1.287,1032,6773 -Uffholtz,68342,1775,11.896,1.098,0.994,1009,6758 -Wasserbourg,68358,461,9.507,0.981,0.888,1009,6772 -Breitenbach-Haut-Rhin,68051,831,9.313,0.971,0.879,1005,6779 -Stosswihr,68329,1349,26.312,1.633,1.479,999,6780 -Sondernach,68311,624,24.847,1.587,1.437,1008,6773 -Luttenbach-près-Munster,68193,737,7.875,0.893,0.809,1008,6773 -Petit-Landau,68254,832,17.495,1.331,1.205,1035,6745 -Soultzbach-les-Bains,68316,741,7.037,0.844,0.764,1012,6777 -Stetten,68327,340,4.344,0.663,0.600,1032,6733 -Metzeral,68204,1070,30.726,1.764,1.597,998,6771 -Vieux-Ferrette,68347,674,6.627,0.819,0.742,1025,6720 -Munster,68226,4560,8.802,0.944,0.855,1010,6779 -Marigné-Laillé,72187,1665,33.638,1.846,1.671,504,6752 -Soultzmatt,68318,2421,20.142,1.429,1.294,1016,6769 -Wittersdorf,68377,814,4.833,0.700,0.634,1022,6732 -Landser,68174,1576,3.042,0.555,0.503,1028,6743 -Eglingen,68077,366,3.744,0.616,0.558,1014,6735 -Uffheim,68341,876,4.355,0.664,0.601,1032,6735 -Wolschwiller,68380,461,10.167,1.015,0.919,1030,6714 -Eschentzwiller,68084,1489,3.199,0.569,0.515,1029,6742 -Bartenheim,68021,3796,12.998,1.148,1.039,1036,6733 -Illfurth,68152,2458,9.190,0.965,0.874,1019,6738 -Friesen,68098,641,8.429,0.924,0.837,1014,6728 -Muespach,68221,892,11.389,1.074,0.972,1030,6728 -Heiwiller,68131,172,2.063,0.457,0.414,1025,6735 -Bernwiller,68006,1172,10.629,1.038,0.940,1014,6744 -Michelbach-le-Bas,68207,698,5.037,0.714,0.646,1037,6730 -Steinbrunn-le-Bas,68323,722,8.599,0.933,0.845,1029,6738 -Rantzwiller,68265,800,5.240,0.729,0.660,1028,6735 -Oberlarg,68243,137,8.221,0.913,0.827,1019,6716 -Altkirch,68004,5775,9.568,0.985,0.892,1018,6731 -Ueberstrass,68340,375,5.112,0.720,0.652,1011,6723 -Mœrnach,68212,550,6.781,0.829,0.751,1018,6722 -Largitzen,68176,312,5.653,0.757,0.685,1014,6728 -Sondersdorf,68312,343,8.469,0.926,0.838,1025,6718 -Kappelen,68160,587,5.162,0.723,0.655,1034,6732 -Hésingue,68135,2694,8.995,0.955,0.865,1036,6729 -Bouxwiller,68049,465,6.357,0.803,0.727,1028,6720 -Frœningen,68099,717,4.477,0.674,0.610,1021,6741 -Liebenswiller,68183,200,3.887,0.628,0.569,1034,6721 -Buethwiller,68057,272,3.876,0.627,0.568,1009,6738 -Hagenthal-le-Haut,68121,642,5.037,0.714,0.646,1036,6722 -Steinbrunn-le-Haut,68324,576,9.247,0.968,0.876,1024,6739 -Huningue,68149,7213,2.847,0.537,0.486,1043,6731 -Kiffis,68165,247,6.593,0.817,0.740,1025,6714 -Hagenbach,68119,693,4.848,0.701,0.635,1011,6734 -Château-sur-Cher,63101,77,12.058,1.105,1.000,667,6560 -Heidwiller,68127,608,4.443,0.671,0.608,1018,6739 -Helfrantzkirch,68132,700,6.387,0.804,0.728,1033,6731 -Mooslargue,68216,425,5.611,0.754,0.683,1016,6722 -Winkel,68373,307,7.804,0.889,0.805,1019,6717 -Ballersdorf,68017,822,10.720,1.042,0.943,1011,6730 -Hirsingue,68138,2124,12.984,1.147,1.039,1020,6728 -Spechbach,68320,1317,8.063,0.904,0.818,1018,6739 -Burnhaupt-le-Bas,68059,1853,11.725,1.090,0.987,1012,6741 -Saint-Louis,68297,20642,17.181,1.319,1.194,1038,6735 -Oltingue,68248,704,13.379,1.164,1.054,1028,6719 -Riespach,68273,664,7.585,0.877,0.794,1024,6723 -Magstatt-le-Haut,68198,282,3.936,0.632,0.572,1030,6733 -Gildwiller,68105,277,5.040,0.715,0.647,1008,6742 -Sierentz,68309,3685,13.225,1.158,1.048,1033,6738 -Ranspach-le-Bas,68263,652,4.539,0.678,0.614,1032,6731 -Hagenthal-le-Bas,68120,1226,6.482,0.810,0.733,1036,6725 -Durmenach,68075,850,5.745,0.763,0.691,1027,6722 -Raedersdorf,68259,508,7.344,0.863,0.781,1028,6720 -Tagsdorf,68333,297,2.520,0.505,0.457,1024,6734 -Ferrette,68090,687,1.979,0.448,0.406,1024,6719 -Schwoben,68303,228,2.406,0.494,0.447,1022,6730 -Pfetterhouse,68257,1000,14.272,1.203,1.089,1016,6719 -Saint-Jean-de-la-Porte,73247,920,16.035,1.275,1.154,941,6501 -Heimersdorf,68128,662,7.612,0.878,0.795,1016,6726 -Monségur,64395,132,2.803,0.533,0.483,457,6265 -Geispitzen,68103,448,6.046,0.783,0.709,1031,6738 -Bendorf,68025,207,7.426,0.867,0.785,1024,6719 -Mertzen,68202,217,2.019,0.452,0.409,1009,6728 -Frohmuhl,67148,183,1.660,0.410,0.371,1014,6875 -Illtal,68240,1403,11.997,1.103,0.999,1021,6727 -Bruebach,68055,1060,7.029,0.844,0.764,1027,6745 -Knœringue,68168,379,4.762,0.695,0.629,1032,6726 -Bettendorf,68033,452,4.719,0.691,0.626,1022,6730 -Walheim,68356,902,4.832,0.700,0.634,1021,6734 -Werentzhouse,68363,549,4.536,0.678,0.614,1028,6724 -Heimsbrunn,68129,1314,10.583,1.036,0.938,1014,6745 -Seppois-le-Bas,68305,1358,6.733,0.826,0.748,1012,6722 -Seppois-le-Haut,68306,500,6.258,0.796,0.721,1016,6721 -Blotzheim,68042,4457,14.989,1.232,1.115,1035,6733 -Hindlingen,68137,641,8.075,0.905,0.819,1014,6728 -Lucelle,68190,35,10.331,1.023,0.926,1022,6714 -Durlinsdorf,68074,568,7.767,0.887,0.803,1020,6719 -Fulleren,68100,343,5.315,0.734,0.665,1010,6730 -Hochstatt,68141,2119,8.497,0.928,0.840,1018,6743 -Emlingen,68080,280,2.444,0.498,0.451,1022,6735 -Hausgauen,68124,391,5.807,0.767,0.694,1023,6730 -Galfingue,68101,804,5.360,0.737,0.667,1018,6743 -Balschwiller,68018,771,9.784,0.996,0.902,1014,6740 -Ligsdorf,68186,311,9.974,1.005,0.910,1025,6714 -Levoncourt,68181,243,5.252,0.729,0.660,1015,6715 -Kœtzingue,68170,604,5.160,0.723,0.655,1030,6738 -Gunsbach,68117,922,6.151,0.789,0.714,1012,6780 -Brinckheim,68054,385,3.427,0.589,0.533,1036,6733 -Muespach-le-Haut,68222,1077,6.884,0.835,0.756,1033,6725 -Courtavon,68067,375,9.714,0.992,0.898,1016,6719 -Wahlbach,68353,501,6.297,0.799,0.723,1027,6736 -Village-Neuf,68349,4243,6.824,0.832,0.753,1043,6731 -Kembs,68163,5156,16.507,1.293,1.171,1039,6739 -Rosenau,68286,2349,6.332,0.801,0.725,1040,6736 -Carspach,68062,2048,17.182,1.319,1.194,1016,6736 -Hirtzbach,68139,1429,13.921,1.188,1.076,1017,6732 -Flaxlanden,68093,1457,4.323,0.662,0.599,1025,6740 -Gommersdorf,68107,355,4.145,0.648,0.587,1011,6736 -Ruederbach,68288,391,4.460,0.672,0.608,1020,6728 -Luemschwiller,68191,775,7.313,0.861,0.780,1023,6739 -Saint-Bernard,68081,558,6.064,0.784,0.710,1016,6737 -Zillisheim,68384,2589,8.235,0.913,0.827,1024,6739 -Waltenheim,68357,537,2.363,0.489,0.443,1031,6737 -Brunstatt-Didenheim,68056,7850,14.072,1.194,1.081,1026,6745 -Lutter,68194,277,8.574,0.932,0.844,1027,6715 -Retzwiller,68268,712,4.136,0.647,0.586,1007,6735 -Kœstlach,68169,508,8.183,0.911,0.825,1021,6719 -Montreux-Château,90071,1181,4.638,0.686,0.621,999,6729 -Orbey,68249,3541,45.856,2.156,1.952,1004,6789 -Wihr-au-Val,68368,1265,12.496,1.125,1.019,1012,6778 -Morschwiller,67304,595,4.608,0.683,0.618,1039,6868 -Hohrod,68142,348,5.498,0.746,0.675,1009,6784 -Faverois,90043,576,6.526,0.813,0.736,1003,6723 -Labaroche,68173,2191,13.568,1.172,1.061,1012,6790 -Courcelles,90027,127,5.347,0.736,0.666,1007,6720 -Lapoutroie,68175,1901,21.276,1.468,1.329,1013,6792 -Soultzeren,68317,1128,18.370,1.364,1.235,1008,6783 -Les Abrets en Dauphiné,38001,6289,27.625,1.673,1.515,901,6496 -La Croix-aux-Mines,88120,509,16.711,1.301,1.178,1005,6797 -Fréland,68097,1355,19.336,1.400,1.268,1008,6796 -Ban-de-Laveline,88032,1224,26.291,1.632,1.478,1001,6803 -Le Bonhomme,68044,762,21.995,1.493,1.352,1003,6793 -Bréchaumont,68050,411,6.503,0.812,0.735,1004,6736 -Sentheim,68304,1588,6.192,0.792,0.717,1002,6749 -Montreux-Jeune,68214,366,3.371,0.584,0.529,1001,6730 -Delle,90033,5719,9.300,0.971,0.879,1001,6721 -Dannemarie,68068,2259,4.361,0.665,0.602,1010,6732 -Bretten,68052,178,4.226,0.654,0.592,1005,6743 -Falkwiller,68086,192,3.562,0.601,0.544,1008,6740 -Burnhaupt-le-Haut,68060,1828,12.497,1.125,1.019,1011,6747 -Chavannes-les-Grands,90025,337,6.916,0.837,0.758,1006,6730 -Reppe,90084,338,3.898,0.628,0.569,1003,6738 -Villars-le-Sec,90105,170,2.984,0.550,0.498,999,6713 -Le Haut Soultzbach,68219,930,11.744,1.091,0.988,1001,6745 -Merville-Franceville-Plage,14409,2181,10.458,1.029,0.932,467,6911 -Bellemagny,68024,188,2.128,0.464,0.420,1006,6740 -Strueth,68330,336,4.351,0.664,0.601,1008,6727 -Bretagne,90019,258,4.678,0.688,0.623,1002,6728 -Romagny,68282,254,2.899,0.542,0.491,1006,6730 -Kaysersberg Vignoble,68162,4601,35.463,1.896,1.717,1013,6795 -Chavanatte,90024,160,3.817,0.622,0.563,1005,6727 -Traubach-le-Haut,68337,606,6.874,0.835,0.756,1009,6739 -Le Mesnil-Réaume,76435,793,5.505,0.747,0.676,589,6985 -Diefmatten,68071,283,3.167,0.566,0.512,1008,6741 -Angeot,90002,343,6.634,0.820,0.742,1003,6740 -Saint-Ulrich,68299,308,3.887,0.628,0.569,1011,6731 -Eteimbes,68085,383,4.988,0.711,0.644,1003,6740 -Lachapelle-sous-Rougemont,90058,588,4.987,0.711,0.644,1003,6743 -Guewenheim,68115,1307,8.567,0.932,0.844,1007,6745 -Vauthiermont,90100,218,4.798,0.697,0.631,1003,6740 -Traubach-le-Bas,68336,491,6.773,0.828,0.750,1009,6738 -Lepuix-Neuf,90064,295,5.483,0.745,0.675,1010,6724 -Suarce,90095,442,11.840,1.095,0.991,1007,6728 -Réchésy,90081,796,12.658,1.132,1.025,1011,6724 -Altenach,68002,386,6.207,0.793,0.718,1010,6732 -Sternenberg,68326,155,3.415,0.588,0.532,1006,6742 -Elbach,68079,257,3.181,0.568,0.514,1004,6735 -Saint-Cosme,68293,95,2.801,0.533,0.483,1003,6738 -Montreux-Vieux,68215,894,4.184,0.651,0.589,1001,6732 -Lauw,68179,917,4.549,0.679,0.615,1001,6750 -Hecken,68125,480,2.461,0.499,0.452,1010,6740 -Soppe-le-Bas,68313,757,5.693,0.759,0.687,1008,6742 -Bootzheim,67056,724,5.894,0.773,0.700,1044,6799 -Manspach,68200,573,5.344,0.736,0.666,1006,6730 -Valdieu-Lutran,68192,420,5.166,0.723,0.655,1003,6734 -Petitefontaine,90078,191,3.159,0.566,0.512,998,6743 -Boron,90014,473,6.095,0.786,0.712,1000,6725 -Ribeauvillé,68269,4761,32.199,1.806,1.635,1016,6801 -Courtelevant,90028,434,5.860,0.771,0.698,1008,6720 -Vellescot,90101,261,3.516,0.597,0.541,1001,6728 -Fortschwihr,68095,1148,4.791,0.697,0.631,1030,6785 -Muntzenheim,68227,1228,6.487,0.811,0.734,1032,6786 -Bergheim,68028,2147,19.473,1.405,1.272,1023,6800 -Bennwihr,68026,1321,6.539,0.814,0.737,1025,6790 -Marckolsheim,67281,4142,33.836,1.852,1.677,1036,6793 -Hérouvillette,14328,1226,3.992,0.636,0.576,464,6908 -Niedermorschwihr,68237,533,3.372,0.585,0.530,1016,6787 -Wickerschwihr,68366,742,2.234,0.476,0.431,1031,6789 -Grussenheim,68110,811,7.563,0.875,0.792,1032,6794 -Illhaeusern,68153,691,10.524,1.033,0.935,1032,6794 -Ohnenheim,67360,1015,12.171,1.110,1.005,1037,6798 -Turckheim,68338,3767,16.444,1.291,1.169,1013,6784 -Porte du Ried,68143,1778,9.449,0.978,0.885,1031,6791 -Urschenheim,68345,723,6.385,0.804,0.728,1036,6784 -Jebsheim,68157,1386,14.806,1.225,1.109,1031,6789 -Ostheim,68252,1597,8.183,0.911,0.825,1024,6795 -Soultz-sous-Forêts,67474,3173,15.296,1.245,1.127,1061,6881 -Mittelwihr,68209,834,2.392,0.492,0.445,1022,6792 -Elsenheim,67121,823,9.587,0.986,0.893,1036,6795 -Beblenheim,68023,951,5.605,0.754,0.683,1024,6794 -Heidolsheim,67187,514,5.902,0.773,0.700,1033,6799 -Katzenthal,68161,530,3.439,0.590,0.534,1019,6786 -Houssen,68146,2165,6.745,0.827,0.749,1023,6789 -Ingersheim,68155,4660,7.442,0.868,0.786,1022,6785 -Zellenberg,68383,327,4.929,0.707,0.640,1021,6794 -Guémar,68113,1356,18.190,1.358,1.230,1026,6795 -Hunawihr,68147,603,4.744,0.693,0.627,1018,6797 -Niederentzen,68234,712,8.802,0.944,0.855,1031,6770 -Glère,25275,223,16.188,1.281,1.160,1001,6700 -Rimbach-près-Guebwiller,68274,188,4.787,0.696,0.630,1010,6765 -Thannenkirch,68335,451,4.622,0.684,0.619,1017,6802 -Cernay,68063,11617,18.046,1.352,1.224,1015,6750 -Bœsenbiesen,67053,316,3.736,0.615,0.557,1040,6801 -Kingersheim,68166,13151,6.667,0.822,0.744,1025,6753 -Merxheim,68203,1270,9.020,0.956,0.866,1023,6767 -Ungersheim,68343,2259,13.590,1.173,1.062,1020,6758 -Chalampé,68064,950,4.827,0.699,0.633,1040,6758 -Berrwiller,68032,1187,7.668,0.881,0.798,1016,6756 -Rammersmatt,68261,218,5.025,0.714,0.646,1004,6750 -Baldersheim,68015,2615,12.788,1.138,1.030,1026,6753 -Lautenbach,68177,1525,13.308,1.161,1.051,1008,6772 -Richwiller,68270,3687,5.553,0.750,0.679,1019,6752 -Bourbach-le-Bas,68045,569,6.056,0.783,0.709,1002,6749 -Hombourg,68144,1328,15.367,1.248,1.130,1034,6748 -Bollwiller,68043,3979,8.650,0.936,0.847,1016,6759 -Olmeta-di-Tuda,2B188,461,17.388,1.327,1.201,1225,6190 -Ranspach,68262,832,11.305,1.070,0.969,1000,6761 -Nambsheim,68230,589,10.085,1.011,0.915,1038,6770 -Blodelsheim,68041,1833,20.501,1.441,1.305,1035,6761 -Rustenhart,68290,844,12.168,1.110,1.005,1038,6770 -Wittenheim,68376,14589,19.080,1.390,1.259,1022,6757 -Lavernat,72160,606,22.872,1.522,1.378,501,6743 -Wuenheim,68381,798,6.205,0.793,0.718,1011,6759 -Murbach,68229,156,6.404,0.806,0.730,1010,6765 -Wittelsheim,68375,10432,23.586,1.546,1.400,1018,6750 -Saint-Hippolyte,68296,986,17.796,1.343,1.216,1024,6801 -Bourbach-le-Haut,68046,420,6.850,0.833,0.754,1001,6750 -Reiningue,68267,1973,18.556,1.371,1.241,1015,6746 -Gundolsheim,68116,707,8.295,0.917,0.830,1020,6766 -Soultz-Haut-Rhin,68315,7111,29.689,1.734,1.570,1015,6762 -Bitschwiller-lès-Thann,68040,1973,12.613,1.130,1.023,1008,6758 -Hartmannswiller,68122,638,4.778,0.696,0.630,1016,6759 -Châtenois,67073,4158,14.554,1.214,1.099,1023,6810 -Ensisheim,68082,7466,36.723,1.929,1.747,1031,6757 -Illzach,68154,14545,7.460,0.869,0.787,1026,6753 -Schwobsheim,67461,325,2.617,0.515,0.466,1041,6803 -Roderen,68279,893,7.629,0.879,0.796,1006,6748 -Steinbach,68322,1366,6.105,0.786,0.712,1008,6757 -Vieux-Thann,68348,2857,5.099,0.719,0.651,1008,6751 -Alteckendorf,67005,884,5.971,0.778,0.704,1038,6866 -Mulhouse,68224,108999,22.414,1.507,1.364,1023,6751 -Baerenthal,57046,777,39.294,1.995,1.806,1034,6880 -Thann,68334,7838,12.490,1.125,1.019,1008,6755 -Ruelisheim,68289,2288,7.224,0.856,0.775,1026,6754 -Oberbronn,67340,1561,21.101,1.462,1.324,1035,6883 -Bergholtz,68029,1063,4.292,0.659,0.597,1017,6765 -Sausheim,68300,5512,16.898,1.308,1.184,1029,6751 -Pulversheim,68258,2940,8.533,0.930,0.842,1023,6757 -Raedersheim,68260,1106,5.711,0.761,0.689,1018,6763 -Aspach-Michelbach,68012,1807,12.019,1.104,1.000,1008,6751 -Rimbachzell,68276,196,1.743,0.420,0.380,1011,6763 -Moosch,68217,1686,15.346,1.247,1.129,1004,6760 -Riedisheim,68271,12291,6.916,0.837,0.758,1026,6744 -Leimbach,68180,877,3.567,0.601,0.544,1008,6752 -Lautenbachzell,68178,957,23.350,1.538,1.393,1006,6764 -Morschwiller-le-Bas,68218,3728,7.524,0.873,0.790,1020,6744 -Munchhouse,68225,1547,24.105,1.563,1.415,1034,6757 -Saint-Amarin,68292,2278,11.644,1.086,0.983,1002,6760 -Malmerspach,68199,509,2.661,0.519,0.470,1000,6758 -Pfastatt,68256,9501,5.245,0.729,0.660,1018,6750 -Haspelschiedt,57301,305,25.177,1.597,1.446,1033,6894 -Lutterbach,68195,6360,8.559,0.931,0.843,1017,6750 -Fessenheim,68091,2396,18.598,1.373,1.243,1035,6765 -Schweighouse-Thann,68302,774,10.810,1.047,0.948,1015,6746 -Lesseux,88268,161,2.939,0.546,0.494,1004,6805 -Wattwiller,68359,1646,13.616,1.175,1.064,1011,6759 -Jungholtz,68159,909,3.984,0.635,0.575,1014,6763 -Le Monestier-du-Percy,38243,250,15.107,1.237,1.120,908,6410 -Oberentzen,68241,625,8.915,0.950,0.860,1026,6768 -Goldbach-Altenbach,68106,289,9.099,0.960,0.869,1005,6761 -Rixheim,68278,14073,19.667,1.412,1.278,1033,6750 -Aspach-le-Bas,68011,1331,8.046,0.903,0.818,1009,6747 -Feldkirch,68088,990,4.199,0.652,0.590,1021,6762 -Linthal,68188,607,20.987,1.458,1.320,1008,6773 -Battenheim,68022,1555,16.928,1.310,1.186,1034,6755 -Issenheim,68156,3419,8.136,0.908,0.822,1019,6766 -Geishouse,68102,447,7.222,0.855,0.774,1006,6764 -Réguisheim,68266,1847,23.801,1.553,1.406,1023,6766 -Bantzenheim,68020,1622,21.195,1.465,1.326,1034,6758 -Sélestat,67462,19124,47.307,2.189,1.982,1034,6800 -Rombach-le-Franc,68283,790,17.841,1.344,1.217,1017,6808 -Muttersholtz,67311,2023,12.658,1.132,1.025,1038,6805 -Baldenheim,67019,1161,9.448,0.978,0.885,1034,6804 -Neubois,67317,695,11.540,1.081,0.979,1018,6808 -Mussig,67310,1143,11.815,1.094,0.991,1037,6799 -Lièpvre,68185,1736,12.543,1.127,1.020,1021,6806 -Orschwiller,67362,608,6.264,0.797,0.722,1028,6801 -La Vancelle,67505,403,8.078,0.905,0.819,1018,6808 -Rodern,68280,353,6.933,0.838,0.759,1017,6802 -Wittisheim,67547,2055,11.481,1.079,0.977,1040,6803 -Kintzheim,67239,1621,18.778,1.379,1.249,1021,6805 -Saint-Blaise-la-Roche,67424,233,2.402,0.493,0.446,1007,6820 -Blancherupt,67050,38,2.614,0.515,0.466,1011,6821 -Bourg-Bruche,67059,469,15.064,1.235,1.118,1004,6816 -Lusse,88276,436,19.452,1.404,1.271,1004,6804 -Le Saulcy,88444,329,9.895,1.001,0.906,1004,6823 -Lubine,88275,221,14.884,1.228,1.112,1011,6809 -Saulxures,67436,516,12.857,1.141,1.033,1007,6820 -Saales,67421,829,9.915,1.002,0.907,1002,6814 -Gemaingoutte,88193,136,3.898,0.628,0.569,1006,6800 -Bertrimoutier,88054,309,3.726,0.614,0.556,1002,6803 -Mizoën,38237,192,20.822,1.452,1.315,947,6443 -Belval,88053,154,6.917,0.837,0.758,1002,6819 -Bonneville-la-Louvet,14085,751,20.887,1.455,1.317,504,6913 -Combrimont,88113,139,4.765,0.695,0.629,1004,6805 -Raves,88375,469,4.053,0.641,0.580,1000,6802 -Fouday,67144,347,2.298,0.483,0.437,1011,6822 -Sainte-Croix-aux-Mines,68294,1927,28.012,1.685,1.526,1008,6804 -Urbeis,67499,324,12.279,1.115,1.010,1012,6809 -Ranrupt,67384,341,15.143,1.239,1.122,1011,6814 -Grandrupt,88215,75,6.353,0.802,0.726,1003,6814 -La Grande-Fosse,88213,123,6.729,0.826,0.748,1001,6813 -Colroy-la-Roche,67076,491,8.120,0.907,0.821,1007,6818 -Saint-Stail,88436,74,6.171,0.791,0.716,1004,6816 -Waldersbach,67513,130,3.330,0.581,0.526,1011,6821 -Morsbronn-les-Bains,67303,678,6.891,0.836,0.757,1046,6878 -Issenhausen,67225,108,2.123,0.464,0.420,1033,6867 -Uhlwiller,67497,697,7.428,0.868,0.786,1045,6870 -Gunstett,67177,662,6.310,0.800,0.724,1052,6880 -Langensoultzbach,67259,937,13.015,1.148,1.039,1047,6883 -Preuschdorf,67379,912,7.585,0.877,0.794,1051,6885 -Menchhoffen,67289,603,4.331,0.662,0.599,1029,6871 -Ringendorf,67403,440,3.846,0.624,0.565,1033,6868 -Surbourg,67487,1679,10.441,1.029,0.932,1052,6878 -Merkwiller-Pechelbronn,67290,919,3.780,0.619,0.560,1053,6880 -Wingen,67537,457,16.587,1.296,1.173,1053,6891 -Wickersheim-Wilshausen,67530,399,5.484,0.745,0.675,1032,6862 -Buswiller,67068,271,2.282,0.481,0.436,1035,6868 -Reichshoffen,67388,5393,17.081,1.316,1.192,1044,6884 -Uttenhoffen,67502,201,1.971,0.447,0.405,1039,6876 -Critot,76200,473,7.051,0.845,0.765,573,6945 -Dauendorf,67087,1444,7.651,0.880,0.797,1042,6871 -Bossendorf,67058,399,4.046,0.640,0.579,1036,6864 -Printzheim,67380,201,4.303,0.660,0.598,1027,6863 -Mertzwiller,67291,3360,6.890,0.836,0.757,1045,6875 -Durrenbach,67110,1079,5.326,0.735,0.665,1048,6876 -Bouxwiller,67061,4062,25.943,1.621,1.468,1025,6870 -Zinswiller,67558,772,7.182,0.853,0.772,1037,6877 -Lembach,67263,1560,48.947,2.227,2.016,1043,6890 -Kirrwiller,67242,553,5.018,0.713,0.646,1031,6868 -Kutzenhausen,67254,919,7.191,0.854,0.773,1054,6884 -Grassendorf,67166,249,2.257,0.478,0.433,1039,6866 -Forstheim,67141,577,5.047,0.715,0.647,1045,6875 -Philippsbourg,57541,616,23.732,1.551,1.404,1035,6884 -Niederschaeffolsheim,67331,1376,6.231,0.795,0.720,1047,6862 -Hegeney,67186,420,1.746,0.421,0.381,1047,6875 -Lampertsloch,67257,732,10.463,1.030,0.933,1053,6886 -Fresnay-le-Long,76284,331,4.993,0.711,0.644,561,6951 -Offwiller,67358,804,15.887,1.269,1.149,1030,6881 -Kindwiller,67238,635,5.963,0.777,0.704,1036,6871 -Huttendorf,67215,509,4.384,0.666,0.603,1041,6867 -Engwiller,67123,503,3.725,0.614,0.556,1037,6874 -Bosselshausen,67057,162,3.262,0.575,0.521,1031,6867 -Sturzelbronn,57661,178,32.525,1.815,1.643,1033,6892 -Gumbrechtshoffen,67174,1171,5.762,0.764,0.692,1040,6877 -Laqueuille,63189,366,22.263,1.502,1.360,678,6505 -Frœschwiller,67147,505,5.761,0.764,0.692,1045,6883 -Bischholtz,67044,280,2.383,0.491,0.445,1031,6875 -Schalkendorf,67441,331,5.192,0.725,0.656,1037,6869 -La Table,73289,462,14.889,1.228,1.112,946,6491 -Mulhausen,67307,480,3.989,0.636,0.576,1035,6876 -Geiswiller-Zœbersdorf,67153,397,5.055,0.716,0.648,1031,6863 -Oberdorf-Spachbach,67341,363,2.355,0.488,0.442,1048,6880 -Walbourg,67511,912,5.308,0.733,0.664,1052,6876 -Mietesheim,67292,669,8.490,0.927,0.839,1042,6873 -Puisenval,76512,26,4.927,0.707,0.640,591,6978 -Ingwiller,67222,4065,18.072,1.353,1.225,1026,6874 -Niedermodern,67328,931,4.389,0.667,0.604,1039,6869 -Wittersheim,67546,644,7.062,0.846,0.766,1040,6862 -Niedersteinbach,67334,126,8.307,0.917,0.830,1046,6893 -Uhrwiller,67498,706,11.022,1.057,0.957,1038,6875 -Eschbach,67132,930,3.925,0.631,0.571,1047,6875 -Belhade,40032,196,28.688,1.705,1.544,410,6374 -Climbach,67075,444,7.138,0.850,0.770,1054,6888 -Wœrth,67550,1743,6.502,0.812,0.735,1048,6885 -Minversheim,67293,668,5.536,0.749,0.678,1041,6864 -Ohlungen,67359,1307,8.399,0.922,0.835,1042,6865 -Lichtenberg,67265,559,12.249,1.114,1.009,1028,6882 -Schillersdorf,67446,435,7.547,0.874,0.791,1033,6874 -Niedersoultzbach,67333,265,4.227,0.654,0.592,1027,6871 -Windstein,67536,164,11.951,1.100,0.996,1042,6887 -Rothbach,67415,472,7.958,0.898,0.813,1031,6875 -Niederbronn-les-Bains,67324,4395,31.939,1.799,1.629,1036,6886 -Obersteinbach,67353,224,9.114,0.961,0.870,1043,6890 -Witternheim,67545,514,5.139,0.722,0.654,1043,6810 -Batzendorf,67023,993,6.736,0.826,0.748,1047,6862 -Dambach,67083,741,30.558,1.760,1.594,1042,6890 -Éguelshardt,57188,428,16.779,1.304,1.181,1027,6890 -Triembach-au-Val,67493,474,2.996,0.551,0.499,1020,6812 -Matzenheim,67285,1418,7.167,0.852,0.771,1045,6818 -Villé,67507,1850,3.045,0.555,0.503,1018,6812 -Obenheim,67338,1380,8.020,0.901,0.816,1045,6815 -Ebersheim,67115,2239,13.637,1.175,1.064,1031,6810 -Bellefosse,67026,149,7.497,0.872,0.790,1016,6819 -Saint-Thonan,29268,1755,11.422,1.076,0.974,158,6844 -Saasenheim,67422,603,7.883,0.894,0.809,1041,6802 -Mittelbergheim,67295,658,3.829,0.623,0.564,1029,6819 -Herbsheim,67192,916,8.801,0.944,0.855,1045,6816 -Dieffenthal,67094,257,1.506,0.391,0.354,1026,6810 -Nothalten,67337,458,4.156,0.649,0.588,1027,6816 -Epfig,67125,2274,22.370,1.506,1.364,1034,6816 -Hilsenheim,67196,2653,20.393,1.437,1.301,1037,6811 -Albé,67003,456,11.501,1.079,0.977,1022,6817 -Blienschwiller,67051,325,3.137,0.564,0.511,1025,6814 -Bindernheim,67040,1025,6.803,0.830,0.751,1044,6809 -Retschwiller,67394,281,3.282,0.577,0.522,1059,6883 -Breitenau,67062,305,4.511,0.676,0.612,1018,6812 -Scherwiller,67445,3171,18.813,1.381,1.250,1028,6806 -Osthouse,67364,923,9.812,0.997,0.903,1042,6822 -Richtolsheim,67398,335,3.637,0.607,0.550,1040,6801 -Huttenheim,67216,2705,12.540,1.127,1.020,1035,6817 -Saint-Maurice,67427,388,1.581,0.400,0.362,1022,6813 -Maisonsgoutte,67280,804,5.111,0.720,0.652,1015,6816 -Andlau,67010,1744,24.039,1.561,1.413,1023,6817 -Friesenheim,67146,623,12.320,1.117,1.011,1044,6809 -Sermersheim,67464,921,10.124,1.013,0.917,1035,6815 -Dalhunden,67082,1119,7.434,0.868,0.786,1067,6865 -Breitenbach,67063,674,12.842,1.141,1.033,1014,6817 -Eberbach-Seltz,67113,418,4.128,0.647,0.586,1069,6881 -Gertwiller,67155,1256,4.896,0.704,0.637,1032,6822 -Le Hohwald,67210,503,20.897,1.455,1.317,1021,6822 -Sundhouse,67486,1819,15.945,1.271,1.151,1045,6803 -Boofzheim,67055,1363,11.897,1.098,0.994,1048,6816 -Diebolsheim,67090,704,7.044,0.845,0.765,1044,6808 -Kleingœft,67244,156,2.495,0.503,0.455,1026,6854 -Belmont,67027,162,10.140,1.014,0.918,1013,6822 -Ebersmunster,67116,516,7.409,0.866,0.784,1035,6811 -Steige,67477,597,10.321,1.023,0.926,1011,6814 -Dieffenbach-au-Val,67092,627,3.121,0.562,0.509,1021,6812 -Saint-Pierre-Bois,67430,773,7.701,0.883,0.799,1023,6810 -Artolsheim,67011,995,11.275,1.069,0.968,1039,6800 -Stundwiller,67484,484,3.285,0.577,0.522,1065,6882 -Schœnau,67453,597,10.314,1.022,0.925,1043,6801 -Rott,67416,473,3.284,0.577,0.522,1058,6889 -Reichsfeld,67387,297,5.042,0.715,0.647,1025,6815 -Niederlauterbach,67327,967,11.237,1.067,0.966,1075,6885 -Zellwiller,67557,772,8.781,0.943,0.854,1031,6820 -Itterswiller,67227,242,1.175,0.345,0.312,1028,6817 -Kertzfeld,67233,1236,9.416,0.977,0.885,1036,6822 -Memmelshoffen,67288,332,1.795,0.426,0.386,1056,6885 -Fouchy,67143,663,8.297,0.917,0.830,1016,6809 -Benfeld,67028,5738,7.898,0.895,0.810,1041,6815 -Saint-Pierre,67429,648,3.226,0.572,0.518,1030,6818 -Kogenheim,67246,1241,11.806,1.094,0.991,1038,6812 -Saint-Frégant,29248,811,8.388,0.922,0.835,155,6857 -Uttenheim,67501,554,4.839,0.700,0.634,1040,6823 -Lalaye,67255,471,8.239,0.914,0.828,1016,6813 -Niederrœdern,67330,920,6.950,0.839,0.760,1069,6878 -Neuve-Église,67320,631,5.767,0.764,0.692,1020,6813 -Rhinau,67397,2717,17.360,1.326,1.201,1048,6812 -Stotzheim,67481,1031,13.607,1.174,1.063,1035,6817 -Stattmatten,67476,691,3.923,0.630,0.570,1068,6866 -Aschbach,67012,700,4.251,0.656,0.594,1066,6882 -Leutenheim,67264,843,10.462,1.030,0.933,1068,6874 -Kilstett,67237,2538,6.912,0.837,0.758,1056,6855 -Keffenach,67232,187,2.395,0.493,0.446,1058,6885 -Oberhoffen-sur-Moder,67345,3464,14.417,1.209,1.095,1057,6865 -Lauterbourg,67261,2291,11.217,1.066,0.965,1077,6886 -Drusenheim,67106,5097,15.775,1.264,1.144,1064,6860 -Fort-Louis,67142,299,12.349,1.119,1.013,1072,6870 -Marignac,17220,420,13.483,1.169,1.058,429,6499 -Trimbach,67494,569,4.020,0.638,0.578,1068,6882 -Kauffenheim,67231,213,2.264,0.479,0.434,1070,6873 -Drachenbronn-Birlenbach,67104,838,7.145,0.851,0.771,1059,6886 -Lengelsheim,57393,217,5.242,0.729,0.660,1020,6899 -Seebach,67351,1675,17.159,1.319,1.194,1062,6885 -Schœnenbourg,67455,688,5.489,0.746,0.675,1058,6884 -Buhl,67069,526,4.429,0.670,0.607,1068,6879 -Offendorf,67356,2488,14.248,1.202,1.088,1058,6857 -Betschdorf,67339,4137,27.928,1.682,1.523,1067,6874 -Schleithal,67451,1446,9.128,0.962,0.871,1069,6887 -Cleebourg,67074,722,10.608,1.037,0.939,1054,6888 -Salmbach,67432,580,8.904,0.950,0.860,1072,6885 -Roppenheim,67409,980,6.933,0.838,0.759,1074,6871 -Hatten,67184,1921,18.948,1.386,1.255,1066,6880 -Riedseltz,67400,1095,10.035,1.008,0.913,1063,6887 -Wintzenbach,67541,550,6.979,0.841,0.761,1072,6881 -Schirrhein,67449,2212,6.530,0.813,0.736,1058,6866 -Reutenbourg,67395,432,4.487,0.674,0.610,1024,6851 -Wissembourg,67544,7600,48.137,2.208,1.999,1060,6892 -Neewiller-près-Lauterbourg,67315,648,7.290,0.859,0.778,1077,6885 -Rohrwiller,67407,1662,2.989,0.550,0.498,1059,6860 -Mothern,67305,2033,10.411,1.027,0.930,1074,6883 -Steinseltz,67479,602,5.478,0.745,0.675,1060,6892 -Oberlauterbach,67346,536,5.353,0.736,0.666,1071,6885 -Oberrœdern,67349,531,4.953,0.708,0.641,1065,6880 -Rœschwoog,67405,2296,9.847,0.999,0.905,1072,6870 -Sessenheim,67465,2304,9.247,0.968,0.876,1064,6865 -Gambsheim,67151,4804,17.339,1.325,1.200,1058,6857 -Eschwiller,67134,183,3.532,0.598,0.541,1001,6869 -Schaffhouse-près-Seltz,67440,561,4.475,0.673,0.609,1074,6881 -Hoffen,67206,1131,9.385,0.975,0.883,1061,6880 -Ingolsheim,67221,305,4.460,0.672,0.608,1059,6886 -Rottelsheim,67417,313,2.410,0.494,0.447,1045,6861 -Beinheim,67025,1869,14.518,1.213,1.098,1071,6873 -Berling,57064,280,3.153,0.565,0.512,1010,6864 -Rittershoffen,67404,913,12.265,1.115,1.010,1069,6874 -Saint-Hilaire-du-Rosier,38394,1903,16.377,1.288,1.166,875,6444 -Siegen,67466,508,8.016,0.901,0.816,1068,6886 -Gottesheim,67162,341,5.155,0.723,0.655,1030,6861 -Hunspach,67213,637,5.483,0.745,0.675,1059,6885 -Herrlisheim,67194,4864,14.359,1.206,1.092,1064,6860 -Schwindratzheim,67460,1647,9.504,0.981,0.888,1036,6864 -Melsheim,67287,585,5.286,0.732,0.663,1033,6859 -Kriegsheim,67250,783,4.084,0.643,0.582,1049,6862 -Weitbruch,67523,2863,15.107,1.237,1.120,1052,6860 -Hochfelden,67202,3958,16.176,1.280,1.159,1033,6859 -Dettwiller,67089,2614,10.801,1.046,0.947,1027,6862 -Mommenheim,67301,1815,8.315,0.918,0.831,1041,6860 -Rexingen,67396,204,2.371,0.490,0.444,1005,6876 -Urmatt,67500,1487,13.627,1.175,1.064,1018,6833 -Bettviller,57074,840,18.378,1.365,1.236,1010,6894 -Petit-Réderching,57535,1512,10.864,1.049,0.950,1017,6894 -Hirschland,67201,332,10.774,1.045,0.946,1001,6866 -Saint-Louis,57618,660,9.234,0.967,0.876,1010,6853 -Reipertswiller,67392,873,19.256,1.397,1.265,1022,6881 -Bitche,57089,5179,41.139,2.042,1.849,1026,6896 -Lambach,57376,512,5.633,0.755,0.684,1019,6889 -Avolsheim,67016,727,1.824,0.430,0.389,1030,6838 -Zittersheim,67559,245,7.870,0.893,0.809,1020,6875 -Enchenberg,57192,1252,9.694,0.991,0.897,1018,6887 -Saverne,67437,11151,26.344,1.634,1.479,1025,6856 -Struth,67483,247,4.120,0.646,0.585,1012,6874 -Meisenthal,57456,702,6.290,0.798,0.723,1020,6882 -Erckartswiller,67126,303,10.578,1.035,0.937,1021,6872 -Dossenheim-sur-Zinsel,67103,1074,17.351,1.326,1.201,1023,6863 -Wintersbourg,57747,267,4.008,0.637,0.577,1008,6861 -Rimling,57584,632,13.346,1.163,1.053,1010,6894 -Hanviller,57294,211,8.727,0.940,0.851,1026,6899 -Le Tronquay,14714,773,13.304,1.161,1.051,419,6909 -Tieffenbach,67491,267,5.063,0.716,0.648,1010,6874 -Mackwiller,67278,589,9.141,0.962,0.871,1003,6878 -Rosteig,67413,545,7.691,0.883,0.799,1019,6881 -Bazenville,14049,136,4.068,0.642,0.581,438,6917 -Schalbach,57635,332,12.717,1.135,1.028,1003,6863 -Obersoultzbach,67352,433,5.202,0.726,0.657,1025,6869 -Weislingen,67522,529,7.060,0.846,0.766,1014,6878 -Asnelles,14022,602,2.654,0.519,0.470,440,6922 -Diemeringen,67095,1613,8.975,0.954,0.864,1010,6880 -Etting,57201,756,7.145,0.851,0.771,1008,6888 -Rimsdorf,67401,311,6.096,0.786,0.712,1002,6876 -Zetting,57760,833,6.934,0.838,0.759,1003,6895 -Puberg,67381,352,4.970,0.710,0.643,1014,6878 -Ratzwiller,67385,253,8.887,0.949,0.859,1012,6879 -Veckersviller,57703,237,4.862,0.702,0.636,1008,6867 -Petersbach,67370,640,8.949,0.952,0.862,1015,6871 -Bickenholtz,57080,80,2.502,0.503,0.455,1005,6865 -Vœllerdingen,67508,396,13.440,1.167,1.057,1002,6880 -Erching,57196,407,6.786,0.829,0.751,1013,6899 -Rohrbach-lès-Bitche,57589,2272,13.245,1.158,1.048,1014,6888 -Vescheim,57709,327,1.842,0.432,0.391,1010,6862 -Lorentzen,67274,238,7.993,0.900,0.815,1005,6879 -Ernolsheim-lès-Saverne,67129,587,10.925,1.052,0.952,1019,6864 -Volmunster,57732,802,14.882,1.228,1.112,1020,6899 -Lemberg,57390,1468,10.946,1.053,0.953,1021,6886 -Durstel,67111,406,4.791,0.697,0.631,1007,6874 -Soucht,57658,1052,10.791,1.046,0.947,1017,6880 -Gungwiller,67178,280,1.710,0.416,0.377,1005,6872 -Schorbach,57639,541,13.418,1.166,1.056,1023,6898 -Eywiller,67136,283,4.915,0.706,0.639,1001,6872 -Neuwiller-lès-Saverne,67322,1119,32.027,1.801,1.631,1019,6864 -Obernai,67348,10953,25.753,1.615,1.462,1028,6825 -Drulingen,67105,1476,4.559,0.680,0.616,1007,6873 -Dehlingen,67088,361,10.058,1.009,0.914,1006,6885 -Nousseviller-lès-Bitche,57513,136,4.856,0.701,0.635,1020,6896 -Hinsbourg,67198,113,3.348,0.582,0.527,1014,6874 -Sparsbach,67475,244,13.697,1.178,1.067,1023,6875 -Urtière,25573,8,2.163,0.468,0.424,996,6691 -Siewiller,67467,389,6.257,0.796,0.721,1009,6867 -Barraux,38027,1885,11.256,1.068,0.967,935,6485 -Epping,57195,567,10.664,1.039,0.941,1013,6898 -Gœrlingen,67159,238,3.810,0.621,0.562,1000,6865 -Achen,57006,1007,12.042,1.105,1.000,1003,6891 -Sarreinsming,57633,1276,7.183,0.853,0.772,1001,6897 -Montabot,50334,277,11.720,1.090,0.987,396,6880 -Lohr,67273,498,10.424,1.028,0.931,1015,6871 -Weyer,67528,582,11.993,1.102,0.998,1006,6868 -Rahling,57561,768,21.294,1.469,1.330,1007,6888 -Reyersviller,57577,363,8.366,0.921,0.834,1020,6893 -Saint-Méen-le-Grand,35297,4622,18.616,1.373,1.243,315,6803 -Wiesviller,57745,987,8.863,0.948,0.858,1006,6893 -Pfalzweyer,67373,323,2.278,0.480,0.435,1013,6864 -Bust,67071,459,6.813,0.831,0.752,1012,6868 -Waldhambach,67514,619,12.626,1.131,1.024,1012,6879 -Adamswiller,67002,377,3.429,0.589,0.533,1007,6875 -Wittring,57748,793,8.216,0.912,0.826,1003,6891 -Hattmatt,67185,681,4.198,0.652,0.590,1026,6862 -Goetzenbruck,57250,1551,7.600,0.878,0.795,1020,6886 -Sant'Andréa-di-Cotone,2B293,244,8.788,0.944,0.855,1232,6159 -Bining,57083,1166,15.763,1.264,1.144,1014,6888 -Rimou,35242,332,13.464,1.168,1.058,363,6821 -Bliesbruck,57091,1010,10.864,1.049,0.950,1007,6897 -Friedolsheim,67145,239,3.589,0.603,0.546,1029,6855 -Bettwiller,67036,309,4.168,0.650,0.589,1007,6874 -Berg,67029,367,7.690,0.883,0.799,1005,6876 -Oermingen,67355,1252,14.707,1.221,1.106,1001,6888 -La Petite-Pierre,67371,624,19.933,1.421,1.287,1017,6874 -Montbronn,57477,1631,14.946,1.231,1.115,1012,6887 -Vieux-Lixheim,57713,259,6.527,0.813,0.736,1004,6860 -Volksberg,67509,355,9.463,0.979,0.886,1014,6878 -Blies-Ébersing,57092,660,5.226,0.728,0.659,1001,6900 -Vendenheim,67506,5528,16.200,1.281,1.160,1045,6851 -Butten,67072,674,15.220,1.242,1.125,1007,6882 -Fleisheim,57216,152,4.106,0.645,0.584,1007,6862 -Wintzenheim-Kochersberg,67542,396,1.982,0.448,0.406,1033,6850 -Brouviller,57114,427,10.117,1.012,0.916,1008,6856 -Hérange,57317,106,2.797,0.532,0.482,1005,6861 -Réding,57566,2406,11.720,1.090,0.987,1004,6859 -Soultz-les-Bains,67473,940,3.531,0.598,0.541,1030,6838 -Courcelles-sur-Seine,27180,2035,5.557,0.750,0.679,581,6898 -Heiligenstein,67189,957,3.976,0.635,0.575,1027,6824 -Kienheim,67236,565,3.246,0.573,0.519,1037,6852 -Illkirch-Graffenstaden,67218,26837,22.189,1.499,1.357,1046,6836 -Bergbieten,67030,699,4.428,0.670,0.607,1027,6838 -Belmesnil,76075,460,3.098,0.560,0.507,560,6965 -Achenheim,67001,2082,6.104,0.786,0.712,1040,6842 -Handschuheim,67181,274,2.456,0.499,0.452,1036,6843 -Bischheim,67043,17180,4.432,0.670,0.607,1051,6846 -Holtzheim,67212,3617,6.907,0.837,0.758,1044,6840 -Hohengœft,67208,527,3.456,0.592,0.536,1030,6849 -Willgottheim,67532,1088,9.230,0.967,0.876,1034,6851 -Saint-Senier-de-Beuvron,50553,363,11.281,1.069,0.968,379,6838 -Hœrdt,67205,4324,16.577,1.296,1.173,1051,6856 -Blangy-le-Château,14077,702,10.665,1.040,0.942,500,6909 -Odratzheim,67354,488,1.650,0.409,0.370,1029,6843 -Wangen,67517,712,4.071,0.642,0.581,1030,6844 -Eckwersheim,67119,1315,7.545,0.874,0.791,1043,6853 -Niederhausbergen,67326,1522,3.085,0.559,0.506,1048,6845 -Lupstein,67275,788,7.804,0.889,0.805,1031,6859 -Sainte-Colombe-près-Vernon,27525,314,2.684,0.521,0.472,580,6890 -Wasselonne,67520,5640,14.913,1.229,1.113,1025,6845 -Zeinheim,67556,201,2.468,0.500,0.453,1029,6852 -Osthoffen,67363,829,5.229,0.728,0.659,1038,6842 -Niedernai,67329,1244,11.292,1.070,0.969,1038,6824 -Ostwald,67365,12714,7.126,0.850,0.770,1046,6836 -Plobsheim,67378,4434,16.631,1.298,1.175,1050,6826 -Rangen,67383,206,1.682,0.413,0.374,1029,6851 -Lingolsheim,67267,18569,5.698,0.760,0.688,1045,6840 -Montaigu-les-Bois,50336,226,6.736,0.826,0.748,386,6875 -Westhouse,67526,1526,11.993,1.102,0.998,1039,6820 -Le Torp-Mesnil,76699,423,5.159,0.723,0.655,550,6961 -Durningen,67109,634,4.153,0.649,0.588,1035,6852 -Westhouse-Marmoutier,67527,271,3.934,0.631,0.571,1030,6852 -Truchtersheim,67495,4022,15.013,1.233,1.116,1040,6848 -Ichtratzheim,67217,308,3.146,0.565,0.512,1045,6831 -Oberhausbergen,67343,5383,3.795,0.620,0.561,1045,6846 -Nordheim,67335,880,6.416,0.806,0.730,1030,6848 -Schiltigheim,67447,31811,7.620,0.879,0.796,1046,6845 -Scharrachbergheim-Irmstett,67442,1203,3.331,0.581,0.526,1030,6841 -Wiwersheim,67548,873,3.367,0.584,0.529,1038,6849 -Eckbolsheim,67118,6729,5.363,0.737,0.667,1045,6840 -Russ,67420,1263,11.516,1.080,0.978,1017,6831 -Duntzenheim,67107,634,6.315,0.800,0.724,1035,6856 -Furdenheim,67150,1317,5.889,0.772,0.699,1034,6843 -Rosenwiller,67410,698,5.645,0.756,0.684,1029,6832 -Limersheim,67266,661,5.641,0.756,0.684,1039,6826 -Waltenheim-sur-Zorn,67516,658,5.008,0.712,0.645,1040,6860 -Dinsheim-sur-Bruche,67098,1447,4.978,0.710,0.643,1027,6838 -Schwenheim,67459,767,5.007,0.712,0.645,1023,6856 -Ernolsheim-Bruche,67128,1851,6.608,0.818,0.741,1038,6837 -Thal-Marmoutier,67489,781,3.407,0.588,0.532,1021,6854 -Hurtigheim,67214,745,4.770,0.695,0.629,1039,6846 -Wolxheim,67554,954,3.123,0.563,0.510,1033,6838 -Valff,67504,1297,10.924,1.052,0.952,1033,6825 -Ittenheim,67226,2125,6.901,0.836,0.757,1043,6845 -Mittelschaeffolsheim,67298,564,2.634,0.517,0.468,1043,6855 -Kuttolsheim,67253,628,4.741,0.693,0.627,1030,6849 -Fessenheim-le-Bas,67138,552,5.078,0.717,0.649,1036,6847 -Hohfrankenheim,67209,260,2.793,0.532,0.482,1038,6858 -Hangenbieten,67182,1508,4.207,0.653,0.591,1041,6837 -Krautwiller,67249,235,1.490,0.389,0.352,1044,6859 -Olwisheim,67361,494,3.019,0.553,0.501,1043,6853 -Hindisheim,67197,1464,11.915,1.099,0.995,1044,6830 -Ergersheim,67127,1325,6.483,0.810,0.733,1032,6840 -Goxwiller,67164,848,3.276,0.576,0.522,1033,6825 -Hœnheim,67204,11191,3.390,0.586,0.531,1051,6846 -Littenheim,67269,284,4.202,0.652,0.590,1032,6857 -Lipsheim,67268,2568,4.964,0.709,0.642,1045,6831 -Plaine,67377,989,22.833,1.521,1.377,1004,6823 -Kirchheim,67240,690,2.424,0.496,0.449,1029,6844 -Duttlenheim,67112,2886,8.686,0.938,0.849,1037,6837 -Molsheim,67300,9286,10.799,1.046,0.947,1033,6839 -Fegersheim,67137,5714,6.220,0.794,0.719,1047,6834 -Plagne,31422,99,4.226,0.654,0.592,542,6229 -Gougenheim,67163,550,6.755,0.827,0.749,1038,6855 -Maennolsheim,67279,232,2.757,0.529,0.479,1030,6854 -Traenheim,67492,648,3.074,0.558,0.505,1028,6841 -Crastatt,67078,270,3.392,0.586,0.531,1027,6849 -Saint-Nabor,67428,488,1.940,0.443,0.401,1027,6826 -Luc-sur-Mer,14384,3182,3.624,0.606,0.549,457,6918 -Altorf,67008,1273,10.168,1.015,0.919,1036,6832 -Balbronn,67018,649,10.509,1.032,0.934,1025,6839 -Dahlenheim,67081,755,5.478,0.745,0.675,1035,6841 -Kurtzenhouse,67252,1049,3.576,0.602,0.545,1052,6859 -Donnenheim,67100,345,3.775,0.618,0.560,1042,6856 -Rohr,67406,291,3.449,0.591,0.535,1033,6854 -Griesheim-près-Molsheim,67172,2164,4.674,0.688,0.623,1034,6833 -Breuschwickersheim,67065,1258,5.147,0.722,0.654,1038,6840 -Mutzenhouse,67312,452,2.275,0.480,0.435,1038,6859 -Dorlisheim,67101,2618,11.480,1.079,0.977,1034,6833 -Entzheim,67124,2268,8.336,0.919,0.832,1044,6837 -Nordhouse,67336,1731,11.426,1.076,0.974,1047,6827 -Strasbourg,67482,279284,78.267,2.816,2.550,1047,6839 -Duppigheim,67108,1587,7.346,0.863,0.781,1038,6838 -Dangolsheim,67085,730,4.633,0.685,0.620,1029,6837 -Wingersheim les Quatre Bans,67539,2272,18.746,1.378,1.248,1038,6855 -Pouylebon,32326,136,14.582,1.216,1.101,480,6278 -Westhoffen,67525,1659,20.691,1.448,1.311,1029,6843 -Hipsheim,67200,1015,4.545,0.679,0.615,1047,6830 -Griesheim-sur-Souffel,67173,1115,4.300,0.660,0.598,1045,6846 -Kolbsheim,67247,940,3.417,0.588,0.532,1039,6838 -Dachstein,67080,1810,7.466,0.870,0.788,1036,6839 -Stutzheim-Offenheim,67485,1377,7.391,0.865,0.783,1043,6845 -Oberschaeffolsheim,67350,2313,7.667,0.881,0.798,1043,6840 -Harreberg,57298,402,5.846,0.770,0.697,1008,6847 -Mundolsheim,67309,4741,4.268,0.658,0.596,1048,6850 -Wolfisheim,67551,4139,5.672,0.758,0.686,1044,6844 -Bénouville,14060,2069,5.409,0.740,0.670,460,6911 -Schaeffersheim,67438,846,4.091,0.644,0.583,1039,6826 -Planquery,14506,239,14.504,1.212,1.097,421,6900 -Lampertheim,67256,3004,6.809,0.831,0.752,1045,6851 -Marlenheim,67282,4234,14.466,1.211,1.096,1035,6846 -Wilwisheim,67534,727,5.377,0.738,0.668,1029,6861 -Meistratzheim,67286,1469,13.078,1.151,1.042,1039,6826 -Le Pont-de-Claix,38317,10698,5.699,0.760,0.688,913,6449 -Bourgheim,67060,616,2.839,0.536,0.485,1030,6823 -Lutzelhouse,67276,1904,28.603,1.702,1.541,1016,6832 -Blaesheim,67049,1325,10.229,1.018,0.922,1041,6830 -Barembach,67020,892,9.945,1.004,0.909,1012,6827 -Schnersheim,67452,1553,11.098,1.060,0.960,1038,6849 -Dimbsthal,67096,310,1.934,0.443,0.401,1019,6850 -Dabo,57163,2527,48.607,2.219,2.009,1009,6851 -Gottenhouse,67161,386,1.286,0.361,0.327,1021,6854 -Niederhaslach,67325,1411,6.960,0.840,0.761,1022,6833 -Haselbourg,57300,313,6.117,0.787,0.713,1009,6852 -Sommerau,67004,1515,16.033,1.275,1.154,1023,6851 -Lougratte,47152,404,20.552,1.443,1.307,514,6391 -Danne-et-Quatre-Vents,57168,681,7.226,0.856,0.775,1015,6856 -Mittelbronn,57468,688,7.833,0.891,0.807,1010,6857 -Hultehouse,57339,366,4.587,0.682,0.617,1015,6857 -Saint-Jean-Saverne,67425,574,6.552,0.815,0.738,1022,6861 -Sallenelles,14665,299,1.341,0.369,0.334,465,6911 -Marmoutier,67283,2705,14.218,1.200,1.086,1024,6854 -Lutzelbourg,57427,597,5.833,0.769,0.696,1011,6856 -Muhlbach-sur-Bruche,67306,648,8.399,0.922,0.835,1020,6832 -Cosswiller,67077,568,16.032,1.275,1.154,1025,6847 -Heiligenberg,67188,659,5.832,0.769,0.696,1024,6836 -Schirmeck,67448,2242,11.446,1.077,0.975,1008,6829 -Romanswiller,67408,1258,11.709,1.089,0.986,1020,6845 -Solbach,67470,105,2.778,0.531,0.481,1012,6822 -Monswiller,67302,2109,4.798,0.697,0.631,1021,6861 -Lochwiller,67272,428,4.619,0.684,0.619,1026,6854 -Wildersbach,67531,294,3.376,0.585,0.530,1012,6825 -Schneckenbusch,57637,301,2.114,0.463,0.419,1000,6851 -Ottersthal,67366,678,3.086,0.559,0.506,1021,6860 -Barr,67021,7215,21.195,1.465,1.326,1032,6820 -Rothau,67414,1575,3.876,0.627,0.568,1012,6823 -Waldolwisheim,67515,576,5.632,0.755,0.684,1024,6858 -Waltembourg,57743,244,1.369,0.372,0.337,1009,6858 -Henridorff,57315,695,7.332,0.862,0.780,1008,6857 -Vexaincourt,88503,161,11.404,1.075,0.973,1002,6829 -Démouville,14221,3209,3.576,0.602,0.545,462,6901 -Luvigny,88277,108,3.969,0.634,0.574,999,6830 -Brouderdorff,57113,970,4.804,0.698,0.632,1001,6850 -Arzviller,57033,539,5.168,0.724,0.656,1007,6856 -Lavars,38208,149,15.391,1.249,1.131,911,6418 -Raon-lès-Leau,54443,40,1.325,0.366,0.331,1004,6832 -Magny-en-Bessin,14385,159,4.458,0.672,0.608,434,6918 -Guntzviller,57280,388,5.507,0.747,0.676,1004,6855 -Moussey,88317,638,29.236,1.721,1.558,997,6820 -Plaine-de-Walsch,57544,638,4.917,0.706,0.639,1009,6852 -Hartzviller,57299,910,4.208,0.653,0.591,1000,6848 -Raon-sur-Plaine,88373,149,3.532,0.598,0.541,1002,6831 -Abreschviller,57003,1442,41.289,2.045,1.852,1004,6846 -Banville,14038,776,4.680,0.689,0.624,448,6919 -Walscheid,57742,1558,38.219,1.968,1.782,1004,6850 -Crépon,14196,218,5.462,0.744,0.674,444,6919 -Troisfontaines,57680,1279,12.891,1.143,1.035,1005,6847 -Hommert,57334,340,3.657,0.609,0.551,1008,6849 -Grandfontaine,67165,410,39.367,1.997,1.808,1000,6833 -Voyer,57734,446,4.489,0.674,0.610,1004,6846 -Hommarting,57333,861,10.263,1.020,0.924,1004,6855 -Saint-Quirin,57623,727,53.609,2.331,2.111,1001,6845 -Turquestein-Blancrupt,57682,16,30.389,1.755,1.589,998,6843 -Ryes,14552,511,9.689,0.991,0.897,438,6917 -Sainte-Croix-sur-Mer,14569,251,2.109,0.462,0.418,445,6920 -Tracy-sur-Mer,14709,338,3.738,0.615,0.557,435,6919 -Sommervieu,14676,1003,4.298,0.660,0.598,436,6917 -Manvieux,14401,130,2.901,0.542,0.491,434,6920 -Ver-sur-Mer,14739,1605,9.007,0.955,0.865,442,6919 -Vaux-sur-Aure,14732,350,7.514,0.873,0.790,429,6917 -Longues-sur-Mer,14377,610,12.371,1.120,1.014,429,6920 -Meuvaines,14430,147,7.419,0.867,0.785,439,6920 -Bernières-sur-Mer,14066,2325,7.738,0.885,0.801,453,6920 -Graye-sur-Mer,14318,656,6.648,0.821,0.743,448,6921 -Ranville,14530,1776,8.433,0.924,0.837,465,6909 -Courseulles-sur-Mer,14191,4156,8.069,0.904,0.818,448,6918 -Saint-Clément-de-Rivière,34247,4830,12.724,1.135,1.028,767,6291 -Colombiers-sur-Seulles,14169,166,3.401,0.587,0.531,445,6918 -Colleville-Montgomery,14166,2378,7.974,0.899,0.814,458,6912 -Biéville-Beuville,14068,3317,11.238,1.067,0.966,455,6909 -Amfreville,14009,1420,5.987,0.779,0.705,462,6910 -Mondeville,14437,9811,9.059,0.958,0.867,460,6899 -Épron,14242,1635,1.554,0.397,0.359,454,6907 -Blainville-sur-Orne,14076,5705,7.152,0.851,0.771,460,6907 -Mathieu,14407,2195,9.472,0.980,0.887,454,6913 -Janville,14344,363,4.451,0.672,0.608,469,6899 -Ouistreham,14488,9117,8.949,0.952,0.862,463,6912 -Périers-sur-le-Dan,14495,488,2.960,0.548,0.496,456,6911 -Banneville-la-Campagne,14036,167,6.446,0.808,0.732,463,6900 -Cuverville,14215,2095,2.064,0.457,0.414,461,6904 -Gonneville-en-Auge,14306,395,4.396,0.667,0.604,467,6910 -Cormelles-le-Royal,14181,4864,3.512,0.597,0.541,456,6900 -Hérouville-Saint-Clair,14327,22701,10.652,1.039,0.941,455,6907 -Petiville,14499,495,2.914,0.543,0.492,468,6910 -Saint-Pair,14640,220,3.334,0.581,0.526,468,6900 -Saline,14712,5468,16.686,1.300,1.177,463,6903 -Formigny La Bataille,14281,726,26.560,1.640,1.485,419,6923 -Asnières-en-Bessin,14023,64,4.642,0.686,0.621,413,6924 -Géfosse-Fontenay,14298,141,11.582,1.083,0.981,406,6925 -Saint-Laurent-sur-Mer,14605,254,3.951,0.633,0.573,417,6924 -Aure sur Mer,14591,743,10.779,1.045,0.946,421,6920 -Agy,14003,285,4.269,0.658,0.596,424,6910 -Saon,14667,230,5.266,0.730,0.661,420,6918 -Osmanville,14480,540,11.448,1.077,0.975,405,6921 -Noron-la-Poterie,14468,395,3.051,0.556,0.503,426,6910 -Vaucelles,14728,401,3.564,0.601,0.544,427,6917 -Mayrègne,31335,24,5.217,0.727,0.658,497,6196 -Saint-Clair-sur-l'Elle,50455,949,8.038,0.902,0.817,407,6905 -Airel,50004,541,10.152,1.014,0.918,402,6908 -Surrain,14681,158,7.189,0.853,0.772,421,6920 -Subles,14679,675,2.478,0.501,0.454,427,6912 -Saint-Jean-de-Savigny,50491,438,7.625,0.879,0.796,407,6908 -Tournières,14705,153,3.454,0.592,0.536,414,6911 -La Luzerne,50283,77,1.956,0.445,0.403,404,6901 -Le Mesnil-Rouxelin,50321,515,4.798,0.697,0.631,401,6903 -Cussy,14214,183,2.393,0.492,0.445,425,6915 -Blay,14078,384,7.204,0.854,0.773,420,6918 -Saint-Loup-Hors,14609,481,5.361,0.737,0.667,427,6912 -Saint-André-de-l'Épine,50446,554,7.280,0.859,0.778,406,6899 -Colombières,14168,211,11.055,1.058,0.958,409,6921 -Campigny,14130,190,5.676,0.758,0.686,425,6913 -Le Molay-Littry,14370,3021,27.382,1.666,1.508,421,6913 -Canchy,14132,204,5.810,0.767,0.694,411,6920 -Saint-Étienne-de-Tinée,6120,1551,172.709,4.183,3.787,1005,6354 -Arganchy,14019,231,7.102,0.848,0.768,430,6910 -Juaye-Mondaye,14346,668,16.114,1.278,1.157,429,6904 -Mandeville-en-Bessin,14397,336,8.859,0.947,0.857,420,6918 -Saint-Germain-du-Pert,14586,180,6.151,0.789,0.714,407,6921 -Saint-Georges-d'Elle,50473,402,9.050,0.958,0.867,408,6899 -Mézières-sur-Couesnon,35178,1715,25.231,1.599,1.448,373,6806 -Tour-en-Bessin,14700,653,10.376,1.025,0.928,427,6917 -Ranchy,14529,241,5.206,0.726,0.657,428,6914 -Maisons,14391,390,6.725,0.825,0.747,429,6919 -Lison,14367,448,10.970,1.054,0.954,405,6911 -Litteau,14369,287,7.061,0.846,0.766,415,6900 -Rosel,14542,554,3.907,0.629,0.570,450,6907 -Couvains,50148,488,15.120,1.238,1.121,406,6901 -Saint-Paul-du-Vernay,14643,811,15.364,1.248,1.130,429,6907 -Montfiquet,14445,104,19.897,1.420,1.286,419,6909 -Étréham,14256,342,4.294,0.660,0.598,425,6919 -Port-en-Bessin-Huppain,14515,1943,7.583,0.877,0.794,427,6921 -La Folie,14272,101,6.662,0.822,0.744,411,6913 -Saint-Fromond,50468,768,15.548,1.255,1.136,402,6913 -Saint-Georges-Montcocq,50475,915,9.084,0.959,0.868,402,6899 -Vierville-sur-Mer,14745,236,6.423,0.807,0.731,418,6926 -Ponts sur Seulles,14355,1161,12.971,1.146,1.038,446,6914 -Le Breuil-en-Bessin,14103,412,4.410,0.668,0.605,420,6913 -Barbeville,14040,173,3.567,0.601,0.544,428,6914 -Rubercy,14547,166,5.609,0.754,0.683,416,6915 -Cricqueville-en-Bessin,14204,193,8.643,0.936,0.847,408,6925 -Isigny-sur-Mer,14342,3656,62.035,2.507,2.270,402,6913 -Cristot,14205,211,3.875,0.627,0.568,441,6904 -Villiers-Fossard,50641,639,8.696,0.939,0.850,405,6902 -La Salle-les-Alpes,5161,1012,35.844,1.906,1.726,985,6438 -Cerisy-la-Forêt,50110,1006,24.079,1.562,1.414,409,6907 -Cottun,14184,215,3.807,0.621,0.562,423,6915 -Colleville-sur-Mer,14165,176,6.919,0.837,0.758,419,6923 -Mosles,14453,359,6.498,0.811,0.734,423,6917 -Venon,38533,721,4.296,0.660,0.598,920,6456 -Commes,14172,400,6.664,0.822,0.744,429,6920 -Crouay,14209,538,7.796,0.889,0.805,420,6913 -La Meauffe,50297,1055,10.197,1.016,0.920,402,6903 -Saint-Marcouf,14613,101,5.175,0.724,0.656,410,6913 -Saint-Jean-le-Vieux,38404,287,4.698,0.690,0.625,924,6460 -Cahagnolles,14121,254,7.292,0.860,0.779,423,6904 -Cardonville,14136,109,3.374,0.585,0.530,407,6923 -Longueville,14378,291,6.657,0.821,0.743,411,6924 -Saint-Pierre-du-Vauvray,27598,1280,4.471,0.673,0.609,569,6903 -Revel,38334,1327,29.113,1.717,1.555,930,6452 -La Chapelle-Janson,35062,1442,26.988,1.654,1.498,394,6811 -Cambes-en-Plaine,14125,1707,3.195,0.569,0.515,455,6909 -Saint-Manvieu-Norrey,14610,1942,8.355,0.920,0.833,447,6904 -Basly,14044,1128,4.048,0.640,0.579,449,6913 -Tilly-sur-Seulles,14692,1695,8.968,0.953,0.863,438,6905 -Bretteville-sur-Odon,14101,3759,6.486,0.811,0.734,450,6901 -Glanville,14302,175,6.527,0.813,0.736,488,6910 -Saint-Vigor-le-Grand,14663,2402,9.634,0.988,0.895,434,6914 -Authie,14030,1582,3.225,0.572,0.518,449,6907 -Le Manoir,14400,217,5.875,0.772,0.699,436,6916 -Vauville,14731,190,5.192,0.725,0.656,485,6918 -Louvigny,14383,2771,5.680,0.759,0.687,452,6898 -Thue et Mue,14098,5762,37.134,1.940,1.757,442,6906 -Vienne-en-Bessin,14744,299,4.170,0.650,0.589,434,6915 -Ellon,14236,463,6.739,0.826,0.748,433,6908 -Thaon,14685,1503,8.443,0.925,0.838,451,6912 -Saint-Martin-des-Entrées,14630,698,6.150,0.789,0.714,434,6914 -Nonant,14465,495,6.823,0.831,0.752,436,6910 -Rots,14543,2408,23.442,1.541,1.395,449,6905 -Carcagny,14135,284,4.294,0.660,0.598,436,6912 -Vaux-sur-Seulles,14733,302,6.583,0.817,0.740,436,6912 -Esquay-sur-Seulles,14250,299,3.051,0.556,0.503,434,6914 -Saint-Germain-la-Blanche-Herbe,14587,2310,2.635,0.517,0.468,449,6905 -Lingèvres,14364,466,14.638,1.218,1.103,429,6904 -Montreuil-sur-Ille,35195,2336,15.285,1.244,1.126,352,6808 -Bayeux,14047,13525,7.087,0.847,0.767,432,6913 -Fontenay-le-Pesnel,14278,1169,10.097,1.011,0.915,436,6902 -Cairon,14123,1967,5.966,0.777,0.704,451,6908 -Juvigny-sur-Seulles,14348,85,3.550,0.600,0.543,436,6901 -Verson,14738,3557,10.373,1.025,0.928,449,6903 -Caen,14118,105403,25.732,1.615,1.462,455,6901 -Bucéels,14111,385,4.883,0.703,0.637,435,6907 -Creully sur Seulles,14200,2325,18.627,1.374,1.244,442,6912 -Ducy-Sainte-Marguerite,14232,158,3.607,0.605,0.548,438,6908 -Rocques,14540,289,6.202,0.793,0.718,501,6901 -Audrieu,14026,1015,11.260,1.068,0.967,436,6908 -Moulins en Bessin,14406,1155,17.310,1.324,1.199,439,6910 -Fleurigné,35112,995,18.115,1.355,1.227,399,6815 -Monceaux-en-Bessin,14436,558,4.762,0.695,0.629,431,6914 -Chouain,14159,226,3.155,0.565,0.512,435,6907 -Drubec,14230,116,3.242,0.573,0.519,490,6910 -Tourgéville,14701,809,12.238,1.114,1.009,487,6914 -Beaumont-en-Auge,14055,407,8.117,0.907,0.821,488,6910 -Sainte-Agnès,38350,567,26.633,1.643,1.488,936,6461 -Grangues,14316,241,6.709,0.824,0.746,477,6910 -Huez,38191,1303,20.318,1.435,1.299,945,6451 -Villerville,14755,660,3.343,0.582,0.527,491,6924 -Deauville,14220,3678,3.777,0.619,0.560,488,6920 -Bonneville-sur-Touques,14086,358,6.666,0.822,0.744,489,6919 -Saint-Hymer,14593,645,12.617,1.131,1.024,496,6908 -Putot-en-Auge,14524,298,6.571,0.816,0.739,475,6905 -Le Fournet,14285,60,3.053,0.556,0.503,491,6903 -Villers-sur-Mer,14754,2694,9.045,0.957,0.866,481,6915 -Ens,65157,26,3.487,0.594,0.538,481,6192 -Canapville,14131,226,2.525,0.506,0.458,491,6916 -Léaupartie,14358,88,3.236,0.573,0.519,484,6902 -Saint-Pierre-Azif,14645,164,6.297,0.799,0.723,484,6913 -Valsemé,14723,278,5.711,0.761,0.689,486,6908 -Gonneville-sur-Mer,14305,676,13.424,1.166,1.056,480,6916 -Brucourt,14110,115,6.640,0.820,0.742,474,6911 -Armous-et-Cau,32009,86,9.271,0.969,0.877,475,6279 -Gonneville-sur-Honfleur,14304,866,8.253,0.914,0.828,501,6925 -Angerville,14012,156,3.936,0.632,0.572,481,6910 -Saint-Laurent-de-Terregatte,50500,645,16.686,1.300,1.177,387,6835 -Annebault,14016,430,5.754,0.764,0.692,484,6910 -Cricquebœuf,14202,306,1.842,0.432,0.391,492,6924 -Dozulé,14229,2283,5.245,0.729,0.660,479,6905 -Pierrefitte-en-Auge,14500,159,5.422,0.741,0.671,497,6912 -Équemauville,14243,1456,6.034,0.782,0.708,496,6925 -Beaufour-Druval,14231,441,11.337,1.072,0.971,486,6907 -Saint-Martin-aux-Chartrains,14620,411,5.092,0.718,0.650,493,6914 -Bonnebosq,14083,688,12.351,1.119,1.013,490,6906 -Saint-Étienne-la-Thillaye,14575,433,12.428,1.122,1.016,491,6916 -Danestal,14218,378,6.375,0.804,0.728,486,6908 -Saint-Arnoult,14557,1182,5.129,0.721,0.653,488,6920 -Le Torquesne,14694,508,5.287,0.732,0.663,492,6905 -Branville,14093,204,6.388,0.805,0.729,485,6911 -Hotot-en-Auge,14335,306,24.402,1.572,1.423,475,6905 -Norolles,14466,306,6.535,0.814,0.737,497,6903 -Cricqueville-en-Auge,14203,185,6.862,0.834,0.755,476,6910 -Saint-Samson,14657,305,3.660,0.609,0.551,471,6903 -Touques,14699,3719,8.144,0.908,0.822,492,6920 -Honfleur,14333,7728,13.675,1.177,1.066,496,6927 -Cabourg,14117,3657,5.340,0.736,0.666,473,6913 -Bazian,32033,116,12.675,1.133,1.026,486,6291 -Pennedepie,14492,279,5.664,0.758,0.686,496,6928 -Gerrots,14300,53,3.478,0.594,0.538,481,6903 -Saint-Vaast-en-Auge,14660,95,3.006,0.552,0.500,482,6913 -Heuland,14329,88,2.975,0.549,0.497,481,6909 -Saint-Juvat,22308,657,18.049,1.352,1.224,327,6822 -Victot-Pontfol,14743,117,10.913,1.052,0.952,480,6903 -Saint-Broladre,35259,1129,24.135,1.564,1.416,354,6841 -Fourneville,14286,499,6.849,0.833,0.754,500,6921 -Noyal-sous-Bazouges,35205,388,15.032,1.234,1.117,356,6821 -Douville-en-Auge,14227,214,6.221,0.794,0.719,482,6913 -Crollon,50155,301,4.781,0.696,0.630,376,6842 -Clarbec,14161,367,9.687,0.991,0.897,491,6906 -Goustranville,14308,184,10.456,1.029,0.932,476,6907 -Houlgate,14338,1951,4.765,0.695,0.629,477,6914 -Arvieux,5007,372,73.214,2.724,2.466,991,6415 -Basseneville,14045,260,10.730,1.043,0.944,472,6903 -Périers-en-Auge,14494,139,5.057,0.716,0.648,476,6910 -Vieux-Bourg,14748,83,1.258,0.357,0.323,498,6916 -Repentigny,14533,89,2.135,0.465,0.421,485,6903 -Rumesnil,14550,102,5.402,0.740,0.670,484,6902 -La Roque-Baignard,14541,115,4.699,0.690,0.625,487,6902 -Frauenberg,57234,575,2.730,0.526,0.476,1001,6900 -Trouville-sur-Mer,14715,4642,6.799,0.830,0.751,490,6925 -Saint-Léger-Dubosq,14606,168,4.078,0.643,0.582,481,6909 -Reux,14534,418,7.423,0.867,0.785,493,6909 -Blonville-sur-Mer,14079,1530,6.844,0.833,0.754,485,6916 -Ormersviller,57526,395,7.301,0.860,0.779,1018,6902 -Barneville-la-Bertran,14041,128,4.184,0.651,0.589,496,6925 -Le Noyer,5095,290,21.671,1.482,1.342,935,6406 -Saint-Gatien-des-Bois,14578,1290,49.373,2.237,2.025,497,6916 -Saint-Jouin,14598,204,5.125,0.721,0.653,480,6905 -Saint-Chaffrey,5133,1635,25.744,1.615,1.462,984,6430 -Saint-Pierre-du-Jonquet,14651,232,8.271,0.915,0.828,471,6903 -Ouilly-le-Vicomte,14487,817,8.018,0.901,0.816,495,6901 -Le Breuil-en-Auge,14102,1028,9.439,0.978,0.885,499,6906 -Formentin,14280,247,5.981,0.778,0.704,491,6906 -Pont-Aven,29217,2824,28.629,1.703,1.542,194,6778 -Dives-sur-Mer,14225,5702,6.286,0.798,0.723,474,6913 -Loutzviller,57421,149,3.252,0.574,0.520,1021,6902 -Plobannalec-Lesconil,29165,3457,18.528,1.370,1.240,158,6772 -Walschbronn,57741,498,10.078,1.011,0.915,1024,6903 -Bousseviller,57103,125,3.974,0.635,0.575,1024,6900 -Castelnavet,32081,128,18.045,1.352,1.224,467,6289 -Saint-Pierre-d'Aubézies,32403,72,8.390,0.922,0.835,472,6288 -Lupiac,32219,300,34.497,1.870,1.693,472,6288 -Lamazère,32187,123,7.461,0.869,0.787,493,6276 -Saint-Bonnet-en-Champsaur,5132,2025,35.883,1.907,1.727,949,6405 -Ricourt,32342,67,7.951,0.898,0.813,472,6268 -Saint-Arroman,32361,138,12.213,1.112,1.007,497,6262 -Schweyen,57641,317,11.314,1.071,0.970,1025,6905 -Waldhouse,57738,400,6.594,0.817,0.740,1024,6903 -La Roche-de-Rame,5122,827,40.967,2.037,1.844,988,6417 -Breidenbach,57108,331,10.919,1.052,0.952,1024,6901 -Trégunc,29293,7042,50.695,2.266,2.052,185,6771 -Elliant,29049,3234,70.605,2.675,2.422,184,6795 -Coray,29041,1903,31.437,1.785,1.616,185,6795 -La Forêt-Fouesnant,29057,3332,19.110,1.391,1.259,183,6783 -Rosporden,29241,7643,57.485,2.413,2.185,192,6788 -Gourlizon,29065,897,9.901,1.002,0.907,157,6793 -Leuhan,29125,808,32.705,1.820,1.648,200,6802 -Bozel,73055,1900,28.792,1.708,1.546,982,6489 -Névez,29153,2647,25.703,1.614,1.461,191,6763 -Saint-Yvi,29272,3106,27.359,1.665,1.508,183,6783 -Gouesnach,29060,2761,16.993,1.312,1.188,172,6783 -Tourch,29281,1038,19.855,1.418,1.284,194,6795 -Saint-Jean-Trolimon,29252,976,14.507,1.212,1.097,158,6777 -Melgven,29146,3375,51.234,2.278,2.063,194,6778 -Le Juch,29087,719,14.271,1.202,1.088,161,6795 -Ergué-Gabéric,29051,8104,39.715,2.006,1.816,181,6794 -Pouldreuzic,29225,2137,16.805,1.305,1.182,154,6788 -Saint-Évarzec,29247,3540,24.717,1.583,1.433,175,6783 -Confort-Meilars,29145,881,14.832,1.226,1.110,149,6797 -Mahalon,29143,952,21.248,1.467,1.328,152,6796 -Pont-Croix,29218,1583,8.504,0.928,0.840,144,6797 -Plogastel-Saint-Germain,29167,1929,31.514,1.787,1.618,162,6791 -Plonéis,29173,2392,22.140,1.498,1.356,161,6795 -Pluguffan,29216,4087,32.298,1.809,1.638,162,6785 -Briançon,5023,11950,28.297,1.693,1.533,988,6432 -Plouhinec,29197,3960,28.382,1.696,1.536,147,6794 -Landudec,29108,1419,20.865,1.454,1.316,157,6793 -Plogoff,29168,1230,12.017,1.103,0.999,125,6798 -Combrit,29037,4048,24.148,1.564,1.416,162,6779 -Saint-Pancrace,73267,293,5.690,0.759,0.687,956,6470 -ÃŽle-de-Sein,29083,244,0.546,0.235,0.213,117,6799 -Tréogat,29298,583,9.718,0.992,0.898,153,6781 -Plomeur,29171,3786,29.775,1.737,1.573,151,6775 -Pouldergat,29224,1215,24.408,1.573,1.424,153,6799 -Plonéour-Lanvern,29174,6071,48.840,2.225,2.015,153,6778 -Plomelin,29170,4187,26.260,1.631,1.477,164,6783 -Audierne,29003,3684,18.643,1.374,1.244,134,6796 -Plogonnec,29169,3141,53.755,2.334,2.113,172,6802 -Saint-Jean-de-Maurienne,73248,7794,11.496,1.079,0.977,962,6472 -Penmarch,29158,5352,16.732,1.302,1.179,151,6773 -Clohars-Fouesnant,29032,2037,12.904,1.143,1.035,172,6781 -Guilvinec,29072,2684,2.378,0.491,0.445,155,6770 -Albiez-le-Jeune,73012,146,12.429,1.122,1.016,966,6465 -Tréguennec,29292,317,9.334,0.972,0.880,151,6780 -Pont-l'Abbé,29220,8183,18.305,1.362,1.233,164,6776 -Treffiagat,29284,2393,8.245,0.914,0.828,156,6770 -La Grave,5063,484,123.609,3.539,3.204,962,6453 -Saint-Crépin,5136,722,46.959,2.181,1.975,984,6409 -Puy-Saint-Vincent,5110,284,22.714,1.517,1.374,978,6420 -Aussois,73023,673,42.789,2.082,1.885,991,6466 -Dévoluy,5139,990,186.546,4.348,3.937,923,6405 -Réotier,5116,195,22.330,1.504,1.362,977,6406 -Buissard,5025,206,2.962,0.548,0.496,950,6402 -Champoléon,5032,144,101.995,3.215,2.911,965,6414 -Villar-d'Arêne,5181,322,78.077,2.813,2.547,965,6433 -Guillestre,5065,2314,51.434,2.283,2.067,1001,6408 -Planay,73201,419,23.217,1.534,1.389,987,6487 -Vallouise-Pelvoux,5101,1230,200.518,4.507,4.081,965,6414 -Saint-Martin-de-la-Porte,73258,685,19.250,1.397,1.265,969,6466 -La Fare-en-Champsaur,5054,443,10.254,1.019,0.923,945,6401 -Val-des-Prés,5174,655,44.767,2.130,1.929,993,6428 -Orcières,5096,710,100.287,3.188,2.886,965,6411 -Puy-Saint-Pierre,5109,534,7.847,0.892,0.808,983,6429 -Veurey-Voroize,38540,1440,12.544,1.127,1.020,902,6464 -Cervières,5027,182,110.396,3.344,3.028,993,6429 -Le Châtellier,35071,422,13.508,1.170,1.059,386,6825 -Les Vigneaux,5180,535,16.168,1.280,1.159,979,6423 -Le Mesnil-Ozenne,50317,264,4.673,0.688,0.623,391,6850 -Orelle,73194,352,73.241,2.724,2.466,981,6453 -La Chapelle-en-Valgaudémar,5064,102,127.641,3.596,3.256,950,6422 -Saint-Julien-Mont-Denis,73250,1626,32.955,1.827,1.654,968,6475 -L'Argentière-la-Bessée,5006,2293,65.283,2.572,2.329,966,6412 -Saint-Clément-sur-Durance,5134,300,26.076,1.625,1.471,983,6399 -Villarembert,73318,244,9.560,0.984,0.891,958,6464 -Saint-Julien-en-Champsaur,5147,358,10.342,1.024,0.927,949,6400 -Villar-Saint-Pancrace,5183,1471,42.887,2.085,1.888,990,6417 -Saint-Michel-de-Chaillol,5153,324,17.013,1.313,1.189,953,6406 -Freissinières,5058,208,90.709,3.032,2.745,965,6411 -Saint-Martin-de-Queyrières,5151,1127,55.732,2.376,2.151,984,6425 -Poligny,5104,299,13.911,1.187,1.075,938,6401 -Saint-Jean-d'Arves,73242,262,76.179,2.778,2.515,962,6453 -Valmeinier,73307,499,54.929,2.359,2.136,980,6452 -Modane,73157,3120,74.505,2.748,2.488,985,6452 -Saint-Martin-d'Arc,73256,360,4.925,0.706,0.639,971,6461 -Avrieux,73026,387,38.541,1.976,1.789,992,6456 -Fourneaux,73117,671,5.045,0.715,0.647,984,6458 -Freney,73119,104,11.177,1.064,0.963,986,6461 -La Plagne Tarentaise,73150,3660,94.520,3.095,2.802,994,6496 -Broualan,35044,376,12.898,1.143,1.035,358,6829 -Courchevel,73227,2365,68.974,2.644,2.394,978,6490 -Peisey-Nancroix,73197,641,72.468,2.710,2.454,997,6502 -Pralognan-la-Vanoise,73206,733,106.270,3.281,2.971,987,6470 -Sarcenas,38472,191,7.934,0.897,0.812,915,6470 -Champagny-en-Vanoise,73071,593,97.639,3.145,2.848,992,6495 -Noyarey,38281,2240,17.060,1.315,1.191,907,6465 -Grenoble,38185,158180,18.430,1.367,1.238,910,6461 -Miribel-les-Échelles,38236,1720,29.214,1.720,1.557,912,6491 -La Tronche,38516,6644,6.460,0.809,0.732,915,6463 -Saint-Béron,73226,1654,8.651,0.936,0.847,912,6492 -Saint-Martin-le-Vinoux,38423,5757,9.991,1.006,0.911,915,6463 -Saint-Pierre-de-Genebroz,73275,340,6.136,0.788,0.713,915,6486 -Saint-Égrève,38382,15902,10.787,1.045,0.946,910,6461 -Fontanil-Cornillon,38170,2722,5.318,0.734,0.665,908,6464 -Meylan,38229,17115,12.680,1.133,1.026,917,6459 -Saint-Martin-d'Hères,38421,38634,9.526,0.982,0.889,917,6459 -Quaix-en-Chartreuse,38328,900,18.320,1.362,1.233,915,6463 -Sassenage,38474,11372,13.317,1.162,1.052,908,6459 -Fontaine,38169,22411,6.725,0.825,0.747,908,6458 -Chirens,38105,2332,17.564,1.334,1.208,898,6481 -Mont-Saint-Martin,38258,80,5.160,0.723,0.655,911,6470 -Saint-Jean-d'Avelanne,38398,955,7.862,0.893,0.809,907,6494 -Dullin,73104,427,5.279,0.731,0.662,915,6497 -Saint-Sulpice-des-Rivoires,38460,433,7.157,0.852,0.771,905,6491 -Voissant,38564,220,3.924,0.631,0.571,912,6491 -Domessin,73100,1847,9.827,0.998,0.904,910,6495 -Massieu,38222,743,10.566,1.035,0.937,904,6484 -Saint-Geoire-en-Valdaine,38386,2408,16.711,1.301,1.178,903,6487 -Charancieu,38080,758,5.538,0.749,0.678,901,6496 -Merlas,38228,494,15.522,1.254,1.135,909,6485 -Saint-Nicolas-de-Macherin,38432,933,10.644,1.038,0.940,903,6483 -Le Pont-de-Beauvoisin,73204,2072,1.845,0.432,0.391,909,6497 -Montferrat,38256,1763,13.055,1.150,1.041,904,6491 -Saint-Aupre,38362,1127,12.112,1.108,1.003,906,6483 -La Sure en Chartreuse,38407,991,27.825,1.679,1.520,907,6477 -Entre-deux-Guiers,38155,1709,10.491,1.031,0.933,917,6480 -Les Échelles,73105,1214,3.767,0.618,0.560,916,6486 -Velanne,38531,530,8.125,0.907,0.821,904,6491 -Pressins,38323,1152,10.179,1.016,0.920,906,6493 -Le Pont-de-Beauvoisin,38315,3602,7.420,0.867,0.785,910,6495 -Saint-Albin-de-Vaulserre,38354,401,4.989,0.711,0.644,910,6491 -Saint-Bueil,38372,722,3.946,0.632,0.572,909,6490 -Moirans,38239,8042,20.021,1.424,1.289,901,6475 -Coublevie,38133,4668,6.977,0.841,0.761,904,6475 -Saint-Joseph-de-Rivière,38405,1217,17.482,1.331,1.205,909,6479 -Saint-Jean-de-Moirans,38400,3482,6.527,0.813,0.736,903,6476 -Saint-Étienne-de-Crossey,38383,2546,13.179,1.156,1.047,904,6480 -Le Versoud,38538,4797,6.161,0.790,0.715,926,6463 -Ambel,38008,25,4.866,0.702,0.636,931,6417 -Valjouffrey,38522,138,126.580,3.581,3.242,952,6423 -Percy,38301,169,15.869,1.268,1.148,912,6417 -Monestier-d'Ambel,38241,23,11.233,1.067,0.966,934,6412 -Entraigues,38154,234,21.501,1.476,1.336,931,6429 -Saint-Jacques-en-Valgodemard,5144,148,15.444,1.251,1.133,945,6413 -La Salette-Fallavaux,38469,64,22.453,1.508,1.365,939,6420 -Siévoz,38489,138,7.404,0.866,0.784,926,6428 -Seyssinet-Pariset,38485,11981,10.776,1.045,0.946,908,6458 -Lavaldens,38207,157,56.795,2.399,2.172,925,6436 -Saint-Baudille-et-Pipet,38366,256,35.992,1.910,1.729,914,6413 -Gières,38179,6601,7.089,0.848,0.768,920,6460 -Saint-Martin-de-Clelles,38419,183,14.970,1.232,1.115,902,6419 -Saint-Honoré,38396,810,14.657,1.219,1.104,921,6429 -La Combe-de-Lancey,38120,697,18.776,1.379,1.249,926,6462 -La Mure,38269,4970,8.327,0.919,0.832,922,6426 -Clelles,38113,557,20.856,1.454,1.316,910,6421 -Besse,38040,129,50.945,2.272,2.057,956,6453 -Monceau-le-Waast,2493,216,5.368,0.737,0.667,753,6947 -Vizille,38562,7428,10.807,1.046,0.947,919,6443 -Prébois,38321,166,16.054,1.275,1.154,912,6413 -Treffort,38513,283,12.796,1.139,1.031,911,6425 -Saint-Jean-d'Hérans,38403,292,17.621,1.336,1.210,915,6422 -La Motte-d'Aveillans,38265,1724,9.909,1.002,0.907,916,6428 -Marcieu,38217,73,13.283,1.160,1.050,911,6428 -Cornillon-en-Trièves,38127,167,14.047,1.193,1.080,913,6416 -Claix,38111,8029,23.473,1.542,1.396,907,6453 -Chichilianne,38103,295,61.934,2.505,2.268,904,6412 -Saint-Martin-d'Uriage,38422,5416,35.595,1.899,1.719,921,6452 -Les Côes-de-Corps,38132,68,9.855,0.999,0.905,933,6422 -Laffrey,38203,445,7.205,0.854,0.773,918,6439 -Villard-Notre-Dame,38549,26,14.126,1.196,1.083,939,6436 -Livet-et-Gavet,38212,1304,62.110,2.509,2.272,934,6451 -Notre-Dame-de-Mésage,38279,1164,4.598,0.683,0.618,916,6446 -Mayres-Savel,38224,108,13.713,1.179,1.067,912,6424 -Vaujany,38527,322,74.409,2.746,2.486,946,6454 -Villard-Reculas,38550,56,5.027,0.714,0.646,939,6447 -La Salle-en-Beaumont,38470,322,9.262,0.969,0.877,927,6423 -Saint-Pierre-de-Mésage,38445,760,7.050,0.845,0.765,917,6442 -Saint-Arey,38361,83,7.009,0.843,0.763,918,6423 -Herbeys,38188,1360,7.955,0.898,0.813,918,6454 -Auris,38020,196,13.528,1.171,1.060,944,6447 -Saint-Christophe-en-Oisans,38375,104,237.775,4.908,4.444,961,6439 -Aspres-lès-Corps,5009,107,16.564,1.295,1.173,935,6418 -Saint-Jean-de-Vaulx,38402,533,10.390,1.026,0.929,915,6443 -Saint-Paul-lès-Monestier,38438,263,13.889,1.186,1.074,907,6433 -Séchilienne,38478,1038,20.366,1.436,1.300,919,6443 -Saint-André-d'Hébertot,14555,440,9.873,1.000,0.905,500,6916 -Corps,38128,483,11.149,1.063,0.962,933,6416 -Brié-et-Angonnes,38059,2553,9.804,0.997,0.903,917,6453 -Glandage,26142,113,52.320,2.302,2.084,910,6399 -Le Freney-d'Oisans,38173,252,20.884,1.455,1.317,946,6453 -Saint-Guillaume,38391,261,13.478,1.169,1.058,903,6432 -Montbonnot-Saint-Martin,38249,5015,6.609,0.818,0.741,923,6461 -Châtel-en-Trièves,38456,452,47.803,2.201,1.993,925,6420 -Prunières,38326,360,8.168,0.910,0.824,915,6427 -Saint-Nizier-du-Moucherotte,38433,1105,11.409,1.075,0.973,905,6454 -Villard-Reymond,38551,43,10.988,1.055,0.955,937,6438 -Lans-en-Vercors,38205,2645,39.016,1.988,1.800,906,6447 -Sousville,38497,139,2.964,0.548,0.496,922,6426 -Saint-Théoffrey,38462,513,7.547,0.874,0.791,919,6439 -Échirolles,38151,35855,7.849,0.892,0.808,915,6452 -Saint-Michel-en-Beaumont,38428,31,7.865,0.893,0.809,933,6423 -Oulles,38286,7,14.547,1.214,1.099,936,6444 -Cognet,38116,43,1.948,0.444,0.402,918,6423 -La Motte-en-Champsaur,5090,219,55.337,2.368,2.144,943,6412 -Valbonnais,38518,498,24.228,1.567,1.419,926,6426 -Feissons-sur-Salins,73113,186,4.788,0.697,0.631,976,6492 -Vaulnaveys-le-Bas,38528,1265,11.906,1.098,0.994,920,6450 -Saint-Georges-de-Commiers,38388,2145,14.206,1.200,1.086,913,6444 -Notre-Dame-de-Vaulx,38280,503,7.921,0.896,0.811,914,6438 -Saint-Mury-Monteymond,38430,325,10.974,1.054,0.954,932,6457 -Le Glaizil,5062,170,21.662,1.481,1.341,936,6414 -Ornon,38285,143,23.535,1.544,1.398,931,6444 -Avignonet,38023,196,9.012,0.956,0.866,912,6430 -Chamrousse,38567,441,12.233,1.113,1.008,929,6452 -Pellafol,38299,136,35.124,1.886,1.708,924,6411 -Saint-Paul-de-Varces,38436,2186,19.947,1.422,1.287,904,6442 -Varces-Allières-et-Risset,38524,8278,20.904,1.455,1.317,912,6449 -Seyssins,38486,7352,8.027,0.902,0.817,907,6453 -Aubessagne,5039,705,27.605,1.672,1.514,938,6409 -Allemond,38005,989,56.637,2.396,2.169,934,6451 -Les Deux Alpes,38253,1905,81.753,2.878,2.606,945,6443 -Saint-Firmin,5142,465,22.078,1.496,1.355,936,6413 -Monestier-de-Clermont,38242,1427,5.325,0.735,0.665,907,6426 -Château-Bernard,38090,272,18.342,1.363,1.234,902,6437 -Jarrie,38200,3734,13.356,1.163,1.053,914,6451 -Quet-en-Beaumont,38329,67,8.159,0.909,0.823,929,6417 -Saint-Maurice-en-Trièves,38424,154,13.023,1.149,1.040,909,6407 -Murianette,38271,892,6.187,0.792,0.717,921,6458 -Saint-Michel-les-Portes,38429,269,21.384,1.472,1.333,905,6425 -Saint-Maurice-en-Valgodemard,5152,125,37.209,1.942,1.758,945,6420 -La Morte,38264,130,19.232,1.396,1.264,922,6439 -Sainte-Luce,38414,43,8.024,0.902,0.817,927,6421 -Les Avanchers-Valmorel,73024,775,27.554,1.671,1.513,967,6487 -Le Bourg-d'Oisans,38052,3259,55.947,2.381,2.156,934,6449 -Sinard,38492,677,10.913,1.052,0.952,908,6433 -Vaulnaveys-le-Haut,38529,3725,16.683,1.300,1.177,920,6451 -Oris-en-Rattier,38283,116,18.690,1.376,1.246,927,6427 -Saint-Pierre-de-Méaroz,38444,132,4.671,0.688,0.623,922,6424 -Le Pontet,73205,125,8.659,0.937,0.848,955,6495 -Bully,76147,911,19.619,1.410,1.277,578,6960 -Pierre-Châtel,38304,1500,12.355,1.119,1.013,920,6430 -Les Mollettes,73159,797,5.426,0.741,0.671,937,6490 -Ponsonnas,38313,288,2.952,0.547,0.495,920,6424 -Sainte-Marie-de-Cuines,73255,808,14.991,1.232,1.115,960,6476 -Villard-Saint-Christophe,38552,406,14.345,1.206,1.092,925,6438 -Tréminis,38514,180,49.464,2.239,2.027,914,6407 -Lus-la-Croix-Haute,26168,549,87.946,2.985,2.703,922,6405 -Saint-Marcel,73253,607,8.873,0.948,0.858,978,6498 -La Trinité,73302,347,4.868,0.702,0.636,946,6496 -Saint-Georges-d'Hurtières,73237,333,11.815,1.094,0.991,954,6494 -Hauteville,73133,349,2.452,0.498,0.451,947,6496 -La Chavanne,73082,625,3.066,0.557,0.504,938,6492 -La Croix-de-la-Rochette,73095,353,3.045,0.555,0.503,944,6490 -Saint-Pierre-de-Soucy,73276,445,9.023,0.956,0.866,943,6495 -Champ-Laurent,73072,38,4.951,0.708,0.641,949,6494 -Les Allues,73015,1829,86.010,2.952,2.673,985,6471 -Vimines,73326,1996,14.222,1.200,1.086,920,6495 -Argentine,73019,953,28.151,1.689,1.529,964,6494 -Notre-Dame-du-Cruet,73189,225,1.897,0.438,0.397,958,6481 -Montvernier,73177,226,6.678,0.823,0.745,960,6475 -La Chapelle,73074,334,12.120,1.108,1.003,956,6486 -Châteauneuf,73079,876,7.074,0.847,0.767,946,6499 -Montendry,73166,61,8.199,0.911,0.825,955,6496 -Villard-Sallet,73316,290,3.137,0.564,0.511,946,6493 -Vensat,63446,500,16.207,1.281,1.160,710,6552 -Montmélian,73171,4118,5.646,0.756,0.684,939,6496 -Maupertuis,50295,135,5.484,0.745,0.675,392,6879 -Saint-Avre,73224,876,3.513,0.597,0.541,961,6479 -Guchen,65212,356,5.673,0.758,0.686,480,6197 -Salins-Fontaine,73284,1008,8.630,0.935,0.847,974,6489 -Cruet,73096,1037,10.097,1.011,0.915,943,6496 -Rotherens,73217,371,1.738,0.420,0.380,945,6490 -Saint-Alban-des-Villards,73221,106,23.881,1.556,1.409,950,6474 -Arbin,73018,787,1.705,0.416,0.377,940,6496 -Aiguebelette-le-Lac,73001,239,7.902,0.895,0.810,919,6500 -Planaise,73200,532,4.110,0.645,0.584,941,6495 -Les Chavannes-en-Maurienne,73083,259,4.556,0.679,0.615,958,6480 -Villard-d'Héry,73314,264,4.884,0.703,0.637,945,6494 -Brides-les-Bains,73057,512,2.624,0.516,0.467,981,6490 -Épierre,73109,765,19.436,1.403,1.270,963,6491 -Montagnole,73160,841,11.318,1.071,0.970,928,6495 -Saint-Léger,73252,225,11.058,1.058,0.958,957,6488 -Chamoux-sur-Gelon,73069,933,10.723,1.042,0.943,950,6499 -La Thuile,73294,330,18.232,1.359,1.230,939,6501 -Moûtiers,73181,3509,3.140,0.564,0.511,975,6494 -Le Verneil,73311,100,7.519,0.873,0.790,951,6486 -La Ravoire,73213,8482,6.604,0.818,0.741,932,6497 -Saint-Baldoph,73225,2839,6.232,0.795,0.720,929,6497 -Camparan,65124,55,2.655,0.519,0.470,484,6197 -Saint-Alban-de-Montbel,73219,632,4.550,0.679,0.615,918,6499 -Saint-Cassin,73228,814,15.103,1.237,1.120,926,6493 -Jacob-Bellecombette,73137,3942,2.463,0.500,0.453,927,6499 -Margueray,50291,133,4.698,0.690,0.625,398,6876 -Challes-les-Eaux,73064,5462,5.656,0.757,0.685,932,6500 -Saint-Pierre-d'Entremont,73274,441,18.388,1.365,1.236,927,6485 -Saint-Sulpice,73281,765,8.805,0.945,0.856,920,6500 -Barberaz,73029,4646,3.622,0.606,0.549,930,6501 -Cognin,73087,6144,4.458,0.672,0.608,924,6500 -Lépin-le-Lac,73145,455,5.106,0.719,0.651,920,6495 -Chapareillan,38075,3007,30.464,1.757,1.591,935,6488 -Chignin,73084,865,8.234,0.913,0.827,935,6498 -Apremont,73017,1026,17.605,1.336,1.210,926,6493 -Biviers,38045,2322,6.320,0.800,0.724,921,6464 -Bernin,38039,3097,7.775,0.888,0.804,926,6464 -Allevard,38006,4148,35.100,1.886,1.708,948,6478 -Saint-Rémy-de-Maurienne,73278,1267,44.235,2.117,1.917,951,6485 -Saint-Nazaire-les-Eymes,38431,2967,8.749,0.942,0.853,924,6464 -Crêts en Belledonne,38439,3379,33.457,1.841,1.667,941,6478 -Lumbin,38214,2129,6.623,0.819,0.742,930,6472 -Tencin,38501,2079,6.804,0.830,0.751,930,6472 -Pontcharra,38314,7228,15.912,1.270,1.150,935,6488 -Le Cheylas,38100,2586,8.505,0.928,0.840,933,6480 -Goncelin,38181,2379,14.550,1.214,1.099,932,6474 -Entremont-le-Vieux,73107,651,32.959,1.827,1.654,922,6489 -Villaroux,73324,210,3.079,0.559,0.506,942,6489 -Les Adrets,38002,1004,16.274,1.284,1.163,931,6468 -Tocqueville-en-Caux,76694,112,3.172,0.567,0.513,547,6967 -La Chapelle-Blanche,73075,559,4.151,0.649,0.588,942,6487 -Villard-Bonnot,38547,7102,5.946,0.776,0.703,927,6466 -La Chapelle-du-Bard,38078,564,27.152,1.659,1.502,943,6486 -Laissaud,73141,660,6.514,0.812,0.735,939,6487 -Saint-Ismier,38397,6907,14.811,1.225,1.109,921,6469 -Saint-Colomban-des-Villards,73230,154,80.696,2.859,2.589,945,6465 -Détrier,73099,424,2.252,0.478,0.433,942,6486 -Sainte-Marie-d'Alloix,38417,480,3.061,0.557,0.504,934,6481 -Sainte-Marie-du-Mont,38418,238,23.950,1.558,1.411,926,6481 -Saint-Vincent-de-Mercuze,38466,1500,7.823,0.890,0.806,933,6477 -Saint-Jean-de-Couz,73246,286,7.710,0.884,0.800,922,6489 -La Flachère,38166,487,2.885,0.541,0.490,931,6483 -Saint-Paul-d'Oueil,31508,36,7.400,0.866,0.784,500,6199 -Laval,38206,986,25.735,1.615,1.462,938,6465 -Le Moutaret,38268,260,5.276,0.731,0.662,940,6487 -Saint-Michel,32397,258,16.795,1.304,1.181,493,6261 -La Pierre,38303,579,3.339,0.582,0.527,932,6471 -Le Champ-près-Froges,38070,1209,4.898,0.704,0.637,932,6469 -Billière,31068,20,2.210,0.473,0.428,499,6193 -Arvillard,73021,850,29.266,1.722,1.559,948,6478 -La Buissière,38062,665,7.585,0.877,0.794,932,6483 -Avajan,65050,74,3.357,0.583,0.528,486,6197 -Le Touvet,38511,3256,11.844,1.095,0.991,932,6474 -Corbel,73092,159,10.306,1.022,0.925,922,6484 -Froges,38175,3300,6.366,0.803,0.727,927,6467 -Caubous,31127,4,3.984,0.635,0.575,497,6196 -Saint-Maximin,38426,648,10.426,1.028,0.931,938,6487 -Crolles,38140,8296,14.579,1.215,1.100,929,6469 -Cirès,31146,12,4.887,0.704,0.637,496,6200 -Luz-Saint-Sauveur,65295,979,50.717,2.267,2.053,463,6196 -Masquières,47160,182,11.350,1.072,0.971,546,6369 -Gavarnie-Gèdre,65192,352,226.452,4.790,4.337,463,6193 -Aulon,65046,84,28.645,1.704,1.543,480,6197 -Le Mesnil-Aubert,50304,183,6.011,0.780,0.706,379,6882 -Mont,65317,46,8.204,0.912,0.826,492,6195 -Villeneuve-lès-Maguelone,34337,9846,31.287,1.780,1.612,767,6263 -Vielle-Aure,65465,332,35.358,1.893,1.714,479,6197 -Estarvielle,65171,34,0.818,0.288,0.261,489,6194 -Poubeau,31434,73,4.203,0.653,0.591,495,6193 -Garin,31213,142,5.591,0.753,0.682,492,6191 -Azet,65058,154,26.808,1.648,1.492,483,6196 -Bourg-d'Oueil,31081,6,9.648,0.989,0.895,493,6197 -Jurvielle,31242,20,5.924,0.775,0.702,494,6197 -Adervielle-Pouchergues,65003,129,9.139,0.962,0.871,488,6194 -Bordères-Louron,65099,166,17.208,1.320,1.195,485,6201 -Vignec,65471,226,6.695,0.824,0.746,478,6194 -Estensan,65172,39,1.516,0.392,0.355,482,6195 -Aragnouet,65017,247,108.268,3.312,2.999,463,6196 -Chasné-sur-Illet,35067,1517,9.659,0.989,0.895,359,6803 -Gouaux-de-Larboust,31221,66,10.785,1.045,0.946,492,6188 -Sailhan,65384,159,2.720,0.525,0.475,482,6195 -Cadeilhan-Trachère,65117,38,4.791,0.697,0.631,477,6193 -Grailhen,65208,22,5.816,0.768,0.695,486,6197 -Cazaux-Fréchet-Anéran-Camors,65141,46,12.774,1.138,1.030,492,6198 -Germ,65199,36,12.380,1.120,1.014,492,6191 -Benque-Dessous-et-Dessus,31064,25,3.724,0.614,0.556,500,6193 -Beaucoudray,50039,135,4.734,0.693,0.627,396,6880 -Monnaie,37153,4369,39.448,1.999,1.810,534,6718 -Agneaux,50002,4010,6.568,0.816,0.739,400,6899 -Saint-Aubin-du-Cormier,35253,3806,27.571,1.671,1.513,368,6806 -Mouazé,35197,1490,8.354,0.920,0.833,359,6803 -Saint-Médard-sur-Ille,35296,1307,18.360,1.364,1.235,357,6808 -Aubigné,35007,479,2.232,0.476,0.431,357,6808 -Billé,35025,1050,17.045,1.314,1.190,386,6805 -Livré-sur-Changeon,35154,1692,26.774,1.647,1.491,377,6798 -Gahard,35118,1451,25.139,1.596,1.445,365,6806 -Combourtillé,35086,611,9.220,0.967,0.876,386,6805 -Revest-les-Roches,6100,233,8.716,0.940,0.851,1034,6316 -Saint-Sulpice-la-Forêt,35315,1302,6.763,0.828,0.750,358,6798 -Ercé-près-Liffré,35107,1785,15.892,1.269,1.149,362,6804 -Andouillé-Neuville,35003,878,12.696,1.134,1.027,357,6808 -Sauveterre,30312,2028,13.211,1.157,1.048,845,6328 -Saint-Christophe-des-Bois,35260,587,9.277,0.970,0.878,387,6799 -La Boussac,35034,1162,21.915,1.490,1.349,357,6837 -Chevaigné,35079,2212,10.376,1.025,0.928,356,6805 -Villars-Fontaine,21688,121,2.923,0.544,0.493,844,6673 -Saint-Brieuc-des-Iffs,35258,344,8.238,0.914,0.828,340,6809 -Oisseau-le-Petit,72225,665,8.577,0.932,0.844,482,6809 -Guenroc,22069,219,7.579,0.876,0.793,325,6815 -La Mézière,35177,4853,16.435,1.290,1.168,345,6798 -Broons,22020,2892,35.750,1.903,1.723,313,6811 -Romillé,35245,3891,28.988,1.714,1.552,340,6799 -Les Iffs,35134,272,4.506,0.676,0.612,339,6813 -Saint-Thibéry,34289,2578,18.543,1.371,1.241,730,6252 -La Chapelle-aux-Filtzméens,35056,822,6.448,0.808,0.732,346,6820 -Dingé,35094,1651,53.557,2.329,2.109,356,6818 -Tinténiac,35337,3565,23.494,1.543,1.397,347,6813 -Montreuil-le-Gast,35193,1932,9.227,0.967,0.876,348,6804 -Miniac-sous-Bécherel,35180,765,13.589,1.173,1.062,336,6807 -Saint-Judoce,22306,569,10.441,1.029,0.932,335,6817 -Le Crouais,35091,559,6.268,0.797,0.722,319,6801 -Tréfumel,22352,275,5.991,0.779,0.705,326,6816 -Le Quiou,22263,311,5.244,0.729,0.660,328,6818 -Saint-Pern,35307,1025,12.136,1.109,1.004,332,6811 -Saint-Symphorien,35317,621,7.964,0.898,0.813,346,6809 -Saint-Domineuc,35265,2515,15.762,1.264,1.144,339,6820 -La Chapelle-Blanche,22036,203,8.066,0.904,0.818,318,6808 -Saint-Gondran,35276,536,4.448,0.671,0.608,342,6806 -Gévezé,35120,5180,27.822,1.679,1.520,342,6796 -La Baussaine,35017,660,9.781,0.996,0.902,336,6814 -Irodouër,35135,2249,23.608,1.547,1.401,335,6804 -Longaulnay,35156,626,7.637,0.880,0.797,333,6810 -Vignoc,35356,1850,14.297,1.204,1.090,345,6807 -La Chapelle du Lou du Lac,35060,1000,10.507,1.032,0.934,330,6802 -Guipel,35128,1704,25.505,1.608,1.456,352,6812 -Hédé-Bazouges,35130,2205,14.763,1.223,1.107,344,6810 -Boissay,76113,406,6.673,0.822,0.744,583,6935 -Langouet,35146,600,7.126,0.850,0.770,342,6805 -Chabeuil,26064,6880,39.932,2.011,1.821,863,6423 -Médréac,35171,1818,35.394,1.894,1.715,326,6812 -Plouasne,22208,1716,34.535,1.871,1.694,325,6813 -Saint-Thual,35318,899,11.576,1.083,0.981,337,6815 -Québriac,35233,1584,20.864,1.454,1.316,347,6817 -La Chapelle-Chaussée,35058,1262,14.793,1.224,1.108,342,6809 -Trévérien,35345,884,12.238,1.114,1.009,336,6821 -Cardroc,35050,562,7.348,0.863,0.781,336,6811 -Caulnes,22032,2474,32.578,1.817,1.645,314,6814 -Trimer,35346,208,3.591,0.603,0.546,338,6815 -Saint-Sauveur-des-Landes,35310,1512,18.846,1.382,1.251,379,6811 -Saint-André-des-Eaux,22274,330,5.547,0.750,0.679,328,6822 -Langan,35144,948,7.795,0.889,0.805,341,6805 -Maen Roch,35257,4779,39.522,2.001,1.812,381,6823 -Beaucé,35021,1342,8.442,0.925,0.838,391,6812 -Saint-Léger-des-Prés,35286,254,5.601,0.753,0.682,355,6822 -Sens-de-Bretagne,35326,2548,31.180,1.777,1.609,359,6816 -Le Tiercent,35336,169,3.702,0.612,0.554,374,6814 -Marcillé-Raoul,35164,781,22.393,1.506,1.364,360,6816 -Saint-Christophe-de-Valains,35261,220,3.296,0.578,0.523,369,6813 -Feins,35110,958,20.321,1.435,1.299,357,6810 -Lécousse,35150,3207,11.120,1.061,0.961,387,6812 -Saint-Germain-en-Coglès,35273,2050,32.576,1.817,1.645,386,6816 -Lanrigan,35148,151,4.065,0.642,0.581,354,6820 -Fougères,35115,20194,10.436,1.028,0.931,389,6816 -Romagné,35243,2376,26.982,1.653,1.497,386,6816 -Saint-Rémy-du-Plain,35309,828,14.798,1.224,1.108,364,6817 -Landéan,35142,1226,28.281,1.693,1.533,389,6817 -Précey,50413,545,7.861,0.892,0.808,376,6842 -Saint-Hilaire-des-Landes,35280,1045,18.536,1.370,1.240,375,6811 -Le Mont-Saint-Michel,50353,30,4.018,0.638,0.578,367,6845 -Saint-Marcan,35291,450,7.724,0.885,0.801,359,6840 -Aucey-la-Plaine,50019,433,9.488,0.980,0.887,368,6833 -Saint-Nicolas-des-Bois,50529,92,3.621,0.606,0.549,393,6861 -Chavoy,50126,127,3.737,0.615,0.557,381,6856 -Morgny-la-Pommeraye,76453,1014,6.619,0.819,0.742,572,6938 -Roz-sur-Couesnon,35247,1011,26.013,1.623,1.469,363,6846 -Champeaux,50117,364,4.291,0.659,0.597,369,6858 -Epiniac,35104,1426,24.476,1.575,1.426,353,6828 -La Chaise-Baudouin,50112,480,12.169,1.110,1.005,390,6862 -Estampes,32126,161,11.012,1.056,0.956,479,6258 -Les Portes du Coglais,35191,2377,41.195,2.043,1.850,382,6823 -Sains,35248,495,10.451,1.029,0.932,358,6837 -Saint-Brice,50451,135,2.532,0.507,0.459,383,6854 -Vernix,50628,160,5.959,0.777,0.704,389,6856 -Riguepeu,32343,218,21.535,1.477,1.337,483,6285 -Juilley,50259,672,11.358,1.073,0.972,379,6838 -Marcilly,50290,332,8.918,0.951,0.861,389,6846 -Huisnes-sur-Mer,50253,191,6.806,0.830,0.751,372,6842 -Beauvoir,50042,413,14.356,1.206,1.092,364,6844 -Servon,50574,278,9.288,0.970,0.878,374,6841 -Trans-la-Forêt,35339,586,15.143,1.239,1.122,359,6828 -Le Parc,50535,906,22.804,1.520,1.376,383,6863 -Le Ferré,35111,689,17.431,1.329,1.203,380,6829 -Samaran,32409,90,8.707,0.939,0.850,498,6258 -Saint-Launeuc,22309,204,11.768,1.092,0.989,304,6804 -Subligny,50584,375,7.963,0.898,0.813,381,6860 -Sartilly-Baie-Bocage,50565,2808,31.055,1.774,1.606,373,6862 -Cuguen,35092,837,23.874,1.555,1.408,359,6828 -Vieux-Viel,35354,316,8.969,0.953,0.863,365,6830 -Le Grand-Celland,50217,579,12.733,1.136,1.029,391,6850 -Languédias,22104,502,8.760,0.942,0.853,317,6822 -Pontorson,50410,4350,62.111,2.509,2.272,367,6835 -Poilley,35230,383,10.862,1.049,0.950,386,6825 -Courtils,50146,225,5.488,0.746,0.675,374,6847 -Sacey,50443,522,15.381,1.248,1.130,372,6828 -La Godefroy,50205,271,3.688,0.611,0.553,385,6852 -Bazouges-la-Pérouse,35019,1786,57.883,2.422,2.193,359,6826 -Saint-Ovin,50531,768,12.955,1.146,1.038,385,6851 -Saint-Georges-de-Gréhaigne,35270,372,12.249,1.114,1.009,366,6841 -Saint-Quentin-sur-le-Homme,50543,1272,17.039,1.314,1.190,386,6845 -Saint-Georges-de-Livoye,50472,200,5.578,0.752,0.681,390,6855 -Carolles,50102,749,4.238,0.655,0.593,366,6859 -Tanis,50589,301,7.572,0.876,0.793,373,6843 -Monthault,35190,273,8.357,0.920,0.833,392,6829 -Isigny-le-Buat,50256,3315,73.767,2.734,2.475,396,6843 -Mézel,4121,660,21.702,1.483,1.343,953,6327 -Montjoie-Saint-Martin,50347,248,7.494,0.871,0.789,385,6834 -Poilley,50407,888,12.852,1.141,1.033,383,6841 -Houppeville,76367,2744,20.895,1.455,1.317,564,6938 -Saint-Jean-de-la-Haize,50489,510,9.010,0.955,0.865,381,6860 -Pleine-Fougères,35222,1984,32.600,1.817,1.645,358,6832 -Saint-Georges-de-Reintembault,35271,1527,31.573,1.789,1.620,384,6832 -Le Grippon,50115,364,9.914,1.002,0.907,379,6861 -Saint-Jean-du-Corail-des-Bois,50495,69,3.669,0.610,0.552,391,6862 -Brécey,50074,2100,21.338,1.470,1.331,396,6853 -Marcey-les-Grèves,50288,1277,6.739,0.826,0.748,378,6853 -Le Petit-Celland,50399,199,6.687,0.823,0.745,388,6853 -Céaux,50108,429,8.543,0.930,0.842,376,6845 -Trémeheuc,35342,341,6.263,0.797,0.722,352,6828 -Ponts,50411,636,6.788,0.829,0.751,384,6856 -Vains,50612,724,8.747,0.941,0.852,376,6853 -Saint-Martin-de-Blagny,14622,133,9.036,0.957,0.866,416,6915 -Monclar-sur-Losse,32265,104,10.494,1.031,0.933,486,6271 -Sougéal,35329,605,14.363,1.206,1.092,367,6835 -Le Val-Saint-Père,50616,2028,11.293,1.070,0.969,380,6851 -Ordan-Larroque,32301,915,42.992,2.087,1.890,495,6288 -Parigné,35215,1329,20.202,1.431,1.296,389,6818 -Saint-Aubin-de-Terregatte,50448,686,21.430,1.474,1.335,386,6835 -Genêts,50199,429,6.974,0.841,0.761,368,6850 -Hamelin,50229,94,2.515,0.505,0.457,390,6835 -Cuves,50158,284,9.802,0.997,0.903,401,6856 -Coulouvray-Boisbenâtre,50144,558,17.389,1.327,1.201,396,6860 -Saint-Hilaire-du-Harcouët,50484,6120,47.375,2.191,1.984,393,6834 -Reffuveille,50428,505,23.810,1.553,1.406,396,6847 -Saint-Martin-le-Bouillant,50518,317,12.446,1.123,1.017,396,6863 -Plélan-le-Petit,22180,1914,21.822,1.487,1.346,313,6824 -Grandparigny,50391,2700,35.041,1.884,1.706,405,6840 -Louvigné-du-Désert,35162,3403,42.276,2.070,1.874,396,6833 -Saint-Brice-de-Landelles,50452,699,15.471,1.252,1.134,396,6833 -La Bazouge-du-Désert,35018,1100,25.115,1.595,1.444,398,6821 -La Chapelle-Urée,50124,152,4.638,0.686,0.621,395,6849 -Le Mesnillard,50315,271,9.845,0.999,0.905,398,6847 -Les Loges-Marchis,50274,1005,20.343,1.436,1.300,400,6831 -Saint-Laurent-de-Cuves,50499,483,14.811,1.225,1.109,396,6857 -Lanrelas,22114,828,30.062,1.745,1.580,304,6808 -Rouillac,22267,396,16.095,1.277,1.156,300,6816 -Trémorel,22371,1160,33.961,1.855,1.680,302,6799 -Sévignac,22337,1098,43.968,2.111,1.911,302,6817 -Bobital,22008,1097,5.075,0.717,0.649,325,6826 -Saint-Méloir-des-Ondes,35299,4032,29.010,1.714,1.552,338,6846 -La Ville-ès-Nonais,35358,1184,4.422,0.669,0.606,334,6840 -Saint-Martial-le-Vieux,23215,134,22.264,1.502,1.360,645,6508 -Vildé-Guingalan,22388,1246,7.537,0.874,0.791,317,6829 -Combourg,35085,5912,63.998,2.546,2.305,346,6819 -Chomérac,7066,3040,19.466,1.404,1.271,830,6401 -La Richardais,35241,2243,3.177,0.567,0.513,329,6846 -Baguer-Morvan,35009,1699,24.381,1.572,1.423,350,6832 -Quévert,22259,3724,12.839,1.141,1.033,323,6828 -Le Vivier-sur-Mer,35361,1045,2.206,0.473,0.428,349,6844 -Mont-Dol,35186,1109,26.414,1.636,1.481,345,6840 -Dinan,22050,14222,8.739,0.941,0.852,326,6830 -La Fresnais,35116,2534,14.406,1.208,1.094,345,6840 -Mégrit,22145,811,21.238,1.467,1.328,313,6824 -Plurien,22242,1509,21.740,1.484,1.344,302,6851 -Saint-Suliac,35314,918,4.711,0.691,0.626,335,6842 -Tramain,22341,691,9.380,0.975,0.883,304,6824 -Dol-de-Bretagne,35095,5651,15.560,1.256,1.137,347,6836 -Lourmais,35159,331,7.256,0.857,0.776,349,6827 -Saint-Hélen,22299,1463,17.165,1.319,1.194,333,6828 -Fréhel,22179,1550,19.329,1.399,1.267,306,6847 -La Vicomté-sur-Rance,22385,1052,4.677,0.688,0.623,332,6834 -Plévenon,22201,795,14.100,1.195,1.082,308,6850 -Loubersan,32215,156,10.841,1.048,0.949,498,6272 -L'Isle-de-Noé,32159,538,25.872,1.619,1.466,492,6277 -Plesder,35225,795,11.227,1.067,0.966,335,6824 -Les Champs-Géraux,22035,1043,19.699,1.413,1.279,334,6828 -Brusvily,22021,1191,12.094,1.107,1.002,323,6820 -Bonnemain,35029,1546,24.150,1.564,1.416,350,6832 -Pleudihen-sur-Rance,22197,2880,24.975,1.591,1.441,336,6839 -Pléven,22200,582,9.717,0.992,0.898,306,6836 -Marsilly,57449,539,3.209,0.570,0.516,940,6894 -Saint-Coulomb,35263,2674,18.056,1.353,1.225,337,6851 -Châtillon-en-Vendelais,35072,1690,32.185,1.806,1.635,392,6798 -Beaussais-sur-Mer,22209,3532,41.906,2.061,1.866,322,6845 -Saint-Benoît-des-Ondes,35255,1006,2.945,0.546,0.494,342,6845 -Saint-Samson-sur-Rance,22327,1587,6.370,0.803,0.727,330,6832 -Alissas,7008,1479,12.459,1.124,1.018,830,6401 -Lanvallay,22118,4153,14.879,1.228,1.112,330,6832 -Saint-Briac-sur-Mer,35256,2007,8.486,0.927,0.839,321,6849 -Plouër-sur-Rance,22213,3520,20.310,1.435,1.299,332,6834 -Saint-Carné,22280,996,8.532,0.930,0.842,324,6825 -Trivy,71547,274,11.708,1.089,0.986,816,6588 -La Landec,22097,736,7.737,0.885,0.801,316,6824 -La Gouesnière,35122,1850,8.837,0.946,0.857,342,6845 -Jugon-les-Lacs - Commune nouvelle,22084,2485,38.778,1.982,1.795,303,6826 -Tréméreuc,22368,761,4.158,0.649,0.588,325,6842 -Plerguer,35224,2659,20.289,1.434,1.298,342,6840 -Lancieux,22094,1514,6.584,0.817,0.740,322,6846 -Langrolay-sur-Rance,22103,923,5.318,0.734,0.665,330,6840 -Plédéliac,22175,1424,52.779,2.312,2.093,302,6837 -Taden,22339,2408,20.338,1.436,1.300,324,6835 -Pleurtuit,35228,6703,28.893,1.711,1.549,327,6840 -Lillemer,35153,353,3.798,0.620,0.561,341,6841 -Trélivan,22364,2719,11.340,1.072,0.971,320,6824 -Saint-Guinoux,35279,1205,6.508,0.812,0.735,341,6842 -Parcé,35214,651,17.197,1.320,1.195,389,6808 -Saint-Denoual,22286,452,8.696,0.939,0.850,305,6837 -Trébédan,22342,427,11.198,1.065,0.964,320,6825 -Cancale,35049,5144,12.622,1.131,1.024,345,6853 -Rancourt,80664,201,2.907,0.543,0.492,693,6991 -Corseul,22048,2177,42.321,2.071,1.875,319,6829 -Folligny,50188,1085,11.861,1.096,0.992,376,6864 -Le Minihic-sur-Rance,35181,1432,3.903,0.629,0.570,331,6841 -Saint-Cast-le-Guildo,22282,3351,22.888,1.523,1.379,315,6843 -Calorguen,22026,721,8.607,0.934,0.846,327,6821 -Meillac,35172,1824,32.622,1.818,1.646,341,6821 -La Selle-en-Luitré,35324,569,8.615,0.934,0.846,395,6810 -Le Hinglé,22082,905,3.433,0.590,0.534,324,6824 -Dinard,35093,10114,7.620,0.879,0.796,327,6847 -Javené,35137,2061,18.519,1.370,1.240,387,6812 -Princé,35232,376,12.342,1.118,1.012,397,6798 -Estipouy,32128,210,11.899,1.098,0.994,491,6276 -Sainte-Aurence-Cazaux,32363,104,9.753,0.994,0.900,493,6255 -Louslitges,32217,72,12.183,1.111,1.006,473,6281 -Marseillan,32238,96,4.386,0.667,0.604,481,6270 -Tourdun,32450,111,6.977,0.841,0.761,472,6277 -Montreuil-des-Landes,35192,247,9.414,0.977,0.885,386,6805 -Dangy,50159,659,9.920,1.003,0.908,392,6888 -Mouchès,32293,74,3.145,0.564,0.511,491,6277 -Beslon,50048,562,17.456,1.330,1.204,398,6869 -Percy-en-Normandie,50393,2596,48.648,2.220,2.010,388,6877 -Proix,2625,147,3.497,0.595,0.539,740,6978 -La Haye-Bellefond,50234,83,2.920,0.544,0.493,392,6884 -Montcuit,50340,183,4.896,0.704,0.637,383,6898 -Saint-Sauveur-la-Pommeraye,50549,361,5.349,0.736,0.666,376,6870 -Équilly,50174,194,5.801,0.767,0.694,380,6868 -Cametours,50093,430,7.375,0.864,0.782,386,6895 -La Baleine,50028,92,4.024,0.639,0.579,386,6878 -Hocquigny,50247,184,3.095,0.560,0.507,378,6866 -Villebaudon,50637,317,5.770,0.765,0.693,395,6884 -La Lande-d'Airou,50262,514,15.192,1.241,1.124,382,6866 -Thèreval,50239,1792,28.705,1.705,1.544,397,6901 -Saint-Gilles,50483,904,7.908,0.895,0.810,399,6897 -Camprond,50094,418,6.260,0.796,0.721,385,6895 -Cérences,50109,1846,26.266,1.631,1.477,373,6875 -Saint-Denis-le-Gast,50463,541,16.929,1.310,1.186,381,6879 -Monthuchon,50345,662,7.794,0.889,0.805,378,6895 -Languenan,22105,1165,16.099,1.277,1.156,324,6835 -La Meurdraquière,50327,169,7.671,0.882,0.799,376,6870 -Grimesnil,50221,62,2.647,0.518,0.469,382,6880 -Beauchamps,50038,404,4.163,0.649,0.588,381,6869 -Misérieux,1250,1938,7.458,0.869,0.787,841,6540 -Le Guislain,50225,132,5.485,0.745,0.675,392,6884 -Coutances,50147,8624,12.611,1.130,1.023,375,6895 -La Mouche,50361,245,4.588,0.682,0.617,379,6862 -Roquefixade,9249,150,12.484,1.125,1.019,597,6207 -Lengronne,50266,430,12.076,1.106,1.001,378,6877 -Le Loreur,50278,278,3.294,0.578,0.523,377,6873 -Saussey,50568,471,9.041,0.957,0.866,378,6888 -La Lucerne-d'Outremer,50281,809,14.620,1.217,1.102,375,6864 -Saint-Aubin-des-Bois,14559,237,8.352,0.920,0.833,397,6865 -Bourguenolles,50069,343,7.674,0.882,0.799,386,6862 -Courcy,50145,607,11.533,1.081,0.979,381,6891 -Marigny-Le-Lozon,50292,2633,19.433,1.403,1.270,392,6897 -Belval,50044,314,5.723,0.761,0.689,381,6891 -Nicorps,50376,415,5.625,0.755,0.684,379,6890 -Notre-Dame-de-Cenilly,50378,661,25.456,1.606,1.454,390,6888 -Le Mesnil-Garnier,50311,230,10.499,1.031,0.933,386,6870 -Le Lorey,50279,609,14.765,1.223,1.107,387,6896 -Le Tanu,50590,386,10.261,1.020,0.924,382,6862 -Saint-Martin-de-Cenilly,50513,185,6.775,0.829,0.751,385,6883 -Quibou,50420,938,17.300,1.324,1.199,392,6897 -Le Mesnil-Amey,50302,272,2.851,0.537,0.486,394,6897 -La Chapelle-Cécelin,50121,243,5.244,0.729,0.660,394,6864 -Carantilly,50098,645,10.901,1.051,0.952,388,6893 -La Vendelée,50624,457,5.112,0.720,0.652,375,6897 -Coudeville-sur-Mer,50143,857,8.794,0.944,0.855,365,6875 -Boisyvon,50062,113,3.842,0.624,0.565,397,6865 -Sorbs,34303,35,20.285,1.434,1.298,734,6313 -Villedieu-les-Poêles-Rouffigny,50639,3893,14.702,1.221,1.106,390,6864 -Montpinchon,50350,537,17.243,1.322,1.197,383,6887 -Saint-Créac,65386,96,2.139,0.466,0.422,454,6222 -Orval sur Sienne,50388,1161,19.458,1.404,1.271,376,6887 -Heugueville-sur-Sienne,50243,541,5.962,0.777,0.704,371,6890 -Montmartin-sur-Mer,50349,1343,9.561,0.984,0.891,369,6888 -Anctoville-sur-Boscq,50008,457,2.183,0.470,0.426,367,6870 -Hauteville-sur-Mer,50231,702,3.320,0.580,0.525,369,6885 -Bricqueville-sur-Mer,50085,1204,12.873,1.142,1.034,367,6880 -Tourville-sur-Sienne,50603,788,7.487,0.871,0.789,372,6893 -Tollevast,50599,1510,12.508,1.126,1.019,366,6954 -Lingreville,50272,1001,9.101,0.960,0.869,366,6882 -Brainville,50072,221,3.238,0.573,0.519,370,6897 -Saint-Malo-de-la-Lande,50506,480,4.015,0.638,0.578,367,6893 -Hudimesnil,50252,880,19.116,1.392,1.260,373,6875 -Chanteloup,50120,355,4.228,0.655,0.593,371,6877 -Saint-Jean-des-Champs,50493,1401,19.459,1.404,1.271,372,6867 -Blainville-sur-Mer,50058,1633,11.899,1.098,0.994,364,6894 -Longueville,50277,611,4.172,0.650,0.589,366,6871 -Bréhal,50076,3366,12.832,1.140,1.032,365,6877 -Annoville,50015,666,8.538,0.930,0.842,371,6882 -Donville-les-Bains,50165,3164,2.807,0.533,0.483,366,6871 -Saint-Pierre-Langers,50540,583,8.484,0.927,0.839,368,6863 -Gratot,50219,651,10.772,1.045,0.946,373,6893 -Regnéville-sur-Mer,50429,733,8.295,0.917,0.830,367,6887 -Bricqueville-la-Blouette,50084,558,6.276,0.797,0.722,372,6893 -Muneville-sur-Mer,50365,469,7.420,0.867,0.785,372,6879 -Port-Vendres,66148,4187,14.476,1.211,1.096,711,6155 -Sainte-Marie-la-Mer,66182,4746,10.288,1.021,0.924,700,6182 -Saint-Cyprien,66171,10632,15.750,1.263,1.144,703,6168 -Saint-Laurent-de-la-Salanque,66180,10308,17.511,1.332,1.206,702,6186 -Florensac,34101,4977,35.990,1.910,1.729,735,6258 -Torreilles,66212,3818,17.528,1.333,1.207,702,6186 -Marseillan,34150,7773,52.739,2.312,2.093,745,6257 -Le Barcarès,66017,5915,15.223,1.242,1.125,703,6187 -Sète,34301,43609,40.649,2.029,1.837,754,6259 -Galargues,34110,715,11.397,1.075,0.973,780,6302 -Lieuran-lès-Béziers,34139,1391,8.613,0.934,0.846,718,6255 -Valras-Plage,34324,4192,3.113,0.562,0.509,722,6237 -Boujan-sur-Libron,34037,3366,7.065,0.846,0.766,723,6254 -Sauvian,34298,5285,13.135,1.154,1.045,721,6240 -Pinet,34203,1624,8.920,0.951,0.861,740,6257 -Lansargues,34127,3120,18.585,1.372,1.242,788,6285 -Lignan-sur-Orb,34140,3097,3.414,0.588,0.532,715,6253 -Villetelle,34340,1443,5.480,0.745,0.675,791,6291 -Béziers,34032,76493,95.742,3.115,2.820,721,6255 -Calvisson,30062,5600,29.008,1.714,1.552,793,6303 -Portiragnes,34209,3160,20.099,1.427,1.292,728,6248 -Colombiers,34081,2383,10.189,1.016,0.920,712,6245 -Lunel,34145,26002,24.172,1.565,1.417,794,6289 -Cers,34073,2490,7.970,0.899,0.814,727,6249 -Maraussan,34148,4244,12.488,1.125,1.019,711,6251 -Lespignan,34135,3155,22.991,1.526,1.382,711,6240 -Nézignan-l'Évêque,34182,1818,4.334,0.663,0.600,732,6260 -Cazouls-lès-Béziers,34069,4944,38.437,1.973,1.786,711,6257 -Bassan,34025,2091,6.858,0.834,0.755,721,6255 -Aumelas,34016,524,58.292,2.430,2.200,744,6274 -Valros,34325,1592,6.655,0.821,0.743,728,6259 -Bédarieux,34028,5824,28.121,1.688,1.528,710,6277 -Agde,34003,27681,50.085,2.253,2.040,741,6241 -Sassis,65411,83,0.583,0.243,0.220,453,6202 -Corneilhan,34084,1715,14.311,1.204,1.090,716,6258 -Saint-Just,34272,3229,6.216,0.794,0.719,789,6283 -Saint-Drézéry,34249,2451,10.437,1.028,0.931,781,6293 -Nages-et-Solorgues,30186,1653,6.195,0.792,0.717,801,6299 -Noyelles-lès-Humières,62625,52,1.164,0.343,0.311,642,7031 -Codognan,30083,2425,4.670,0.688,0.623,798,6292 -Montels,34167,252,7.406,0.866,0.784,700,6245 -Baillargues,34022,7421,7.816,0.890,0.806,783,6285 -Saint-Sériès,34288,967,4.642,0.686,0.621,789,6292 -Puisserguier,34225,2845,28.151,1.689,1.529,703,6256 -Saturargues,34294,953,6.000,0.780,0.706,791,6293 -Poilhes,34206,568,5.956,0.777,0.704,707,6246 -Candillargues,34050,1688,8.399,0.922,0.835,787,6280 -Boisseron,34033,1946,7.486,0.871,0.789,785,6294 -Saint-Nazaire-de-Pézan,34280,623,5.514,0.747,0.676,792,6283 -Aigues-Vives,30004,3271,12.049,1.105,1.000,796,6290 -Beaulieu,34027,1835,7.890,0.894,0.809,783,6291 -Gallargues-le-Montueux,30123,3689,10.873,1.050,0.951,793,6291 -Nissan-lez-Enserune,34183,3967,30.111,1.747,1.582,712,6245 -Saint-Jean-de-Cornies,34265,713,3.015,0.553,0.501,781,6296 -Sommières,30321,4861,10.376,1.025,0.928,786,6297 -Congénies,30091,1648,8.714,0.940,0.851,791,6298 -Cabrerolles,34044,332,28.572,1.701,1.540,711,6275 -Saussines,34296,1021,6.280,0.798,0.723,785,6298 -Mus,30185,1397,2.636,0.517,0.468,797,6295 -Vieussan,34334,263,28.005,1.684,1.525,702,6273 -Junas,30136,1089,7.790,0.888,0.804,789,6295 -Saint-Geniès-des-Mourgues,34256,1865,10.944,1.053,0.953,784,6287 -Le Grau-du-Roi,30133,8476,57.228,2.408,2.180,791,6269 -Valergues,34321,2057,5.249,0.729,0.660,784,6287 -Les Aires,34008,613,20.627,1.446,1.309,705,6272 -Saint-Brès,34244,2945,4.795,0.697,0.631,783,6287 -Combes,34083,337,10.888,1.050,0.951,702,6278 -Buzignargues,34043,323,4.608,0.683,0.618,781,6296 -Mudaison,34176,2563,8.122,0.907,0.821,782,6283 -Sussargues,34307,2725,6.443,0.808,0.732,781,6292 -Campagne,34048,319,4.877,0.703,0.637,785,6299 -Lescar,64335,9874,26.467,1.638,1.483,421,6252 -Vergèze,30344,5044,10.085,1.011,0.915,799,6296 -Saint-Aunès,34240,3320,12.543,1.127,1.020,775,6282 -Saint-Hilaire-de-Beauvoir,34263,403,4.630,0.685,0.620,780,6296 -Lunel-Viel,34146,3876,12.124,1.108,1.003,785,6288 -Restinclières,34227,1777,6.263,0.797,0.722,785,6294 -Saint-Pierre-de-la-Fage,34283,129,18.606,1.373,1.243,733,6296 -Mauguio,34154,17073,76.898,2.791,2.527,785,6281 -Marsillargues,34151,6227,42.210,2.068,1.872,790,6280 -La Grande-Motte,34344,8882,13.689,1.178,1.067,787,6277 -Armissan,11014,1525,12.437,1.123,1.017,710,6233 -Vinassan,11441,2654,8.941,0.952,0.862,711,6234 -Cazedarnes,34065,597,11.615,1.085,0.982,705,6258 -Maureilhan,34155,2085,10.382,1.026,0.929,710,6252 -Montady,34161,3929,9.908,1.002,0.907,709,6246 -Cournonsec,34087,3315,12.179,1.111,1.006,755,6273 -Coursan,11106,5836,24.549,1.577,1.428,704,6242 -Cessenon-sur-Orb,34074,2249,36.744,1.929,1.747,708,6260 -Salles-d'Aude,11370,3253,18.281,1.361,1.232,711,6240 -Leucate,11202,4339,47.147,2.186,1.979,701,6195 -Lauroux,34132,195,26.624,1.642,1.487,720,6302 -Le Poujol-sur-Orb,34211,1069,4.709,0.691,0.626,703,6275 -La Tour-sur-Orb,34312,1270,30.764,1.766,1.599,708,6283 -Colombières-sur-Orb,34080,477,8.189,0.911,0.825,701,6275 -Montesquieu,34168,69,14.525,1.213,1.098,723,6277 -Lamalou-les-Bains,34126,2542,6.228,0.794,0.719,706,6279 -Mélagues,12143,60,44.804,2.131,1.929,697,6289 -Saint-Étienne-Estréchoux,34252,267,3.498,0.595,0.539,710,6284 -Hérépian,34119,1513,8.850,0.947,0.857,711,6275 -Le Pradal,34216,323,3.638,0.607,0.550,708,6280 -Saint-Guilhem-le-Désert,34261,256,38.612,1.978,1.791,743,6299 -Avène,34019,294,62.205,2.511,2.273,705,6295 -Taussac-la-Billière,34308,440,14.629,1.217,1.102,708,6283 -Mèze,34157,11533,47.716,2.199,1.991,743,6259 -Neffiès,34181,1062,10.947,1.053,0.953,729,6270 -Les Plans,34205,280,18.054,1.352,1.224,725,6295 -Lézignan-la-Cèbe,34136,1546,6.208,0.793,0.718,736,6265 -Montarnaud,34163,3456,27.543,1.671,1.513,760,6282 -Lavalette,34133,61,8.571,0.932,0.844,723,6286 -Liausson,34137,145,8.040,0.903,0.818,727,6282 -Olmet-et-Villecun,34188,172,9.626,0.988,0.895,727,6289 -Gazax-et-Baccarisse,32144,83,9.488,0.980,0.887,474,6284 -Sauviac,32419,109,6.440,0.808,0.732,492,6260 -Espondeilhan,34094,1040,5.099,0.719,0.651,721,6258 -Laurens,34130,1667,16.600,1.297,1.174,717,6271 -Gignac,34114,6074,29.882,1.740,1.575,745,6286 -Coulobres,34085,364,3.030,0.554,0.502,723,6261 -Clermont-l'Hérault,34079,8742,32.675,1.820,1.648,727,6283 -Puéchabon,34221,483,31.439,1.785,1.616,748,6295 -Canet,34051,3511,7.320,0.861,0.780,740,6279 -Péret,34197,1005,11.044,1.058,0.958,731,6278 -Le Bousquet-d'Orb,34038,1574,11.840,1.095,0.991,710,6292 -Pouzolles,34214,1159,10.079,1.011,0.915,722,6262 -Fouzilhon,34105,240,5.423,0.741,0.671,719,6270 -Argelliers,34012,1037,50.607,2.264,2.050,755,6296 -Ceyras,34076,1410,7.028,0.844,0.764,739,6284 -Villeveyrac,34341,3786,37.253,1.943,1.759,749,6270 -Balaruc-le-Vieux,34024,2644,6.921,0.837,0.758,754,6262 -Carlencas-et-Levas,34053,129,10.845,1.048,0.949,719,6281 -Pouzols,34215,969,2.970,0.549,0.497,740,6280 -Brignac,34041,865,4.692,0.689,0.624,738,6282 -Balaruc-les-Bains,34023,6805,8.672,0.937,0.848,754,6259 -Poujols,34212,163,2.827,0.535,0.484,724,6298 -Caux,34063,2554,25.042,1.593,1.442,727,6266 -Soubès,34304,939,12.257,1.114,1.009,730,6301 -Usclas-du-Bosc,34316,214,4.520,0.677,0.613,733,6290 -Saint-Bauzille-de-la-Sylve,34241,818,8.600,0.933,0.845,748,6280 -Poussan,34213,6001,29.902,1.741,1.576,753,6263 -Loupian,34143,2139,23.250,1.535,1.390,751,6265 -Aspiran,34013,1641,16.266,1.284,1.163,736,6271 -Celles,34072,35,7.588,0.877,0.794,726,6286 -Popian,34208,348,5.877,0.772,0.699,743,6279 -Aumes,34017,490,7.409,0.866,0.784,737,6262 -Saint-Félix-de-Lodez,34254,1170,4.392,0.667,0.604,738,6286 -Lunas,34144,669,44.948,2.134,1.932,720,6287 -Roquessels,34234,107,9.082,0.959,0.868,719,6270 -Puissalicon,34224,1334,13.135,1.154,1.045,717,6261 -Fos,34104,97,6.562,0.815,0.738,719,6272 -Pézenas,34199,8187,29.666,1.734,1.570,737,6262 -Paulhan,34194,3891,11.363,1.073,0.972,739,6274 -Tourbes,34311,1579,16.063,1.276,1.155,732,6258 -Caussiniojouls,34062,119,10.552,1.034,0.936,711,6274 -Abeilhan,34001,1660,7.851,0.892,0.808,722,6262 -Margon,34149,670,4.490,0.674,0.610,723,6266 -Bouzigues,34039,1690,6.490,0.811,0.734,754,6259 -La Boissière,34035,1021,24.454,1.574,1.425,754,6282 -Villeneuvette,34338,71,3.149,0.565,0.512,731,6279 -Alignan-du-Vent,34009,1729,17.431,1.329,1.203,730,6264 -Adissan,34002,1183,4.440,0.671,0.608,736,6271 -Montaud,34164,987,13.013,1.148,1.039,776,6291 -Palavas-les-Flots,34192,6075,9.214,0.966,0.875,775,6271 -Combaillaux,34082,1438,9.038,0.957,0.866,762,6284 -Montferrier-sur-Lez,34169,3598,7.605,0.878,0.795,770,6284 -Gigean,34113,6415,16.290,1.285,1.163,761,6266 -Murviel-lès-Montpellier,34179,1891,10.110,1.012,0.916,762,6279 -Le Triadou,34314,392,6.313,0.800,0.724,768,6292 -Clapiers,34077,5473,7.641,0.880,0.797,771,6288 -Saussan,34295,1538,3.604,0.604,0.547,763,6276 -Berdoues,32045,445,18.019,1.351,1.223,488,6264 -Lavérune,34134,3191,7.158,0.852,0.771,765,6275 -Saint-Bauzille-de-Montmel,34242,1012,21.458,1.474,1.335,776,6301 -Saint-Vincent-de-Barbeyrargues,34290,639,2.236,0.476,0.431,771,6292 -Les Matelles,34153,2015,16.853,1.307,1.183,768,6291 -Viols-en-Laval,34342,196,16.173,1.280,1.159,760,6292 -Assas,34014,1510,19.300,1.398,1.266,775,6290 -Guzargues,34118,516,11.612,1.085,0.982,776,6290 -Frontignan,34108,22521,39.731,2.006,1.816,767,6263 -Saint-Arailles,32360,134,13.283,1.160,1.050,488,6286 -Saint-Justin,32383,131,13.332,1.162,1.052,468,6271 -Saint-Gély-du-Fesc,34255,9814,16.578,1.296,1.173,767,6286 -Saint-Georges-d'Orques,34259,5426,9.325,0.972,0.880,761,6282 -Lattes,34129,16687,32.229,1.807,1.636,773,6272 -Castelnau-le-Lez,34057,19257,11.100,1.061,0.961,776,6282 -Peyrusse-Grande,32315,164,25.536,1.609,1.457,476,6282 -Juvignac,34123,10864,10.900,1.051,0.952,765,6278 -Sainte-Croix-de-Quintillargues,34248,881,6.598,0.818,0.741,773,6298 -Le Crès,34090,9259,5.809,0.767,0.694,777,6283 -Jaulgonne,2389,638,1.741,0.420,0.380,739,6888 -Vic-la-Gardiole,34333,3263,30.707,1.764,1.597,761,6265 -Saint-Jean-de-Cuculles,34266,475,9.098,0.960,0.869,766,6298 -Vailhauquès,34320,2575,16.176,1.280,1.159,761,6285 -Tudelle,32456,62,5.163,0.723,0.655,480,6291 -Vendôme,41269,16688,23.877,1.555,1.408,558,6743 -Prades-le-Lez,34217,5451,8.781,0.943,0.854,771,6288 -Mireval,34159,3315,11.226,1.067,0.966,763,6268 -Saint-Médard,32394,324,17.299,1.324,1.199,497,6270 -Teyran,34309,4607,10.122,1.013,0.917,775,6290 -Léguevin,31291,9063,24.612,1.579,1.430,558,6276 -Idrac-Respaillès,32156,214,13.098,1.152,1.043,493,6273 -Scieurac-et-Flourès,32422,41,5.458,0.744,0.674,473,6275 -Montesquiou,32285,583,47.132,2.185,1.978,484,6275 -Saint-Ost,32401,83,6.913,0.837,0.758,496,6258 -Barran,32029,678,52.481,2.306,2.088,498,6281 -Peyrusse-Vieille,32317,73,11.185,1.065,0.964,469,6284 -Saint-Jean-le-Comtal,32381,408,17.349,1.326,1.201,502,6277 -Ponsampère,32323,135,9.061,0.958,0.867,487,6267 -Cazaux-d'Anglès,32097,118,12.558,1.128,1.021,481,6286 -Belloc-Saint-Clamens,32042,129,10.590,1.036,0.938,491,6265 -Callian,32072,45,7.877,0.893,0.809,480,6283 -Ger,65197,168,1.924,0.442,0.400,451,6222 -Viozan,32466,110,6.830,0.832,0.753,496,6258 -Labassère,65238,233,10.052,1.009,0.914,462,6224 -Mont-de-Marrast,32281,111,7.095,0.848,0.768,489,6259 -Mirannes,32257,68,7.895,0.894,0.809,487,6282 -Castelnau-d'Anglès,32077,92,11.989,1.102,0.998,480,6286 -Labéjan,32172,317,18.961,1.386,1.255,496,6272 -Pallanne,32303,60,5.253,0.730,0.661,481,6269 -Esterre,65173,191,1.818,0.429,0.388,456,6202 -Saint-Christaud,32367,64,10.877,1.050,0.951,480,6274 -Geu,65201,168,2.547,0.508,0.460,451,6219 -Mascaras,32240,63,6.018,0.781,0.707,475,6278 -Ousté,65351,27,2.428,0.496,0.449,453,6222 -Aujan-Mournède,32015,89,8.745,0.941,0.852,497,6258 -Saint-Martin,32389,454,9.252,0.968,0.876,487,6273 -Saint-Maur,32393,146,14.021,1.192,1.079,484,6271 -Courties,32111,54,6.075,0.785,0.711,471,6280 -Moncassin,32263,137,13.878,1.186,1.074,497,6263 -Saint-Élix-Theux,32375,107,8.458,0.926,0.838,497,6263 -Nouzilly,37175,1258,40.402,2.023,1.832,528,6720 -Lagarde-Hachan,32177,162,8.541,0.930,0.842,498,6258 -L'Isle-en-Dodon,31239,1664,22.528,1.511,1.368,522,6258 -Tillac,32446,280,12.552,1.128,1.021,480,6269 -Montaut,32278,119,8.473,0.927,0.839,491,6257 -Artalens-Souin,65036,138,3.879,0.627,0.568,450,6215 -Ourdis-Cotdoussan,65348,50,4.824,0.699,0.633,459,6222 -Betpouey,65089,88,17.304,1.324,1.199,458,6200 -Vier-Bordes,65467,104,9.327,0.972,0.880,454,6216 -Esquièze-Sère,65168,399,1.528,0.393,0.356,455,6202 -Gazost,65191,132,41.224,2.044,1.851,459,6218 -Villelongue,65473,397,20.154,1.429,1.294,450,6212 -Chèze,65145,51,10.351,1.024,0.927,451,6208 -Noguères,64418,139,2.010,0.451,0.408,407,6258 -Juncalas,65237,170,3.417,0.588,0.532,455,6223 -Barèges,65481,170,44.454,2.122,1.921,459,6204 -Cheust,65144,87,3.066,0.557,0.504,460,6222 -Tournous-Darré,65448,83,5.654,0.757,0.685,484,6247 -Beaucens,65077,409,36.878,1.933,1.750,450,6212 -Bonnefont,65095,346,15.441,1.251,1.133,482,6241 -Castex,32086,89,5.453,0.743,0.673,481,6256 -Ledeuix,64328,1035,13.526,1.171,1.060,404,6242 -Sadeillan,32355,88,6.000,0.780,0.706,485,6258 -Orieux,65337,120,8.232,0.913,0.827,482,6240 -Fontrailles,65177,145,9.049,0.958,0.867,489,6254 -Siros,64525,742,2.386,0.492,0.445,417,6255 -Sère-Rustaing,65423,128,5.363,0.737,0.667,481,6244 -Mazerolles,65308,108,6.399,0.805,0.729,479,6253 -Lalanne-Trie,65250,112,5.037,0.714,0.646,482,6249 -Villembits,65474,116,5.332,0.735,0.665,483,6246 -Estampures,65170,76,5.592,0.753,0.682,481,6258 -Vidou,65461,104,5.016,0.713,0.646,485,6247 -Sentous,65419,68,7.329,0.862,0.780,490,6245 -Trie-sur-Baïse,65452,1062,11.272,1.069,0.968,486,6248 -Castelbajac,65128,133,8.269,0.915,0.828,486,6237 -Lapeyre,65260,98,3.628,0.606,0.549,482,6251 -Laas,32167,295,11.027,1.057,0.957,480,6269 -Lubret-Saint-Luc,65288,57,5.632,0.755,0.684,482,6249 -Lamarque-Rustaing,65253,54,2.813,0.534,0.483,481,6245 -Asasp-Arros,64064,472,23.885,1.556,1.409,404,6226 -Bonrepos,65097,186,8.992,0.955,0.865,488,6234 -Bazugues,32034,59,5.407,0.740,0.670,485,6264 -Rébénacq,64463,685,10.592,1.036,0.938,426,6237 -Lustar,65293,118,4.900,0.705,0.638,483,6245 -Antin,65015,109,7.559,0.875,0.792,479,6253 -Manas-Bastanous,32226,80,7.602,0.878,0.795,487,6254 -Burg,65113,272,12.750,1.137,1.029,484,6235 -Rontignon,64467,825,7.113,0.849,0.769,429,6247 -Varengeville-sur-Mer,76720,971,10.729,1.043,0.944,557,6978 -Boeil-Bezing,64133,1274,8.522,0.929,0.841,433,6242 -Aussevielle,64080,791,3.318,0.580,0.525,416,6256 -Cormes,72093,911,18.909,1.384,1.253,531,6791 -Cuqueron,64197,191,3.537,0.599,0.542,412,6253 -Bernadets,64114,580,3.722,0.614,0.556,435,6258 -Baudreix,64101,586,2.007,0.451,0.408,434,6239 -Lons,64348,12913,11.543,1.081,0.979,426,6257 -Pardies-Piétat,64444,447,7.577,0.876,0.793,433,6242 -Estialescq,64219,271,5.080,0.717,0.649,412,6241 -Moumour,64409,844,8.140,0.908,0.822,404,6242 -Pardies,64443,844,5.890,0.773,0.700,410,6257 -Saint-Castin,64472,871,7.024,0.844,0.764,430,6260 -Eysus,64224,649,6.738,0.826,0.748,408,6234 -Nay,64417,3307,5.241,0.729,0.660,436,6236 -Foucarmont,76278,839,7.325,0.861,0.780,595,6972 -Arros-de-Nay,64054,795,13.556,1.172,1.061,434,6240 -Bruges-Capbis-Mifaget,64148,900,16.715,1.301,1.178,432,6234 -Bosdarros,64139,1019,24.638,1.580,1.431,430,6238 -Buziet,64156,489,8.208,0.912,0.826,415,6231 -Cardesse,64165,293,7.682,0.882,0.799,407,6249 -Assat,64067,1806,9.467,0.979,0.886,433,6248 -Gamaches,80373,2596,9.905,1.002,0.907,594,6990 -Baliros,64091,462,3.728,0.615,0.557,432,6243 -Bescat,64116,260,6.889,0.835,0.756,420,6230 -Saint-Abit,64469,321,4.242,0.656,0.594,433,6241 -Bidos,64126,1145,1.374,0.373,0.338,407,6237 -Lée,64329,1276,3.009,0.552,0.500,433,6248 -Escou,64207,417,6.252,0.796,0.721,415,6238 -Artiguelouve,64060,1617,10.708,1.042,0.943,418,6255 -Peaugres,7172,2077,14.453,1.210,1.096,835,6465 -Issor,64276,239,22.884,1.523,1.379,402,6231 -Ousse,64439,1662,4.511,0.676,0.612,434,6250 -Mirepeix,64386,1270,3.321,0.580,0.525,436,6237 -Monein,64393,4455,80.865,2.862,2.591,416,6249 -Herrère,64261,384,8.900,0.950,0.860,411,6233 -Saint-Apollinaire-de-Rias,7214,197,8.545,0.930,0.842,826,6424 -Escout,64209,434,9.503,0.981,0.888,411,6241 -Parbayse,64442,313,6.413,0.806,0.730,410,6257 -Louvie-Juzon,64353,1064,56.234,2.387,2.161,427,6220 -Serres-Morlaàs,64520,777,4.196,0.652,0.590,435,6251 -Sendets,64518,993,7.838,0.891,0.807,437,6249 -Arthez-d'Asson,64058,502,7.467,0.870,0.788,434,6228 -Bordes,64138,2854,7.343,0.863,0.781,435,6243 -Morlaàs,64405,4179,13.271,1.160,1.050,433,6252 -Arudy,64062,2217,28.279,1.693,1.533,415,6231 -Châtenay,38093,440,4.631,0.685,0.620,876,6470 -Saint-Faust,64478,752,13.219,1.157,1.048,419,6251 -Lys,64363,338,15.467,1.252,1.134,427,6235 -Oloron-Sainte-Marie,64422,10791,68.558,2.636,2.387,415,6231 -Bizanos,64132,4652,4.420,0.669,0.606,431,6251 -Saucède,64508,123,7.114,0.849,0.769,400,6248 -Maucor,64370,515,4.992,0.711,0.644,434,6255 -Tarsacq,64535,510,4.387,0.667,0.604,414,6255 -Orin,64426,241,4.320,0.662,0.599,402,6244 -Jurançon,64284,7086,18.841,1.382,1.251,425,6250 -Sainte-Colome,64473,354,9.466,0.979,0.886,422,6229 -Lurbe-Saint-Christau,64360,197,7.515,0.873,0.790,407,6232 -Agnos,64007,1001,9.151,0.963,0.872,407,6237 -Saint-Mont,32398,321,12.584,1.129,1.022,446,6285 -Idron,64269,4765,7.753,0.886,0.802,433,6252 -Pancheraccia,2B201,181,14.489,1.212,1.097,1226,6146 -Beyrie-en-Béarn,64121,195,2.766,0.529,0.479,419,6258 -Altiani,2B012,47,18.471,1.368,1.239,1216,6145 -Estos,64220,525,3.187,0.568,0.514,406,6241 -Santo-Pietro-di-Venaco,2B315,279,7.877,0.893,0.809,1210,6148 -Lacommande,64299,215,3.297,0.578,0.523,416,6249 -Labastide-Cézéracq,64288,559,5.017,0.713,0.646,412,6261 -Lasseube,64324,1735,48.886,2.226,2.015,421,6243 -Laroin,64315,1069,7.055,0.845,0.765,422,6247 -Poey-de-Lescar,64448,1596,6.902,0.836,0.757,418,6255 -Billère,64129,12964,4.464,0.673,0.609,425,6250 -Barcelonne-du-Gers,32027,1368,20.541,1.443,1.307,446,6293 -Maslacq,64367,907,13.439,1.167,1.057,401,6263 -Bonnegarde,40047,273,9.704,0.992,0.898,400,6278 -Saint-Germé,32378,495,9.579,0.985,0.892,444,6291 -Burosse-Mendousse,64153,66,5.646,0.756,0.684,440,6272 -Arrosès,64056,140,9.648,0.989,0.895,450,6278 -Aydie,64084,138,7.891,0.894,0.809,450,6281 -Escurès,64210,150,4.249,0.656,0.594,449,6268 -Viella,32463,520,22.164,1.499,1.357,445,6281 -Aurensan,32017,135,6.336,0.801,0.725,442,6286 -Mascaraàs-Haron,64366,128,8.778,0.943,0.854,441,6278 -Ansost,65013,56,2.185,0.471,0.426,467,6264 -Ségos,32424,234,8.772,0.943,0.854,435,6288 -Arblade-le-Bas,32004,153,7.600,0.878,0.795,445,6297 -Sancergues,18240,664,15.657,1.260,1.141,692,6677 -Bernède,32046,204,8.248,0.914,0.828,442,6291 -Vers-sur-Méouge,26372,44,13.801,1.183,1.071,904,6353 -Vialer,64552,190,7.341,0.862,0.780,444,6275 -Aurions-Idernes,64079,104,6.432,0.807,0.731,447,6277 -Castetpugon,64180,210,7.397,0.866,0.784,438,6277 -Labarthète,32170,140,11.093,1.060,0.960,443,6285 -Luppé-Violles,32220,165,7.666,0.881,0.798,447,6297 -Nouilhan,65330,198,4.587,0.682,0.617,460,6265 -Aubous,64074,50,3.783,0.619,0.560,445,6281 -Beccas,32039,115,3.390,0.586,0.531,468,6264 -Tadousse-Ussau,64532,68,4.714,0.691,0.626,441,6278 -Gensac,65196,104,3.531,0.598,0.541,463,6264 -Lespielle,64337,158,7.171,0.852,0.771,446,6268 -Tresson,72361,457,29.578,1.731,1.567,520,6756 -Gayon,64236,56,3.949,0.633,0.573,445,6270 -Castillon (Canton de Lembeye),64182,70,4.755,0.694,0.628,448,6269 -Volnay,72382,915,19.842,1.418,1.284,510,6760 -Baliracq-Maumusson,64090,125,6.042,0.782,0.708,438,6279 -Conchez-de-Béarn,64192,125,4.566,0.680,0.616,444,6276 -Lannecaube,64311,160,8.665,0.937,0.848,438,6270 -Vergoignan,32460,291,10.555,1.034,0.936,440,6296 -Diusse,64199,142,5.271,0.731,0.662,445,6280 -Blousson-Sérian,32058,42,5.312,0.734,0.665,473,6264 -Arricau-Bordes,64052,108,8.157,0.909,0.823,447,6271 -Moncla,64392,99,5.813,0.767,0.694,438,6282 -Mont-Disse,64401,72,5.425,0.741,0.671,446,6276 -Verlus,32461,99,6.204,0.793,0.718,441,6281 -Vidouze,65462,238,16.301,1.285,1.163,455,6264 -Saint-Jean-Poudge,64486,76,3.965,0.634,0.574,444,6275 -Bonnétable,72039,3869,40.154,2.017,1.826,508,6787 -Projan,32333,180,11.776,1.092,0.989,438,6282 -Lelin-Lapujolle,32209,275,13.558,1.172,1.061,446,6296 -Cadillon,64159,107,5.324,0.734,0.665,445,6276 -Corneillan,32108,140,8.418,0.924,0.837,442,6290 -Betplan,32050,101,5.539,0.749,0.678,474,6263 -Lembeye,64331,784,8.481,0.927,0.839,450,6264 -Buzon,65114,80,4.508,0.676,0.612,470,6266 -Rapaggio,2B256,25,2.560,0.509,0.461,1227,6163 -Aux-Aussat,32020,271,12.788,1.138,1.030,478,6266 -Luc-Armau,64356,116,5.890,0.773,0.700,452,6262 -Thorigné-sur-Dué,72358,1594,19.223,1.396,1.264,514,6776 -Baleix,64089,143,6.535,0.814,0.737,444,6258 -Manneville-ès-Plains,76407,268,6.365,0.803,0.727,539,6977 -Piedipartino,2B221,19,3.300,0.578,0.523,1224,6162 -Maure,64372,109,3.630,0.606,0.549,450,6257 -Malabat,32225,118,5.446,0.743,0.673,473,6264 -Montfort-le-Gesnois,72241,2988,18.812,1.381,1.250,504,6779 -Higuères-Souye,64262,276,7.454,0.869,0.787,438,6258 -Sanous,65403,97,1.702,0.415,0.376,458,6258 -Lamayou,64309,199,9.745,0.994,0.900,452,6258 -Bentayou-Sérée,64111,109,8.317,0.918,0.831,451,6262 -Monfaucon,65314,214,10.508,1.032,0.934,468,6268 -Haget,32152,333,9.249,0.968,0.876,471,6260 -Laguian-Mazous,32181,239,10.142,1.014,0.918,476,6260 -Guignecourt,60290,384,4.617,0.684,0.619,636,6933 -Bassillon-Vauzé,64098,68,4.946,0.708,0.641,452,6268 -Saint-Laurent-Bretagne,64488,435,10.658,1.039,0.941,442,6261 -Rabastens-de-Bigorre,65375,1461,9.240,0.968,0.876,471,6257 -Escoubès,64208,403,6.478,0.810,0.733,438,6265 -Canale-di-Verde,2B057,328,14.593,1.216,1.101,1232,6152 -Monassut-Audiracq,64389,359,9.983,1.006,0.911,440,6261 -Lafitole,65243,479,8.756,0.942,0.853,465,6265 -Monpardiac,32275,45,3.532,0.598,0.541,478,6266 -Momy,64388,133,6.038,0.782,0.708,449,6258 -Santa-Maria-Poggio,2B311,720,10.226,1.018,0.922,1239,6160 -Sarriac-Bigorre,65409,299,10.833,1.048,0.949,464,6259 -San-Giovanni-di-Moriani,2B302,94,10.074,1.010,0.914,1230,6162 -Peyrelongue-Abos,64446,148,8.685,0.938,0.849,449,6264 -Murato,2B172,601,20.593,1.444,1.307,1218,6184 -Lussagnet-Lusson,64361,168,6.720,0.825,0.747,441,6268 -Rainfreville,76519,72,2.578,0.511,0.463,552,6968 -Lucarré,64357,57,3.325,0.580,0.525,451,6262 -Argelès-Gazost,65025,2940,3.082,0.559,0.506,446,6216 -Samsons-Lion,64503,87,5.038,0.714,0.646,446,6262 -Lahitte-Toupière,65248,260,5.726,0.762,0.690,457,6268 -Arbéost,65018,85,15.155,1.239,1.122,432,6217 -Ségalas,65414,82,6.081,0.785,0.711,468,6262 -Omessa,2B193,578,24.438,1.574,1.425,1212,6164 -Caixon,65119,376,8.579,0.932,0.844,457,6260 -Salles,65400,226,27.388,1.666,1.508,443,6221 -Troncens,32455,184,13.078,1.151,1.042,475,6263 -Coslédaà-Lube-Boast,64194,385,13.955,1.189,1.077,439,6264 -Cazaux-Villecomtal,32099,72,4.091,0.644,0.583,471,6264 -Soulom,65435,257,2.989,0.550,0.498,448,6210 -Gerderest,64239,133,6.554,0.815,0.738,444,6260 -Villecomtal-sur-Arros,32464,845,11.237,1.067,0.966,476,6262 -Castéra-Loubix,64174,54,3.412,0.588,0.532,453,6261 -Ayros-Arbouix,65055,314,2.752,0.528,0.478,451,6215 -Anoye,64028,150,9.787,0.996,0.902,447,6259 -Préchac,65371,227,1.629,0.406,0.368,450,6215 -Maspie-Lalonquère-Juillacq,64369,257,10.798,1.046,0.947,446,6266 -Osse-en-Aspe,64433,324,43.125,2.090,1.892,406,6221 -Labatut,64293,176,8.484,0.927,0.839,454,6262 -Riupeyrous,64465,204,4.879,0.703,0.637,439,6262 -Ancizan,65006,274,41.484,2.050,1.856,479,6208 -Larreule,65262,409,10.192,1.016,0.920,457,6264 -Abère,64002,160,5.869,0.771,0.698,442,6262 -Bedous,64104,591,11.676,1.088,0.985,405,6217 -Grézian,65209,86,1.931,0.442,0.400,483,6202 -Ouzous,65352,207,4.768,0.695,0.629,446,6221 -Saint-Philbert-des-Champs,14644,637,12.069,1.106,1.001,503,6903 -Boô-Silhen,65098,299,3.223,0.571,0.517,450,6220 -Aste-Béon,64069,239,18.723,1.377,1.247,421,6218 -Lucciana,2B148,5671,29.125,1.718,1.556,1228,6179 -Grust,65210,39,10.034,1.008,0.913,448,6201 -Jegun,32162,1137,39.226,1.994,1.805,492,6296 -Castet,64175,158,23.563,1.545,1.399,421,6226 -Aucun,65045,244,13.029,1.149,1.040,441,6211 -Cette-Eygun,64185,71,19.095,1.391,1.259,413,6210 -Castillon-Debats,32088,326,35.462,1.896,1.717,471,6297 -Viscos,65478,36,6.708,0.824,0.746,452,6205 -Burnevillers,25102,46,6.763,0.828,0.750,1001,6700 -Sère-en-Lavedan,65420,71,1.914,0.440,0.398,443,6218 -Lourdios-Ichère,64351,148,16.266,1.284,1.163,400,6225 -Béost,64110,219,43.579,2.101,1.902,421,6217 -Novella,2B180,85,30.129,1.747,1.582,1203,6182 -Eaux-Bonnes,64204,291,37.868,1.959,1.774,431,6209 -Santa-Lucia-di-Mercurio,2B306,102,23.788,1.552,1.405,1211,6156 -Gaillagos,65182,128,8.506,0.928,0.840,441,6218 -Adast,65001,292,1.072,0.330,0.299,449,6213 -Borce,64136,134,58.146,2.427,2.197,408,6209 -Gez,65202,328,3.955,0.633,0.573,443,6218 -Etsaut,64223,75,34.906,1.881,1.703,409,6205 -Bun,65112,140,2.857,0.538,0.487,443,6214 -Castirla,2B083,172,24.473,1.575,1.426,1208,6161 -Arras-en-Lavedan,65029,492,25.181,1.597,1.446,443,6208 -Gère-Bélesten,64240,198,12.716,1.135,1.028,417,6218 -Borgo,2B042,8766,48.196,2.210,2.001,1224,6183 -Accous,64006,463,60.565,2.477,2.243,415,6214 -Patrimonio,2B205,772,17.485,1.331,1.205,1224,6198 -Bareilles,65064,46,21.123,1.463,1.325,486,6203 -Saint-Lary,32384,282,9.795,0.996,0.902,496,6295 -Morosaglia,2B169,1100,24.476,1.575,1.426,1221,6170 -Préneron,32332,136,8.721,0.940,0.851,482,6296 -Vic-Fezensac,32462,3468,54.678,2.354,2.131,475,6300 -Antras,32003,48,6.758,0.827,0.749,497,6296 -Saint-Jean-Poutge,32382,326,10.776,1.045,0.946,487,6295 -Indevillers,25314,251,23.075,1.529,1.384,997,6697 -Gavignano,2B122,54,10.786,1.045,0.946,1221,6166 -San-Gavino-di-Tenda,2B301,70,50.569,2.264,2.050,1201,6192 -Parata,2B202,24,2.794,0.532,0.482,1230,6161 -Valle-di-Rostino,2B337,131,15.588,1.257,1.138,1219,6171 -Felce,2B111,51,4.708,0.691,0.626,1230,6161 -Aléria,2B009,2206,63.132,2.529,2.290,1238,6127 -Bigorno,2B036,87,8.943,0.952,0.862,1219,6177 -Vescovato,2B346,2806,17.620,1.336,1.210,1230,6180 -Prunelli-di-Casacconi,2B250,150,6.005,0.780,0.706,1225,6177 -Stazzona,2B291,42,1.388,0.375,0.340,1225,6162 -Lento,2B140,104,23.544,1.545,1.399,1217,6176 -Pietricaggio,2B227,35,5.319,0.734,0.665,1225,6156 -Scolca,2B274,105,6.871,0.834,0.755,1223,6183 -Aiti,2B003,32,12.118,1.108,1.003,1215,6164 -Auberville-la-Renault,76033,463,4.999,0.712,0.645,511,6959 -Crocicchia,2B102,71,4.263,0.657,0.595,1222,6175 -Nogent-le-Bernard,72220,930,30.355,1.754,1.588,511,6798 -San-Gavino-d'Ampugnani,2B299,107,3.200,0.569,0.515,1230,6167 -Tralonca,2B329,109,15.654,1.259,1.140,1214,6159 -Castiglione,2B081,41,23.142,1.531,1.386,1204,6163 -Mazzola,2B157,28,6.575,0.816,0.739,1223,6158 -Rusio,2B264,77,8.611,0.934,0.846,1214,6159 -Nocario,2B176,66,3.089,0.559,0.506,1225,6165 -Matra,2B155,42,6.505,0.812,0.735,1226,6155 -San-Nicolao,2B313,1943,7.673,0.882,0.799,1239,6162 -Casalta,2B072,52,4.914,0.706,0.639,1227,6171 -Popolasca,2B244,48,10.453,1.029,0.932,1206,6170 -Scata,2B273,47,2.814,0.534,0.483,1226,6168 -Polveroso,2B243,41,1.980,0.448,0.406,1226,6166 -Pietralba,2B223,486,38.843,1.984,1.796,1212,6181 -Porri,2B245,44,4.542,0.678,0.614,1230,6173 -Sauqueville,76667,358,3.322,0.580,0.525,559,6974 -Linguizzetta,2B143,1127,64.752,2.561,2.319,1242,6140 -Penta-di-Casinca,2B207,3405,18.868,1.383,1.252,1232,6171 -Campile,2B054,194,9.754,0.994,0.900,1225,6178 -Alando,2B005,38,3.061,0.557,0.504,1220,6155 -La Porta,2B246,193,5.129,0.721,0.653,1225,6170 -Valle-d'Orezza,2B338,49,4.032,0.639,0.579,1226,6162 -Poggio-d'Oletta,2B239,215,16.048,1.275,1.154,1223,6195 -Monte,2B166,599,14.827,1.226,1.110,1226,6171 -Vignale,2B350,163,10.816,1.047,0.948,1225,6182 -Croce,2B101,73,6.445,0.808,0.732,1221,6165 -Pietra-di-Verde,2B225,104,8.719,0.940,0.851,1230,6154 -Ortale,2B194,25,4.161,0.649,0.588,1230,6155 -Furiani,2B120,5682,18.999,1.387,1.256,1225,6192 -Silvareccio,2B280,127,4.794,0.697,0.631,1226,6172 -Carcheto-Brustico,2B063,32,5.204,0.726,0.657,1223,6159 -Criquetot-sur-Longueville,76197,223,7.396,0.866,0.784,563,6966 -Piobetta,2B234,20,5.044,0.715,0.647,1227,6161 -Casabianca,2B069,87,3.656,0.609,0.551,1225,6170 -Santa-Lucia-di-Moriani,2B307,1385,6.104,0.786,0.712,1235,6165 -Valle-di-Campoloro,2B335,342,5.672,0.758,0.686,1234,6159 -Érone,2B106,11,3.962,0.634,0.574,1218,6161 -Lintot-les-Bois,76389,178,2.881,0.540,0.489,561,6970 -Moïta,2B161,79,5.697,0.760,0.688,1228,6154 -Luynes,37139,5143,34.141,1.860,1.684,517,6700 -San-Damiano,2B297,57,5.821,0.768,0.695,1230,6167 -Talasani,2B319,763,9.987,1.006,0.911,1234,6169 -Poggio-Marinaccio,2B241,30,2.904,0.542,0.491,1221,6169 -Canavaggia,2B059,100,34.964,1.882,1.704,1211,6179 -Novale,2B179,60,4.932,0.707,0.640,1230,6155 -Cervione,2B087,2045,11.487,1.079,0.977,1233,6159 -Tarrano,2B321,15,3.884,0.627,0.568,1227,6159 -Velone-Orneto,2B340,117,12.247,1.114,1.009,1229,6164 -Castellare-di-Casinca,2B077,651,9.074,0.959,0.868,1238,6175 -Ficaja,2B113,51,5.078,0.717,0.649,1226,6167 -Carticasi,2B068,29,13.118,1.153,1.044,1223,6159 -Lussault-sur-Loire,37138,764,9.174,0.964,0.873,545,6700 -Loreto-di-Casinca,2B145,213,8.117,0.907,0.821,1227,6173 -Giocatojo,2B125,48,2.448,0.498,0.451,1224,6170 -Biguglia,2B037,7945,26.708,1.645,1.489,1225,6190 -Castellare-di-Mercurio,2B078,33,6.118,0.787,0.713,1216,6158 -Reugny,37194,1660,29.749,1.736,1.572,543,6708 -Perelli,2B208,110,6.199,0.793,0.718,1226,6155 -Barbaggio,2B029,290,10.895,1.051,0.952,1219,6198 -Vernou-sur-Brenne,37270,2705,25.855,1.619,1.466,538,6709 -Campitello,2B055,117,8.173,0.910,0.824,1219,6181 -Alzi,2B013,25,2.684,0.521,0.472,1219,6154 -Chiatra,2B088,225,8.278,0.916,0.829,1233,6153 -Valle-d'Alesani,2B334,115,9.612,0.987,0.894,1229,6157 -Tallone,2B320,331,69.922,2.662,2.410,1229,6149 -Taglio-Isolaccio,2B318,571,11.247,1.068,0.967,1232,6170 -Sorio,2B287,140,15.524,1.254,1.135,1216,6187 -Pie-d'Orezza,2B222,36,5.774,0.765,0.693,1221,6163 -Verdèse,2B344,35,0.989,0.317,0.287,1224,6164 -Piedigriggio,2B220,142,10.502,1.032,0.934,1206,6170 -Cambia,2B051,86,8.349,0.920,0.833,1217,6163 -Castello-di-Rostino,2B079,465,12.478,1.124,1.018,1221,6171 -Quercitello,2B255,45,2.968,0.548,0.496,1225,6170 -Carpineto,2B067,32,2.433,0.497,0.450,1226,6162 -Bustanico,2B045,63,11.556,1.082,0.980,1223,6158 -Lano,2B137,27,8.247,0.914,0.828,1214,6160 -Pianello,2B213,67,16.947,1.310,1.186,1225,6156 -Piedicroce,2B219,109,3.280,0.576,0.522,1226,6166 -Castineta,2B082,41,9.386,0.975,0.883,1221,6167 -Piazzole,2B217,42,3.900,0.629,0.570,1229,6165 -Saint-Vincent-du-Lorouër,72325,871,27.039,1.655,1.498,515,6750 -Santa-Reparata-di-Moriani,2B317,51,9.005,0.955,0.865,1234,6160 -Chanceaux-sur-Choisille,37054,3503,18.505,1.369,1.240,530,6711 -Pero-Casevecchie,2B210,123,4.634,0.685,0.620,1231,6167 -Moriers,28270,220,9.086,0.959,0.868,585,6794 -Saint-Florent,2B298,1637,18.114,1.355,1.227,1214,6194 -Penta-Acquatella,2B206,32,3.063,0.557,0.504,1226,6171 -Urtaca,2B332,233,31.205,1.778,1.610,1204,6187 -Prato-di-Giovellina,2B248,43,12.263,1.115,1.010,1207,6164 -Sermano,2B275,58,7.630,0.879,0.796,1217,6158 -Castifao,2B080,160,42.372,2.072,1.876,1208,6175 -Sant'Andréa-di-Bozio,2B292,73,24.030,1.560,1.412,1220,6150 -Olmo,2B192,163,4.422,0.669,0.606,1228,6179 -Bisinchi,2B039,209,12.688,1.134,1.027,1219,6177 -Ortiporio,2B195,129,5.017,0.713,0.646,1221,6171 -Piedicorte-di-Gaggio,2B218,99,27.336,1.664,1.507,1225,6143 -Monacia-d'Orezza,2B164,27,4.611,0.684,0.619,1227,6163 -Le Boulay,37030,791,19.978,1.423,1.288,539,6726 -Campi,2B053,21,4.861,0.702,0.636,1229,6150 -Melleray,72193,441,25.947,1.621,1.468,536,6777 -Vivario,2B354,441,78.288,2.816,2.550,1200,6139 -Favalello,2B110,74,5.534,0.749,0.678,1218,6154 -Pietraserena,2B226,78,6.750,0.827,0.749,1227,6147 -Casanova,2B074,378,9.889,1.001,0.906,1210,6149 -Antisanti,2B016,507,48.097,2.208,1.999,1222,6141 -Poggio-di-Nazza,2B236,180,32.796,1.823,1.651,1228,6125 -Casevecchie,2B075,65,9.014,0.956,0.866,1229,6136 -Rospigliani,2B263,72,9.868,1.000,0.905,1216,6145 -Ghisoni,2B124,213,125.505,3.566,3.229,1216,6125 -Le Grand-Lucé,72143,1920,27.462,1.668,1.510,509,6752 -Ghisonaccia,2B123,4196,75.999,2.775,2.513,1235,6130 -Giuncaggio,2B126,56,16.041,1.275,1.154,1234,6138 -Focicchia,2B116,26,7.231,0.856,0.775,1221,6148 -Ampriani,2B015,22,2.306,0.483,0.437,1224,6149 -San-Gavino-di-Fiumorbo,2B365,135,22.455,1.508,1.365,1217,6115 -Zuani,2B364,29,5.175,0.724,0.656,1223,6152 -Guitera-les-Bains,2A133,147,14.595,1.216,1.101,1202,6115 -Corte,2B096,7389,149.001,3.885,3.518,1189,6147 -Riventosa,2B260,158,5.897,0.773,0.700,1215,6147 -Venaco,2B341,712,53.553,2.329,2.109,1216,6146 -Corrano,2A094,72,12.696,1.134,1.027,1203,6104 -Vezzani,2B347,281,46.235,2.164,1.959,1214,6138 -Vouvray-sur-Huisne,72383,124,3.349,0.583,0.528,517,6780 -Muracciole,2B171,35,14.164,1.198,1.085,1214,6138 -Forciolo,2A117,76,6.859,0.834,0.755,1200,6100 -Serra-di-Fiumorbo,2B277,330,43.554,2.101,1.902,1217,6113 -Le Breil-sur-Mérize,72046,1541,18.392,1.365,1.236,514,6770 -Sari-Solenzara,2A269,1355,74.432,2.746,2.486,1225,6102 -Zicavo,2A359,228,92.468,3.061,2.771,1218,6107 -Torcé-en-Vallée,72359,1397,17.021,1.313,1.189,508,6787 -Sampolo,2A268,73,7.135,0.850,0.770,1207,6117 -Solaro,2B283,706,93.987,3.086,2.794,1232,6106 -Saint-Aubin-des-Coudrais,72267,913,17.460,1.330,1.204,519,6792 -Cozzano,2A099,270,25.065,1.594,1.443,1210,6112 -Palneca,2A200,162,43.616,2.102,1.903,1216,6119 -Bastelica,2A031,541,127.052,3.588,3.249,1202,6115 -Briosne-lès-Sables,72048,556,9.938,1.003,0.908,505,6792 -Dollon,72118,1483,25.454,1.606,1.454,522,6770 -Dehault,72114,271,8.971,0.953,0.863,522,6790 -Ardenay-sur-Mérize,72007,480,11.628,1.085,0.982,509,6767 -Nauvay,72214,11,2.710,0.524,0.474,506,6798 -Lombron,72165,1917,24.232,1.567,1.419,509,6776 -Surfonds,72345,342,4.920,0.706,0.639,512,6768 -La Bosse,72040,135,10.896,1.051,0.952,516,6789 -Saint-Paterne-Racan,37231,1661,48.178,2.209,2.000,514,6723 -Boëssé-le-Sec,72038,626,11.937,1.100,0.996,519,6786 -Soulitré,72341,640,10.970,1.054,0.954,507,6774 -Sceaux-sur-Huisne,72331,570,11.860,1.096,0.992,517,6780 -La Chapelle-Saint-Rémy,72067,975,19.357,1.400,1.268,512,6778 -Rouperroux-le-Coquet,72259,296,12.172,1.111,1.006,508,6796 -Bellou-le-Trichard,61041,217,9.691,0.991,0.897,520,6797 -Couesmes,37084,482,21.960,1.492,1.351,500,6723 -Saint-Martin-des-Monts,72302,182,5.708,0.760,0.688,523,6787 -Saint-Denis-des-Coudrais,72277,118,7.112,0.849,0.769,512,6788 -Saint-Célerin,72271,889,13.519,1.170,1.059,511,6786 -La Chapelle-du-Bois,72062,879,16.600,1.297,1.174,520,6797 -Saint-Georges-du-Rosay,72281,438,17.381,1.327,1.201,518,6790 -Saint-Mars-de-Locquenay,72298,567,21.829,1.487,1.346,514,6759 -Ternay,41255,338,14.578,1.215,1.100,533,6743 -Saint-Étienne-des-Guérets,41208,103,11.563,1.082,0.980,554,6720 -La Chapelle-Huon,72064,545,18.776,1.379,1.249,532,6751 -Houssay,41102,388,16.885,1.308,1.184,544,6740 -Beaumont-Pied-de-Bœuf,72028,483,24.851,1.587,1.437,507,6740 -Villeporcher,41286,153,12.131,1.109,1.004,549,6726 -Sougé,41250,475,17.000,1.312,1.188,529,6746 -Dame-Marie-les-Bois,37095,355,9.002,0.955,0.865,553,6716 -Saint-Nicolas-des-Motets,37229,268,12.754,1.137,1.029,552,6725 -Saint-Ouen,41226,3253,11.201,1.065,0.964,554,6751 -Angiens,76015,521,6.960,0.840,0.761,540,6971 -Villiersfaux,41293,262,7.214,0.855,0.774,549,6738 -Les Roches-l'Évêque,41192,279,2.407,0.494,0.447,542,6743 -Saint-Antoine-du-Rocher,37206,1714,24.173,1.565,1.417,520,6717 -Coulommiers-la-Tour,41065,547,12.162,1.110,1.005,559,6746 -Saint-Aubin-le-Dépeint,37207,304,15.109,1.237,1.120,505,6730 -Sasnières,41236,109,7.812,0.890,0.806,546,6736 -Autigny,76040,317,4.074,0.642,0.581,545,6967 -Lancôme,41108,122,9.965,1.005,0.910,558,6731 -Dangeau,28127,1283,55.021,2.361,2.138,570,6786 -Fortan,41090,276,5.958,0.777,0.704,544,6753 -Savigny-sur-Braye,41238,2046,67.272,2.611,2.364,533,6758 -Château-Renault,37063,5019,3.522,0.597,0.541,544,6725 -Huisseau-en-Beauce,41103,417,9.012,0.956,0.866,549,6738 -Loir en Vallée,72262,2175,64.969,2.566,2.323,519,6746 -Villebourg,37274,296,12.353,1.119,1.013,512,6730 -Pezou,41175,1119,14.086,1.195,1.082,563,6757 -Luceau,72173,1234,17.812,1.343,1.216,507,6740 -La Chartre-sur-le-Loir,72068,1440,8.778,0.943,0.854,521,6740 -Lhomme,72161,903,18.363,1.364,1.235,516,6745 -Villeromain,41290,242,13.054,1.150,1.041,560,6734 -Sonzay,37249,1395,48.247,2.211,2.002,507,6720 -Lavardin,41113,185,6.903,0.836,0.757,540,6739 -Saint-Pierre-du-Lorouër,72314,377,16.632,1.298,1.175,516,6745 -Jupilles,72153,572,26.543,1.640,1.485,502,6746 -Brèches,37037,274,11.554,1.082,0.980,507,6720 -Meslay,41138,311,7.156,0.852,0.771,557,6748 -Saint-Christophe-sur-le-Nais,37213,1126,18.228,1.359,1.230,512,6726 -Autrèche,37009,429,20.741,1.450,1.313,547,6715 -Villedieu-le-Château,41279,411,29.689,1.734,1.570,519,6737 -Saint-Pierre-de-Chevillé,72311,365,11.484,1.079,0.977,507,6727 -Les Hayes,41100,179,15.854,1.267,1.147,536,6734 -Neuvy-en-Dunois,28277,312,25.855,1.619,1.466,590,6793 -Naveil,41158,2344,13.489,1.169,1.058,550,6744 -Anglesqueville-la-Bras-Long,76016,115,3.576,0.602,0.545,539,6967 -Troo,41265,305,13.227,1.158,1.048,532,6746 -La Chapelle-sur-Dun,76172,162,4.421,0.669,0.606,544,6974 -Ambloy,41001,182,13.223,1.157,1.048,547,6739 -Villechauve,41278,284,11.093,1.060,0.960,545,6730 -Françay,41093,277,20.507,1.441,1.305,555,6728 -Artins,41004,264,11.968,1.101,0.997,529,6742 -Beaumont-sur-Dême,72027,333,13.598,1.174,1.063,517,6733 -La Bruère-sur-Loir,72049,246,11.519,1.080,0.978,503,6734 -Thoiré-sur-Dinan,72356,456,17.783,1.342,1.215,511,6747 -Rhodon,41188,125,7.123,0.850,0.770,568,6740 -Saint-Gourgon,41213,114,10.215,1.017,0.921,548,6732 -Bueil-en-Touraine,37041,318,17.922,1.348,1.220,519,6730 -Pray,41182,295,10.618,1.037,0.939,560,6733 -Auzouer-en-Touraine,37010,2210,34.016,1.856,1.680,547,6716 -Villerable,41287,526,16.786,1.304,1.181,551,6740 -Saunay,37240,692,25.978,1.622,1.469,545,6727 -Marcilly-en-Beauce,41124,349,6.380,0.804,0.728,552,6743 -Rocé,41190,220,10.272,1.020,0.924,560,6746 -Saint-Jacques-des-Guérets,41215,88,1.828,0.430,0.389,534,6742 -Villavard,41274,127,5.224,0.728,0.659,542,6742 -Rahart,41186,323,14.404,1.208,1.094,554,6752 -Lunay,41120,1270,38.576,1.977,1.790,546,6743 -Mazangé,41131,875,23.866,1.555,1.408,547,6747 -Villiers-sur-Loir,41294,1128,10.012,1.007,0.912,552,6749 -Sainte-Anne,41200,442,5.139,0.722,0.654,555,6743 -Saint-Arnoult,41201,319,9.612,0.987,0.894,540,6734 -Mesland,41137,567,26.662,1.644,1.489,553,6717 -Montoire-sur-le-Loir,41149,3808,21.283,1.468,1.329,540,6747 -Saint-Rimay,41228,291,7.346,0.863,0.781,542,6745 -Pruillé-l'Éguillé,72248,822,21.272,1.468,1.329,506,6754 -Montrouveau,41153,154,17.847,1.345,1.218,528,6734 -Prunay-Cassereau,41184,618,32.787,1.823,1.651,540,6733 -Montreuil-le-Henri,72210,311,14.416,1.209,1.095,516,6754 -Les Hermites,37116,572,32.759,1.822,1.650,530,6735 -Crucheray,41072,380,25.646,1.612,1.460,558,6742 -Neuville-sur-Brenne,37169,896,6.871,0.834,0.755,542,6725 -Gombergean,41098,195,12.161,1.110,1.005,552,6731 -Roches,41191,69,8.805,0.945,0.856,586,6745 -Cellé,41030,230,12.683,1.134,1.027,533,6750 -Oucques La Nouvelle,41171,1715,49.663,2.243,2.031,572,6744 -Thoré-la-Rochette,41259,884,10.786,1.045,0.946,550,6742 -Saint-Cyr-du-Gault,41205,175,26.196,1.629,1.475,550,6722 -Lisle,41116,196,6.647,0.821,0.743,560,6752 -Azé,41010,1052,31.924,1.798,1.628,554,6752 -Marray,37149,463,23.847,1.554,1.407,524,6728 -Nogent-sur-Loir,72221,377,10.850,1.048,0.949,505,6730 -Crotelles,37092,696,15.727,1.262,1.143,537,6715 -Écurat,17148,470,10.570,1.035,0.937,413,6530 -Fontaine-les-Coteaux,41087,346,22.097,1.496,1.355,538,6749 -Neuillé-le-Lierre,37166,805,16.808,1.305,1.182,547,6716 -Bonneveau,41020,473,11.003,1.056,0.956,532,6751 -Courdemanche,72103,608,24.185,1.565,1.417,519,6747 -Périgny,41174,180,10.397,1.026,0.929,559,6740 -Saint-Laurent-en-Gâtines,37224,951,31.783,1.795,1.625,535,6720 -Lancé,41107,471,18.210,1.358,1.230,557,6732 -Houdetot,76365,176,5.865,0.771,0.698,543,6970 -La Ferrière,37106,308,15.637,1.259,1.140,530,6729 -Gréez-sur-Roc,72144,334,25.444,1.606,1.454,545,6785 -Mazières-de-Touraine,37150,1299,34.294,1.864,1.688,509,6704 -Limeray,37131,1286,13.851,1.185,1.073,552,6712 -Chargé,37060,1303,8.521,0.929,0.841,553,6704 -Montreuil-en-Touraine,37158,835,25.167,1.597,1.446,547,6715 -Saint-Règle,37236,567,6.329,0.801,0.725,552,6704 -Jauzé,72148,85,5.762,0.764,0.692,507,6794 -Parçay-Meslay,37179,2289,14.203,1.200,1.086,532,6710 -Saint-Ouen-les-Vignes,37230,1017,18.932,1.385,1.254,549,6713 -Mosnes,37161,809,14.399,1.208,1.094,556,6709 -Sillé-le-Philippe,72335,1087,10.634,1.038,0.940,502,6783 -Mettray,37152,2022,10.565,1.035,0.937,526,6708 -Saint-Étienne-de-Chigny,37217,1583,21.337,1.470,1.331,513,6699 -Saint-Pierre-des-Corps,37233,15866,11.315,1.071,0.970,529,6702 -Peray,72233,63,2.465,0.500,0.453,506,6797 -Souvigny-de-Touraine,37252,389,25.852,1.618,1.465,555,6698 -Monteaux,41144,785,6.236,0.795,0.720,556,6710 -Vallières-les-Grandes,41267,937,40.809,2.033,1.841,563,6700 -La Ville-aux-Dames,37273,5434,7.979,0.899,0.814,533,6703 -La Riche,37195,10370,8.147,0.909,0.823,523,6700 -Chançay,37052,1135,15.115,1.238,1.121,538,6709 -Rilly-sur-Loire,41189,472,10.213,1.017,0.921,559,6707 -Amboise,37003,12761,41.013,2.039,1.846,546,6699 -Cléré-les-Pins,37081,1416,35.921,1.908,1.728,505,6705 -Nazelles-Négron,37163,3575,22.136,1.498,1.356,548,6704 -Vouvray,37281,3234,23.109,1.530,1.385,533,6703 -Pernay,37182,1325,17.791,1.343,1.216,512,6706 -Charentilly,37059,1273,14.122,1.196,1.083,518,6708 -Saint-Symphorien,27606,484,3.822,0.622,0.563,515,6917 -Montlouis-sur-Loire,37156,10628,24.564,1.578,1.429,539,6698 -Ambillou,37002,1816,49.666,2.243,2.031,512,6706 -Noizay,37171,1146,17.748,1.341,1.214,543,6707 -Fondettes,37109,10460,31.823,1.796,1.626,522,6706 -Saint-Roch,37237,1266,4.814,0.698,0.632,518,6708 -Saint-Marc-du-Cor,41224,184,13.009,1.148,1.039,547,6763 -Beauce la Romaine,41173,3473,136.848,3.724,3.372,589,6754 -Unverre,28398,1204,62.269,2.512,2.274,557,6795 -La Membrolle-sur-Choisille,37151,3337,6.950,0.839,0.760,522,6706 -Cangey,37043,1068,22.801,1.520,1.376,552,6716 -Rochecorbon,37203,3162,16.837,1.306,1.182,529,6706 -Pocé-sur-Cisse,37185,1636,10.831,1.048,0.949,548,6704 -Montboissier,28259,318,14.184,1.199,1.086,580,6790 -Villampuy,28410,318,16.753,1.303,1.180,592,6773 -Jallans,28198,816,9.087,0.960,0.869,582,6777 -Moléans,28256,467,11.045,1.058,0.958,580,6784 -Colletot,27163,202,4.313,0.661,0.598,528,6920 -Gohory,28182,326,9.622,0.987,0.894,566,6785 -Mottereau,28272,169,8.827,0.946,0.857,566,6795 -Saint-Maur-sur-le-Loir,28353,421,16.703,1.301,1.178,582,6787 -Logron,28211,588,22.792,1.520,1.376,573,6785 -Flacey,28153,210,14.172,1.198,1.085,575,6787 -Châteaudun,28088,13077,28.439,1.697,1.536,570,6780 -Trizay-lès-Bonneval,28396,321,9.915,1.002,0.907,578,6790 -Pré-Saint-Martin,28306,198,7.303,0.860,0.779,588,6791 -Meslay-le-Vidame,28246,526,14.866,1.227,1.111,585,6800 -Lorges,41119,360,13.559,1.172,1.061,590,6749 -Donnemain-Saint-Mamès,28132,696,12.824,1.140,1.032,582,6777 -Coulmiers,45109,544,14.218,1.200,1.086,600,6763 -Saumeray,28370,489,19.528,1.407,1.274,573,6797 -Villiers-Saint-Orien,28418,166,15.127,1.238,1.121,585,6783 -Villamblain,45337,283,26.575,1.641,1.486,595,6770 -Nottonville,28283,306,24.794,1.585,1.435,587,6781 -Brou,28061,3382,19.761,1.415,1.281,562,6795 -Bouville,28057,583,15.699,1.261,1.142,579,6799 -Veuzain-sur-Loire,41167,3556,38.143,1.966,1.780,558,6709 -Conie-Molitard,28106,403,15.227,1.242,1.125,587,6781 -Sancheville,28364,832,21.986,1.493,1.352,596,6786 -Charonville,28081,314,9.726,0.993,0.899,573,6797 -Arthémonay,26014,579,5.761,0.764,0.692,861,6453 -Cour-Cheverny,41067,2829,29.670,1.734,1.570,584,6717 -Alluyes,28005,764,19.825,1.417,1.283,582,6796 -La Chapelle-du-Noyer,28075,1046,13.401,1.165,1.055,576,6772 -Le Gault-Saint-Denis,28176,672,23.744,1.551,1.404,585,6794 -Varize,28400,197,13.865,1.185,1.073,590,6774 -Vieuvicq,28409,479,15.782,1.265,1.145,567,6800 -Saint-Avit-les-Guespières,28326,370,12.738,1.136,1.029,572,6800 -Marboué,28233,1133,26.682,1.644,1.489,570,6781 -Binas,41017,706,26.308,1.633,1.479,585,6753 -Valloire-sur-Cisse,41055,2462,40.247,2.019,1.828,567,6712 -La Chapelle-Enchérie,41037,213,10.817,1.047,0.948,564,6748 -Maslives,41129,703,7.337,0.862,0.780,585,6726 -Cloyes-les-Trois-Rivières,28103,5710,119.795,3.484,3.154,574,6763 -Pontlevoy,41180,1520,51.375,2.282,2.066,563,6700 -Renay,41187,165,12.095,1.107,1.002,567,6751 -Épiais,41077,137,8.693,0.939,0.850,567,6747 -Monthou-sur-Bièvre,41145,817,16.723,1.302,1.179,572,6707 -Moisy,41141,361,17.351,1.326,1.201,573,6761 -Saint-Dyé-sur-Loire,41207,1143,5.480,0.745,0.675,585,6729 -Faye,41081,251,8.827,0.946,0.857,563,6746 -Champigny-en-Beauce,41035,594,22.497,1.510,1.367,566,6738 -Thiville,28389,344,28.239,1.692,1.532,575,6769 -Villebout,41277,141,11.356,1.073,0.972,564,6769 -Saint-Laurent-des-Bois,41219,289,18.400,1.365,1.236,588,6755 -Maves,41130,656,33.353,1.838,1.664,578,6744 -Selommes,41243,816,28.096,1.687,1.527,569,6742 -Pontaumur,63283,659,14.053,1.193,1.080,671,6529 -Lignières,41115,386,15.875,1.268,1.148,564,6756 -Mer,41136,6276,26.491,1.638,1.483,585,6736 -Villetrun,41291,323,6.842,0.833,0.754,561,6746 -Talcy,41253,248,15.239,1.243,1.125,581,6740 -Saint-Mars-la-Brière,72300,2686,34.589,1.872,1.695,502,6776 -La Chapelle-Saint-Martin-en-Plaine,41039,730,22.853,1.522,1.378,581,6735 -Saint-Mars-d'Outillé,72299,2408,38.421,1.973,1.786,503,6759 -Brévainville,41026,168,16.213,1.282,1.161,573,6764 -Villermain,41289,395,28.991,1.714,1.552,594,6755 -Royville,76546,274,4.429,0.670,0.607,551,6967 -Saint-Jean-Froidmentel,41216,542,17.208,1.320,1.195,563,6762 -Morée,41154,1078,25.936,1.621,1.468,573,6757 -Saint-Léonard-en-Beauce,41221,644,40.887,2.035,1.843,577,6754 -Concriers,41058,171,4.844,0.701,0.635,587,6744 -Conan,41057,177,15.383,1.248,1.130,573,6737 -Fréteval,41095,1089,20.608,1.445,1.308,568,6752 -Le Plessis-l'Échelle,41178,73,11.688,1.088,0.985,583,6745 -Peyrins,26231,2802,25.421,1.605,1.453,859,6448 -Tavers,45317,1340,21.992,1.493,1.352,597,6741 -Saint-Sylvain,76651,181,3.258,0.575,0.521,532,6973 -Avaray,41008,736,13.960,1.189,1.077,589,6739 -Messas,45202,882,5.302,0.733,0.664,597,6747 -Bauzy,41013,282,25.811,1.617,1.464,598,6718 -La Chapelle-Onzerain,45074,123,7.263,0.858,0.777,595,6771 -Charsonville,45081,616,24.639,1.580,1.431,594,6756 -Ermenouville,76241,143,3.715,0.614,0.556,541,6969 -Crouy-sur-Cosson,41071,525,28.275,1.693,1.533,600,6726 -Fontaines-en-Sologne,41086,630,50.623,2.265,2.051,594,6710 -La Neuve-Grange,27430,331,5.104,0.719,0.651,597,6917 -Thoury,41260,422,15.552,1.255,1.136,597,6722 -Gueures,76334,544,6.075,0.785,0.711,550,6973 -Épieds-en-Beauce,45134,1455,40.221,2.019,1.828,598,6765 -Puy-Saint-André,5107,465,15.339,1.247,1.129,985,6425 -Baccon,45019,708,33.084,1.831,1.658,594,6757 -Neuvy,41160,317,31.404,1.784,1.615,595,6722 -Châteauneuf-sur-Isère,26084,3840,45.703,2.152,1.948,852,6433 -Cravant,45116,968,33.876,1.853,1.678,590,6748 -Bracieux,41025,1306,2.962,0.548,0.496,590,6719 -Beaugency,45028,7386,16.577,1.296,1.173,599,6739 -Herbault,41101,1249,13.218,1.157,1.048,559,6723 -Cailleville,76151,266,5.069,0.717,0.649,538,6972 -Villeneuve-sur-Conie,45341,209,18.089,1.354,1.226,601,6771 -Villebarou,41276,2459,9.102,0.960,0.869,576,6726 -Péronville,28296,266,25.056,1.593,1.442,597,6773 -Cormainville,28108,242,18.127,1.355,1.227,599,6781 -Averdon,41009,701,29.324,1.724,1.561,575,6732 -Les Villages Vovéens,28422,3983,63.876,2.544,2.303,593,6801 -Bazoches-en-Dunois,28028,257,18.818,1.381,1.250,596,6780 -Choue,41053,529,36.609,1.926,1.744,546,6771 -Courbehaye,28114,136,19.863,1.419,1.285,592,6785 -Châtillon-Saint-Jean,26087,1355,8.945,0.952,0.862,867,6444 -Seur,41246,475,4.009,0.637,0.577,576,6716 -Conflans-sur-Anille,72087,529,31.034,1.773,1.605,533,6765 -Cheverny,41050,984,33.097,1.831,1.658,581,6713 -Tour-en-Sologne,41262,1106,26.438,1.637,1.482,588,6721 -Mulsans,41156,505,15.944,1.271,1.151,581,6735 -Rahay,72250,174,18.956,1.386,1.255,535,6762 -Villerbon,41288,793,17.330,1.325,1.200,579,6730 -Suèvres,41252,1679,36.763,1.930,1.747,580,6732 -Montmirail,72208,403,12.593,1.130,1.023,533,6778 -Chailles,41032,2677,18.547,1.371,1.241,572,6714 -Saint-Denis-sur-Loire,41206,843,12.496,1.125,1.019,581,6727 -Coudrecieux,72094,619,24.451,1.574,1.425,519,6768 -Soings-en-Sologne,41247,1614,36.442,1.922,1.740,592,6707 -Mont-près-Chambord,41150,3271,28.530,1.700,1.539,579,6718 -Fresnes,41094,1140,16.361,1.288,1.166,584,6706 -Chaumont-sur-Loire,41045,1085,26.787,1.647,1.491,565,6712 -Saint-Ulphace,72322,228,16.076,1.276,1.155,535,6786 -Vineuil,41295,7809,22.326,1.504,1.362,576,6723 -Chitenay,41052,1058,15.869,1.268,1.148,576,6713 -Courbouzon,41066,432,7.732,0.885,0.801,592,6734 -La Chaussée-Saint-Victor,41047,4501,6.718,0.825,0.747,575,6726 -Lamnay,72156,970,22.249,1.501,1.359,529,6778 -Landes-le-Gaulois,41109,745,24.264,1.568,1.420,559,6731 -Sambin,41233,941,21.157,1.464,1.326,566,6706 -Saint-Sulpice-de-Pommeray,41230,1855,11.654,1.087,0.984,572,6725 -Marolles,41128,730,10.034,1.008,0.913,571,6730 -Montlivault,41148,1371,11.110,1.061,0.961,584,6729 -Chambord,41034,100,54.671,2.354,2.131,590,6721 -Villaines-la-Gonais,72375,559,10.378,1.025,0.928,522,6783 -Huisseau-sur-Cosson,41104,2280,22.764,1.519,1.375,586,6725 -Cormeray,41061,1565,10.334,1.023,0.926,581,6713 -Les Montils,41147,1968,9.362,0.974,0.882,570,6712 -Écorpain,72125,295,21.525,1.477,1.337,527,6760 -Villefrancœur,41281,424,18.308,1.362,1.233,563,6732 -Bouffry,41022,136,18.474,1.368,1.239,557,6767 -Cellettes,41031,2623,20.987,1.458,1.320,581,6713 -Sassay,41237,1012,16.829,1.306,1.182,579,6699 -Souvigné-sur-Même,72342,178,6.483,0.810,0.733,524,6795 -Candé-sur-Beuvron,41029,1514,14.526,1.213,1.098,567,6710 -Vibraye,72373,2576,43.817,2.107,1.908,533,6777 -Saint-Lubin-en-Vergonnois,41223,719,17.134,1.318,1.193,569,6726 -Fossé,41091,1314,10.205,1.017,0.921,570,6729 -Saint-Gervais-la-Forêt,41212,3219,8.974,0.954,0.864,579,6718 -Semur-en-Vallon,72333,444,15.275,1.244,1.126,528,6770 -Ruan-sur-Egvonne,41196,94,11.381,1.074,0.972,564,6769 -Fontaine-Raoul,41088,217,22.003,1.493,1.352,563,6764 -Saint-Riquier-ès-Plains,76646,594,6.198,0.792,0.717,532,6973 -Les Étilleux,28144,225,8.452,0.925,0.838,536,6798 -Bourville,76134,297,6.640,0.820,0.742,541,6969 -La Chapelle-Vicomtesse,41041,175,15.434,1.251,1.133,553,6769 -Champrond,72057,68,6.050,0.783,0.709,532,6780 -Mondoubleau,41143,1355,4.840,0.700,0.634,542,6766 -Valennes,72366,322,26.701,1.645,1.489,536,6773 -Boursay,41024,169,22.624,1.514,1.371,551,6769 -Chauvigny-du-Perche,41048,222,24.089,1.562,1.414,555,6761 -Ingouville,76375,268,7.847,0.892,0.808,533,6972 -Courgenard,72105,501,11.427,1.076,0.974,529,6786 -Gueutteville-les-Grès,76336,367,4.469,0.673,0.609,540,6975 -La Croix-du-Perche,28119,165,12.577,1.129,1.022,551,6801 -Dampierre-sous-Brou,28123,466,14.549,1.214,1.099,561,6791 -Chapelle-Guillaume,28078,187,20.099,1.427,1.292,545,6784 -Charbonnières,28080,254,21.116,1.463,1.325,550,6791 -Les Autels-Villevillon,28016,155,10.241,1.019,0.923,550,6790 -Le Plessis-Dorin,41177,170,13.779,1.182,1.070,539,6777 -Berfay,72032,333,18.375,1.364,1.235,534,6767 -Danzé,41073,701,42.758,2.081,1.884,554,6761 -Le Poislay,41179,185,16.018,1.274,1.153,554,6778 -Marolles-lès-Saint-Calais,72190,278,12.085,1.107,1.002,537,6757 -Busloup,41028,434,19.043,1.389,1.258,563,6758 -Saint-Calais,72269,3248,22.863,1.522,1.378,531,6762 -Saint-Bomer,28327,200,13.485,1.169,1.058,539,6787 -Cormenon,41060,694,5.631,0.755,0.684,546,6764 -Béthonvilliers,28038,120,12.388,1.120,1.014,543,6796 -Miermaigne,28252,203,11.182,1.064,0.963,554,6798 -Saint-Étienne-de-Valoux,7234,292,2.398,0.493,0.446,840,6461 -Épuisay,41078,842,23.736,1.551,1.404,547,6755 -Commune nouvelle d'Arrou,28012,3808,146.413,3.852,3.488,559,6777 -Viriville,38561,1638,30.481,1.757,1.591,872,6466 -Saint-Siméon-de-Bressieux,38457,2882,18.853,1.382,1.251,875,6474 -Murinais,38272,388,8.199,0.911,0.825,881,6462 -Droué,41075,983,24.449,1.574,1.425,553,6768 -Bourg-de-Péage,26057,10498,13.884,1.186,1.074,859,6436 -Saint-Denis-d'Aclon,76572,133,2.414,0.495,0.448,553,6975 -Théligny,72353,216,14.527,1.213,1.098,539,6788 -Argenvilliers,28010,335,18.388,1.365,1.236,553,6799 -Baillou,41012,239,19.586,1.409,1.276,542,6766 -Couëtron-au-Perche,41248,1057,86.179,2.955,2.676,539,6770 -Chapelle-Royale,28079,308,10.043,1.009,0.914,553,6787 -Luigny,28219,352,16.246,1.283,1.162,556,6796 -Saint-Gervais-de-Vic,72286,399,16.143,1.279,1.158,528,6756 -Coudray-au-Perche,28111,343,14.684,1.220,1.105,540,6792 -Le Temple,41254,188,13.379,1.164,1.054,545,6763 -Blosseville,76104,265,7.063,0.846,0.766,544,6974 -Val-au-Perche,61484,3716,63.170,2.530,2.291,536,6798 -Souancé-au-Perche,28378,537,19.017,1.388,1.257,537,6801 -La Ville-aux-Clercs,41275,1286,26.776,1.647,1.491,554,6761 -La Fontenelle,41089,195,20.053,1.425,1.290,550,6777 -Avesnes-en-Saosnois,72018,89,5.736,0.762,0.690,506,6799 -Saint-Priest,7288,1198,19.817,1.417,1.283,820,6401 -Brette-les-Pins,72047,2148,14.623,1.217,1.102,498,6762 -Saint-Aignan,72265,263,15.172,1.240,1.123,504,6797 -Champagné,72054,3857,13.982,1.190,1.077,499,6771 -Veulettes-sur-Mer,76736,277,4.791,0.697,0.631,525,6973 -Le Mesnil-Durdent,76428,18,1.327,0.367,0.332,540,6972 -Vittefleur,76748,656,8.182,0.910,0.824,531,6969 -Le Faulq,14261,345,4.502,0.675,0.611,505,6906 -Le Bourg-Dun,76133,426,14.727,1.222,1.106,550,6979 -Pleine-Sève,76504,138,4.059,0.641,0.580,537,6971 -Longueil,76395,565,11.684,1.088,0.985,554,6979 -Veules-les-Roses,76735,602,5.195,0.726,0.657,540,6975 -Héberville,76353,112,3.987,0.636,0.576,541,6968 -Malleville-les-Grès,76403,165,3.057,0.557,0.504,527,6974 -Saint-Pierre-le-Vieux,76641,192,6.941,0.839,0.760,550,6973 -La Gaillarde,76294,388,7.859,0.892,0.808,550,6973 -Néville,76467,1295,9.217,0.966,0.875,533,6971 -Paluel,76493,445,11.041,1.058,0.958,531,6973 -Sainte-Marguerite-sur-Mer,76605,483,5.683,0.759,0.687,552,6980 -Lammerville,76380,345,8.824,0.946,0.857,554,6970 -Saint-Pierre-le-Viger,76642,254,5.475,0.745,0.675,548,6972 -Sasseville,76664,272,6.310,0.800,0.724,536,6968 -Quiberville,76515,550,3.383,0.585,0.530,550,6979 -Lyas,7146,599,8.146,0.908,0.822,824,6406 -Clasville,76176,319,3.174,0.567,0.513,528,6968 -Sainte-Colombe,76569,213,5.813,0.767,0.694,540,6968 -Sassetot-le-Mauconduit,76663,1098,8.812,0.945,0.856,521,6968 -Vinnemerville,76746,214,4.268,0.658,0.596,525,6970 -Sainte-Hélène-Bondeville,76587,702,6.936,0.838,0.759,515,6966 -Saint-Martin-aux-Buneaux,76613,662,8.262,0.915,0.828,525,6975 -Criquetot-le-Mauconduit,76195,174,4.157,0.649,0.588,525,6970 -Senneville-sur-Fécamp,76670,866,4.968,0.709,0.642,515,6967 -Saint-Pierre-en-Port,76637,830,3.916,0.630,0.570,519,6969 -Saint-Michel-de-Boulogne,7277,159,7.474,0.870,0.788,814,6399 -Dancourt,76211,228,18.349,1.364,1.235,597,6980 -Rocquefort,76531,311,5.361,0.737,0.667,533,6956 -Embreville,80265,562,5.332,0.735,0.665,596,6992 -Tilloy-Floriville,80760,395,8.083,0.905,0.819,602,6990 -Saint-Riquier-en-Rivière,76645,153,9.995,1.006,0.911,594,6975 -Dargnies,80235,1270,3.749,0.616,0.558,594,6995 -Longroy,76394,636,5.345,0.736,0.666,597,6988 -Verthemex,73313,215,9.277,0.970,0.878,919,6509 -Callengeville,76122,515,17.206,1.320,1.195,594,6975 -Monchaux-Soreng,76441,655,10.141,1.014,0.918,596,6987 -Nibas,80597,852,12.542,1.127,1.020,599,7004 -Le Troncq,27663,175,4.657,0.687,0.622,546,6901 -Beauchamps,80063,999,7.300,0.860,0.779,594,6990 -Rieux,76528,654,7.011,0.843,0.763,598,6979 -Feuquières-en-Vimeu,80308,2580,7.970,0.899,0.814,601,6998 -Maisnières,80500,513,12.737,1.136,1.029,603,6993 -Millebosc,76438,250,7.923,0.896,0.811,594,6989 -Villers-sous-Foucarmont,76744,195,7.064,0.846,0.766,598,6971 -Canehan,76155,357,6.217,0.794,0.719,579,6988 -Fallencourt,76257,194,12.118,1.108,1.003,594,6973 -Guerville,76333,477,12.457,1.123,1.017,594,6982 -Saint-Vaast-d'Équiqueville,76652,743,13.842,1.184,1.072,574,6972 -Preuseville,76511,128,9.148,0.963,0.872,594,6976 -Touffreville-sur-Eu,76703,208,5.737,0.762,0.690,581,6990 -Grandcourt,76320,349,22.541,1.511,1.368,592,6984 -Béthencourt-sur-Mer,80096,971,2.967,0.548,0.496,593,6997 -Osmoy-Saint-Valery,76487,334,16.237,1.283,1.162,575,6966 -Sept-Meules,76671,189,8.265,0.915,0.828,587,6983 -Oust-Marest,80613,629,5.883,0.772,0.699,590,6997 -Bouvaincourt-sur-Bresle,80127,852,6.817,0.831,0.752,591,6993 -Creysseilles,7074,142,10.258,1.019,0.923,821,6411 -Wanchy-Capval,76749,359,19.385,1.401,1.268,580,6973 -Baromesnil,76058,233,8.049,0.903,0.818,584,6988 -Le Tréport,76711,4895,6.766,0.828,0.750,585,6995 -Notre-Dame-d'Aliermont,76472,770,13.189,1.156,1.047,580,6973 -Saint-Ours,63381,1689,55.798,2.378,2.153,695,6522 -Ricarville-du-Val,76526,169,5.672,0.758,0.686,575,6966 -Sainte-Agathe-d'Aliermont,76553,314,7.933,0.897,0.812,579,6970 -Londinières,76392,1271,18.743,1.378,1.248,582,6971 -Biederthal,68035,316,4.143,0.648,0.587,1033,6718 -Envermeu,76235,2106,14.444,1.210,1.096,578,6978 -Bruyères-et-Montbérault,2128,1534,11.588,1.084,0.981,749,6932 -Eu,76255,6995,17.898,1.347,1.220,587,6998 -Baillolet,76053,108,8.737,0.941,0.852,586,6965 -Saint-Rémy-Boscrocourt,76644,803,8.393,0.922,0.835,583,6992 -Saint-Martin-le-Gaillard,76619,297,17.711,1.340,1.213,582,6983 -Mers-les-Bains,80533,2820,5.453,0.743,0.673,586,6997 -Incheville,76374,1255,7.849,0.892,0.808,594,6990 -Smermesnil,76677,405,12.773,1.138,1.030,590,6971 -Petit-Couronne,76497,8684,12.778,1.138,1.030,556,6924 -Saint-Quentin-la-Motte-Croix-au-Bailly,80714,1291,6.600,0.818,0.741,592,6998 -Fesques,76262,122,8.847,0.947,0.857,592,6967 -Le Quartier,63293,213,23.461,1.542,1.396,681,6561 -Ponts-et-Marais,76507,785,5.915,0.774,0.701,590,6997 -Douvrend,76220,523,18.011,1.351,1.223,582,6977 -Elbeuf,76231,16503,16.330,1.286,1.164,551,6911 -Clais,76175,258,12.530,1.127,1.020,589,6967 -Saint-Julien-la-Geneste,63369,122,12.110,1.108,1.003,682,6547 -Bailly-en-Rivière,76054,526,20.395,1.438,1.302,581,6983 -Bailleul-Neuville,76052,212,13.169,1.155,1.046,586,6967 -Saint-Rémy-de-Blot,63391,230,15.325,1.246,1.128,694,6552 -Croixdalle,76202,296,11.181,1.064,0.963,581,6967 -Saint-Laurent-du-Pape,7261,1572,20.470,1.440,1.304,839,6418 -Beautot,76066,140,3.504,0.596,0.540,557,6951 -Vraiville,27700,655,6.638,0.820,0.742,559,6903 -Sainte-Austreberthe,76566,617,6.142,0.789,0.714,556,6946 -Sierville,76675,1026,15.799,1.265,1.145,556,6946 -Biville-la-Baignarde,76096,654,6.937,0.838,0.759,560,6962 -Eslettes,76245,1555,5.055,0.716,0.648,559,6942 -Pissy-Pôville,76503,1254,11.308,1.070,0.969,554,6941 -Saint-Martin-de-Boscherville,76614,1514,12.587,1.129,1.022,550,6930 -Cideville,76174,362,5.105,0.719,0.651,548,6946 -Saint-Jean-du-Cardonnay,76594,1388,7.511,0.872,0.790,555,6937 -Bardouville,76056,644,8.469,0.926,0.838,550,6928 -Mesnil-Panneville,76433,710,11.898,1.098,0.994,546,6949 -Villers-Écalles,76743,1773,7.412,0.867,0.785,548,6940 -Saâne-Saint-Just,76549,159,6.954,0.839,0.760,549,6962 -Beauval-en-Caux,76063,490,15.286,1.245,1.127,559,6964 -Le Bocasse,76105,673,8.625,0.935,0.847,559,6948 -Montigny,76446,1195,7.897,0.895,0.810,556,6931 -Jumièges,76378,1738,19.097,1.391,1.259,543,6924 -Criquebeuf-la-Campagne,27187,304,7.789,0.888,0.804,554,6904 -Lamberville,76379,189,7.234,0.856,0.775,555,6964 -Saint-Ouen-le-Mauger,76629,313,6.138,0.789,0.714,555,6964 -Varneville-Bretteville,76721,319,9.232,0.967,0.876,561,6951 -Biville-la-Rivière,76097,105,2.244,0.477,0.432,551,6966 -La Haye-Malherbe,27322,1409,9.975,1.005,0.910,559,6904 -Saint-Didier-des-Bois,27534,885,5.887,0.772,0.699,555,6905 -Ectot-l'Auber,76227,671,5.026,0.714,0.646,550,6954 -Butot,76149,283,5.519,0.748,0.677,559,6948 -Sassetot-le-Malgardé,76662,119,2.575,0.511,0.463,547,6965 -Bouville,76135,979,12.540,1.127,1.020,548,6940 -Goupillières,76311,417,4.122,0.646,0.585,555,6945 -Saint-Pierre-des-Fleurs,27593,1536,2.827,0.535,0.484,551,6907 -Saint-Cyr-la-Campagne,27529,425,2.916,0.544,0.493,554,6907 -Saussay,76668,381,5.219,0.727,0.658,552,6951 -Grand-Couronne,76319,9676,16.921,1.309,1.185,553,6919 -Hugleville-en-Caux,76370,430,9.519,0.982,0.889,554,6947 -Le Bec-Thomas,27053,220,1.404,0.377,0.341,551,6906 -Notre-Dame-de-Bondeville,76474,7078,6.385,0.804,0.728,558,6933 -Saint-Pierre-Bénouville,76632,374,8.377,0.921,0.834,555,6964 -Le Grand-Quevilly,76322,25897,10.990,1.055,0.955,557,6928 -Messanges,40181,965,34.161,1.860,1.684,353,6313 -Fresquiennes,76287,989,13.440,1.167,1.057,559,6943 -Saint-Vaast-du-Val,76654,472,5.991,0.779,0.705,557,6954 -Cléon,76178,5046,6.521,0.813,0.736,556,6915 -Saint-Ouen-du-Breuil,76628,778,6.287,0.798,0.723,555,6951 -Le Houlme,76366,4067,2.973,0.549,0.497,558,6937 -Gueutteville,76335,85,3.009,0.552,0.500,557,6951 -La Vaupalière,76728,1001,8.011,0.901,0.816,556,6931 -Saint-Pierre-de-Varengeville,76636,2335,13.132,1.153,1.044,551,6938 -Hénouville,76354,1275,10.758,1.044,0.945,549,6933 -Le Thuit de l'Oison,27638,3567,15.705,1.261,1.142,548,6907 -Canville-les-Deux-Églises,76158,326,5.832,0.769,0.696,545,6967 -Roumare,76541,1410,9.993,1.006,0.911,552,6934 -Saint-Ouen-du-Tilleul,27582,1629,4.035,0.639,0.579,552,6912 -Caudebec-lès-Elbeuf,76165,10558,3.662,0.609,0.551,557,6910 -Martot,27394,575,8.423,0.924,0.837,558,6913 -Orival,76486,927,9.573,0.985,0.892,557,6916 -Saint-Ouen-de-Pontcheuil,27579,97,1.133,0.339,0.307,551,6907 -Déville-lès-Rouen,76216,10345,3.163,0.566,0.512,559,6930 -La Fontelaye,76274,32,3.976,0.635,0.575,551,6955 -Canteleu,76157,14561,17.642,1.337,1.211,554,6926 -Saint-Pierre-lès-Elbeuf,76640,8226,6.377,0.804,0.728,558,6913 -Ancretiéville-Saint-Victor,76010,389,11.662,1.087,0.984,553,6955 -Cuzorn,47077,850,23.544,1.545,1.399,536,6382 -Barentin,76057,12061,12.729,1.136,1.029,552,6938 -Anneville-Ambourville,76020,1197,20.536,1.442,1.306,550,6931 -Vatteville-la-Rue,76727,1137,49.156,2.232,2.021,534,6926 -Moulineaux,76457,950,3.498,0.595,0.539,551,6919 -Val-de-Saâne,76018,1489,13.700,1.178,1.067,553,6955 -Imbleville,76373,314,5.243,0.729,0.660,550,6958 -Fécamp,76259,18900,15.040,1.234,1.117,511,6961 -Oissel,76484,11647,22.183,1.499,1.357,556,6916 -Maromme,76410,10942,4.132,0.647,0.586,557,6934 -Routes,76542,267,4.425,0.670,0.607,538,6962 -Émanville,76234,704,6.413,0.806,0.730,552,6951 -La Celle,3047,414,31.467,1.786,1.617,686,6572 -Colleville,76183,757,7.404,0.866,0.784,518,6963 -Bolbec,76114,11449,12.306,1.117,1.011,518,6943 -Grémonville,76325,428,8.304,0.917,0.830,543,6956 -Normanville,76470,675,9.288,0.970,0.878,527,6957 -Saint-Nicolas-de-la-Haie,76626,410,3.172,0.567,0.513,526,6943 -Envronville,76236,338,6.227,0.794,0.719,532,6952 -Doudeville,76219,2501,14.548,1.214,1.099,542,6960 -Bertreville,76084,118,3.249,0.574,0.520,525,6965 -Grainville-la-Teinturière,76315,1075,18.510,1.369,1.240,532,6965 -Sainte-Hélène,33417,2767,128.998,3.615,3.273,390,6430 -Sainte-Marie-des-Champs,76610,1594,4.110,0.645,0.584,541,6948 -Gonfreville-Caillot,76304,353,4.211,0.653,0.591,514,6952 -Blacqueville,76099,693,9.966,1.005,0.910,541,6940 -Terres-de-Caux,76258,4109,38.297,1.970,1.784,524,6952 -Lintot,76388,437,8.059,0.904,0.818,524,6941 -Mentheville,76425,299,3.112,0.562,0.509,512,6958 -Beuzeville-la-Grenier,76090,1193,6.253,0.796,0.721,511,6948 -Robertot,76530,210,2.474,0.501,0.454,534,6961 -Le Hanouard,76339,252,4.296,0.660,0.598,530,6959 -Harcanville,76340,508,7.636,0.880,0.797,541,6957 -Croix-Mare,76203,802,8.704,0.939,0.850,541,6946 -Écretteville-lès-Baons,76225,386,9.382,0.975,0.883,530,6949 -Trémauville,76710,108,2.777,0.530,0.480,520,6954 -Ypreville-Biville,76755,578,10.243,1.019,0.923,520,6956 -Ectot-lès-Baons,76228,394,5.039,0.715,0.647,541,6952 -Thérouldeville,76685,665,4.614,0.684,0.619,522,6966 -La Trinité-du-Mont,76712,798,2.073,0.458,0.415,523,6942 -Rouville,76543,628,9.696,0.991,0.897,519,6954 -Houquetot,76368,361,4.103,0.645,0.584,513,6948 -Tourville-les-Ifs,76706,570,8.460,0.926,0.838,514,6959 -Bénarville,76076,262,4.431,0.670,0.607,520,6956 -Baons-le-Comte,76055,355,5.382,0.738,0.668,536,6952 -Thiergeville,76688,412,9.267,0.969,0.877,519,6960 -Vattetot-sous-Beaumont,76725,581,6.961,0.840,0.761,516,6949 -Toussaint,76708,726,4.483,0.674,0.610,514,6962 -Prétot-Vicquemare,76510,213,4.784,0.696,0.630,545,6960 -Trouville,76715,638,10.556,1.034,0.936,528,6946 -Daubeuf-Serville,76213,384,7.787,0.888,0.804,520,6959 -Héricourt-en-Caux,76355,964,10.822,1.047,0.948,535,6956 -Reuville,76524,126,4.429,0.670,0.607,545,6964 -Bolleville,76115,590,9.870,1.000,0.905,525,6948 -Gonzeville,76309,110,4.879,0.703,0.637,541,6963 -Nointot,76468,1340,6.073,0.784,0.710,516,6949 -Valmont,76719,841,5.539,0.749,0.678,521,6962 -Yvetot,76758,11888,7.479,0.871,0.789,537,6951 -Saint-Vaast-Dieppedalle,76653,363,12.306,1.117,1.011,538,6963 -Theuville-aux-Maillots,76686,550,7.283,0.859,0.778,524,6966 -Hautot-le-Vatois,76347,343,6.102,0.786,0.712,535,6953 -Étoutteville,76253,801,11.727,1.090,0.987,539,6957 -Porte-de-Seine,27471,208,6.676,0.822,0.744,573,6906 -Saint-Gilles-de-Crétot,76585,433,5.986,0.779,0.705,531,6944 -Riville,76529,297,7.515,0.873,0.790,526,6960 -Chamblet,3052,1097,20.740,1.450,1.313,679,6579 -Bois-Himont,76110,462,5.852,0.770,0.697,531,6944 -Hautot-l'Auvray,76346,340,7.351,0.863,0.781,540,6965 -Contremoulins,76187,160,4.386,0.667,0.604,517,6961 -Bréauté,76141,1331,13.911,1.187,1.075,515,6950 -Étalleville,76251,460,3.612,0.605,0.548,542,6962 -Cléville,76181,160,5.439,0.742,0.672,530,6950 -Hattenville,76342,715,9.327,0.972,0.880,520,6953 -Cany-Barville,76159,3060,13.598,1.174,1.063,527,6965 -Saint-Clair-sur-les-Monts,76568,601,4.067,0.642,0.581,541,6947 -Touffreville-la-Corbeline,76702,818,12.610,1.130,1.023,538,6943 -Ganzeville,76298,487,3.994,0.636,0.576,513,6963 -Ourville-en-Caux,76490,1143,10.221,1.018,0.922,526,6963 -Veauville-lès-Quelles,76730,128,3.176,0.567,0.513,535,6961 -Saint-Eustache-la-Forêt,76576,1097,6.592,0.817,0.740,514,6943 -Auzebosc,76043,1122,4.753,0.694,0.628,536,6946 -Flamanville,76264,491,4.528,0.677,0.613,544,6948 -Écalles-Alix,76223,528,7.524,0.873,0.790,541,6948 -Bec-de-Mortagne,76068,674,12.087,1.107,1.002,514,6961 -Pouzol,63286,276,13.956,1.189,1.077,701,6554 -Bretteville-du-Grand-Caux,76143,1338,11.426,1.076,0.974,513,6957 -Motteville,76456,802,8.684,0.938,0.849,546,6952 -Beuzevillette,76092,657,5.673,0.758,0.686,525,6946 -Thiouville,76692,312,5.950,0.776,0.703,530,6956 -Valliquerville,76718,1409,13.373,1.164,1.054,535,6946 -Hasnon,59284,3870,12.827,1.140,1.032,730,7034 -Oherville,76483,229,4.501,0.675,0.611,534,6962 -Saint-Jean-de-la-Neuville,76593,563,8.045,0.903,0.818,512,6944 -Saint-Aubin-de-Crétot,76559,541,4.744,0.693,0.627,530,6945 -Servant,63419,535,26.595,1.642,1.487,693,6564 -Lanquetot,76382,1142,5.168,0.724,0.656,521,6944 -Heudebouville,27332,790,9.314,0.971,0.879,569,6900 -Allouville-Bellefosse,76001,1157,15.018,1.234,1.117,528,6945 -La Haye-le-Comte,27321,135,3.332,0.581,0.526,563,6902 -Louvetot,76398,705,7.606,0.878,0.795,536,6946 -Bosville,76128,579,8.760,0.942,0.853,534,6962 -Surville,27624,918,5.777,0.765,0.693,562,6903 -Daubeuf-près-Vatteville,27202,472,11.311,1.071,0.970,577,6910 -Andé,27015,1275,5.167,0.724,0.656,571,6905 -Val-de-Reuil,27701,13282,25.988,1.623,1.469,570,6914 -Vézillon,27683,261,1.999,0.450,0.407,583,6904 -Les Andelys,27016,8098,39.681,2.005,1.815,582,6907 -Incarville,27351,1414,7.024,0.844,0.764,567,6905 -Vironvay,27697,331,3.895,0.628,0.569,572,6903 -Le Vaudreuil,27528,3714,5.499,0.746,0.675,566,6910 -Pinterville,27456,746,5.939,0.776,0.703,570,6901 -Muids,27422,866,15.324,1.246,1.128,572,6902 -Les Trois Lacs,27676,1784,36.479,1.923,1.741,578,6904 -Louviers,27375,18538,27.077,1.656,1.499,569,6904 -Terres de Bord,27412,1499,22.406,1.507,1.364,566,6909 -Goderville,76302,2840,8.013,0.901,0.816,511,6952 -Yport,76754,834,2.121,0.464,0.420,507,6964 -Froberville,76291,1237,5.929,0.775,0.702,506,6960 -Criquebeuf-en-Caux,76194,387,2.111,0.462,0.418,508,6964 -Manneville-la-Goupil,76408,1014,8.857,0.947,0.857,507,6948 -Saint-Dizier-la-Tour,23187,214,16.983,1.312,1.188,634,6564 -Épreville,76240,1036,6.494,0.811,0.734,510,6957 -Maniquerville,76406,404,2.595,0.513,0.464,509,6957 -Les Loges,76390,1183,14.961,1.231,1.115,502,6956 -Le Donzeil,23074,189,13.525,1.171,1.060,624,6551 -Bornambusc,76118,265,4.144,0.648,0.587,507,6951 -Écrainville,76224,1044,12.975,1.147,1.039,508,6951 -Vattetot-sur-Mer,76726,325,5.276,0.731,0.662,505,6963 -Quinssaines,3212,1469,25.911,1.620,1.467,661,6582 -Saint-Pierre-de-Cormeilles,27591,616,17.495,1.331,1.205,510,6910 -Campigny,27126,1169,10.862,1.049,0.950,524,6914 -Saint-Pierre-de-Salerne,27592,250,6.897,0.836,0.757,531,6905 -Le Bec-Hellouin,27052,404,9.536,0.983,0.890,534,6905 -Urcuit,64540,2420,13.950,1.189,1.077,351,6275 -Le Chauchet,23058,109,10.692,1.041,0.943,650,6558 -Saint-Martin-Saint-Firmin,27571,320,6.390,0.805,0.729,521,6914 -Selles,27620,465,10.167,1.015,0.919,518,6912 -Manneville-sur-Risle,27385,1534,9.329,0.972,0.880,521,6923 -Saint-Benoît-des-Ombres,27520,142,3.632,0.607,0.550,528,6905 -Saint-Mards-de-Blacarville,27563,797,8.772,0.943,0.854,520,6924 -Morsan,27418,109,4.878,0.703,0.637,523,6900 -Bonvillard,73048,357,16.985,1.312,1.188,957,6502 -Foulbec,27260,652,11.908,1.098,0.994,513,6922 -Morainville-Jouveaux,27415,371,15.683,1.261,1.142,511,6907 -Fiquefleur-Équainville,27243,713,9.737,0.993,0.899,505,6924 -Freneuse-sur-Risle,27267,358,8.166,0.910,0.824,531,6906 -Heudreville-en-Lieuvin,27334,109,4.190,0.652,0.590,519,6903 -Saint-Siméon,27603,321,7.548,0.875,0.792,518,6909 -Archignat,3005,335,24.518,1.576,1.427,653,6581 -Moyaux,14460,1352,16.612,1.297,1.174,503,6902 -Authou,27028,340,2.953,0.547,0.495,532,6904 -Saint-Pierre-du-Val,27597,568,12.229,1.113,1.008,511,6925 -La Rue-Saint-Pierre,76547,792,7.748,0.886,0.802,574,6940 -Saint-Denis-des-Monts,27531,209,3.904,0.629,0.570,541,6907 -Montfort-sur-Risle,27413,756,4.010,0.637,0.577,532,6913 -Vannecrocq,27671,151,4.916,0.706,0.639,512,6915 -Pont-Authou,27468,650,3.403,0.587,0.531,534,6905 -Saint-Victor-d'Épine,27609,322,7.955,0.898,0.813,525,6906 -Nouhant,23145,295,25.715,1.614,1.461,651,6574 -Illeville-sur-Montfort,27349,876,14.982,1.232,1.115,531,6914 -Puchay,27480,620,14.041,1.193,1.080,591,6920 -Asnières,27021,309,8.173,0.910,0.824,510,6901 -Longchamps,27372,615,15.416,1.250,1.132,602,6920 -Doudeauville-en-Vexin,27204,302,5.876,0.772,0.699,597,6913 -Brestot,27110,575,8.825,0.946,0.857,530,6919 -Saussay-la-Campagne,27617,528,4.980,0.710,0.643,590,6914 -Sainte-Opportune-la-Mare,27577,443,10.919,1.052,0.952,519,6928 -Bourg-Achard,27103,3718,12.413,1.121,1.015,542,6916 -La Chapelle-Bayvel,27146,393,4.999,0.712,0.645,512,6915 -Bailleul-la-Vallée,27035,120,4.691,0.689,0.624,512,6904 -Saint-Paul-de-Fourques,27584,299,4.187,0.651,0.589,541,6905 -Condé-sur-Risle,27167,636,9.906,1.002,0.907,524,6914 -Hauville,27316,1286,14.884,1.228,1.112,536,6923 -Saint-Grégoire-du-Vièvre,27550,323,9.058,0.958,0.867,528,6909 -Éturqueraye,27228,291,6.789,0.829,0.751,534,6922 -Fresne-Cauverville,27269,200,6.106,0.787,0.713,517,6904 -Saint-Sulpice-de-Grimbouville,27604,174,4.339,0.663,0.600,516,6923 -Flancourt-Crescy-en-Roumois,27085,1424,19.195,1.395,1.263,540,6917 -Tourville-sur-Pont-Audemer,27655,736,10.816,1.047,0.948,521,6914 -Épreville-en-Lieuvin,27222,201,6.731,0.826,0.748,521,6902 -Calleville,27125,673,8.548,0.931,0.843,539,6903 -La Noë-Poulain,27435,265,4.695,0.690,0.625,520,6912 -La Neuville-du-Bosc,27432,651,14.592,1.216,1.101,543,6900 -Fatouville-Grestain,27233,762,10.325,1.023,0.926,507,6930 -Voiscreville,27699,127,1.733,0.419,0.379,538,6912 -Appeville-Annebault,27018,1024,13.557,1.172,1.061,532,6916 -Piencourt,27455,150,8.751,0.942,0.853,509,6898 -Le Landin,27363,203,3.098,0.560,0.507,542,6924 -La Haye-Aubrée,27317,464,7.589,0.877,0.794,531,6925 -Ouville-la-Rivière,76492,510,6.516,0.813,0.736,555,6978 -Triqueville,27662,334,9.557,0.984,0.891,512,6916 -Étréville,27227,681,11.340,1.072,0.971,530,6925 -Port-Jérôme-sur-Seine,76476,9903,30.538,1.759,1.593,522,6932 -Bourneville-Sainte-Croix,27107,1269,15.815,1.266,1.146,528,6922 -Brétigny,27113,139,5.454,0.743,0.673,531,6905 -La Haye-de-Calleville,27318,269,2.981,0.550,0.498,538,6903 -Cormeilles,27170,1158,3.090,0.560,0.507,510,6908 -Arelaune-en-Seine,76401,2606,53.969,2.338,2.117,536,6926 -Trouville-la-Haule,27665,769,12.399,1.121,1.015,525,6924 -Valletot,27669,410,5.881,0.772,0.699,525,6921 -Saint-Georges-du-Vièvre,27542,879,10.277,1.020,0.924,521,6907 -Saint-Aubin-sur-Quillebeuf,27518,696,12.352,1.119,1.013,522,6932 -Saint-Cyr-de-Salerne,27527,207,6.604,0.818,0.741,531,6902 -Conteville,27169,985,10.749,1.044,0.945,510,6930 -Glos-sur-Risle,27288,586,7.358,0.863,0.781,530,6912 -Le Favril,27237,172,4.051,0.641,0.580,520,6902 -Malleville-sur-le-Bec,27380,258,7.164,0.852,0.771,538,6908 -Saint-Léger-du-Gennetey,27558,184,3.298,0.578,0.523,537,6910 -Lillebonne,76384,8927,14.658,1.219,1.104,520,6940 -Corneville-sur-Risle,27174,1338,13.356,1.163,1.053,525,6921 -Toutainville,27656,1341,11.883,1.097,0.993,516,6923 -Rilhac-Treignac,19172,110,9.604,0.986,0.893,596,6491 -Neuville-sur-Authou,27433,196,5.596,0.753,0.682,527,6905 -Auppegard,76036,728,7.333,0.862,0.780,560,6972 -Honguemare-Guenouville,27340,697,9.427,0.977,0.885,540,6921 -Boulleville,27100,1145,7.170,0.852,0.771,509,6920 -Saint-Philbert-sur-Boissey,27586,172,3.062,0.557,0.504,538,6908 -Lilly,27369,83,6.038,0.782,0.708,598,6923 -Bosrobert,27095,658,9.337,0.973,0.881,539,6903 -Petiville,76499,1127,16.811,1.305,1.182,526,6928 -Saint-Aubin-de-Scellon,27512,355,14.026,1.192,1.079,518,6900 -Manneville-la-Raoult,27384,506,7.382,0.865,0.783,504,6922 -Épaignes,27218,1595,26.305,1.633,1.479,517,6909 -Saint-Maclou,27561,617,5.576,0.752,0.681,512,6923 -Berville-sur-Mer,27064,707,6.992,0.842,0.762,509,6930 -Saint-Philbert-sur-Risle,27587,782,13.281,1.160,1.050,528,6909 -Lestrem,62502,4487,21.364,1.471,1.332,674,7056 -Saint-Christophe-sur-Condé,27522,503,9.058,0.958,0.867,524,6911 -Étrépagny,27226,3816,20.420,1.438,1.302,596,6912 -Thénouville,27089,1010,13.418,1.166,1.056,540,6910 -Écaquelon,27209,618,13.168,1.155,1.046,536,6913 -Sainte-Marie-de-Vatimesnil,27567,263,7.387,0.865,0.783,595,6907 -Saint-Étienne-l'Allier,27538,555,11.334,1.072,0.971,523,6912 -Farceaux,27232,343,7.629,0.879,0.796,593,6909 -Lieurey,27367,1448,18.315,1.362,1.233,521,6905 -Hacqueville,27310,442,9.860,1.000,0.905,593,6909 -Saint-Éloi-de-Fourques,27536,514,7.344,0.863,0.781,541,6907 -Fumichon,14293,286,6.683,0.823,0.745,510,6902 -Beuzeville,27065,4578,23.327,1.537,1.392,504,6917 -Bouquetot,27102,1080,13.118,1.153,1.044,536,6918 -Coudray,27176,219,7.876,0.893,0.809,590,6915 -Harquency,27315,263,14.107,1.196,1.083,593,6906 -Anquetierville,76022,346,4.175,0.650,0.589,527,6940 -Saint-Jean-de-Folleville,76592,830,13.766,1.181,1.069,519,6935 -La Frénaye,76281,2158,10.014,1.007,0.912,523,6940 -Mélamare,76421,874,6.311,0.800,0.724,516,6941 -Saint-Arnoult,76557,1354,13.928,1.188,1.076,527,6941 -Sainte-Marguerite-sur-Duclair,76608,2018,7.330,0.862,0.780,541,6939 -Saint-Maurice-d'Ételan,76622,307,14.145,1.197,1.084,529,6930 -Heurteauville,76362,313,7.255,0.857,0.776,541,6932 -Duclair,76222,4198,10.121,1.013,0.917,545,6931 -Saint-Antoine-la-Forêt,76556,1063,6.419,0.806,0.730,516,6940 -Omonville,76485,263,2.858,0.538,0.487,560,6967 -Épinay-sur-Duclair,76237,539,6.650,0.821,0.743,545,6937 -Bellengreville,76071,480,7.593,0.877,0.794,571,6979 -Arques-la-Bataille,76026,2573,14.778,1.224,1.108,563,6977 -Torcy-le-Grand,76697,761,8.784,0.943,0.854,570,6968 -Longueville-sur-Scie,76397,985,3.828,0.623,0.564,563,6968 -Martigny,76413,443,5.174,0.724,0.656,566,6977 -Saint-Germain-d'Étables,76582,266,7.181,0.853,0.772,570,6973 -Hautot-sur-Mer,76349,1929,9.531,0.983,0.890,559,6982 -Sainte-Foy,76577,579,6.796,0.830,0.751,566,6967 -Aubermesnil-Beaumais,76030,451,4.975,0.710,0.643,566,6973 -Rouxmesnil-Bouteilles,76545,1866,5.629,0.755,0.684,562,6980 -Heuqueville,27337,363,7.863,0.893,0.809,578,6912 -Offranville,76482,3036,17.352,1.326,1.201,557,6974 -Mesnil-Verclives,27407,298,9.815,0.997,0.903,590,6915 -Anneville-sur-Scie,76019,439,5.487,0.746,0.675,562,6974 -Les Damps,27196,1361,4.819,0.699,0.633,569,6913 -Saint-Aubin-le-Cauf,76562,858,10.005,1.007,0.912,568,6974 -Freulleville,76288,367,11.186,1.065,0.964,569,6972 -Sauchay,76665,412,5.735,0.762,0.690,572,6982 -Petit-Caux,76618,9512,92.323,3.058,2.769,565,6983 -Dieppe,76217,29606,11.833,1.095,0.991,565,6984 -Saint-Aubin-sur-Scie,76565,1081,7.825,0.890,0.806,561,6980 -Martin-Église,76414,1568,9.661,0.989,0.895,565,6983 -Torcy-le-Petit,76698,481,3.709,0.613,0.555,568,6970 -Saint-Saire,76649,628,13.353,1.163,1.053,592,6956 -Ambrumesnil,76004,480,5.259,0.730,0.661,555,6974 -Manéhouville,76405,227,4.339,0.663,0.600,560,6971 -Saint-Nicolas-d'Aliermont,76624,3694,15.546,1.255,1.136,571,6978 -Bacqueville-en-Caux,76051,1897,12.180,1.111,1.006,554,6965 -Ardouval,76024,164,10.392,1.026,0.929,575,6960 -Ventes-Saint-Rémy,76733,226,6.122,0.788,0.713,578,6960 -Heugleville-sur-Scie,76360,640,13.372,1.164,1.054,560,6961 -Bracquetuit,76138,340,8.454,0.926,0.838,566,6954 -Sainte-Geneviève,76578,273,14.257,1.202,1.088,590,6953 -Mesnières-en-Bray,76427,954,15.037,1.234,1.117,585,6966 -Lucy,76399,185,9.579,0.985,0.892,589,6967 -Vassonville,76723,445,5.606,0.754,0.683,560,6955 -Pommeréval,76506,450,7.634,0.879,0.796,579,6960 -Quièvrecourt,76516,449,4.027,0.639,0.579,587,6959 -Muchedent,76458,132,7.125,0.850,0.770,568,6965 -Saint-Hellier,76588,450,14.161,1.198,1.085,568,6963 -Rocquemont,76532,810,12.336,1.118,1.012,576,6945 -Les Grandes-Ventes,76321,1833,24.829,1.586,1.436,574,6967 -Les Cent-Acres,76168,64,5.131,0.721,0.653,565,6966 -Maucomble,76417,411,5.091,0.718,0.650,579,6957 -Fresles,76283,235,10.924,1.052,0.952,580,6964 -Rosay,76538,267,10.516,1.032,0.934,571,6955 -Le Catelier,76162,255,3.913,0.630,0.570,568,6963 -Bosc-Bérenger,76119,182,3.440,0.590,0.534,575,6950 -La Houssaye-Béranger,76369,535,8.138,0.908,0.822,562,6948 -Grugny,76331,1004,3.183,0.568,0.514,564,6947 -Saint-Martin-l'Hortier,76620,276,5.828,0.768,0.695,587,6963 -Gonneville-sur-Scie,76308,462,8.615,0.934,0.846,560,6965 -Mesnil-Follemprise,76430,132,7.526,0.873,0.790,579,6963 -Saint-Martin-Osmonville,76621,1163,21.300,1.469,1.330,574,6949 -Lencloître,86128,2457,19.016,1.388,1.257,491,6638 -Sommery,76678,809,21.384,1.472,1.333,587,6948 -Roncherolles-en-Bray,76535,488,14.550,1.214,1.099,592,6945 -Bures-en-Bray,76148,320,10.904,1.051,0.952,581,6964 -Notre-Dame-du-Parc,76478,162,3.001,0.551,0.499,566,6963 -Massy,76415,350,11.241,1.067,0.966,584,6954 -Bellencombre,76070,678,12.857,1.141,1.033,570,6959 -Neufbosc,76461,398,5.165,0.723,0.655,582,6952 -Montérolier,76445,596,11.778,1.092,0.989,582,6950 -Vieux-Manoir,76738,738,8.114,0.907,0.821,574,6941 -Saint-Denis-sur-Scie,76574,670,8.559,0.931,0.843,565,6957 -Saint-Maclou-de-Folleville,76602,639,13.166,1.155,1.046,565,6957 -Cottévrard,76188,467,7.895,0.894,0.809,570,6952 -Esclavelles,76244,380,10.138,1.014,0.918,581,6955 -Saint-Crespin,76570,289,6.485,0.811,0.734,563,6966 -Esteville,76247,506,5.314,0.734,0.665,571,6948 -Saint-Saëns,76648,2450,26.117,1.627,1.473,579,6958 -Fontaine-en-Bray,76269,178,6.050,0.783,0.709,588,6955 -Romilly-sur-Andelle,27493,3237,8.552,0.931,0.843,573,6915 -Néris-les-Bains,3195,2603,33.051,1.830,1.657,678,6575 -Saint-Denis-le-Thiboult,76573,507,10.384,1.026,0.929,580,6928 -Darnétal,76212,9634,4.903,0.705,0.638,568,6928 -Claville-Motteville,76177,278,9.303,0.971,0.879,570,6946 -Bihorel,76095,8301,2.507,0.504,0.456,566,6932 -Bourg-Beaudouin,27104,714,5.306,0.733,0.664,576,6921 -Mauquenchy,76420,348,12.744,1.136,1.029,587,6948 -Le Héron,76358,255,10.846,1.048,0.949,582,6935 -Sainte-Croix-sur-Buchy,76571,694,13.743,1.180,1.068,583,6941 -Sotteville-sous-le-Val,76682,805,5.022,0.713,0.646,564,6916 -Rosay-sur-Lieure,27496,537,8.147,0.909,0.823,585,6922 -Vatteville,27673,183,4.323,0.662,0.599,574,6911 -Montmain,76448,1333,6.062,0.784,0.710,571,6924 -Quévreville-la-Poterie,76514,975,4.725,0.692,0.627,567,6920 -Belbeuf,76069,2130,6.532,0.814,0.737,564,6921 -Ymare,76753,1157,3.986,0.636,0.576,568,6918 -La Neuville-Chant-d'Oisel,76464,2231,22.161,1.498,1.356,570,6918 -Vascœuil,27672,353,7.472,0.870,0.788,583,6930 -Saint-Jacques-sur-Darnétal,76591,2710,16.738,1.302,1.179,569,6927 -Montvicq,3189,716,10.159,1.015,0.919,689,6579 -Tourville-la-Rivière,76705,2508,8.071,0.904,0.818,564,6919 -Saint-Léger-du-Bourg-Denis,76599,3402,2.833,0.536,0.485,565,6928 -La Haye,76352,378,6.739,0.826,0.748,589,6929 -Montville,76452,4857,10.760,1.044,0.945,559,6942 -Les Authieux-sur-le-Port-Saint-Ouen,76039,1254,4.532,0.678,0.614,565,6916 -Igoville,27348,1753,5.675,0.758,0.686,564,6914 -Bois-d'Ennebourg,76106,566,7.099,0.848,0.768,572,6926 -Martainville-Épreville,76412,701,7.618,0.879,0.796,575,6927 -Bosc-Bordel,76120,453,11.990,1.102,0.998,583,6947 -Fontaine-sous-Préaux,76273,507,3.557,0.600,0.543,568,6935 -Bonsecours,76103,6473,3.753,0.617,0.559,563,6926 -Ménesqueville,27396,467,4.153,0.649,0.588,586,6919 -Saint-Étienne-du-Rouvray,76575,28696,18.297,1.362,1.233,564,6921 -Rouvray-Catillon,76544,225,12.317,1.117,1.011,588,6944 -Clères,76179,1366,11.463,1.078,0.976,562,6948 -Rebets,76521,146,3.701,0.612,0.554,585,6937 -Pont-Saint-Pierre,27470,1163,6.969,0.840,0.761,574,6919 -Catenay,76163,684,5.887,0.772,0.699,580,6938 -Saint-Aubin-Celloville,76558,998,6.706,0.824,0.746,567,6920 -Servaville-Salmonville,76673,1120,7.937,0.897,0.812,573,6932 -Charleval,27151,1803,14.140,1.197,1.084,581,6920 -Alizay,27008,1515,8.666,0.937,0.848,566,6913 -Amfreville-la-Mi-Voie,76005,3222,3.961,0.634,0.574,564,6923 -Douville-sur-Andelle,27205,440,4.553,0.679,0.615,576,6915 -Préaux,76509,1807,19.164,1.393,1.261,573,6932 -Bois-l'Évêque,76111,531,7.335,0.862,0.780,571,6931 -Boos,76116,3754,14.127,1.196,1.083,572,6924 -Perriers-sur-Andelle,27453,1820,11.285,1.069,0.968,580,6923 -Criquebeuf-sur-Seine,27188,1412,14.662,1.219,1.104,560,6914 -Radepont,27487,655,15.803,1.265,1.145,576,6920 -Mont-Cauvaire,76443,691,9.130,0.962,0.871,561,6942 -Ernemont-sur-Buchy,76243,295,4.068,0.642,0.581,580,6939 -Fontaine-le-Bourg,76271,1734,12.254,1.114,1.009,563,6941 -Letteguives,27366,201,4.092,0.644,0.583,579,6925 -Isneauville,76377,2887,8.073,0.904,0.818,565,6934 -Rouen,76540,110117,21.407,1.473,1.334,565,6931 -Gouy,76313,828,5.045,0.715,0.647,564,6920 -Pîtres,27458,2454,10.971,1.054,0.954,570,6913 -Cuverville,27194,246,6.184,0.792,0.717,581,6909 -Écouis,27214,822,13.204,1.157,1.048,583,6913 -Vandrimare,27670,959,6.496,0.811,0.734,582,6922 -Bosc-Guérard-Saint-Adrien,76123,924,10.415,1.027,0.930,562,6938 -Saint-Aubin-Épinay,76560,1036,9.780,0.995,0.901,572,6927 -Nolléval,76469,448,9.988,1.006,0.911,588,6932 -Le Mesnil-Esnard,76429,7978,5.219,0.727,0.658,566,6926 -Le Theil-en-Auge,14687,182,2.801,0.533,0.483,500,6919 -Saint-Martin-du-Vivier,76617,1644,5.027,0.714,0.646,566,6930 -Nébian,34180,1395,9.890,1.001,0.906,733,6278 -Buchy,76146,2731,26.375,1.635,1.480,575,6943 -Elbeuf-sur-Andelle,76230,474,5.988,0.779,0.705,581,6933 -La Hallotière,76338,218,3.714,0.613,0.555,591,6937 -Saint-Germain-sous-Cailly,76583,342,4.035,0.639,0.579,571,6946 -Quincampoix,76517,2947,20.599,1.445,1.308,564,6937 -Le Tronquay,27664,510,19.139,1.393,1.261,585,6930 -Val d'Orger,27294,990,10.991,1.055,0.955,582,6918 -Morville-sur-Andelle,76455,343,5.128,0.721,0.653,588,6933 -Lisors,27370,350,10.832,1.048,0.949,591,6921 -Les Hogues,27338,626,11.736,1.090,0.987,587,6925 -Bosc-Édeline,76121,358,6.253,0.796,0.721,587,6945 -Blainville-Crevon,76100,1212,14.779,1.224,1.108,579,6933 -Saint-Georges-sur-Fontaine,76580,918,9.196,0.965,0.874,569,6939 -Renneville,27488,198,6.295,0.799,0.723,578,6925 -Croisy-sur-Andelle,76201,564,3.750,0.616,0.558,585,6931 -Le Pin,14504,812,11.597,1.084,0.981,505,6906 -Genneville,14299,809,9.498,0.981,0.888,504,6922 -Fauguernon,14260,248,7.623,0.879,0.796,503,6902 -Argueil,76025,341,6.962,0.840,0.761,592,6940 -Le Brévedent,14104,173,4.472,0.673,0.609,504,6907 -Fleury-la-Forêt,27245,266,7.876,0.893,0.809,597,6928 -Saint-Benoît-d'Hébertot,14563,422,7.195,0.854,0.773,504,6916 -Doyet,3104,1193,27.768,1.677,1.518,681,6583 -La Rivière-Saint-Sauveur,14536,2515,5.443,0.743,0.673,501,6924 -Mortemer,76454,83,8.947,0.952,0.862,594,6959 -Bézu-la-Forêt,27066,307,9.000,0.955,0.865,602,6923 -La Feuillie,76263,1301,39.758,2.007,1.817,588,6931 -Mesnil-Mauger,76432,248,8.373,0.921,0.834,593,6954 -Flamets-Frétils,76265,163,12.302,1.116,1.010,598,6962 -Auvilliers,76042,103,4.859,0.702,0.636,596,6965 -Bézancourt,76093,350,17.707,1.339,1.212,597,6927 -Graval,76323,149,3.966,0.634,0.574,595,6958 -La Ferté-Saint-Samson,76261,470,19.046,1.389,1.258,593,6946 -Beaussault,76065,411,18.481,1.368,1.239,596,6954 -Beauvoir-en-Lyons,76067,627,33.697,1.848,1.673,602,6931 -Lorleau,27373,143,12.321,1.117,1.011,591,6928 -Hodeng-Hodenger,76364,280,11.642,1.086,0.983,596,6937 -Compainville,76185,183,6.441,0.808,0.732,596,6950 -Beaubec-la-Rosière,76060,500,13.040,1.149,1.040,590,6953 -Lyons-la-Forêt,27377,729,27.097,1.657,1.500,585,6922 -Serqueux,76672,999,5.749,0.763,0.691,595,6950 -Sainte-Beuve-en-Rivière,76567,182,11.640,1.086,0.983,596,6966 -Brémontier-Merval,76142,461,17.217,1.321,1.196,603,6936 -Beauficel-en-Lyons,27048,190,7.193,0.854,0.773,594,6924 -Le Thil-Riberpré,76691,219,10.099,1.012,0.916,600,6950 -Le Mesnil-Lieubray,76431,101,5.922,0.775,0.702,590,6936 -Bosquentin,27094,128,6.948,0.839,0.760,599,6922 -La Bellière,76074,56,4.554,0.679,0.615,600,6947 -Nesle-Hodeng,76459,349,15.727,1.262,1.143,593,6954 -Bouelles,76130,274,7.972,0.899,0.814,591,6961 -Sauvagny,3269,92,19.426,1.403,1.270,688,6594 -Bosgouet,27091,685,9.560,0.984,0.891,545,6921 -Caumont,27133,1035,6.077,0.785,0.711,549,6923 -Barneville-sur-Seine,27039,506,8.814,0.945,0.856,541,6924 -Amfreville-Saint-Amand,27011,1208,9.674,0.990,0.896,551,6905 -La Londe,76391,2322,30.922,1.770,1.603,552,6912 -Mauny,76419,176,10.129,1.013,0.917,547,6921 -Grand Bourgtheroulde,27105,3723,19.708,1.413,1.279,542,6916 -Les Monts du Roumois,27062,1561,23.944,1.558,1.411,542,6907 -Bosroumois,27090,3565,13.387,1.165,1.055,550,6910 -Yville-sur-Seine,76759,457,7.730,0.885,0.801,548,6927 -Saint-Pierre-du-Bosguérard,27595,1043,10.224,1.018,0.922,549,6909 -Murat,3191,295,20.300,1.434,1.298,691,6587 -Saint-Ouen-de-Thouberville,27580,2375,6.377,0.804,0.728,549,6919 -Chamberet,19036,1367,70.523,2.673,2.420,596,6502 -Rempnat,87123,147,21.168,1.465,1.326,614,6512 -Peyrat-le-Château,87117,983,55.024,2.361,2.138,605,6531 -La Crouzille,63130,268,18.681,1.376,1.246,683,6563 -Eymoutiers,87064,2061,70.629,2.675,2.422,600,6515 -Beaumont-du-Lac,87009,149,27.491,1.669,1.511,615,6520 -Nedde,87104,469,53.068,2.319,2.100,612,6518 -Chappes,3058,220,18.637,1.374,1.244,698,6589 -Saint-Pardoux-Morterolles,23227,204,36.641,1.927,1.745,612,6539 -Gouttières,63171,352,25.833,1.618,1.465,683,6556 -Anduze,30010,3484,14.607,1.217,1.102,776,6330 -L'Église-aux-Bois,19074,56,16.369,1.288,1.166,609,6508 -Pontgibaud,63285,755,4.599,0.683,0.618,687,6523 -Sainte-Christine,63329,131,12.909,1.144,1.036,689,6551 -Montfermy,63238,227,14.277,1.203,1.089,683,6527 -Murat-le-Quaire,63246,476,11.690,1.088,0.985,682,6499 -Perpezat,63274,427,36.490,1.923,1.741,680,6513 -Les Ancizes-Comps,63004,1568,22.088,1.496,1.355,685,6541 -Louroux-de-Beaune,3151,170,10.757,1.044,0.945,691,6578 -Saint-Pierre-Roche,63386,447,16.886,1.308,1.184,682,6514 -Queuille,63294,270,10.139,1.014,0.918,685,6541 -Teilhet,63428,297,18.966,1.386,1.255,688,6558 -Buxières-les-Mines,3046,1059,47.731,2.199,1.991,699,6593 -Deneuille-les-Mines,3097,362,25.138,1.596,1.445,679,6585 -Ceyssat,63071,692,30.398,1.755,1.589,695,6522 -Charensat,63094,508,46.878,2.179,1.973,676,6537 -Pionsat,63281,1100,24.898,1.588,1.438,677,6554 -Nades,3192,152,8.414,0.923,0.836,697,6559 -Manzat,63206,1369,39.030,1.989,1.801,699,6540 -Ayat-sur-Sioule,63025,147,14.298,1.204,1.090,692,6553 -Vernusse,3308,155,19.696,1.413,1.279,696,6571 -Blomard,3032,237,22.508,1.510,1.367,701,6578 -Saint-Jacques-d'Ambur,63363,274,21.402,1.473,1.334,681,6530 -Biollet,63041,334,23.558,1.545,1.399,679,6546 -Buxières-sous-Montaigut,63062,238,10.999,1.056,0.956,685,6566 -Malicorne,3159,806,11.967,1.101,0.997,679,6578 -Saint-Gal-sur-Sioule,63344,137,9.540,0.983,0.890,698,6558 -Roche-d'Agoux,63304,103,5.573,0.751,0.680,673,6548 -Heume-l'Église,63176,107,15.279,1.244,1.126,680,6513 -Villefranche-d'Allier,3315,1352,39.960,2.012,1.822,684,6590 -Hyds,3129,321,18.808,1.380,1.249,686,6571 -Briffons,63053,271,40.595,2.028,1.836,671,6514 -Haut-Bocage,3158,892,70.250,2.668,2.416,682,6592 -Bézenet,3027,974,10.003,1.007,0.912,689,6579 -Saint-Georges-de-Mons,63349,1976,34.322,1.865,1.689,688,6535 -Prondines,63289,258,30.730,1.765,1.598,675,6521 -Saint-Gervais-d'Auvergne,63354,1323,47.817,2.201,1.993,687,6544 -Cosne-d'Allier,3084,2046,25.268,1.600,1.449,691,6597 -Colombier,3081,332,13.007,1.148,1.039,686,6572 -Miremont,63228,300,37.930,1.960,1.775,680,6531 -Saint-Angel,63318,410,18.056,1.353,1.225,693,6547 -Tortezais,3285,175,24.290,1.569,1.421,691,6597 -Montaigut,63233,987,8.245,0.914,0.828,683,6563 -Saint-Sauves-d'Auvergne,63397,1128,50.119,2.253,2.040,671,6502 -Aigurande,36001,1435,28.010,1.685,1.526,616,6594 -Montmarault,3186,1520,9.085,0.959,0.868,696,6578 -La Cellette,63067,170,11.079,1.059,0.959,679,6553 -Lourdoueix-Saint-Michel,36099,323,19.878,1.419,1.285,604,6595 -Montchevrier,36126,454,35.051,1.885,1.707,608,6596 -Méasnes,23130,550,27.661,1.674,1.516,604,6595 -Lourdoueix-Saint-Pierre,23112,776,44.710,2.128,1.927,607,6584 -Crozon-sur-Vauvre,36061,346,27.972,1.683,1.524,616,6594 -Chambon-Sainte-Croix,23044,76,6.702,0.824,0.746,604,6584 -Champsanglard,23049,246,13.643,1.176,1.065,617,6577 -Roches,23162,367,25.469,1.606,1.454,623,6572 -Jouillat,23101,412,22.355,1.505,1.363,615,6573 -Le Bourg-d'Hem,23029,209,15.583,1.257,1.138,610,6577 -Moutier-d'Ahun,23138,180,9.978,1.005,0.910,629,6554 -Châtelus-Malvaleix,23057,569,15.113,1.237,1.120,623,6580 -Mazeirat,23128,135,7.894,0.894,0.809,622,6562 -Vidaillat,23260,156,23.593,1.546,1.400,613,6544 -Chard,23053,206,14.248,1.202,1.088,663,6538 -Auge,23009,100,10.013,1.007,0.912,650,6573 -Gouzon,23093,1587,50.670,2.266,2.052,637,6561 -Soumans,23174,611,36.784,1.931,1.748,645,6576 -Ladapeyre,23102,350,31.506,1.787,1.618,629,6568 -Saint-Amand,23180,498,8.004,0.901,0.816,639,6540 -Chénérailles,23061,763,7.799,0.889,0.805,637,6555 -Banize,23016,189,15.336,1.247,1.129,619,6538 -Toulx-Sainte-Croix,23254,265,35.182,1.888,1.709,639,6573 -Sainte-Thérence,3261,188,13.118,1.153,1.044,666,6574 -Saint-Loup,23209,182,18.886,1.383,1.252,647,6559 -Pionnat,23154,769,42.622,2.078,1.881,628,6568 -Saint-Hilaire-le-Château,23202,234,19.598,1.409,1.276,617,6541 -Saint-Hilaire-la-Plaine,23201,210,11.373,1.073,0.972,621,6556 -Jalesches,23098,89,8.651,0.936,0.847,628,6576 -Prémilhat,3211,2439,21.131,1.463,1.325,664,6582 -Verneiges,23259,111,7.650,0.880,0.797,650,6576 -Évaux-les-Bains,23076,1386,45.375,2.144,1.941,662,6559 -Lamaids,3136,218,7.729,0.885,0.801,657,6577 -Chambon-sur-Voueize,23045,911,33.883,1.853,1.678,652,6567 -Puy-Malsignat,23159,165,12.676,1.133,1.026,641,6548 -Trois-Fonds,23255,121,9.664,0.990,0.896,641,6573 -Champagnat,23048,465,28.757,1.707,1.546,644,6544 -Fernoël,63159,130,14.594,1.216,1.101,656,6521 -Vigeville,23262,167,7.445,0.869,0.787,627,6561 -Chamberaud,23043,102,7.320,0.861,0.780,624,6549 -Saint-Laurent,23206,689,12.973,1.146,1.038,618,6561 -Peyrat-la-Nonière,23151,424,41.405,2.048,1.854,643,6550 -Saint-Avit-le-Pauvre,23183,78,4.941,0.708,0.641,627,6546 -Blaudeix,23023,96,7.030,0.844,0.764,629,6568 -Peyrabout,23150,152,9.000,0.955,0.865,615,6555 -Ahun,23001,1438,34.022,1.857,1.681,626,6558 -Glénic,23092,661,27.411,1.667,1.509,622,6572 -Alleyrat,23003,144,9.492,0.981,0.888,633,6545 -Bellegarde-en-Marche,23020,408,3.158,0.566,0.512,644,6543 -Saint-Michel-de-Veisse,23222,163,15.579,1.256,1.137,625,6539 -Mautes,23127,216,22.652,1.515,1.372,652,6540 -La Chaussade,23059,111,7.203,0.854,0.773,644,6544 -La Celle-sous-Gouzon,23040,149,14.192,1.199,1.086,637,6570 -La Celle,63064,86,15.838,1.267,1.147,657,6530 -Montel-de-Gelat,63237,443,25.200,1.598,1.447,668,6535 -Saint-Maixant,23210,239,13.872,1.186,1.074,638,6546 -Lupersat,23113,312,32.835,1.824,1.651,650,6540 -Clugnat,23064,648,42.792,2.082,1.885,630,6572 -Saint-Alpinien,23179,274,15.199,1.241,1.124,639,6539 -Brousse,23034,27,3.686,0.611,0.553,658,6540 -Parsac-Rimondeix,23149,695,47.472,2.193,1.986,629,6568 -Aydat,63026,2337,50.605,2.264,2.050,696,6512 -Saint-Sulpice-les-Champs,23246,357,21.706,1.483,1.343,621,6541 -Villebret,3314,1319,15.521,1.254,1.135,669,6577 -Mazirat,3167,281,20.381,1.437,1.301,663,6571 -Guéret,23096,13275,26.029,1.624,1.470,612,6559 -Lioux-les-Monges,23110,56,7.430,0.868,0.786,657,6536 -La Saunière,23169,609,7.504,0.872,0.790,620,6560 -Lignerolles,3145,748,11.730,1.090,0.987,667,6574 -Saint-Yrieix-les-Bois,23250,286,15.993,1.273,1.153,620,6558 -Jarnages,23100,470,9.167,0.964,0.873,628,6568 -Viam,19284,100,31.781,1.794,1.624,610,6503 -Mainsat,23116,574,34.852,1.879,1.701,655,6548 -Lavaufranche,23104,248,16.184,1.281,1.160,645,6582 -Châtelard,23055,31,2.467,0.500,0.453,659,6539 -Fontanières,23083,252,15.893,1.269,1.149,665,6558 -Rougnat,23164,498,41.575,2.052,1.858,659,6553 -Auzances,23013,1239,7.126,0.850,0.770,663,6546 -Terjat,3280,207,17.893,1.346,1.219,670,6571 -Saint-Priest,23234,162,22.249,1.501,1.359,652,6559 -La Petite-Marche,3206,182,15.031,1.234,1.117,666,6564 -Sannat,23167,350,34.201,1.862,1.686,653,6554 -Saint-Genest,3233,404,15.283,1.244,1.126,667,6574 -Lavault-Sainte-Anne,3140,1170,9.078,0.959,0.868,672,6579 -La Chapelle-Saint-Martial,23051,96,10.291,1.021,0.924,619,6548 -Saint-Silvain-Bellegarde,23241,207,20.847,1.453,1.316,643,6541 -Marcillat-en-Combraille,3161,898,35.603,1.899,1.719,674,6560 -Cressat,23068,554,34.149,1.860,1.684,633,6563 -Saint-Julien-la-Genête,23203,227,12.064,1.106,1.001,657,6561 -Saint-Pardoux-le-Neuf,23228,188,7.522,0.873,0.790,640,6536 -Saint-Georges-la-Pouge,23197,371,24.086,1.562,1.414,622,6546 -Maisonnisses,23118,197,11.209,1.066,0.965,616,6554 -Charron,23054,230,30.110,1.747,1.582,665,6555 -Saint-Fiel,23195,1037,16.679,1.300,1.177,617,6568 -Lavaveix-les-Mines,23105,682,4.642,0.686,0.621,629,6553 -Sainte-Sévère-sur-Indre,36208,780,26.297,1.632,1.478,626,6597 -Ajain,23002,1135,33.142,1.832,1.659,618,6567 -Dontreix,23073,409,47.986,2.205,1.996,664,6547 -Pierrefitte,23152,70,6.460,0.809,0.732,641,6559 -Moutier-Malcard,23139,527,26.059,1.625,1.471,618,6591 -Vergheas,63447,63,7.419,0.867,0.785,671,6549 -La Pouge,23157,87,7.574,0.876,0.793,617,6544 -Chambérat,3051,307,28.722,1.706,1.545,654,6593 -Sous-Parsat,23175,114,9.319,0.972,0.880,620,6551 -Saint-Sauvier,3259,354,31.750,1.794,1.624,649,6586 -Saint-Silvain-Bas-le-Roc,23240,409,15.484,1.253,1.134,638,6580 -Leyrat,23108,149,18.411,1.366,1.237,645,6588 -Viplaix,3317,303,30.909,1.770,1.603,648,6597 -Mortroux,23136,288,13.468,1.168,1.058,614,6589 -Saint-Palais,3249,165,20.409,1.438,1.302,647,6598 -Boussac,23031,1267,1.545,0.396,0.359,641,6583 -Bétête,23022,364,28.396,1.696,1.536,632,6582 -Vaux,3301,1096,18.054,1.352,1.224,666,6593 -Saint-Victor,3262,2113,23.103,1.530,1.385,670,6590 -Boussac-Bourg,23032,732,38.661,1.979,1.792,638,6589 -La Chapelaude,3055,1002,28.620,1.703,1.542,664,6590 -Désertines,3098,4387,8.267,0.915,0.828,670,6586 -Saint-Martinien,3246,610,25.804,1.617,1.464,661,6582 -Pouligny-Notre-Dame,36163,716,33.744,1.849,1.674,627,6601 -Malleret-Boussac,23120,199,25.585,1.610,1.458,634,6586 -La Forêt-du-Temple,23084,141,7.822,0.890,0.806,616,6594 -Saint-Priest-la-Marche,18232,224,20.294,1.434,1.298,638,6592 -Tercillat,23252,159,13.938,1.188,1.076,628,6592 -Courçais,3088,330,26.849,1.649,1.493,655,6594 -Reugny,3213,253,7.218,0.855,0.774,670,6598 -Sazeray,36214,305,22.932,1.524,1.380,626,6597 -Saint-Marien,23213,188,12.904,1.143,1.035,637,6592 -La Cellette,23041,262,21.445,1.474,1.335,623,6593 -Nouziers,23148,238,14.584,1.216,1.101,622,6590 -La Villetelle,23266,169,16.142,1.279,1.158,649,6540 -Flayat,23081,314,44.040,2.112,1.912,653,6526 -Villosanges,63460,334,33.014,1.829,1.656,671,6538 -Felletin,23079,1632,13.737,1.180,1.068,636,6529 -Gentioux-Pigerolles,23090,418,79.797,2.843,2.574,620,6526 -Saint-Georges-Nigremont,23198,121,19.105,1.391,1.259,646,6528 -Condat-en-Combraille,63118,430,45.697,2.152,1.948,670,6527 -Sauvagnat,63410,129,24.002,1.559,1.412,668,6516 -Beissat,23019,25,14.673,1.219,1.104,642,6519 -Saint-Frion,23196,257,18.759,1.379,1.249,642,6532 -Poussanges,23158,152,23.368,1.539,1.393,640,6520 -Vallière,23257,729,48.191,2.210,2.001,628,6537 -Saint-Sulpice,63399,87,18.196,1.358,1.230,672,6504 -Saint-Pardoux-d'Arnet,23226,170,16.407,1.289,1.167,644,6532 -Basville,23017,161,22.620,1.514,1.371,652,6530 -Croze,23071,202,22.154,1.498,1.356,637,6523 -Malleret,23119,44,11.916,1.099,0.995,646,6521 -Magnat-l'Étrange,23115,235,25.966,1.622,1.469,647,6521 -Faux-la-Montagne,23077,413,48.399,2.214,2.005,621,6514 -La Villeneuve,23265,66,4.493,0.675,0.611,656,6532 -Saint-Marc-à-Frongier,23211,421,25.456,1.606,1.454,634,6536 -Saint-Agnant-près-Crocq,23178,190,25.355,1.603,1.451,649,6527 -Crocq,23069,397,14.052,1.193,1.080,650,6530 -Saint-Marc-à-Loubaud,23212,137,20.366,1.436,1.300,624,6526 -Tralaigues,63436,83,5.118,0.720,0.652,668,6535 -Saint-Maurice-près-Crocq,23218,100,14.071,1.194,1.081,647,6526 -Mérinchal,23131,738,45.033,2.136,1.934,659,6530 -Royère-de-Vassivière,23165,571,80.703,2.860,2.589,611,6524 -Serverette,48188,264,17.300,1.324,1.199,731,6397 -Sainte-Feyre-la-Montagne,23194,133,6.781,0.829,0.751,641,6535 -Néoux,23142,286,23.833,1.554,1.407,644,6532 -Le Monteil-au-Vicomte,23134,202,14.491,1.212,1.097,619,6538 -Giat,63165,826,48.123,2.208,1.999,658,6518 -Clairavaux,23063,156,27.615,1.673,1.515,640,6520 -Bugeat,19033,816,31.164,1.777,1.609,620,6504 -Saint-Rémy,19238,224,30.993,1.772,1.604,643,6510 -Saint-Pardoux-le-Vieux,19233,299,15.893,1.269,1.149,644,6497 -Peyrelevade,19164,860,66.729,2.600,2.354,629,6516 -Sornac,19261,767,59.464,2.455,2.223,635,6516 -Saint-Setiers,19241,283,47.030,2.183,1.977,629,6515 -Saint-Germain-Lavolps,19206,87,21.780,1.486,1.345,637,6498 -La Villedieu,23264,49,5.703,0.760,0.688,614,6514 -Toy-Viam,19268,37,10.162,1.015,0.919,614,6507 -Bellechassagne,19021,87,13.291,1.160,1.050,640,6508 -Millevaches,19139,83,11.529,1.081,0.979,631,6505 -Merlines,19134,731,14.142,1.197,1.084,660,6504 -Saint-Sulpice-les-Bois,19244,84,23.251,1.535,1.390,630,6504 -Tarnac,19265,327,68.731,2.639,2.389,614,6512 -Saint-Merd-les-Oussines,19226,130,42.998,2.087,1.890,628,6502 -Aix,19002,389,48.758,2.223,2.013,649,6500 -Couffy-sur-Sarsonne,19064,78,14.157,1.198,1.085,645,6508 -Tortebesse,63433,65,11.652,1.087,0.984,676,6514 -Lamazière-Haute,19103,66,15.412,1.250,1.132,649,6512 -Saint-Pardoux-le-Neuf,19232,78,10.653,1.039,0.941,648,6503 -Bourg-Lastic,63048,877,40.789,2.033,1.841,663,6505 -Lastic,63191,109,17.480,1.331,1.205,665,6510 -Verneugheol,63450,241,34.971,1.882,1.704,663,6511 -Feyt,19083,129,19.592,1.409,1.276,662,6508 -Eygurande,19080,683,34.696,1.875,1.698,651,6513 -La Chapelle-Taillefert,23052,419,14.106,1.196,1.083,611,6561 -Courteix,19065,64,10.197,1.016,0.920,648,6504 -Lignareix,19114,164,9.483,0.980,0.887,646,6504 -Janaillat,23099,336,28.543,1.701,1.540,602,6551 -Saint-Silvain-Montaigut,23242,207,9.676,0.990,0.896,605,6558 -Bussière-Dunoise,23036,1041,41.958,2.062,1.867,601,6575 -Thauron,23253,176,22.300,1.503,1.361,605,6544 -Chanéac,7054,257,15.861,1.268,1.148,806,6429 -Gartempe,23088,123,9.594,0.986,0.893,600,6560 -Bourganeuf,23030,2656,22.569,1.512,1.369,600,6540 -Saint-Sulpice-le-Guérétois,23245,1969,36.534,1.924,1.742,608,6564 -Saint-André-en-Vivarais,7212,215,20.685,1.448,1.311,813,6447 -Pontarion,23155,366,5.397,0.739,0.669,612,6544 -Eclassan,7084,1009,16.483,1.292,1.170,835,6454 -Saint-Éloi,23191,224,15.677,1.260,1.141,607,6554 -Saint-Bonnet-le-Froid,43172,260,13.058,1.150,1.041,813,6447 -Saint-Léger-le-Guérétois,23208,436,14.099,1.195,1.082,611,6561 -Bosmoreau-les-Mines,23027,249,9.035,0.957,0.866,605,6546 -Saint-Christophe,23186,145,7.858,0.892,0.808,612,6559 -Saint-Félicien,7236,1180,21.489,1.476,1.336,829,6443 -Anzême,23004,577,29.560,1.731,1.567,615,6574 -Saint-Vaury,23247,1764,46.913,2.180,1.974,601,6564 -Sardent,23168,785,41.250,2.044,1.851,613,6556 -Pailharès,7170,251,19.846,1.418,1.284,822,6445 -La Brionne,23033,438,7.129,0.850,0.770,606,6562 -Étables,7086,894,15.783,1.265,1.145,835,6449 -Mansat-la-Courrière,23122,93,9.580,0.985,0.892,605,6544 -Ozon,7169,406,8.384,0.922,0.835,844,6452 -Saint-Victor-en-Marche,23248,385,16.524,1.294,1.172,606,6561 -Saint-Jean-de-Muzols,7245,2426,10.877,1.050,0.951,839,6442 -Préaux,7185,679,22.734,1.518,1.374,826,6448 -Saint-Symphorien-de-Mahun,7299,119,19.576,1.408,1.275,819,6452 -Lalouvesc,7128,395,10.704,1.041,0.943,817,6447 -Vaudevant,7335,203,12.694,1.134,1.027,829,6447 -Vocance,7347,607,17.546,1.333,1.207,826,6458 -Saint-Julien-Vocance,7258,229,25.999,1.623,1.469,821,6454 -Saint-Julien-Molhesabate,43204,175,27.401,1.666,1.508,811,6453 -Saint-Victor,7301,948,32.069,1.803,1.632,835,6449 -Vion,7345,942,6.321,0.800,0.724,842,6450 -Arras-sur-Rhône,7015,508,5.560,0.751,0.680,840,6451 -Saint-Jeure-d'Ay,7250,480,7.052,0.845,0.765,837,6451 -Lafarre,7124,40,11.191,1.065,0.964,818,6441 -Saint-Alban-d'Ay,7205,1370,23.756,1.551,1.404,826,6458 -Saint-Romain-d'Ay,7292,1188,9.553,0.984,0.891,835,6454 -Monestier,7160,61,7.466,0.870,0.788,816,6459 -Devesset,7080,293,29.694,1.735,1.571,807,6445 -Boffres,7035,645,30.855,1.768,1.601,837,6422 -Saint-Martin-de-Valamas,7269,1129,20.094,1.427,1.292,809,6425 -Jaunac,7108,131,3.924,0.631,0.571,809,6425 -Lachapelle-sous-Chanéac,7123,175,8.976,0.954,0.864,802,6430 -Saint-Cierge-sous-le-Cheylard,7222,200,6.013,0.781,0.707,813,6427 -Le Chambon-sur-Lignon,43051,2483,41.757,2.057,1.862,806,6437 -Riotord,43163,1174,51.893,2.293,2.076,816,6461 -Saint-Pal-de-Mons,43213,2277,27.296,1.663,1.506,802,6465 -Saint-Romain-Lachalm,43223,1082,19.634,1.410,1.277,804,6461 -Montfaucon-en-Velay,43141,1229,4.986,0.711,0.644,806,6455 -Tence,43244,3084,52.421,2.305,2.087,807,6445 -Raucoules,43159,913,20.966,1.457,1.319,798,6458 -La Côe-Saint-André,38130,4805,28.129,1.688,1.528,875,6481 -Meyrié,38230,1006,3.477,0.594,0.538,879,6497 -Tramolé,38512,714,7.064,0.846,0.766,878,6495 -Champier,38069,1390,14.262,1.202,1.088,879,6484 -Saint-Jean-de-Bournay,38399,4609,26.868,1.650,1.494,865,6493 -Savas-Mépin,38476,890,10.457,1.029,0.932,860,6494 -Mottier,38267,689,10.773,1.045,0.946,878,6483 -Sardieu,38473,1110,11.229,1.067,0.966,872,6475 -Meyssiez,38232,634,13.942,1.189,1.077,859,6486 -Oytier-Saint-Oblas,38288,1625,14.290,1.203,1.089,860,6495 -Pajay,38291,1131,14.350,1.206,1.092,864,6474 -Saint-Agnin-sur-Bion,38351,1018,9.760,0.994,0.900,877,6497 -Lieudieu,38211,343,6.001,0.780,0.706,869,6486 -Gillonnay,38180,1015,14.392,1.208,1.094,881,6476 -Beauvoir-de-Marc,38035,1132,11.388,1.074,0.972,860,6494 -Maubec,38223,1724,8.712,0.940,0.851,877,6497 -Four,38172,1495,11.863,1.096,0.992,871,6497 -Royas,38346,393,5.405,0.740,0.670,864,6494 -Divajeu,26115,637,13.191,1.156,1.047,860,6400 -Bossieu,38049,291,13.610,1.174,1.063,871,6481 -Roche,38339,1993,19.485,1.405,1.272,867,6497 -Nivolas-Vermelle,38276,2604,6.189,0.792,0.717,880,6497 -Penol,38300,344,12.104,1.107,1.002,866,6473 -Sainte-Anne-sur-Gervonde,38358,670,7.900,0.895,0.810,877,6492 -Grane,26144,1895,45.740,2.153,1.949,851,6399 -Meyrieu-les-Étangs,38231,991,8.547,0.931,0.843,871,6495 -Vercheny,26368,450,11.271,1.069,0.968,879,6402 -Culin,38141,739,7.384,0.865,0.783,877,6495 -Saint-Vallier,26333,3896,5.370,0.738,0.668,843,6453 -Artas,38015,1813,14.205,1.200,1.086,871,6497 -Moidieu-Détourbe,38238,1862,18.035,1.352,1.224,859,6495 -Saint-Sorlin-en-Valloire,26330,2250,26.440,1.637,1.482,856,6464 -Faramans,38161,1035,10.780,1.045,0.946,866,6479 -Manthes,26172,669,6.825,0.832,0.753,858,6467 -Chèzeneuve,38102,554,6.796,0.830,0.751,872,6497 -Saint-Appolinard,38360,404,10.741,1.043,0.944,879,6460 -Charantonnay,38081,1882,11.116,1.061,0.961,865,6493 -Véronne,26371,46,21.668,1.482,1.342,872,6404 -Barsac,26027,139,15.796,1.265,1.145,883,6408 -Aubenasson,26015,67,6.808,0.831,0.752,871,6398 -Espenel,26122,167,15.115,1.238,1.121,877,6405 -Lentiol,38209,216,7.624,0.879,0.796,867,6469 -Aurel,26019,242,26.084,1.626,1.472,880,6400 -Mirmande,26185,574,26.491,1.638,1.483,845,6397 -Solaure en Diois,26001,457,19.365,1.401,1.268,892,6403 -Montmaur-en-Diois,26205,82,12.877,1.142,1.034,890,6402 -Tersanne,26349,356,9.590,0.986,0.893,857,6458 -Saint-Sauveur-en-Diois,26328,55,7.018,0.843,0.763,871,6398 -Chabrillan,26065,706,17.428,1.329,1.203,854,6407 -Bren,26061,557,11.107,1.061,0.961,850,6452 -Saint-Laurent-d'Onay,26310,152,6.295,0.799,0.723,864,6454 -Ratières,26259,270,9.117,0.961,0.870,855,6452 -Thodure,38505,751,14.531,1.213,1.098,868,6469 -Saint-Michel-sur-Savasse,26319,574,11.455,1.077,0.975,865,6454 -Bogy,7036,432,7.106,0.849,0.769,840,6467 -Laveyron,26160,1165,5.365,0.737,0.667,842,6460 -Épinouze,26118,1558,11.461,1.078,0.976,851,6471 -Peyraud,7174,502,6.029,0.782,0.708,841,6468 -Saint-Clair-sur-Galaure,38379,281,15.320,1.246,1.128,866,6463 -Beaufort,38032,556,8.651,0.936,0.847,867,6471 -Roybon,38347,1179,67.321,2.612,2.365,877,6467 -Saint-Rambert-d'Albon,26325,6420,13.343,1.163,1.053,841,6468 -Saint-Barthélemy-de-Vals,26295,1884,20.319,1.435,1.299,847,6450 -Colombier-le-Cardinal,7067,278,2.539,0.507,0.459,838,6464 -Charmes-sur-l'Herbasse,26077,934,13.071,1.151,1.042,858,6450 -Crépol,26107,561,11.541,1.081,0.979,864,6456 -Saint-Martin-d'Août,26314,382,7.718,0.884,0.800,857,6461 -Talencieux,7317,1051,7.225,0.856,0.775,840,6458 -Mureils,26219,465,5.552,0.750,0.679,851,6462 -Limony,7143,747,7.392,0.865,0.783,838,6472 -Saint Antoine l'Abbaye,38359,1165,36.035,1.911,1.730,872,6454 -Saint-Christophe-et-le-Laris,26298,411,11.550,1.082,0.980,860,6460 -Saint-Marcellin,38416,8015,7.784,0.888,0.804,883,6453 -Claveyson,26094,869,16.280,1.284,1.163,855,6452 -Saint-Uze,26332,2040,10.150,1.014,0.918,844,6455 -Beausemblant,26041,1434,11.780,1.093,0.990,845,6456 -Serrières,7313,1154,4.043,0.640,0.579,837,6468 -Moras-en-Valloire,26213,657,8.536,0.930,0.842,855,6469 -Saint-Sylvestre,7297,507,15.429,1.250,1.132,835,6434 -Bathernay,26028,249,5.750,0.763,0.691,858,6457 -Vernosc-lès-Annonay,7337,2599,16.580,1.296,1.173,838,6458 -Serves-sur-Rhône,26341,743,6.996,0.842,0.762,844,6452 -La Villette,14756,223,9.814,0.997,0.903,439,6875 -Le Chalon,26068,211,8.488,0.927,0.839,862,6453 -Saint-Avit,26293,302,8.974,0.954,0.864,856,6459 -Marcilloles,38218,1071,9.481,0.980,0.887,870,6473 -Joursac,15080,147,21.221,1.466,1.327,703,6452 -Parnans,26225,699,11.276,1.069,0.968,872,6449 -Saint-Just-de-Claix,38409,1182,11.628,1.085,0.982,879,6448 -Bourg-lès-Valence,26058,20078,20.177,1.430,1.295,848,6430 -Malissard,26170,3192,10.195,1.016,0.920,853,6424 -Les Côes-d'Arey,38131,2004,24.216,1.566,1.418,850,6486 -Saint-Barthélemy-le-Plain,7217,816,19.081,1.390,1.259,838,6438 -Saint-Bonnet-de-Chavagne,38370,628,15.177,1.240,1.123,875,6446 -Léoncel,26163,52,42.942,2.086,1.889,877,6432 -La Motte-Fanjas,26217,190,4.857,0.702,0.636,878,6442 -Guilherand-Granges,7102,11049,6.512,0.812,0.735,849,6428 -Peyrus,26232,605,10.546,1.034,0.936,865,6427 -Saint-Thomas-en-Royans,26331,591,5.142,0.722,0.654,879,6442 -Chavannes,26092,697,4.717,0.691,0.626,850,6447 -Beauregard-Baret,26039,831,23.932,1.557,1.410,875,6436 -Barbières,26023,1036,14.420,1.209,1.095,868,6431 -Montélier,26197,4077,24.671,1.581,1.431,863,6427 -Châteaudouble,26081,581,17.378,1.327,1.201,863,6426 -Chanos-Curson,26071,1075,8.162,0.909,0.823,852,6443 -Mours-Saint-Eusèbe,26218,3096,5.305,0.733,0.664,860,6443 -Valence,26362,62477,36.734,1.929,1.747,851,6424 -Alixan,26004,2497,28.291,1.693,1.533,855,6431 -La Roche-de-Glun,26271,3280,12.515,1.126,1.019,845,6438 -Rochefort-Samson,26273,1000,24.898,1.588,1.438,873,6429 -Châteaubourg,7059,238,4.315,0.661,0.598,846,6433 -Margès,26174,1133,9.916,1.002,0.907,861,6449 -Bésayes,26049,1204,9.674,0.990,0.896,864,6433 -Larnage,26156,1073,9.168,0.964,0.873,846,6449 -Oriol-en-Royans,26223,536,16.031,1.274,1.153,875,6435 -Beaumont-Monteux,26038,1304,13.410,1.166,1.056,849,6440 -Charpey,26079,1367,15.744,1.263,1.144,865,6427 -Marsaz,26177,792,9.082,0.959,0.868,854,6447 -Hostun,26149,975,18.415,1.366,1.237,870,6441 -Saint-Lattier,38410,1309,18.199,1.358,1.230,873,6449 -Génissieux,26139,2183,9.080,0.959,0.868,867,6444 -Champis,7052,619,16.686,1.300,1.177,835,6433 -Eymeux,26129,1032,10.134,1.013,0.917,870,6441 -Glun,7097,697,7.521,0.873,0.790,844,6434 -Saint-Marcel-lès-Valence,26313,6201,14.876,1.228,1.112,855,6431 -Geyssans,26140,721,10.960,1.054,0.954,866,6449 -Saint-Bardoux,26294,607,10.680,1.040,0.942,855,6447 -Saint-Paul-lès-Romans,26323,1822,15.414,1.250,1.132,870,6443 -Plats,7177,851,16.544,1.295,1.173,841,6435 -Jaillans,26381,894,9.031,0.957,0.866,869,6441 -Chantemerle-les-Blés,26072,1278,15.620,1.258,1.139,847,6450 -Granges-les-Beaumont,26379,936,7.682,0.882,0.799,857,6442 -Planfoy,42172,1025,12.489,1.125,1.019,809,6478 -Marches,26173,789,11.268,1.068,0.967,869,6432 -Érôme,26119,818,7.556,0.875,0.792,846,6451 -Auberives-en-Royans,38018,382,5.125,0.721,0.653,882,6445 -Issamoulenc,7104,94,15.663,1.260,1.141,812,6412 -Saint-Vincent-la-Commanderie,26382,527,13.319,1.162,1.052,870,6426 -Rochechinard,26270,115,9.695,0.991,0.897,878,6440 -Gervans,26380,560,3.455,0.592,0.536,845,6449 -Graix,42101,149,8.597,0.933,0.845,823,6472 -Tartaras,42307,840,3.975,0.635,0.575,831,6496 -Tarentaise,42306,473,12.549,1.128,1.021,815,6476 -Saint-Jean-Bonnefonds,42237,6664,11.661,1.087,0.984,813,6487 -Saint-Romain-en-Gier,69236,581,4.038,0.640,0.579,831,6496 -Saint-Vincent-de-Durfort,7303,231,12.840,1.141,1.033,831,6410 -La Grand-Croix,42103,5068,4.038,0.640,0.579,822,6492 -Les Ollières-sur-Eyrieux,7167,983,7.401,0.866,0.784,826,6413 -Saint-Pierre-de-Bœuf,42272,1739,5.992,0.779,0.705,838,6476 -Chuyer,42064,777,11.650,1.086,0.983,834,6483 -Jardin,38199,2232,9.237,0.967,0.876,848,6489 -Osani,2A197,96,51.365,2.281,2.065,1159,6159 -Longes,69119,961,24.036,1.561,1.413,830,6495 -Condrieu,69064,3877,9.239,0.968,0.876,839,6486 -Lupé,42124,313,1.480,0.387,0.350,834,6477 -Loire-sur-Rhône,69118,2559,16.509,1.293,1.171,842,6497 -Chonas-l'Amballan,38107,1676,7.416,0.867,0.785,839,6487 -Doizieux,42085,824,27.948,1.683,1.524,828,6484 -Saint-Romain-les-Atheux,42286,968,14.802,1.225,1.109,805,6475 -Chasse-sur-Rhône,38087,5968,7.891,0.894,0.809,841,6501 -Saint-Martin-la-Plaine,42259,3716,9.641,0.988,0.895,825,6498 -Lorette,42123,4717,3.380,0.585,0.530,824,6491 -La Versanne,42329,369,15.204,1.241,1.124,815,6469 -Le Bessat,42017,446,10.187,1.016,0.920,817,6477 -Colombier,42067,308,17.886,1.346,1.219,823,6477 -Chagnon,42036,494,2.494,0.503,0.455,821,6495 -Vanosc,7333,939,26.344,1.634,1.479,823,6459 -Tupin-et-Semons,69253,617,8.274,0.916,0.829,841,6488 -Saint-Joseph,42242,1894,8.273,0.916,0.829,828,6495 -Châteauneuf,42053,1579,13.555,1.172,1.061,829,6490 -Le Cheylard,7064,2991,13.538,1.171,1.060,811,6426 -Serpaize,38484,1924,11.436,1.076,0.974,847,6497 -La Chapelle-Villars,42051,529,8.293,0.917,0.830,834,6490 -Saint-Michel-de-Chabrillanoux,7278,359,11.813,1.094,0.991,825,6417 -Chavanay,42056,2887,15.086,1.236,1.119,838,6483 -Juvigny les Vallées,50260,1709,58.012,2.424,2.195,402,6845 -Dunière-sur-Eyrieux,7083,432,7.798,0.889,0.805,832,6418 -Les Haies,69097,791,15.911,1.270,1.150,839,6493 -Saint-Chamond,42207,35339,55.202,2.365,2.141,816,6492 -Saint-Romain-en-Gal,69235,1844,13.659,1.176,1.065,840,6493 -Saint-Cyr-sur-le-Rhône,69193,1324,6.066,0.784,0.710,839,6494 -Saint-Étienne-de-Serre,7233,227,16.615,1.297,1.174,823,6413 -Bessey,42018,455,6.298,0.799,0.723,832,6477 -Saint-Barthélemy-le-Meil,7215,193,7.378,0.865,0.783,815,6421 -La Talaudière,42305,6734,7.692,0.883,0.799,811,6485 -Saint-Étienne,42218,171924,80.040,2.848,2.579,807,6482 -Saint-Sorlin-de-Vienne,38459,872,9.943,1.004,0.909,853,6487 -Roisey,42191,917,13.084,1.151,1.042,832,6479 -Pavezin,42167,353,8.821,0.945,0.856,831,6485 -Saint-Julien-le-Roux,7257,107,8.501,0.928,0.840,834,6422 -Pont-Évêque,38318,5213,8.802,0.944,0.855,853,6494 -Saint-Genest-Malifaux,42224,2857,47.037,2.183,1.977,817,6472 -Dornas,7082,208,17.744,1.341,1.214,810,6420 -Saint-Michel-sur-Rhône,42265,811,5.860,0.771,0.698,837,6485 -Burdignes,42028,360,30.694,1.764,1.597,816,6461 -Farnay,42093,1413,7.410,0.866,0.784,826,6489 -Saint-Jean-Chambre,7244,273,15.444,1.251,1.133,822,6427 -Roiffieux,7197,2807,19.478,1.405,1.272,826,6458 -Saint-Appolinard,42201,670,9.854,0.999,0.905,832,6473 -Ampuis,69007,2712,15.574,1.256,1.137,844,6491 -Vinzieux,7344,452,6.960,0.840,0.761,833,6473 -Marcenod,42133,718,9.066,0.958,0.867,817,6499 -Dargoire,42083,516,1.954,0.445,0.403,832,6497 -Romeyer,26282,198,40.059,2.015,1.824,895,6417 -La Ricamarie,42183,7923,6.941,0.839,0.760,806,6480 -Saint-Priest-en-Jarez,42275,6147,3.090,0.560,0.507,807,6486 -Vouneuil-sous-Biard,86297,5806,26.230,1.630,1.476,494,6615 -Sainte-Croix-en-Jarez,42210,466,12.070,1.106,1.001,826,6489 -L'Horme,42110,4812,4.488,0.674,0.610,822,6489 -Silhac,7314,366,22.892,1.523,1.379,831,6418 -Saint-Symphorien-sous-Chomérac,7298,759,7.981,0.899,0.814,834,6406 -Le Pouzin,7181,2861,11.115,1.061,0.961,839,6410 -Saint-Lager-Bressac,7260,914,16.009,1.274,1.153,838,6399 -Loriol-sur-Drôme,26166,6561,28.779,1.708,1.546,840,6405 -Brossainc,7044,274,4.436,0.670,0.607,830,6470 -Boulieu-lès-Annonay,7041,2273,9.559,0.984,0.891,832,6463 -Saint-Clair,7225,1097,5.981,0.778,0.704,833,6466 -Thélis-la-Combe,42310,160,14.532,1.213,1.098,820,6475 -Davézieux,7078,3135,5.748,0.763,0.691,835,6464 -Saint-Genest-Lerpt,42223,6121,12.755,1.137,1.029,801,6486 -Villevocance,7342,1178,9.507,0.981,0.888,825,6462 -Annonay,7010,16640,21.141,1.464,1.326,833,6459 -Saint-Roman,26327,189,7.186,0.853,0.772,890,6401 -Le Crestet,7073,519,10.039,1.009,0.914,831,6437 -Bourg-Argental,42023,2914,20.259,1.433,1.297,826,6467 -Empurany,7085,593,19.353,1.400,1.268,826,6435 -Saint-Andéol,38355,123,29.832,1.739,1.575,895,6433 -Autrans-Méaudre en Vercors,38225,2969,77.914,2.810,2.544,898,6458 -Villard-de-Lans,38548,4208,67.147,2.608,2.361,896,6444 -Gresse-en-Vercors,38186,396,80.518,2.856,2.586,896,6417 -Corrençon-en-Vercors,38129,351,39.294,1.995,1.806,896,6435 -Laval-d'Aix,26159,122,19.854,1.418,1.284,896,6413 -Laviolle,7139,110,14.021,1.192,1.079,803,6409 -Saint-Étienne-de-Boulogne,7230,399,15.139,1.239,1.122,818,6403 -Pourchères,7179,130,7.845,0.892,0.808,817,6405 -Aizac,7003,166,6.429,0.807,0.731,807,6402 -Freyssenet,7092,47,9.661,0.989,0.895,824,6399 -Saint-Maurice-en-Chalencon,7274,215,7.698,0.883,0.799,827,6419 -Accons,7001,380,9.991,1.006,0.911,809,6420 -Chalencon,7048,298,9.584,0.985,0.892,825,6420 -Saint-Christol,7220,101,14.768,1.223,1.107,810,6420 -La Voulte-sur-Rhône,7349,5093,9.933,1.003,0.908,842,6414 -Marcols-les-Eaux,7149,304,16.066,1.276,1.155,809,6416 -Montignargues,30180,605,4.522,0.677,0.613,799,6316 -Lédignan,30146,1439,6.951,0.839,0.760,789,6324 -Saint-Hippolyte-de-Caton,30261,214,6.212,0.793,0.718,797,6332 -Die,26113,4585,57.512,2.414,2.186,884,6408 -Crespian,30098,404,7.968,0.899,0.814,789,6309 -Saint-Cierge-la-Serre,7221,254,15.886,1.269,1.149,834,6410 -Vernoux-en-Vivarais,7338,1961,31.099,1.775,1.607,828,6428 -Toulaud,7323,1687,35.288,1.891,1.712,846,6426 -Gluiras,7096,371,24.661,1.581,1.431,824,6417 -Saint-Andéol-de-Fourchades,7209,54,16.432,1.290,1.168,805,6420 -Beauchastel,7027,1811,8.486,0.927,0.839,841,6415 -Soyons,7316,2224,8.032,0.902,0.817,845,6422 -Saint-Genest-Lachamp,7239,102,23.243,1.535,1.390,809,6416 -Villars,42330,7978,5.699,0.760,0.688,805,6488 -Têche,38500,574,5.051,0.715,0.647,886,6459 -Izeron,38195,714,17.077,1.315,1.191,888,6455 -Cognin-les-Gorges,38117,637,12.679,1.133,1.026,892,6457 -Malleval-en-Vercors,38216,53,14.162,1.198,1.085,890,6452 -Ponet-et-Saint-Auban,26246,126,13.388,1.165,1.055,881,6413 -Saint-Laurent-en-Royans,26311,1391,27.795,1.678,1.519,881,6442 -Beauvoir-en-Royans,38036,91,2.047,0.455,0.412,886,6449 -Saint-Sauveur,38454,2091,9.361,0.974,0.882,883,6450 -Échevis,26117,48,11.214,1.066,0.965,885,6441 -Saint-André-en-Royans,38356,315,10.447,1.029,0.932,887,6447 -La Chapelle-en-Vercors,26074,699,45.416,2.145,1.942,896,6435 -Presles,38322,88,25.532,1.608,1.456,886,6448 -Saint-Agnan-en-Vercors,26290,387,84.015,2.918,2.642,891,6417 -Saint-Vérand,38463,1725,17.764,1.342,1.215,886,6459 -Sainte-Eulalie-en-Royans,26302,540,6.085,0.785,0.711,885,6441 -Belmont,38038,590,6.517,0.813,0.736,882,6489 -Saint-Martin-en-Vercors,26315,371,26.863,1.650,1.494,896,6439 -Blandin,38047,144,4.292,0.659,0.597,890,6489 -Marignac-en-Diois,26175,208,18.536,1.370,1.240,884,6417 -Montagnieu,38246,1054,8.858,0.947,0.857,889,6495 -Saint-Julien-en-Vercors,26309,242,18.428,1.366,1.237,893,6445 -Pont-en-Royans,38319,782,2.886,0.541,0.490,885,6441 -Vassieux-en-Vercors,26364,322,48.058,2.207,1.998,889,6419 -Saint-Michel-de-Saint-Geoirs,38427,306,7.157,0.852,0.771,883,6470 -Buzet-sur-Baïse,47043,1297,21.318,1.470,1.331,487,6357 -Saint-André-le-Gaz,38357,2807,8.989,0.954,0.864,898,6495 -Montrevel,38257,456,9.333,0.972,0.880,888,6491 -Valencogne,38520,678,7.682,0.882,0.799,895,6491 -Torchefelon,38508,726,8.775,0.943,0.854,885,6494 -Sainte-Blandine,38369,970,9.228,0.967,0.876,892,6496 -Saint-Victor-de-Cessieu,38464,2212,12.302,1.116,1.010,888,6498 -Châteauvilain,38091,711,8.942,0.952,0.862,884,6493 -Bizonnes,38046,948,11.090,1.060,0.960,888,6487 -Chassignieu,38089,227,5.235,0.728,0.659,898,6493 -Saint-Ondras,38434,631,8.231,0.913,0.827,900,6496 -Bilieu,38043,1529,7.585,0.877,0.794,901,6486 -Brion,38060,141,3.954,0.633,0.573,884,6468 -Chélieu,38098,674,10.168,1.015,0.919,895,6495 -Serre-Nerpol,38275,291,13.130,1.153,1.044,888,6466 -Doissin,38147,886,8.482,0.927,0.839,889,6494 -Saint-Didier-de-la-Tour,38381,2020,14.665,1.219,1.104,891,6498 -Varacieux,38523,867,18.527,1.370,1.240,884,6458 -Burcin,38063,416,6.747,0.827,0.749,893,6487 -Cessieu,38064,2935,14.506,1.212,1.097,882,6500 -Charavines,38082,1952,8.303,0.917,0.830,898,6485 -Longechenal,38213,564,8.222,0.913,0.827,884,6482 -Oyeu,38287,981,13.731,1.180,1.068,893,6482 -Sillans,38490,1897,12.870,1.142,1.034,887,6477 -Apprieu,38013,3280,15.340,1.247,1.129,898,6481 -Plan,38308,258,6.112,0.787,0.713,888,6473 -Saint-Paul-d'Izeaux,38437,296,7.698,0.883,0.799,889,6472 -Tullins,38517,7679,29.345,1.724,1.561,891,6470 -Charnècles,38084,1472,5.227,0.728,0.659,896,6474 -Bruch,47041,753,16.029,1.274,1.153,491,6347 -Rives,38337,6355,11.199,1.065,0.964,892,6477 -Vourey,38566,1710,6.862,0.834,0.755,899,6469 -Renage,38332,3532,5.128,0.721,0.653,895,6472 -La Frette,38174,1112,12.173,1.111,1.006,886,6477 -Bazens,47022,536,12.268,1.115,1.010,493,6353 -Saint-Geoirs,38387,521,6.992,0.842,0.762,886,6468 -Beaucroissant,38030,1652,11.163,1.064,0.963,895,6475 -Saint-Étienne-de-Saint-Geoirs,38384,3242,18.757,1.379,1.249,884,6477 -Clermont-Dessous,47066,867,15.306,1.245,1.127,494,6352 -Colombe,38118,1540,13.328,1.162,1.052,892,6477 -La Murette,38270,1907,4.249,0.656,0.594,898,6478 -Saint-Cassien,38373,1148,5.634,0.756,0.684,898,6478 -Saint-Blaise-du-Buis,38368,1041,5.605,0.754,0.683,895,6478 -Réaumont,38331,1033,5.066,0.716,0.648,898,6478 -Izeaux,38194,2150,15.528,1.254,1.135,891,6477 -Cobonne,26098,163,11.233,1.067,0.966,863,6406 -Portes-lès-Valence,26252,10445,14.320,1.205,1.091,847,6421 -Barcelonne,26024,349,8.238,0.914,0.828,863,6422 -Ourches,26224,247,9.237,0.967,0.876,864,6413 -Pontaix,26248,166,19.756,1.415,1.281,877,6410 -Beaumont-lès-Valence,26037,3670,17.734,1.340,1.213,851,6424 -Beaufort-sur-Gervanne,26035,468,9.557,0.984,0.891,871,6413 -La Baume-Cornillane,26032,438,14.477,1.211,1.096,860,6418 -Le Chaffal,26066,42,11.735,1.090,0.987,871,6423 -Upie,26358,1529,19.541,1.407,1.274,858,6411 -Saint-Andéol,26291,80,13.444,1.167,1.057,881,6415 -Montclar-sur-Gervanne,26195,181,29.994,1.743,1.578,868,6409 -Suze,26346,234,14.722,1.221,1.106,866,6411 -Eygluy-Escoulin,26128,65,26.564,1.641,1.486,877,6417 -Vachères-en-Quint,26359,31,5.214,0.727,0.658,878,6411 -Ambonil,26007,120,1.171,0.344,0.311,850,6412 -Sainte-Croix,26299,107,10.963,1.054,0.954,882,6408 -Gigors-et-Lozeron,26141,178,35.435,1.895,1.716,865,6417 -Montéléger,26196,1798,9.530,0.983,0.890,851,6423 -Allex,26006,2495,20.340,1.436,1.300,851,6411 -Montvendre,26212,1167,17.221,1.321,1.196,864,6418 -Montoison,26208,1912,16.168,1.280,1.159,854,6411 -Larroque-sur-l'Osse,32197,242,15.170,1.240,1.123,484,6325 -Eurre,26125,1305,18.898,1.384,1.253,854,6410 -Saint-Julien-en-Quint,26308,155,47.716,2.199,1.991,877,6418 -Combovin,26100,409,35.693,1.902,1.722,863,6422 -Vaunaveys-la-Rochette,26365,588,22.327,1.504,1.362,858,6411 -Rovon,38345,610,11.973,1.101,0.997,893,6459 -L'Albenc,38004,1208,10.199,1.017,0.921,893,6459 -La Forteresse,38171,323,9.283,0.970,0.878,891,6470 -Calignac,47045,496,18.456,1.367,1.238,495,6342 -Beaulieu,38033,628,8.822,0.945,0.856,888,6455 -Cras,38137,443,5.509,0.747,0.676,891,6465 -Montagnac-sur-Auvignon,47180,614,22.928,1.524,1.380,498,6347 -Chasselay,38086,411,9.472,0.980,0.887,883,6467 -Saint-Gervais,38390,558,13.267,1.159,1.049,896,6455 -La Rivière,38338,758,18.286,1.361,1.232,900,6463 -Chantesse,38074,325,5.840,0.769,0.696,893,6465 -Catenoy,60130,1044,12.539,1.127,1.020,666,6923 -Morette,38263,420,6.318,0.800,0.724,893,6467 -Villeneuve-de-Marsan,40331,2422,23.195,1.533,1.388,432,6314 -Poliénas,38310,1176,13.700,1.178,1.067,895,6461 -Lannemaignan,32189,110,8.660,0.937,0.848,440,6316 -Notre-Dame-de-l'Osier,38278,485,8.543,0.930,0.842,891,6462 -Grammond,42102,898,8.202,0.912,0.826,813,6497 -La Gimond,42100,280,3.396,0.587,0.531,811,6497 -Aveizieux,42010,1620,9.162,0.963,0.872,806,6497 -La Tour-en-Jarez,42311,1470,5.144,0.722,0.654,808,6487 -Fontanès,42096,672,6.899,0.836,0.757,811,6497 -Saint-Sauveur-de-Cruzières,7294,530,25.214,1.598,1.447,803,6358 -Saint-Bonnet-les-Oules,42206,1601,12.503,1.126,1.019,806,6497 -Pompiey,47207,224,19.720,1.414,1.280,474,6349 -Saint-Cricq-Villeneuve,40255,487,15.664,1.260,1.141,432,6319 -Lasserre,47139,74,6.514,0.812,0.735,489,6335 -Xaintrailles,47327,416,10.349,1.024,0.927,478,6350 -Bougue,40051,756,22.079,1.496,1.355,424,6319 -Frégimont,47104,260,7.611,0.878,0.795,499,6355 -Castelnau-sur-l'Auvignon,32080,150,10.185,1.016,0.920,499,6319 -Sore,40307,1107,148.122,3.874,3.508,417,6363 -Condom,32107,6554,97.672,3.146,2.848,484,6325 -Saint-Marcel-en-Marcillat,3244,144,10.721,1.042,0.943,667,6560 -Saint-Laurent,47249,523,4.242,0.656,0.594,493,6353 -Montesquieu,47186,777,25.622,1.611,1.459,500,6352 -Sos,47302,670,53.209,2.322,2.102,464,6329 -Mano,40171,131,32.561,1.816,1.644,406,6378 -Moncrabeau,47174,727,50.272,2.257,2.044,495,6329 -Thouars-sur-Garonne,47308,214,4.014,0.638,0.578,487,6352 -Andiran,47009,219,9.979,1.006,0.911,482,6340 -Mézin,47167,1596,31.803,1.795,1.625,478,6329 -Moustey,40200,689,67.625,2.618,2.370,404,6368 -Ligardes,32212,218,11.548,1.082,0.980,496,6331 -Mongaillard,47176,183,8.590,0.933,0.845,482,6348 -Aubaine,21030,99,16.265,1.284,1.163,832,6675 -Vianne,47318,1022,9.889,1.001,0.906,486,6353 -Saint-Pierre-de-Buzet,47267,288,8.546,0.931,0.843,483,6357 -Port-Sainte-Marie,47210,1944,19.033,1.389,1.258,493,6357 -Durance,47085,290,38.808,1.983,1.795,477,6341 -Nomdieu,47197,249,12.619,1.131,1.024,496,6332 -Fargues-sur-Ourbise,47093,343,44.514,2.124,1.923,469,6354 -Lannes,47134,373,32.715,1.821,1.649,485,6327 -Fourcès,32133,264,23.729,1.551,1.404,480,6323 -Caubeyres,47058,252,14.511,1.213,1.098,480,6354 -Loupiac-de-la-Réole,33254,490,5.351,0.736,0.666,457,6385 -Saint-Avit,40250,640,40.718,2.031,1.839,426,6321 -Sainte-Foy,40258,263,9.169,0.964,0.873,431,6320 -Préchac,33336,1012,64.093,2.548,2.307,433,6376 -Haut-Mauco,40122,944,18.858,1.382,1.251,415,6308 -Labastide-d'Armagnac,40131,686,32.141,1.805,1.634,448,6320 -Mauvezin-d'Armagnac,40176,101,4.728,0.692,0.627,450,6322 -Uchacq-et-Parentis,40320,591,38.592,1.977,1.790,412,6325 -Bourdalat,40052,249,14.168,1.198,1.085,442,6306 -Lavergne,47144,593,20.273,1.433,1.297,496,6388 -Bretagne-de-Marsan,40055,1544,13.138,1.154,1.045,422,6308 -Le Tuzan,33536,289,17.995,1.350,1.222,411,6377 -Mazerolles,40178,643,15.946,1.271,1.151,424,6312 -Caubon-Saint-Sauveur,47059,251,11.422,1.076,0.974,475,6394 -Benquet,40037,1696,29.508,1.729,1.565,420,6306 -Perquie,40221,352,26.378,1.635,1.480,442,6312 -Bascons,40025,860,18.686,1.376,1.246,422,6308 -Montégut,40193,71,4.781,0.696,0.630,442,6315 -Laglorieuse,40139,547,11.657,1.087,0.984,428,6315 -Saint-Gein,40259,432,17.960,1.349,1.221,436,6312 -Maurrin,40175,446,13.512,1.170,1.059,432,6310 -Lacquy,40137,278,19.225,1.396,1.264,436,6326 -Saint-Hilaire-de-Voust,85229,613,18.832,1.381,1.250,420,6619 -Monguilhem,32271,309,5.783,0.765,0.693,442,6312 -Balizac,33026,501,41.911,2.061,1.866,423,6387 -Artassenx,40012,251,5.478,0.745,0.675,429,6311 -Saint-Pierre-du-Mont,40281,9482,26.395,1.635,1.480,414,6317 -Campagne,40061,1010,33.929,1.854,1.679,407,6310 -Maupas,32246,204,9.863,1.000,0.905,449,6308 -Meilhan,40180,1141,39.020,1.988,1.800,400,6310 -Campet-et-Lamolère,40062,401,18.729,1.378,1.248,414,6317 -Villandraut,33547,1024,12.609,1.130,1.023,430,6376 -Clairac,47065,2634,33.898,1.853,1.678,489,6363 -Maillères,40170,241,15.091,1.237,1.120,424,6333 -Hostens,33202,1329,57.330,2.410,2.182,410,6379 -Bourran,47038,610,18.299,1.362,1.233,497,6361 -Trensacq,40319,248,79.398,2.836,2.568,398,6358 -Bugard,65110,86,5.464,0.744,0.674,482,6244 -Ygos-Saint-Saturnin,40333,1317,58.472,2.434,2.204,398,6326 -Cazalis,33115,238,47.021,2.183,1.977,430,6360 -Cère,40081,408,39.914,2.011,1.821,419,6325 -Saint-Symphorien,33484,1840,106.424,3.284,2.973,413,6372 -Le Sen,40297,219,50.927,2.272,2.057,423,6342 -Beauziac,47026,248,15.438,1.251,1.133,465,6365 -Canenx-et-Réaut,40064,160,28.630,1.703,1.542,420,6331 -Geloux,40111,714,52.146,2.299,2.082,412,6325 -Brocas,40056,792,53.291,2.324,2.104,416,6336 -Casteljaloux,47052,4625,30.747,1.765,1.598,467,6357 -Sarbazan,40288,1185,22.677,1.516,1.373,438,6332 -Captieux,33095,1275,120.030,3.487,3.157,443,6359 -Allons,47007,164,76.254,2.780,2.517,449,6352 -Pompéjac,33329,258,9.635,0.988,0.895,437,6370 -Retjons,40164,344,78.253,2.816,2.550,435,6350 -Noaillan,33307,1677,31.881,1.797,1.627,429,6379 -Arue,40014,347,48.806,2.224,2.014,427,6329 -Tombebœuf,47309,463,18.421,1.366,1.237,496,6388 -Louchats,33251,726,39.358,1.997,1.808,413,6386 -Léogeats,33237,802,19.649,1.411,1.278,428,6386 -Pouydesseaux,40234,924,33.965,1.855,1.680,433,6322 -Origne,33310,181,22.305,1.503,1.361,423,6387 -Bélis,40033,164,20.332,1.435,1.299,422,6338 -Luxey,40167,666,160.224,4.029,3.648,411,6354 -Sabres,40246,1178,162.083,4.052,3.669,394,6339 -Lencouacq,40149,388,98.191,3.154,2.856,431,6351 -Vert,40323,266,39.951,2.012,1.822,416,6336 -Argelouse,40008,89,22.818,1.521,1.377,410,6373 -Garein,40105,435,56.683,2.396,2.169,403,6334 -Lucbardez-et-Bargues,40162,571,21.645,1.481,1.341,428,6323 -Cachen,40058,225,35.798,1.904,1.724,425,6334 -Uzeste,33537,411,26.253,1.631,1.477,435,6372 -Saint-Léger-de-Balson,33429,343,38.013,1.963,1.777,429,6379 -Roquefort,40245,1891,12.143,1.109,1.004,437,6332 -Pindères,47205,213,41.079,2.040,1.847,464,6360 -Grignols,33195,1190,22.796,1.520,1.376,461,6374 -Beaupuy,47024,1660,8.214,0.912,0.826,475,6387 -Nicole,47196,230,4.751,0.694,0.628,488,6364 -Cocumont,47068,1095,25.538,1.609,1.457,462,6376 -Hure,33204,514,7.258,0.858,0.777,461,6388 -Monheurt,47177,195,11.381,1.074,0.972,485,6366 -Marmande,47157,17645,44.893,2.133,1.931,476,6379 -Romestaing,47224,168,15.577,1.256,1.137,463,6370 -Ruffiac,47227,167,13.025,1.149,1.040,465,6366 -Razimet,47220,314,7.308,0.860,0.779,477,6366 -Montpouillan,47191,789,12.128,1.109,1.004,471,6378 -Galapian,47107,320,9.388,0.975,0.883,493,6361 -Le Mas-d'Agenais,47159,1495,21.187,1.465,1.326,480,6371 -Bouglon,47034,609,14.065,1.194,1.081,468,6374 -Caumont-sur-Garonne,47061,702,11.675,1.088,0.985,475,6376 -Birac-sur-Trec,47028,851,14.354,1.206,1.092,485,6380 -Saint-Sardos,47276,293,14.462,1.210,1.096,500,6366 -Noaillac,33306,448,7.983,0.899,0.814,459,6386 -Sigalens,33512,380,18.321,1.362,1.233,460,6381 -Brugnac,47042,181,14.846,1.226,1.110,496,6374 -Sénestis,47298,210,11.292,1.070,0.969,478,6374 -Damazan,47078,1341,16.452,1.291,1.169,483,6357 -Sainte-Marthe,47253,592,9.660,0.989,0.895,471,6371 -Labretonie,47122,176,11.860,1.096,0.992,493,6383 -Sainte-Bazeille,47233,3138,20.843,1.453,1.316,471,6388 -Fauguerolles,47094,783,6.932,0.838,0.759,482,6374 -Varès,47316,666,16.834,1.306,1.182,492,6375 -Agmé,47002,104,5.011,0.713,0.646,490,6381 -La Réunion,47222,488,28.154,1.689,1.529,472,6356 -Montgaillard,40195,636,20.610,1.445,1.308,421,6303 -Saint-Léon,47251,318,9.586,0.986,0.893,478,6357 -Larrivière-Saint-Savin,40145,656,16.834,1.306,1.182,427,6302 -Saint-Martin-Curton,47254,307,41.575,2.052,1.858,455,6364 -Marcellus,47156,866,11.894,1.098,0.994,470,6380 -Taillebourg,47304,69,7.164,0.852,0.771,478,6375 -Réans,32340,286,12.298,1.116,1.010,462,6315 -Lagarrigue,47129,281,4.427,0.670,0.607,491,6357 -Villefranche-du-Queyran,47320,397,16.777,1.304,1.181,479,6364 -Villebramar,47319,100,10.079,1.011,0.915,499,6387 -Fauillet,47095,840,14.198,1.199,1.086,484,6371 -Mouterhouse,57489,309,42.374,2.072,1.876,1022,6881 -Lafitte-sur-Lot,47127,831,16.036,1.275,1.154,497,6368 -Le Mêle-sur-Sarthe,61258,709,0.622,0.251,0.227,504,6827 -Gaujac,47108,260,7.179,0.853,0.772,470,6382 -Tours-sur-Meymont,63434,516,18.068,1.353,1.225,742,6508 -Cours-les-Bains,33137,219,10.433,1.028,0.931,458,6367 -Villeton,47325,456,10.827,1.047,0.948,482,6365 -Poussignac,47212,268,13.126,1.153,1.044,466,6364 -Sainte-Gemme-Martaillac,47244,423,14.163,1.198,1.085,476,6366 -Saint-Pardoux-du-Breuil,47263,609,7.286,0.859,0.778,475,6378 -Antagnac,47010,238,9.372,0.974,0.882,459,6367 -Ploulec'h,22224,1662,9.815,0.997,0.903,225,6865 -Granges-sur-Lot,47111,595,4.212,0.653,0.591,497,6368 -Sainte-Christie-d'Armagnac,32369,383,22.841,1.521,1.377,459,6300 -Hautesvignes,47118,173,8.894,0.949,0.859,488,6379 -Calonges,47046,639,16.062,1.276,1.155,481,6366 -Longueville,47150,364,4.802,0.698,0.632,480,6378 -Grézet-Cavagnan,47114,380,12.655,1.132,1.025,473,6370 -Fourques-sur-Garonne,47101,1308,13.950,1.189,1.077,476,6379 -Laparade,47135,376,16.216,1.282,1.161,497,6368 -Labastide-Castel-Amouroux,47121,307,12.009,1.103,0.999,473,6365 -Anzex,47012,312,23.373,1.539,1.393,476,6362 -Lagruère,47130,347,9.963,1.005,0.910,480,6370 -Meilhan-sur-Garonne,47165,1333,28.708,1.705,1.544,463,6387 -Tourtrès,47313,136,11.746,1.091,0.988,494,6381 -Saint-Sever,40282,4958,46.844,2.179,1.973,417,6306 -Lagrange,40140,197,21.228,1.467,1.328,456,6325 -Bordères-et-Lamensans,40049,360,14.998,1.233,1.116,427,6302 -Toulouzette,40318,320,11.673,1.088,0.985,407,6301 -Grenade-sur-l'Adour,40117,2517,19.863,1.419,1.285,426,6303 -Saint-Maurice-sur-Adour,40275,580,9.565,0.984,0.891,421,6307 -Ayzieu,32025,159,13.848,1.185,1.073,458,6313 -Bas-Mauco,40026,362,11.502,1.080,0.978,412,6307 -Aurice,40020,613,17.520,1.332,1.206,408,6309 -Cauna,40076,444,12.845,1.141,1.033,404,6303 -Castandet,40070,396,16.808,1.305,1.182,427,6306 -Le Vignau,40329,498,11.069,1.059,0.959,438,6304 -Lamothe,40143,318,12.687,1.134,1.027,408,6307 -Saint-Magne,33436,953,83.006,2.900,2.626,410,6397 -Castelnau d'Auzan Labarrère,32079,1256,57.118,2.406,2.178,470,6320 -Vielle-Soubiran,40327,237,32.942,1.827,1.654,449,6336 -Marguestau,32236,74,3.224,0.572,0.518,455,6313 -Lias-d'Armagnac,32211,197,12.023,1.104,1.000,454,6315 -Manciet,32227,804,42.592,2.077,1.881,460,6307 -Gabarret,40102,1293,16.953,1.311,1.187,459,6323 -Larée,32193,231,12.995,1.147,1.039,452,6318 -Boussès,47039,38,47.285,2.189,1.982,463,6341 -Arx,40015,66,24.351,1.571,1.422,463,6341 -Créon-d'Armagnac,40087,361,21.392,1.472,1.333,450,6328 -Losse,40158,272,103.011,3.231,2.925,450,6344 -Magnan,32222,243,11.413,1.075,0.973,447,6300 -Estigarde,40096,130,29.417,1.726,1.563,447,6329 -Salles-d'Armagnac,32408,127,6.215,0.794,0.719,456,6308 -Bazas,33036,4747,37.516,1.950,1.766,448,6380 -Bourriot-Bergonce,40053,317,82.944,2.899,2.625,448,6344 -Panjas,32305,396,19.953,1.422,1.287,451,6306 -Espas,32125,122,15.309,1.245,1.127,466,6300 -Baudignan,40030,55,23.576,1.546,1.400,462,6340 -Nogaro,32296,1997,11.233,1.067,0.966,459,6300 -Cravencères,32113,92,9.181,0.964,0.873,462,6303 -Eauze,32119,3894,70.246,2.668,2.416,462,6310 -Bourrouillan,32062,154,8.690,0.938,0.849,456,6308 -Saint-Julien-d'Armagnac,40265,107,14.810,1.225,1.109,447,6329 -Pompogne,47208,215,36.238,1.916,1.735,466,6357 -Monclar,32264,183,10.120,1.013,0.917,448,6320 -Campagne-d'Armagnac,32073,228,5.523,0.748,0.677,459,6313 -Cazaubon,32096,1648,56.008,2.382,2.157,456,6315 -Le Beulay,88057,99,2.404,0.494,0.447,1000,6808 -Lubbon,40161,109,48.181,2.209,2.000,460,6344 -Maillas,40169,136,63.358,2.534,2.294,442,6350 -Aillas,33002,817,35.131,1.887,1.709,460,6381 -Coimères,33130,1033,12.910,1.144,1.036,445,6386 -Léchelle,62494,50,3.720,0.614,0.556,697,6995 -Roaillan,33357,1667,11.501,1.079,0.977,437,6384 -Gans,33180,188,7.069,0.846,0.766,449,6379 -Lavazan,33235,236,8.932,0.951,0.861,454,6373 -Chambéry,73065,59183,21.195,1.465,1.326,929,6504 -Goualade,33190,97,17.059,1.315,1.191,453,6365 -La Couvertoirade,12082,186,62.962,2.526,2.287,721,6310 -Savignac,33508,637,17.042,1.314,1.190,453,6382 -Saint-Beaulize,12212,94,20.092,1.427,1.292,707,6310 -Labescau,33212,111,6.017,0.781,0.707,453,6378 -Les Rives,34230,143,23.959,1.558,1.411,720,6303 -Marions,33271,199,16.308,1.285,1.163,454,6365 -Lerm-et-Musset,33239,487,36.908,1.934,1.751,444,6366 -Brannens,33072,237,6.065,0.784,0.710,447,6386 -Marimbault,33270,188,6.777,0.829,0.751,443,6373 -Cudos,33144,814,34.832,1.879,1.701,442,6373 -Casseuil,33102,401,6.390,0.805,0.729,453,6392 -Masseilles,33276,148,6.742,0.827,0.749,456,6369 -Le Nizan,33305,508,15.240,1.243,1.125,437,6382 -Brouqueyran,33074,197,5.692,0.759,0.687,449,6380 -Blandas,30040,140,37.651,1.953,1.768,745,6313 -Lados,33216,176,6.486,0.811,0.734,453,6378 -Gajac,33178,387,12.273,1.115,1.010,453,6377 -Cazats,33116,419,7.493,0.871,0.789,446,6382 -Saint-Michel-de-Castelnau,33450,230,42.756,2.081,1.884,456,6357 -Sendets,33511,336,8.385,0.922,0.835,452,6374 -Marnhagues-et-Latour,12139,133,21.946,1.491,1.350,705,6306 -Auros,33021,1017,15.293,1.245,1.127,447,6387 -Berthez,33048,266,5.994,0.779,0.705,452,6382 -Saint-Martial,30283,177,17.261,1.322,1.197,763,6327 -Cauvignac,33113,167,5.543,0.749,0.678,454,6373 -Saint-Loubert,33432,229,2.106,0.462,0.418,448,6388 -Sillas,33513,119,7.663,0.881,0.798,458,6368 -Rue,80688,3106,29.330,1.724,1.561,601,7022 -Sauviac,33507,321,11.351,1.072,0.971,445,6374 -Saint-Côme,33391,319,6.026,0.781,0.707,448,6376 -Sablières,7202,160,38.369,1.972,1.785,788,6380 -Mazères,33279,760,13.168,1.155,1.046,443,6385 -Birac,33053,229,10.252,1.019,0.923,449,6375 -Perchède,32310,110,5.295,0.732,0.663,449,6303 -Cercoux,17077,1177,42.051,2.064,1.869,445,6451 -Cazères-sur-l'Adour,40080,1048,30.509,1.758,1.592,433,6307 -Vialas,48194,434,49.432,2.238,2.026,773,6364 -Lussagnet,40166,72,8.459,0.926,0.838,441,6304 -Virelade,33552,1050,13.731,1.180,1.068,433,6403 -Mormès,32291,120,9.177,0.964,0.873,445,6305 -Saint-Martin-de-Coux,17366,457,15.718,1.262,1.143,455,6451 -Saint-Félix-de-Foncaude,33399,292,10.322,1.023,0.926,452,6401 -Preignac,33337,2150,13.187,1.156,1.047,437,6388 -Chamadelle,33124,727,15.370,1.248,1.130,455,6451 -Sainte-Croix-du-Mont,33392,901,9.029,0.956,0.866,438,6395 -La Bastide-Puylaurent,48021,156,23.931,1.557,1.410,773,6386 -Saint-Laurent-du-Bois,33427,254,7.414,0.867,0.785,450,6398 -Pujols-sur-Ciron,33343,789,7.538,0.874,0.791,432,6390 -Semens,33510,198,3.655,0.609,0.551,444,6394 -Loupiac,33253,1114,9.612,0.987,0.894,439,6395 -Bommes,33060,490,5.810,0.767,0.694,436,6389 -Badaroux,48013,963,20.664,1.447,1.310,746,6380 -Saint-Pardon-de-Conques,33457,576,6.693,0.823,0.745,445,6390 -Sénéchas,30316,249,14.714,1.221,1.106,783,6358 -Barsac,33030,2059,14.555,1.214,1.099,437,6398 -Chambonas,7050,879,12.179,1.111,1.006,788,6369 -Cadillac,33081,2775,5.438,0.742,0.672,437,6398 -Puisseguin,33342,873,17.424,1.329,1.203,457,6428 -Gabarnac,33176,361,5.357,0.737,0.667,439,6395 -Saint-Laurent-du-Plan,33428,96,2.417,0.495,0.448,454,6396 -Gironde-sur-Dropt,33187,1229,8.843,0.947,0.857,455,6391 -Pondaurat,33331,473,8.744,0.941,0.852,457,6385 -Fargues,33164,1622,15.456,1.251,1.133,441,6387 -Illats,33205,1421,29.252,1.722,1.559,434,6393 -Saint-Pierre-de-Mons,33465,1184,9.080,0.959,0.868,445,6386 -Sainte-Foy-la-Longue,33403,121,9.345,0.973,0.881,453,6394 -Saint-André-de-Valborgne,30231,396,48.925,2.226,2.015,760,6337 -Caudrot,33111,1211,6.137,0.789,0.714,451,6391 -Revens,30213,22,13.996,1.191,1.078,721,6333 -Barie,33027,299,5.263,0.730,0.661,451,6391 -Bassanne,33031,120,2.520,0.505,0.457,455,6390 -Saint-Germain-de-Grave,33411,160,6.148,0.789,0.714,446,6397 -Saint-André-du-Bois,33367,432,9.983,1.006,0.911,444,6394 -Saint-Morillon,33454,1665,20.450,1.439,1.303,423,6398 -Sauternes,33504,783,11.291,1.070,0.969,436,6389 -Saint-Exupéry,33398,165,4.233,0.655,0.593,453,6398 -Lachapelle,47126,76,4.583,0.681,0.617,484,6390 -Verdelais,33543,1034,4.754,0.694,0.628,440,6392 -Saint-Martin-de-Sescas,33444,603,8.286,0.916,0.829,449,6395 -Bieujac,33050,574,6.999,0.842,0.762,447,6386 -Cérons,33120,2092,5.857,0.770,0.697,436,6399 -Puybarban,33346,418,5.584,0.752,0.681,457,6386 -Castets et Castillon,33106,1457,13.019,1.149,1.040,452,6387 -Donzac,33152,120,4.394,0.667,0.604,440,6401 -Miramont-de-Guyenne,47168,3189,16.857,1.307,1.183,489,6393 -Le Pian-sur-Garonne,33323,837,6.399,0.805,0.729,445,6390 -La Sauvetat-du-Dropt,47290,539,10.298,1.021,0.924,486,6399 -Mourens,33299,385,10.718,1.042,0.943,446,6401 -Éméville,60207,287,1.846,0.432,0.391,701,6909 -Saint-Martin-de-Lerm,33443,138,7.026,0.844,0.764,460,6400 -Saint-Martial,33440,244,7.488,0.871,0.789,449,6399 -Monteton,47187,328,13.889,1.186,1.074,484,6397 -Les Esseintes,33158,237,5.090,0.718,0.650,456,6396 -Seyches,47301,1047,24.905,1.589,1.439,487,6386 -Morizès,33294,545,5.874,0.771,0.698,453,6396 -Saint-Colomb-de-Lauzun,47235,480,23.326,1.537,1.392,497,6394 -Saint-Maixant,33438,1894,7.482,0.871,0.789,442,6390 -Larressingle,32194,215,8.510,0.929,0.841,486,6317 -Saint-Pierre-sur-Dropt,47271,325,8.240,0.914,0.828,481,6397 -Coutures,33139,98,3.387,0.586,0.531,464,6398 -Sainte-Gemme,33404,194,9.559,0.984,0.891,469,6397 -Monségur,33289,1542,9.929,1.003,0.908,471,6398 -Montignac-Toupinerie,47189,150,8.341,0.919,0.832,492,6388 -Allemans-du-Dropt,47005,496,6.444,0.808,0.732,484,6394 -Saint-Michel-de-Lapujade,33453,224,7.476,0.870,0.788,471,6392 -Puysserampion,47218,258,10.821,1.047,0.948,486,6392 -Loubens,33250,301,5.912,0.774,0.701,459,6395 -Lamothe-Landerron,33221,1204,9.187,0.965,0.874,467,6388 -Saint-Avit,47231,167,9.044,0.957,0.866,482,6391 -Mongauzy,33287,598,6.841,0.833,0.754,464,6392 -Escassefort,47088,591,14.034,1.192,1.079,479,6386 -Laperche,47136,127,8.437,0.925,0.838,494,6389 -Saint-Sève,33479,254,4.844,0.701,0.635,459,6394 -Montagoudin,33291,184,3.363,0.584,0.529,462,6390 -Saint-Puy,32404,596,36.633,1.927,1.745,500,6311 -Saint-Vivien-de-Monségur,33491,358,15.843,1.267,1.147,471,6393 -Maignaut-Tauzia,32224,273,11.237,1.067,0.966,492,6311 -Peyrière,47204,283,8.171,0.910,0.824,484,6390 -Cambes,47047,178,9.247,0.968,0.876,486,6392 -Roquebrune,33359,274,6.611,0.818,0.741,462,6397 -Saint-Martin-Petit,47257,565,6.400,0.805,0.729,468,6392 -Landerrouet-sur-Ségur,33224,97,3.131,0.563,0.510,460,6397 -Lagupie,47131,737,8.716,0.940,0.851,471,6393 -Bourdelles,33066,94,7.209,0.855,0.774,464,6388 -Dému,32115,342,28.834,1.709,1.547,475,6300 -Neuffons,33304,155,4.691,0.689,0.624,464,6400 -Moustier,47194,329,8.335,0.919,0.832,487,6396 -Castelnau-sur-Gupie,47056,888,15.382,1.248,1.130,471,6393 -Mesterrieux,33283,219,3.570,0.601,0.544,462,6398 -Zoza,2A363,54,5.002,0.712,0.645,1204,6087 -Bourgougnague,47035,316,11.761,1.092,0.989,495,6397 -Saint-Géraud,47245,91,5.733,0.762,0.690,476,6394 -Carbini,2A061,99,16.494,1.293,1.171,1214,6082 -Saint-Sulpice-de-Guilleragues,33481,227,6.929,0.838,0.759,468,6397 -Saint-Hilaire-de-la-Noaille,33418,381,11.446,1.077,0.975,465,6394 -Armillac,47014,195,7.848,0.892,0.808,491,6386 -Fontet,33170,794,7.882,0.894,0.809,460,6386 -Fossès-et-Baleyssac,33171,220,9.477,0.980,0.887,464,6392 -Bonas,32059,130,10.150,1.014,0.918,490,6303 -Mourède,32294,91,4.946,0.708,0.641,481,6305 -Mas-d'Auvignon,32241,173,13.748,1.180,1.068,495,6315 -Ayguetinte,32024,161,6.314,0.800,0.724,493,6306 -Lannepax,32190,488,31.105,1.775,1.607,474,6303 -Serra-di-Scopamène,2A278,95,20.479,1.440,1.304,1212,6103 -Caussens,32095,623,13.395,1.165,1.055,497,6320 -Roques,32351,101,8.537,0.930,0.842,485,6306 -Bascous,32031,173,10.294,1.021,0.924,469,6302 -Lauraët,32203,254,12.742,1.136,1.029,477,6318 -Cassaigne,32075,220,8.604,0.934,0.846,485,6317 -Saint-Sébastien-d'Aigrefeuille,30298,512,16.197,1.281,1.160,777,6338 -Cézan,32102,222,12.346,1.118,1.012,501,6303 -Montréal,32290,1171,63.389,2.534,2.294,475,6328 -Marambat,32231,450,9.795,0.996,0.902,487,6301 -Noulens,32299,105,5.803,0.767,0.694,471,6306 -Lagardère,32178,76,5.046,0.715,0.647,484,6310 -Abancourt,60001,648,5.928,0.775,0.702,610,6954 -Blaziert,32057,136,10.991,1.055,0.955,497,6320 -Sazilly,37244,239,10.648,1.039,0.941,500,6674 -Valence-sur-Baïse,32459,1133,27.526,1.670,1.512,489,6315 -Courrensan,32110,406,25.463,1.606,1.454,473,6309 -Gondrin,32149,1177,34.907,1.881,1.703,484,6311 -Lanuéjols,30139,358,62.751,2.522,2.283,735,6333 -Justian,32166,117,6.315,0.800,0.724,484,6304 -Saint-Paul-de-Baïse,32402,101,10.111,1.012,0.916,487,6302 -Mansencôme,32230,45,4.060,0.641,0.580,485,6313 -Bezolles,32052,140,11.068,1.059,0.959,485,6306 -Saint-Orens-Pouy-Petit,32400,180,11.372,1.073,0.972,496,6315 -Beaucaire,32035,267,15.986,1.273,1.153,486,6309 -Valflaunès,34322,759,21.224,1.466,1.327,772,6300 -Loreto-di-Tallano,2A146,52,6.949,0.839,0.760,1204,6087 -Monacia-d'Aullène,2A163,521,39.789,2.008,1.818,1197,6062 -Zérubia,2A357,40,13.433,1.167,1.057,1203,6091 -Altagène,2A011,46,4.768,0.695,0.629,1208,6088 -Saint-Roman-de-Codières,30296,160,18.655,1.375,1.245,764,6322 -Levie,2A142,708,85.583,2.945,2.666,1208,6090 -Lecci,2A139,1726,27.096,1.657,1.500,1221,6085 -Rivarennes,37200,1016,18.869,1.383,1.252,503,6689 -Cargiaca,2A066,54,7.961,0.898,0.813,1204,6087 -Santa-Maria-Figaniella,2A310,93,13.036,1.149,1.040,1202,6091 -San-Gavino-di-Carbini,2A300,1105,47.725,2.199,1.991,1211,6091 -Domessargues,30104,758,7.525,0.873,0.790,792,6320 -Argiusta-Moriccio,2A021,76,10.236,1.018,0.922,1199,6100 -Mela,2A158,29,4.615,0.684,0.619,1208,6087 -Conca,2A092,1117,78.024,2.812,2.546,1219,6095 -Portes-en-Valdaine,26251,397,15.294,1.245,1.127,850,6385 -Quenza,2A254,185,95.824,3.116,2.821,1218,6104 -Sorbollano,2A285,78,7.810,0.890,0.806,1210,6091 -Saint-Jean-de-Crieulon,30265,248,5.730,0.762,0.690,780,6317 -Saint-Mamert-du-Gard,30281,1624,14.369,1.207,1.093,792,6311 -Conqueyrac,30093,102,27.616,1.673,1.515,774,6319 -Boucoiran-et-Nozières,30046,921,14.498,1.212,1.097,797,6323 -Logrian-Florian,30150,264,8.745,0.941,0.852,784,6318 -Bragassargues,30050,177,7.636,0.880,0.797,785,6313 -Vézénobres,30348,1771,17.088,1.316,1.192,788,6329 -Euzet,30109,428,6.856,0.833,0.754,798,6330 -Moussac,30184,1460,7.557,0.875,0.792,801,6321 -Maruéjols-lès-Gardon,30160,234,3.768,0.618,0.560,792,6323 -Claret,34078,1509,28.586,1.702,1.541,767,6308 -Montagnac,30354,216,8.744,0.941,0.852,794,6315 -Massillargues-Attuech,30162,659,6.298,0.799,0.723,782,6323 -Cardet,30068,866,8.265,0.915,0.828,789,6325 -Saint-Bauzély,30233,612,5.038,0.714,0.646,794,6314 -Cendras,30077,1844,13.012,1.148,1.039,785,6338 -Aigremont,30002,778,12.572,1.129,1.022,792,6319 -Bagard,30027,2591,14.476,1.211,1.096,786,6330 -Vivy,49378,2589,23.507,1.543,1.397,471,6692 -Saint-Jean-du-Pin,30270,1511,13.976,1.190,1.077,782,6333 -Ribaute-les-Tavernes,30214,2165,14.202,1.200,1.086,790,6326 -Générargues,30129,704,10.629,1.038,0.940,781,6334 -Saint-Jean-de-Ceyrargues,30264,160,6.746,0.827,0.749,800,6330 -Cizay-la-Madeleine,49100,471,19.351,1.400,1.268,461,6679 -Mauressargues,30163,150,5.712,0.761,0.689,792,6318 -Alès,30007,39970,23.277,1.536,1.391,784,6338 -Lézan,30147,1547,9.378,0.975,0.883,784,6322 -Savignargues,30314,241,2.763,0.529,0.479,786,6320 -Saint-Hilaire-de-Brethmas,30259,4273,13.972,1.190,1.077,788,6334 -Saint-Théodorit,30300,522,8.567,0.932,0.844,788,6317 -Fraissinet-de-Fourques,48065,74,24.321,1.570,1.422,740,6346 -Montmirat,30181,425,9.584,0.985,0.892,792,6312 -Sauzet,30313,744,6.881,0.835,0.756,797,6320 -Molezon,48098,93,14.854,1.227,1.111,757,6349 -La Rouvière,30224,596,7.934,0.897,0.812,798,6315 -Saint-Étienne-de-l'Olm,30250,374,4.190,0.652,0.590,796,6329 -Saint-Bénézet,30234,269,6.395,0.805,0.729,789,6324 -Deaux,30101,658,5.919,0.774,0.701,792,6332 -Varennes-sur-Loire,49361,1829,23.553,1.545,1.399,475,6686 -Moulézan,30183,633,11.317,1.071,0.970,788,6317 -Fons,30112,1453,9.373,0.975,0.883,796,6311 -Malbosc,7148,145,21.692,1.483,1.343,788,6360 -Gajan,30122,669,11.003,1.056,0.956,800,6311 -Clarensac,30082,4293,14.677,1.219,1.104,800,6307 -Souvignargues,30324,861,11.182,1.064,0.963,791,6305 -Aujargues,30023,876,6.901,0.836,0.757,792,6301 -Carnas,30069,467,15.802,1.265,1.145,779,6305 -Garrigues,34112,174,4.934,0.707,0.640,781,6302 -Parignargues,30193,635,10.991,1.055,0.955,799,6309 -Beaumont-en-Véron,37022,2699,19.037,1.389,1.258,485,6683 -Lecques,30144,474,5.231,0.728,0.659,784,6304 -Saint-Nicolas-de-Bourgueil,37228,1112,36.422,1.921,1.739,480,6690 -Saint-Côme-et-Maruéjols,30245,770,13.086,1.151,1.042,797,6302 -Aspères,30018,518,10.011,1.007,0.912,783,6301 -Saint-Dionisy,30249,1021,3.430,0.590,0.534,797,6302 -Viennay,79347,1095,15.861,1.268,1.148,453,6629 -Montpezat,30182,1158,12.045,1.105,1.000,793,6304 -Villevieille,30352,1711,8.351,0.920,0.833,791,6298 -Salinelles,30306,582,8.870,0.948,0.858,784,6304 -Saint-Clément,30244,389,4.918,0.706,0.639,781,6303 -Saint-Remy-sous-Barbuise,10361,230,15.670,1.260,1.141,787,6822 -Vic-le-Fesq,30349,510,9.582,0.985,0.892,787,6307 -Bussac-Forêt,17074,1023,35.179,1.888,1.709,434,6455 -Sardan,30309,282,6.324,0.800,0.724,782,6308 -Laveyrune,7136,111,13.521,1.170,1.059,772,6390 -Lanuéjols,48081,314,33.542,1.844,1.670,749,6379 -Pont de Montvert - Sud Mont Lozère,48116,594,167.392,4.118,3.728,771,6366 -Val de Virvée,33018,3490,20.784,1.451,1.314,435,6439 -Châteauneuf-de-Randon,48043,561,24.614,1.579,1.430,753,6391 -Saint-Mariens,33439,1601,12.049,1.105,1.000,434,6455 -Les Vans,7334,2679,31.189,1.778,1.610,792,6369 -Tréglonou,29290,650,6.110,0.787,0.713,144,6852 -Prévenchères,48119,256,61.603,2.498,2.262,772,6377 -Cans et Cévennes,48166,280,43.759,2.106,1.907,759,6358 -Tréflez,29287,944,15.926,1.270,1.150,165,6860 -Vebron,48193,199,69.928,2.662,2.410,740,6346 -Mende,48095,11860,36.920,1.934,1.751,734,6380 -Gravières,7100,461,18.802,1.380,1.249,785,6368 -Saint-Paul-le-Jeune,7280,983,14.589,1.216,1.101,790,6360 -Florac Trois Rivières,48061,2069,47.751,2.200,1.992,749,6359 -Gatuzières,48069,58,29.578,1.731,1.567,744,6341 -Montselgues,7163,84,36.388,1.920,1.738,776,6384 -La Souche,7315,368,31.882,1.797,1.627,795,6395 -Laubert,48082,99,14.276,1.203,1.089,751,6387 -Arzenc-de-Randon,48008,207,69.711,2.658,2.407,753,6400 -Saint-Mélany,7275,117,10.625,1.038,0.940,791,6381 -Cubières,48053,171,48.730,2.222,2.012,762,6370 -Chastel-Nouvel,48042,858,31.254,1.780,1.612,742,6383 -Saint-Bauzile,48137,624,29.451,1.727,1.564,740,6371 -Gagnières,30120,1156,11.228,1.067,0.966,788,6360 -Sainte-Hélène,48157,98,6.689,0.823,0.745,748,6382 -Saint-Frézal-d'Albuges,48151,69,17.354,1.326,1.201,761,6390 -Barre-des-Cévennes,48019,205,34.501,1.870,1.693,750,6350 -Saint-Martin-d'Ary,17365,475,8.668,0.937,0.848,448,6461 -Cassagnas,48036,120,35.727,1.903,1.723,755,6354 -Beaulieu-sous-Parthenay,79029,675,26.881,1.650,1.494,453,6611 -Pied-de-Borne,48015,190,27.563,1.671,1.513,775,6373 -Malarce-sur-la-Thines,7147,245,37.838,1.958,1.773,781,6373 -Malons-et-Elze,30153,123,31.153,1.777,1.609,783,6372 -Les Salelles,7305,363,5.678,0.758,0.686,789,6372 -Mont Lozère et Goulet,48027,1033,167.175,4.116,3.727,761,6384 -Bonnevaux,30044,89,8.901,0.950,0.860,783,6366 -Chaudeyrac,48045,314,44.558,2.125,1.924,762,6390 -Beaumont,7029,240,19.251,1.397,1.265,795,6383 -Borne,7038,50,32.190,1.806,1.635,784,6390 -Les Bondons,48028,143,45.904,2.157,1.953,747,6369 -Cubiérettes,48054,53,11.927,1.099,0.995,764,6369 -Montbel,48100,112,23.583,1.546,1.400,753,6387 -Saint-André-Capcèze,48135,181,9.766,0.995,0.901,777,6370 -Meyrueis,48096,833,104.539,3.255,2.947,746,6336 -Saint-Jean-et-Saint-Paul,12232,277,37.992,1.962,1.776,699,6317 -Villefort,48198,549,8.099,0.906,0.820,774,6374 -Saint-Marc-la-Lande,79271,360,10.332,1.023,0.926,443,6610 -Viala-du-Pas-de-Jaux,12295,98,18.988,1.387,1.256,708,6319 -Tournemire,12282,424,8.923,0.951,0.861,703,6317 -Roquedur,30220,254,11.016,1.056,0.956,754,6322 -Ganges,34111,3987,7.213,0.855,0.774,756,6318 -Neuvy-Bouin,79190,508,25.545,1.609,1.457,435,6629 -Saint-Bresson,30238,54,8.545,0.930,0.842,754,6318 -Molières-Cavaillac,30170,944,7.662,0.881,0.798,748,6318 -Montdardier,30176,204,35.430,1.895,1.716,745,6313 -La Chapelle-Saint-Laurent,79076,1986,28.854,1.710,1.548,438,6629 -Saint-Julien-de-la-Nef,30272,140,8.962,0.953,0.863,755,6316 -Saint-Laurent-le-Minier,30280,342,13.270,1.160,1.050,753,6313 -Le Vigan,30350,3854,17.246,1.322,1.197,747,6321 -Saint-André-de-Buèges,34238,40,15.380,1.248,1.130,753,6309 -Pommiers,30199,57,6.460,0.809,0.732,748,6318 -L'Hospitalet-du-Larzac,12115,280,12.369,1.119,1.013,717,6317 -Cazilhac,34067,1508,11.823,1.094,0.991,758,6313 -Troyon,55521,266,13.096,1.152,1.043,880,6881 -Aulas,30024,487,2.932,0.545,0.493,747,6321 -Arre,30016,284,7.238,0.856,0.775,740,6320 -Azay-sur-Thouet,79025,1155,20.448,1.439,1.303,445,6620 -Cornus,12077,519,93.346,3.075,2.784,717,6317 -La Ferrière-en-Parthenay,79120,804,29.392,1.726,1.563,468,6623 -Avèze,30026,1067,4.118,0.646,0.585,747,6321 -Vernoux-en-Gâtine,79342,568,31.572,1.789,1.620,435,6623 -Le Caylar,34064,445,22.457,1.508,1.365,728,6306 -Nant,12168,984,109.331,3.328,3.013,727,6331 -Colognac,30087,209,12.400,1.121,1.015,763,6327 -Dourbies,30105,150,61.148,2.489,2.254,739,6326 -Pamplie,79200,277,12.255,1.114,1.009,438,6607 -Mandagout,30154,402,15.088,1.236,1.119,749,6323 -Maisontiers,79165,160,18.483,1.368,1.239,447,6637 -Peyrolles,30195,35,8.300,0.917,0.830,765,6337 -L'Estréchure,30108,163,19.454,1.404,1.271,766,6333 -Causse-Bégon,30074,19,7.792,0.889,0.805,728,6328 -Saint-Bonnet-de-Salendrinque,30236,117,3.593,0.603,0.546,771,6327 -Aumessas,30025,230,21.281,1.468,1.329,741,6320 -Saint-Félix-de-Pallières,30252,249,18.894,1.384,1.253,775,6327 -Boussais,79047,456,20.100,1.427,1.292,450,6641 -Saint-André-de-Majencoules,30229,601,22.028,1.494,1.353,757,6325 -Sainte-Croix-de-Caderle,30246,113,7.710,0.884,0.800,772,6331 -Saumane,30310,270,12.267,1.115,1.010,762,6338 -Blaison-Saint-Sulpice,49029,1228,24.162,1.565,1.417,442,6707 -Pégairolles-de-Buèges,34195,46,13.219,1.157,1.048,746,6299 -Romiguières,34231,25,3.466,0.593,0.537,718,6302 -Lauret,34131,595,6.617,0.819,0.742,769,6304 -Agonès,34005,257,4.219,0.654,0.592,758,6309 -Notre-Dame-de-Londres,34185,480,28.272,1.692,1.532,764,6306 -Saint-Bauzille-de-Putois,34243,1965,18.246,1.360,1.231,763,6310 -Sauteyrargues,34297,405,12.786,1.138,1.030,775,6306 -Ferrières-les-Verreries,34099,52,17.389,1.327,1.201,764,6311 -Cros,30099,253,16.773,1.304,1.181,767,6324 -Fontanès,34102,344,8.250,0.914,0.828,776,6301 -Eclose-Badinières,38152,1404,16.271,1.284,1.163,882,6489 -Montoulieu,34171,161,16.182,1.280,1.159,766,6316 -Beire-le-Châtel,21056,849,19.339,1.400,1.268,867,6709 -Moulès-et-Baucels,34174,883,22.875,1.522,1.378,758,6318 -Laroque,34128,1628,6.682,0.823,0.745,761,6314 -Chanteloup,79069,1009,20.737,1.450,1.313,436,6634 -Pompignan,30200,944,41.314,2.046,1.852,774,6310 -Thizay,37258,282,6.836,0.832,0.753,484,6676 -Adilly,79002,302,12.986,1.147,1.039,448,6627 -Villebernier,49374,1540,10.097,1.011,0.915,474,6690 -Les Ulmes,49359,581,8.180,0.910,0.824,459,6687 -Saint-Just-sur-Dive,49291,396,7.264,0.858,0.777,467,6681 -Distré,49123,1673,14.938,1.230,1.114,467,6685 -Courchamps,49113,497,7.006,0.843,0.763,461,6684 -Neuillé,49224,991,13.935,1.188,1.076,475,6699 -Couziers,37088,118,12.043,1.105,1.000,479,6676 -Varrains,49362,1224,3.479,0.594,0.538,466,6685 -Savigny-en-Véron,37242,1535,21.217,1.466,1.327,485,6686 -Lerné,37126,298,16.442,1.291,1.169,479,6673 -Rou-Marson,49262,664,12.897,1.143,1.035,461,6685 -Saint-Clément-des-Levées,49272,1118,10.463,1.030,0.933,459,6702 -Avoine,37011,1736,12.496,1.125,1.019,490,6684 -Cinais,37076,423,8.818,0.945,0.856,487,6675 -Bérou-la-Mulotière,28037,338,13.212,1.157,1.048,556,6850 -Saint-Germain-sur-Vienne,37220,381,13.411,1.166,1.056,481,6678 -Brossay,49053,371,4.839,0.700,0.634,458,6678 -Feugères,50181,340,8.306,0.917,0.830,383,6901 -Turquant,49358,585,7.918,0.896,0.811,475,6686 -La Breille-les-Pins,49045,599,27.900,1.681,1.522,478,6701 -Artannes-sur-Thouet,49011,426,6.703,0.824,0.746,467,6681 -Richelieu,37196,1755,4.998,0.712,0.645,496,6662 -Fontevraud-l'Abbaye,49140,1532,15.024,1.234,1.117,474,6679 -Étrépilly,2297,114,5.266,0.730,0.661,725,6886 -Candes-Saint-Martin,37042,212,5.755,0.764,0.692,478,6681 -Vieux-Port,27686,46,0.576,0.242,0.219,526,6928 -Parnay,49235,435,6.732,0.826,0.748,473,6687 -Coteaux-sur-Loire,37232,1918,44.328,2.119,1.919,495,6696 -Montsoreau,49219,441,5.347,0.736,0.666,479,6684 -Souzay-Champigny,49341,760,9.142,0.962,0.871,472,6682 -Verrie,49370,478,17.110,1.317,1.192,457,6690 -Saint-Germain-de-Longue-Chaume,79255,404,14.743,1.222,1.106,442,6631 -Largeasse,79147,741,30.411,1.755,1.589,435,6629 -Fomperron,79121,427,17.650,1.337,1.211,464,6601 -Chiché,79088,1690,47.547,2.195,1.987,447,6637 -Iteuil,86113,2930,21.998,1.493,1.352,489,6604 -Boismé,79038,1202,35.550,1.898,1.718,439,6640 -Le Retail,79226,279,14.356,1.206,1.092,438,6616 -Smarves,86263,2775,20.512,1.442,1.306,496,6608 -Pressigny,79218,182,12.039,1.104,1.000,464,6635 -Ménigoute,79176,860,19.243,1.396,1.264,467,6604 -Oroux,79197,98,6.663,0.822,0.744,462,6626 -Villard-sur-Doron,73317,712,22.174,1.499,1.357,971,6521 -Le Chillou,79089,170,5.166,0.723,0.655,464,6635 -Lhoumois,79149,153,9.855,0.999,0.905,460,6627 -Aubigny,79019,172,11.988,1.102,0.998,462,6630 -Fenioux,79119,654,34.032,1.857,1.681,435,6608 -La Chapelle-Bertrand,79071,483,19.477,1.405,1.272,454,6616 -Les Groseillers,79139,57,4.505,0.676,0.612,439,6611 -Saurais,79306,194,11.660,1.087,0.984,459,6617 -Saint-Aubin-le-Cloud,79239,1773,42.123,2.066,1.871,441,6625 -Doux,79108,226,9.876,1.000,0.905,474,6630 -Reffannes,79225,361,8.559,0.931,0.843,457,6611 -Faye-l'Abbesse,79116,1042,23.299,1.536,1.391,451,6643 -Assais-les-Jumeaux,79016,781,53.237,2.323,2.103,468,6640 -La Boissière-en-Gâtine,79040,251,11.136,1.062,0.962,439,6611 -Amailloux,79008,829,37.088,1.939,1.756,442,6634 -Thénezay,79326,1403,48.439,2.215,2.005,471,6629 -Ouzilly,86184,919,10.633,1.038,0.940,497,6633 -Massognes,86150,297,13.745,1.180,1.068,474,6630 -Chalandray,86050,834,25.176,1.597,1.446,465,6618 -Neuville-de-Poitou,86177,5340,17.041,1.314,1.190,492,6624 -Amberre,86002,573,15.854,1.267,1.147,480,6631 -Biard,86027,1756,7.491,0.871,0.789,493,6611 -Exireuil,79114,1585,21.098,1.462,1.324,456,6604 -Maisonneuve,86144,338,9.196,0.965,0.874,473,6630 -Frozes,86102,554,8.738,0.941,0.852,482,6624 -Champigny en Rochereau,86053,1916,33.356,1.838,1.664,480,6624 -Cissé,86076,2763,17.316,1.325,1.200,490,6617 -Buxerolles,86041,10008,9.124,0.961,0.870,498,6616 -Gouffern en Auge,61474,3744,167.148,4.115,3.726,490,6862 -Avanton,86016,2154,10.797,1.046,0.947,492,6621 -Velesmes-Échevanne,70528,484,22.284,1.503,1.361,900,6709 -Jaunay-Marigny,86115,7474,49.006,2.228,2.017,501,6635 -Ayron,86017,1176,28.352,1.695,1.535,472,6617 -Chiré-en-Montreuil,86074,912,21.647,1.481,1.341,480,6614 -Cuhon,86089,402,16.623,1.298,1.175,477,6634 -Craon,86087,186,21.920,1.490,1.349,477,6634 -Vasles,79339,1684,89.568,3.012,2.727,462,6606 -Latillé,86121,1461,25.333,1.602,1.450,474,6614 -Lahitère,31267,57,3.880,0.627,0.568,552,6230 -Vouzailles,86299,612,16.080,1.276,1.155,479,6625 -Saint-Genis-l'Argentière,69203,1052,10.904,1.051,0.952,817,6511 -Vouillé,86294,3689,34.499,1.870,1.693,486,6621 -Quinçay,86204,2218,29.772,1.737,1.573,486,6619 -Les Forges,79124,138,10.631,1.038,0.940,470,6607 -Fontaine-le-Comte,86100,3855,18.786,1.380,1.249,487,6604 -Mortagne-sur-Sèvre,85151,5976,22.053,1.495,1.354,403,6660 -Corbenay,70171,1289,15.941,1.271,1.151,950,6763 -Treize-Vents,85296,1264,19.152,1.393,1.261,406,6655 -Saint-Georges-de-Noisné,79253,710,24.947,1.590,1.440,448,6604 -La Séguinière,49332,4092,31.615,1.790,1.621,403,6673 -Chaudefonds-sur-Layon,49082,959,15.024,1.234,1.117,415,6697 -Saint-Mars-la-Réorthe,85242,965,9.280,0.970,0.878,398,6646 -Sèvremont,85090,6507,89.280,3.008,2.723,399,6643 -Le May-sur-Èvre,49193,3822,31.841,1.796,1.626,409,6674 -Mazières-en-Mauges,49195,1154,9.002,0.955,0.865,412,6668 -La Tessoualle,49343,3162,21.217,1.466,1.327,411,6662 -Saint-Malô-du-Bois,85240,1605,14.250,1.202,1.088,405,6654 -Saint-Léger-sous-Cholet,49299,2817,9.706,0.992,0.898,402,6674 -Cléré-sur-Layon,49102,343,21.549,1.478,1.338,442,6669 -Chaveignes,37065,554,21.321,1.470,1.331,501,6660 -Rigny-Ussé,37197,490,13.972,1.190,1.077,498,6688 -Saint-Benoît-la-Forêt,37210,852,35.702,1.902,1.722,501,6681 -Braye-sous-Faye,37035,325,15.623,1.258,1.139,494,6658 -Orches,86182,407,19.470,1.405,1.272,494,6648 -Champigny-sur-Veude,37051,863,16.155,1.279,1.158,497,6662 -Nuaillé,49231,1489,13.640,1.176,1.065,411,6670 -Anché,37004,415,8.012,0.901,0.816,496,6672 -Verrue,86286,395,28.585,1.702,1.541,489,6644 -Cravant-les-Côeaux,37089,684,38.321,1.970,1.784,495,6675 -Faye-la-Vineuse,37105,255,17.553,1.334,1.208,498,6652 -Saint-Germier,79256,226,11.956,1.101,0.997,467,6601 -Roches-Prémarie-Andillé,86209,2015,22.344,1.505,1.363,497,6599 -Clavé,79092,364,19.744,1.414,1.280,455,6602 -Marçay,86145,1160,30.982,1.772,1.604,488,6604 -Coulombiers,86083,1159,28.325,1.694,1.534,487,6605 -Curzay-sur-Vonne,86091,421,16.530,1.294,1.172,474,6606 -Chouppes,86075,750,31.810,1.795,1.625,483,6641 -La Chapelle-Bâton,79070,400,16.958,1.311,1.187,443,6604 -Bellevigne-en-Layon,49345,5757,95.587,3.112,2.818,436,6685 -Loudun,86137,6744,44.014,2.112,1.912,476,6664 -Brissac Loire Aubance,49050,10803,122.306,3.520,3.187,440,6707 -Beaulieu-sur-Layon,49022,1413,12.869,1.142,1.034,428,6699 -Genneton,79132,327,27.672,1.674,1.516,436,6667 -Saint Maurice Étusson,79280,876,57.379,2.411,2.183,433,6670 -Cerizay,79062,4776,18.942,1.385,1.254,419,6640 -Nueil-les-Aubiers,79195,5568,101.054,3.200,2.897,427,6662 -Le Pin,79210,1052,19.104,1.391,1.259,420,6645 -Roiffé,86210,755,24.340,1.570,1.422,474,6673 -Les Cerqueux,49058,880,13.872,1.186,1.074,427,6662 -Maulévrier,49192,3161,33.748,1.849,1.674,419,6662 -Cernusson,49057,362,8.568,0.932,0.844,434,6679 -Toutlemonde,49352,1336,12.872,1.142,1.034,414,6671 -Argentonnay,79013,3176,117.752,3.454,3.127,446,6659 -Saint-Amand-sur-Sèvre,79235,1399,32.694,1.820,1.648,408,6650 -Yzernay,49381,1855,41.324,2.046,1.852,420,6661 -Bressuire,79049,19499,182.497,4.300,3.893,442,6641 -La Plaine,49240,1031,22.287,1.503,1.361,428,6669 -Voulmentin,79242,1114,31.644,1.791,1.622,434,6650 -Mouterre-Silly,86173,667,31.083,1.775,1.607,474,6653 -Trémentines,49355,2956,34.948,1.882,1.704,415,6676 -Saint-Cyr-des-Gâts,85205,537,21.035,1.460,1.322,402,6614 -Berthegon,86023,305,10.602,1.036,0.938,494,6648 -Pruno,2B252,172,6.370,0.803,0.727,1232,6171 -Beuxes,86026,552,11.265,1.068,0.967,486,6666 -Aulnay,86013,99,8.068,0.904,0.818,478,6648 -Saint-Laurs,79263,567,8.259,0.915,0.828,426,6607 -Angliers,86005,637,23.326,1.537,1.392,481,6650 -Saint-Clair,86218,198,10.775,1.045,0.946,477,6648 -Sérigné,85281,976,18.489,1.369,1.240,403,6606 -Basses,86018,326,10.287,1.021,0.924,484,6665 -Félines,7089,1612,14.176,1.198,1.085,837,6472 -Nueil-sous-Faye,86181,216,16.038,1.275,1.154,494,6658 -Glénouze,86106,110,9.672,0.990,0.896,472,6663 -Saix,86250,290,22.935,1.524,1.380,470,6673 -Morton,86169,345,8.120,0.907,0.821,470,6670 -Figari,2A114,1438,100.032,3.184,2.883,1208,6061 -Monts-sur-Guesnes,86167,837,11.353,1.073,0.972,489,6650 -Marnes,79167,254,17.198,1.320,1.195,473,6641 -Chalais,86049,518,14.921,1.230,1.114,483,6657 -Sammarçolles,86252,643,21.196,1.465,1.326,484,6666 -La Chaussée,86069,184,13.607,1.174,1.063,481,6650 -Belfort,90010,48973,17.292,1.324,1.199,986,6735 -Savigny-sous-Faye,86257,382,15.075,1.236,1.119,495,6642 -Saint-Maurice-le-Girard,85252,590,11.512,1.080,0.978,405,6621 -Martaizé,86149,379,19.714,1.413,1.279,476,6654 -Puy-de-Serre,85184,320,13.884,1.186,1.074,420,6614 -Vézières,86287,362,26.537,1.640,1.485,481,6673 -Assay,37007,163,14.700,1.220,1.105,490,6667 -Breuil-Barret,85037,650,14.901,1.229,1.113,420,6626 -Raslay,86206,127,4.058,0.641,0.580,474,6671 -Pouant,86197,414,26.921,1.652,1.496,495,6659 -Arçay,86008,363,14.206,1.200,1.086,473,6658 -Ceaux-en-Loudun,86044,566,28.780,1.708,1.546,490,6667 -Saint-Laon,86227,127,11.937,1.100,0.996,469,6658 -Scillé,79309,363,11.742,1.091,0.988,426,6620 -Prinçay,86201,218,16.552,1.295,1.173,493,6653 -Guesnes,86109,228,13.412,1.166,1.056,482,6647 -Mazeuil,86154,250,13.671,1.177,1.066,477,6634 -Saires,86249,130,14.084,1.195,1.082,492,6646 -Foussais-Payré,85094,1114,34.622,1.873,1.696,421,6609 -Xanton-Chassenon,85306,727,19.403,1.402,1.269,415,6598 -La Châtaigneraie,85059,2522,7.984,0.899,0.814,415,6621 -Petosse,85174,698,15.955,1.271,1.151,402,6608 -Chavagnes-les-Redoux,85066,833,13.611,1.174,1.063,398,6629 -Pouzauges,85182,5533,36.642,1.927,1.745,413,6641 -L'Absie,79001,941,13.192,1.156,1.047,428,6619 -Saint-Mesmin,85254,1755,26.541,1.640,1.485,418,6641 -La Meilleraie-Tillay,85140,1513,20.204,1.431,1.296,410,6636 -Le Busseau,79059,733,27.887,1.681,1.522,423,6613 -Vouvant,85305,860,20.383,1.437,1.301,415,6614 -Saint-Maixent-de-Beugné,79269,402,11.088,1.060,0.960,421,6609 -Saint-Sulpice-en-Pareds,85271,426,13.380,1.164,1.054,407,6617 -Pissotte,85176,1127,12.010,1.103,0.999,408,6610 -Longèves,85126,1318,11.853,1.096,0.992,406,6605 -La Forêt-sur-Sèvre,79123,2337,56.087,2.384,2.159,418,6632 -Saint-Hilaire-des-Loges,85227,1965,35.393,1.894,1.715,421,6607 -Bourneau,85033,740,16.384,1.288,1.166,409,6610 -Marsais-Sainte-Radégonde,85137,510,14.780,1.224,1.108,406,6613 -L'Hermenault,85110,911,11.447,1.077,0.975,400,6611 -Fontenay-le-Comte,85092,13424,34.213,1.862,1.686,406,6602 -Saint-Martin-des-Fontaines,85245,175,5.625,0.755,0.684,402,6614 -Pierrefitte,79209,334,15.978,1.272,1.152,449,6643 -Faymoreau,85087,208,11.025,1.057,0.957,424,6610 -Marillet,85136,110,4.257,0.657,0.595,423,6615 -Saint-Varent,79299,2457,34.594,1.872,1.695,457,6646 -Loge-Fougereuse,85125,383,10.425,1.028,0.931,418,6617 -Réaumur,85187,869,22.283,1.503,1.361,407,6633 -L'Orbrie,85167,800,9.677,0.990,0.896,410,6604 -Montournais,85147,1676,29.498,1.729,1.565,412,6631 -La Chapelle-aux-Lys,85053,249,10.712,1.042,0.943,420,6621 -Auchay-sur-Vendée,85009,1138,21.282,1.468,1.329,400,6603 -Bazoges-en-Pareds,85014,1158,34.023,1.857,1.681,398,6629 -Tuffalun,49003,1774,39.639,2.004,1.814,445,6692 -Availles-Thouarsais,79022,196,10.927,1.052,0.952,463,6645 -Luché-Thouarsais,79159,508,13.672,1.177,1.066,451,6653 -Antoigné,49009,467,17.853,1.345,1.218,463,6666 -Saint-Cyr-la-Lande,79244,355,9.056,0.958,0.867,460,6668 -Irais,79141,206,13.565,1.172,1.061,463,6643 -Saint-Jacques-de-Thouars,79258,445,5.566,0.751,0.680,455,6657 -Louzy,79157,1350,18.654,1.375,1.245,456,6664 -Passavant-sur-Layon,49236,126,4.909,0.705,0.638,443,6671 -Le Puy-Notre-Dame,49253,1193,15.968,1.272,1.152,457,6671 -Saint-Léger-de-Montbrillais,86229,359,10.430,1.028,0.931,468,6669 -Tourrettes-sur-Loup,6148,3988,29.345,1.724,1.561,1028,6296 -Ternay,86269,180,10.237,1.018,0.922,466,6663 -Saint-Goazec,29249,710,33.382,1.839,1.665,203,6805 -Saint-Jean-de-Thouars,79259,1353,4.971,0.710,0.643,456,6656 -Berrie,86022,263,16.814,1.305,1.182,470,6665 -Assencières,10014,172,7.377,0.865,0.783,788,6806 -Saint-Macaire-du-Bois,49302,457,13.251,1.159,1.049,453,6672 -Pas-de-Jeu,79203,369,11.139,1.062,0.962,468,6659 -Saint-Léger-de-Montbrun,79265,1265,30.762,1.765,1.598,465,6661 -Luzay,79161,631,20.972,1.458,1.320,452,6652 -Val en Vignes,79063,2043,79.017,2.830,2.562,449,6662 -Morlaix,29151,14721,25.287,1.601,1.450,196,6852 -Saint-Martin-de-Mâcon,79274,315,12.362,1.119,1.013,465,6664 -Lampaul-Guimiliau,29097,2079,17.596,1.335,1.209,181,6840 -Doué-en-Anjou,49125,10981,149.562,3.893,3.525,446,6678 -Aubigné-sur-Layon,49012,366,5.346,0.736,0.666,437,6686 -Ranton,86205,189,6.128,0.788,0.713,470,6658 -Gouesnou,29061,6092,12.201,1.112,1.007,149,6840 -Curçay-sur-Dive,86090,212,15.888,1.269,1.149,465,6659 -Coulonges-Thouarsais,79102,430,17.186,1.320,1.195,445,6649 -Brion-près-Thouet,79056,752,8.462,0.926,0.838,459,6668 -Sainte-Verge,79300,1405,12.837,1.140,1.032,453,6662 -Saint-Généroux,79252,369,20.443,1.439,1.303,463,6650 -Sainte-Gemme,79250,401,8.930,0.951,0.861,451,6648 -Saint-Thois,29267,715,17.942,1.348,1.220,186,6808 -Laz,29122,665,33.890,1.853,1.678,197,6802 -Le Tréhou,29294,629,23.172,1.532,1.387,169,6835 -Edern,29048,2200,40.360,2.022,1.831,187,6800 -Collorec,29036,613,28.256,1.692,1.532,197,6824 -Plouezoc'h,29186,1592,16.006,1.273,1.153,200,6856 -Brélès,29017,882,14.005,1.191,1.078,135,6847 -Plourin-lès-Morlaix,29207,4412,42.448,2.074,1.878,196,6842 -Saint-Vougay,29271,903,14.912,1.229,1.113,172,6853 -Berrien,29007,941,56.127,2.385,2.159,206,6830 -Plougasnou,29188,2887,34.398,1.867,1.690,201,6859 -Landéda,29101,3559,11.157,1.063,0.962,139,6859 -Guilers,29069,8010,19.041,1.389,1.258,141,6837 -Brest,29019,139342,49.009,2.228,2.017,147,6843 -Pencran,29156,1946,8.937,0.952,0.862,167,6838 -Saint-Urbain,29270,1637,15.262,1.244,1.126,169,6835 -Bourg-Blanc,29015,3556,28.603,1.702,1.541,150,6848 -Plourin,29208,1245,25.667,1.613,1.460,129,6852 -Landivisiau,29105,9123,19.176,1.394,1.262,181,6846 -Ploudiry,29180,940,27.852,1.680,1.521,173,6838 -Bohars,29011,3474,7.357,0.863,0.781,145,6843 -Landerneau,29103,15836,13.667,1.177,1.066,162,6844 -Saint-Divy,29245,1540,8.518,0.929,0.841,156,6843 -Kerlouan,29091,2163,18.064,1.353,1.225,153,6865 -La Roche-Maurice,29237,1844,11.955,1.101,0.997,171,6845 -Lanneuffret,29116,149,2.226,0.475,0.430,168,6846 -Plouvien,29209,3746,34.090,1.859,1.683,150,6848 -Landunvez,29109,1479,14.598,1.216,1.101,127,6854 -Sizun,29277,2268,59.058,2.446,2.215,175,6836 -Plougastel-Daoulas,29189,13349,46.976,2.182,1.976,148,6829 -Loc-Brévalaire,29126,198,1.655,0.409,0.370,154,6855 -Plounéour-Brignogan-plages,29021,1928,14.967,1.231,1.115,160,6866 -Plouzané,29212,12763,33.001,1.829,1.656,137,6831 -ÃŽle-Molène,29084,132,0.893,0.301,0.273,112,6840 -Plounéventer,29204,2097,27.428,1.667,1.509,166,6850 -Broquiers,60110,239,2.926,0.544,0.493,614,6951 -Lannilis,29117,5533,25.409,1.605,1.453,141,6857 -Mespaul,29148,944,11.539,1.081,0.979,182,6860 -Ploudalmézeau,29178,6301,24.137,1.564,1.416,132,6858 -Plouider,29198,1872,23.504,1.543,1.397,165,6860 -Châteauneuf-du-Faou,29027,3677,41.844,2.059,1.864,188,6809 -Plouarzel,29177,3706,42.863,2.084,1.887,124,6843 -Roscanvel,29238,840,9.373,0.975,0.883,139,6829 -Plounévez-Lochrist,29206,2312,39.669,2.005,1.815,166,6857 -Gouézec,29062,1100,31.162,1.777,1.609,185,6806 -Cléder,29030,3782,37.502,1.949,1.765,172,6863 -Lampaul-Plouarzel,29098,2094,4.052,0.641,0.580,127,6846 -Logonna-Daoulas,29137,2120,12.382,1.120,1.014,157,6827 -Guiler-sur-Goyen,29070,532,11.363,1.073,0.972,150,6794 -Plougonvelin,29190,4152,18.982,1.387,1.256,126,6831 -Irvillac,29086,1429,29.710,1.735,1.571,171,6830 -Saint-Renan,29260,8097,13.318,1.162,1.052,139,6839 -Porspoder,29221,1817,11.488,1.079,0.977,126,6850 -Brennilis,29018,451,20.345,1.436,1.300,190,6828 -Plabennec,29160,8355,50.546,2.263,2.049,148,6845 -Trémaouézan,29295,568,8.474,0.927,0.839,163,6848 -Saint-Rivoal,29261,186,19.095,1.391,1.259,179,6830 -Hanvec,29078,2020,59.560,2.457,2.225,178,6830 -Guissény,29077,2002,25.404,1.604,1.452,159,6860 -Fégréac,44057,2447,44.493,2.123,1.922,322,6730 -Lanarvily,29100,425,5.869,0.771,0.698,157,6853 -Ploudaniel,29179,3698,45.839,2.155,1.951,166,6850 -Guipavas,29075,14466,43.876,2.108,1.909,149,6840 -Bettlach,68034,310,4.171,0.650,0.589,1033,6723 -La Forest-Landerneau,29056,1849,9.330,0.972,0.880,159,6838 -La Martyre,29144,759,18.345,1.363,1.234,170,6842 -Taulé,29279,2961,29.734,1.736,1.572,191,6851 -Loperhet,29140,3686,20.452,1.440,1.304,160,6838 -ÃŽle-de-Batz,29082,464,3.197,0.569,0.515,188,6871 -Dirinon,29045,2294,32.962,1.827,1.654,160,6831 -Fontains,77190,239,14.370,1.207,1.093,704,6825 -Goulven,29064,448,6.555,0.815,0.738,163,6862 -Trézilidé,29301,378,4.574,0.681,0.617,179,6859 -Saint-Geniès-de-Fontedit,34258,1553,9.302,0.971,0.879,715,6262 -Saint-Servais,29264,781,10.473,1.030,0.933,172,6844 -Milizac-Guipronvel,29076,4436,41.913,2.061,1.866,143,6847 -La Chapelle-Thouarault,35065,2157,7.775,0.888,0.804,337,6792 -Brasparts,29016,1033,47.212,2.187,1.980,190,6829 -Saint-Sauveur,29262,799,13.360,1.163,1.053,181,6840 -Plougoulm,29192,1766,18.477,1.368,1.239,185,6862 -Ternas,62809,134,2.489,0.502,0.455,656,7027 -Sainte-Sève,29265,1002,9.984,1.006,0.911,194,6853 -Le Cloître-Pleyben,29033,534,20.464,1.440,1.304,190,6815 -Commana,29038,1031,40.366,2.022,1.831,185,6839 -Carantec,29023,3148,9.179,0.964,0.873,189,6862 -Chazemais,3072,498,29.279,1.722,1.559,664,6602 -Lannédern,29115,295,12.367,1.119,1.013,191,6822 -Plouvorn,29210,2865,35.416,1.894,1.715,180,6857 -La Feuillée,29054,641,31.577,1.789,1.620,189,6834 -Saint-Thégonnec Loc-Eguiner,29266,3013,49.923,2.249,2.036,185,6845 -Plouénan,29184,2500,31.456,1.785,1.616,185,6856 -Dinéault,29044,2169,47.300,2.189,1.982,166,6818 -Pleyber-Christ,29163,3116,45.771,2.154,1.950,196,6850 -Plounéour-Ménez,29202,1250,51.875,2.293,2.076,194,6835 -Quéménéven,29229,1119,28.058,1.686,1.527,166,6802 -Pleyben,29162,3685,76.000,2.775,2.513,178,6818 -Plonévez-du-Faou,29175,2099,80.903,2.863,2.592,189,6811 -Guiclan,29068,2487,43.026,2.088,1.891,190,6854 -Saint-Ciers-Champagne,17316,416,18.259,1.360,1.231,443,6489 -Saint-Pol-de-Léon,29259,6589,23.657,1.548,1.402,184,6866 -Montmérac,16224,728,23.239,1.534,1.389,448,6484 -Loqueffret,29141,359,27.766,1.677,1.518,197,6825 -Saint-Ségal,29263,1070,16.409,1.289,1.167,178,6816 -Goulien,29063,433,12.864,1.142,1.034,137,6800 -Villexavier,17476,271,9.962,1.005,0.910,429,6479 -Locronan,29134,805,8.001,0.900,0.815,162,6800 -Plomodiern,29172,2083,46.705,2.175,1.969,168,6809 -Saint-Nic,29256,776,18.020,1.351,1.223,163,6814 -Douarnenez,29046,14063,25.676,1.613,1.460,157,6797 -Neulles,17259,152,5.845,0.770,0.697,433,6495 -Rosnoën,29240,951,34.303,1.864,1.688,170,6818 -Berneuil,16040,320,16.515,1.294,1.172,461,6479 -Telgruc-sur-Mer,29280,2105,28.261,1.692,1.532,157,6821 -Allas-Bocage,17005,196,10.944,1.053,0.953,428,6485 -Pont-de-Buis-lès-Quimerch,29302,3874,42.052,2.064,1.869,170,6818 -Camaret-sur-Mer,29022,2586,13.148,1.154,1.045,134,6824 -Saint-Coulitz,29243,429,11.042,1.058,0.958,176,6808 -Le Faou,29053,1717,12.003,1.103,0.999,171,6822 -Guimps,16160,476,12.660,1.133,1.026,446,6488 -Port-Launay,29222,389,1.920,0.441,0.399,176,6814 -Ploéven,29166,522,13.038,1.149,1.040,165,6807 -Argol,29001,1010,31.571,1.789,1.620,163,6819 -Châteaulin,29026,5212,20.145,1.429,1.294,176,6814 -Poullan-sur-Mer,29226,1516,30.559,1.760,1.594,152,6804 -Cast,29025,1588,37.427,1.947,1.763,173,6810 -Chadenac,17078,489,14.049,1.193,1.080,431,6503 -Le Tâtre,16380,395,6.062,0.784,0.710,449,6485 -Oriolles,16251,266,18.337,1.363,1.234,455,6475 -Sainte-Colombe,17319,112,4.404,0.668,0.605,442,6469 -Brossac,16066,499,21.908,1.490,1.349,458,6473 -Saint-Grégoire-d'Ardennes,17343,153,3.552,0.600,0.543,424,6497 -Saint-Germain-de-Lusignan,17339,1300,18.139,1.356,1.228,433,6495 -Arthenac,17020,342,12.759,1.137,1.029,441,6493 -Fontanès,30114,687,14.422,1.209,1.095,787,6307 -Agudelle,17002,134,5.403,0.740,0.670,429,6480 -Saint-Médard,16338,322,8.307,0.917,0.830,456,6493 -Sousmoulins,17433,221,7.782,0.888,0.804,438,6472 -Lachaise,16176,330,9.499,0.981,0.888,447,6494 -Rouffignac,17305,433,14.741,1.222,1.106,428,6475 -Guizengeard,16161,167,14.834,1.226,1.110,456,6475 -Bors (Canton de Charente-Sud),16053,114,12.300,1.116,1.010,448,6476 -Brie-sous-Archiac,17066,240,7.581,0.876,0.793,444,6491 -Saint-Caprais-de-Lerm,47234,638,13.613,1.174,1.063,522,6351 -Allas-Champagne,17006,275,7.715,0.884,0.800,439,6493 -Halluin,59279,20708,12.614,1.131,1.024,710,7074 -Pouillac,17287,249,4.631,0.685,0.620,445,6470 -Dancy,28126,204,9.916,1.002,0.907,588,6785 -Mortiers,17249,194,6.703,0.824,0.746,442,6482 -Saint-Germain-de-Vibrac,17341,193,7.193,0.854,0.773,438,6485 -Pommiers-Moulons,17282,202,9.584,0.985,0.892,437,6478 -Meux,17233,306,8.388,0.922,0.835,440,6487 -Le Pin,17276,83,2.529,0.506,0.458,443,6473 -Le Puy,25474,111,3.535,0.598,0.541,946,6700 -Archiac,17016,770,4.491,0.675,0.611,441,6498 -Saint-Savin,33473,3193,33.865,1.852,1.677,427,6454 -Tugéras-Saint-Maurice,17454,370,13.920,1.188,1.076,436,6479 -Clam,17108,424,6.966,0.840,0.761,430,6496 -Queige,73211,816,32.639,1.819,1.647,968,6515 -Lagarde-sur-le-Né,16178,180,4.136,0.647,0.586,449,6497 -Reignac,16276,733,22.000,1.493,1.352,455,6487 -Expiremont,17156,128,5.736,0.762,0.690,436,6478 -Saint-Aigulin,17309,1898,28.462,1.698,1.537,465,6459 -Sainte-Lheurine,17355,519,17.630,1.337,1.211,441,6498 -Polignac,17281,176,4.713,0.691,0.626,442,6469 -Carcans,33097,2401,201.177,4.515,4.088,392,6447 -Lussac,17215,55,1.748,0.421,0.381,429,6490 -Saint-Germain-de-la-Rivière,33414,378,3.932,0.631,0.571,437,6432 -Jonzac,17197,3442,13.051,1.150,1.041,434,6490 -Réaux sur Trèfle,17295,830,20.711,1.449,1.312,434,6489 -Chartuzac,17092,156,2.418,0.495,0.448,434,6477 -Bellevigne,16204,1338,43.949,2.110,1.910,457,6504 -Salignac-de-Mirambeau,17417,164,7.599,0.877,0.794,428,6480 -Saint-Médard,17372,74,3.872,0.626,0.567,438,6485 -Mussidan,24299,2728,3.839,0.624,0.565,492,6442 -Jussas,17199,145,9.201,0.966,0.875,439,6470 -Souméras,17432,365,6.271,0.797,0.722,431,6470 -Champlost,89076,796,23.158,1.532,1.387,752,6768 -Vanzac,17458,149,6.422,0.807,0.731,443,6476 -Boresse-et-Martron,17054,215,11.248,1.068,0.967,456,6470 -Guitinières,17187,524,9.237,0.967,0.876,426,6487 -Soubran,17430,382,13.135,1.154,1.045,426,6480 -Chillac,16099,215,14.763,1.223,1.107,457,6481 -Mérignac,17229,222,4.491,0.675,0.611,443,6476 -Coux,17130,448,13.294,1.161,1.051,431,6474 -Saint-Sauveur-de-Puynormand,33472,359,5.519,0.748,0.677,463,6438 -Beauronne,24032,368,19.390,1.402,1.269,495,6449 -Saint-Front-de-Pradoux,24409,1150,9.035,0.957,0.866,491,6445 -Saint-Denis-de-Pile,33393,5411,27.973,1.684,1.525,450,6435 -Ménesplet,24264,1814,19.161,1.393,1.261,474,6435 -Saint-Loubès,33433,9375,25.751,1.615,1.462,432,6433 -Gours,33191,558,7.884,0.894,0.809,467,6437 -Saint-Jean-d'Ataux,24424,124,12.085,1.107,1.002,495,6454 -Saint-Seurin-sur-l'Isle,33478,3160,8.912,0.950,0.860,465,6441 -Cabrières-d'Aigues,84024,952,18.905,1.384,1.253,898,6305 -Saint-Antoine-sur-l'Isle,33373,584,10.434,1.028,0.931,465,6439 -Saint-Martin-l'Astier,24457,138,9.419,0.977,0.885,491,6442 -Montpon-Ménestérol,24294,5469,46.647,2.174,1.968,480,6443 -Beaupouyet,24029,497,23.040,1.528,1.383,486,6440 -Sourzac,24543,1107,23.186,1.533,1.388,499,6443 -Saint-Vincent-de-Connezac,24509,661,14.889,1.228,1.112,498,6459 -La Jemaye-Ponteyraud,24216,153,33.503,1.842,1.668,482,6457 -Saint-Barthélemy-de-Bellegarde,24380,515,33.322,1.837,1.663,483,6448 -Servanches,24533,90,20.586,1.444,1.307,478,6456 -Le Fieu,33166,531,14.616,1.217,1.102,463,6444 -Douzillac,24157,807,17.143,1.318,1.193,494,6445 -Issac,24211,437,23.323,1.537,1.392,502,6438 -Le Pizou,24329,1312,17.136,1.318,1.193,471,6441 -Moulin-Neuf,24297,916,8.788,0.944,0.855,467,6437 -Laruscade,33233,2706,46.555,2.172,1.967,440,6454 -Sauvignac,16365,104,11.710,1.089,0.986,457,6466 -Prignac-et-Marcamps,33339,1384,10.425,1.028,0.931,425,6440 -Gauriaguet,33183,1240,5.403,0.740,0.670,432,6446 -Celles,24090,579,27.984,1.684,1.525,499,6467 -Savignac-de-l'Isle,33509,507,4.512,0.676,0.612,444,6439 -Saint-Romain-la-Virvée,33470,872,7.858,0.892,0.808,433,6433 -Nanteuil-Auriac-de-Bourzac,24303,216,20.803,1.452,1.315,485,6478 -Marsas,33272,1196,8.093,0.906,0.820,436,6448 -Verteillac,24573,673,18.527,1.370,1.240,491,6474 -Fronsac,33174,1159,15.167,1.240,1.123,439,6428 -Sainte-Eulalie,33397,4547,9.200,0.965,0.874,424,6426 -Maison-des-Champs,10217,33,4.353,0.664,0.601,817,6793 -Saillans,33364,399,6.233,0.795,0.720,441,6434 -Virsac,33553,1122,3.603,0.604,0.547,429,6441 -Néac,33302,407,7.115,0.849,0.769,450,6431 -Saint-Just-et-Vacquières,30275,302,23.505,1.543,1.397,801,6331 -Ambarès-et-Lagrave,33003,16094,24.718,1.583,1.433,424,6430 -Abzac,33001,1926,13.449,1.167,1.057,455,6438 -Izon,33207,5692,15.763,1.264,1.144,436,6432 -Saint-Sulpice-de-Pommiers,33482,230,9.866,1.000,0.905,455,6401 -Saint-Martin-du-Bois,33445,856,9.721,0.992,0.898,444,6439 -Saint-Aignan,33365,213,2.749,0.528,0.478,440,6434 -La Lande-Patry,61218,1777,6.495,0.811,0.734,435,6857 -Périssac,33317,1175,12.194,1.112,1.007,439,6444 -Sablons,33362,1358,11.817,1.094,0.991,452,6442 -Saint-Médard-de-Guizières,33447,2373,10.341,1.024,0.927,455,6438 -Louin,79156,682,20.550,1.443,1.307,453,6633 -Guîtres,33198,1585,4.963,0.709,0.642,448,6442 -Saumont,47287,256,6.773,0.828,0.750,496,6339 -Les Billaux,33052,1212,6.268,0.797,0.722,445,6436 -Allemans,24007,523,18.850,1.382,1.251,490,6466 -Les Artigues-de-Lussac,33014,1101,10.205,1.017,0.921,454,6438 -Gout-Rossignol,24199,381,24.964,1.590,1.440,497,6486 -Saint-Martin-de-Laye,33442,541,9.552,0.984,0.891,448,6442 -Saint-Ciers-d'Abzac,33387,1390,11.776,1.092,0.989,441,6440 -Pomerol,33328,618,6.280,0.798,0.723,447,6432 -Lugon-et-l'ÃŽle-du-Carnay,33259,1266,10.722,1.042,0.943,433,6432 -Bayas,33034,449,11.816,1.094,0.991,448,6450 -Saint-Gervais,33415,1845,5.623,0.755,0.684,428,6442 -Carbon-Blanc,33096,8112,3.956,0.633,0.573,422,6427 -La Clotte,17113,704,17.915,1.347,1.220,455,6451 -Villegouge,33548,1259,13.785,1.182,1.070,436,6436 -Marcenais,33266,750,9.166,0.964,0.873,437,6444 -Saint-Michel-de-Fronsac,33451,516,5.545,0.750,0.679,441,6433 -Saint-Bonnet-sur-Gironde,17312,820,31.125,1.776,1.608,419,6477 -Saint-Vivien-de-Blaye,33489,369,5.758,0.764,0.692,426,6451 -Floirac,17160,370,31.736,1.793,1.623,410,6496 -Tauriac,33525,1289,10.817,1.047,0.948,426,6446 -Lalande-de-Pomerol,33222,662,8.256,0.915,0.828,449,6434 -Boisredon,17052,703,21.993,1.493,1.352,420,6474 -Le Fouilloux,17167,772,29.701,1.735,1.571,454,6464 -Cavignac,33114,1981,6.693,0.823,0.745,434,6452 -Saint-Laurent-d'Arce,33425,1438,8.099,0.906,0.820,429,6443 -Corignac,17118,368,11.153,1.063,0.962,432,6464 -Bonzac,33062,750,7.619,0.879,0.796,444,6439 -Gauriac,33182,758,10.170,1.015,0.919,413,6447 -Les Peintures,33315,1576,13.175,1.155,1.046,454,6446 -Tizac-de-Lapouyade,33532,482,9.252,0.968,0.876,439,6444 -Saint-Yzan-de-Soudiac,33492,2369,11.211,1.066,0.965,433,6459 -Peujard,33321,2185,11.007,1.056,0.956,428,6446 -Villenave-d'Ornon,33550,32750,21.225,1.466,1.327,422,6414 -Saint-Genès-de-Fronsac,33407,782,6.899,0.836,0.757,436,6444 -Louvigny,57422,909,15.864,1.268,1.148,934,6881 -Vendoire,24569,136,11.727,1.090,0.987,486,6481 -Lusignac,24247,184,7.876,0.893,0.809,489,6471 -La Tour-Blanche-Cercles,24554,605,23.356,1.538,1.393,499,6479 -La Chapelle-Grésignac,24109,107,7.017,0.843,0.763,491,6481 -Châtenois-les-Forges,90022,2747,8.735,0.941,0.852,988,6723 -Cherval,24119,273,18.907,1.384,1.253,494,6478 -Saint-Paul-Lizonne,24482,270,9.360,0.974,0.882,486,6470 -Coutures,24141,187,8.579,0.932,0.844,495,6471 -Le Coudray-Macouard,49112,917,13.629,1.175,1.064,463,6683 -Bertric-Burée,24038,451,16.708,1.301,1.178,495,6469 -Bourg-des-Maisons,24057,67,9.098,0.960,0.869,501,6473 -Talence,33522,42712,8.325,0.918,0.831,415,6420 -Bouteilles-Saint-Sébastien,24062,174,14.058,1.193,1.080,485,6476 -Saint-Martial-Viveyrol,24452,196,12.703,1.134,1.027,494,6478 -Saint-Thomas-de-Conac,17410,551,42.843,2.083,1.886,414,6484 -Saint-Dizant-du-Gua,17325,530,27.291,1.663,1.506,413,6489 -Braud-et-Saint-Louis,33073,1597,66.776,2.601,2.355,411,6466 -Saint-Estèphe,33395,1625,33.041,1.830,1.657,402,6465 -Mérignac,33281,70317,47.952,2.204,1.996,404,6424 -Saint-Palais-de-Phiolin,17379,209,10.994,1.055,0.955,422,6496 -Saint-Quantin-de-Rançanne,17388,279,9.246,0.968,0.876,417,6499 -Saint-Georges-des-Agoûts,17335,285,6.365,0.803,0.727,413,6482 -Sainte-Ramée,17390,123,4.783,0.696,0.630,413,6488 -Saint-Méard-de-Drône,24460,493,8.972,0.953,0.863,495,6465 -Saint-Sorlin-de-Conac,17405,200,26.731,1.646,1.490,413,6482 -Fléac-sur-Seugne,17159,374,8.497,0.928,0.840,427,6497 -Grâces,22067,2510,14.175,1.198,1.085,241,6846 -Lorignac,17210,487,17.670,1.338,1.211,415,6493 -Plassac,17279,605,15.622,1.258,1.139,421,6488 -Montreuil-Poulay,53160,377,16.224,1.282,1.161,436,6817 -Saint-Germain-du-Seudre,17342,432,16.287,1.285,1.163,410,6496 -Cogny,69061,1170,5.856,0.770,0.697,821,6545 -Saint-Aubin-de-Blaye,33374,829,11.564,1.082,0.980,421,6471 -Brie-sous-Mortagne,17068,234,7.307,0.860,0.779,410,6498 -Chambray,27140,425,8.458,0.926,0.838,578,6886 -Semillac,17423,70,2.485,0.502,0.455,420,6483 -Béguey,33040,1181,3.135,0.564,0.511,436,6399 -Pleine-Selve,33326,220,4.260,0.657,0.595,418,6476 -Dardez,27200,153,2.896,0.542,0.491,569,6887 -Saint-Palais,33456,510,9.742,0.994,0.900,418,6476 -Saint-Genès-de-Blaye,33405,484,11.770,1.092,0.989,410,6456 -Saint-Jean-de-Liversay,17349,2830,41.633,2.054,1.860,401,6588 -Eyrans,33161,754,4.286,0.659,0.597,417,6460 -Saint-Médard-en-Jalles,33449,30956,84.989,2.934,2.656,406,6423 -Cussac-Fort-Médoc,33146,2187,24.398,1.572,1.423,410,6456 -Podensac,33327,3201,8.417,0.923,0.836,435,6400 -Étauliers,33159,1480,13.043,1.150,1.041,419,6467 -Dignac,16119,1308,27.668,1.674,1.516,487,6496 -Cestas,33122,16781,99.555,3.176,2.876,401,6406 -Cars,33100,1176,11.076,1.059,0.959,418,6455 -Le Haillan,33200,10886,9.332,0.972,0.880,410,6429 -Arsac,33012,3510,32.452,1.813,1.642,406,6436 -Blanquefort,33056,15615,34.122,1.859,1.683,420,6431 -Martillac,33274,2975,17.208,1.320,1.195,419,6406 -La Chapelle-du-Bois-des-Faulx,27147,622,4.293,0.660,0.598,565,6892 -Saint-Sauveur,33471,1311,21.931,1.491,1.350,402,6460 -Cartelègue,33101,1259,11.482,1.079,0.977,418,6458 -Saint-Seurin-de-Cursac,33477,781,2.370,0.490,0.444,415,6456 -Martignas-sur-Jalle,33273,7302,26.466,1.638,1.483,404,6424 -Lansac,33228,731,6.061,0.784,0.710,422,6449 -Saint-Girons-d'Aiguevives,33416,960,11.785,1.093,0.990,422,6453 -Mouthiers-sur-Boëme,16236,2441,34.868,1.880,1.702,479,6500 -Soussans,33517,1624,15.617,1.258,1.139,412,6447 -Saint-Julien-Beychevelle,33423,587,25.391,1.604,1.452,409,6461 -Juignac,16170,403,24.241,1.567,1.419,481,6480 -Teuillac,33530,890,7.383,0.865,0.783,423,6452 -Mombrier,33285,416,4.293,0.660,0.598,420,6449 -Yviers,16424,511,22.776,1.519,1.375,461,6466 -Saint-Ciers-de-Canesse,33388,822,6.815,0.831,0.752,418,6449 -Villeneuve,33551,393,6.359,0.803,0.727,412,6447 -Gurat,16162,181,15.994,1.273,1.153,481,6485 -Canéjan,33090,5520,12.067,1.106,1.001,413,6411 -Salles-Lavalette,16362,365,20.482,1.441,1.305,486,6481 -Eysines,33162,23120,11.945,1.100,0.996,414,6426 -Parville,27451,316,4.524,0.677,0.613,560,6882 -Le Taillan-Médoc,33519,10082,15.160,1.239,1.122,408,6432 -Boncourt,27081,188,4.139,0.648,0.587,574,6880 -Plassac,33325,860,15.073,1.236,1.119,410,6450 -Saint-Paul,33458,914,10.930,1.052,0.952,419,6458 -Le Pian-Médoc,33322,6546,30.174,1.749,1.584,414,6436 -Chalais,16073,1771,17.669,1.338,1.211,466,6469 -Saucats,33501,2956,89.229,3.007,2.723,414,6396 -Parempuyre,33312,8456,21.895,1.489,1.348,414,6434 -Arcins,33010,484,7.377,0.865,0.783,410,6450 -Madirac,33263,235,1.891,0.438,0.397,431,6413 -Saint-Seurin-de-Bourg,33475,402,2.928,0.545,0.493,417,6444 -Le Barp,33029,5466,107.442,3.299,2.987,397,6397 -Pauillac,33314,4851,31.374,1.783,1.614,402,6465 -Bellebat,33043,245,4.885,0.704,0.637,445,6408 -Campugnan,33089,498,6.293,0.799,0.723,422,6463 -Léognan,33238,10282,41.591,2.053,1.859,412,6411 -Bruges,33075,18037,14.204,1.200,1.086,414,6426 -Saint-Germain-de-Fresney,27544,206,5.303,0.733,0.664,573,6875 -Labarde,33211,589,4.808,0.698,0.632,414,6443 -Bourg,33067,2230,13.916,1.187,1.075,419,6446 -Cadaujac,33080,5978,15.376,1.248,1.130,423,6411 -Gradignan,33192,25563,15.761,1.264,1.144,416,6414 -Lamarque,33220,1300,9.026,0.956,0.866,410,6452 -Neuilly,27429,172,4.693,0.690,0.625,583,6870 -Fours,33172,317,4.782,0.696,0.630,411,6459 -Apach,57026,1031,3.324,0.580,0.525,946,6933 -Ludon-Médoc,33256,4607,18.701,1.377,1.247,421,6438 -Saint-Aubin-de-Médoc,33376,7147,34.819,1.878,1.700,404,6437 -Sylvains-Lès-Moulins,27693,1296,23.906,1.556,1.409,562,6865 -Mazion,33280,520,3.718,0.614,0.556,417,6460 -Saint-Vincent-Jalmoutiers,24511,244,16.460,1.291,1.169,482,6456 -Bazac,16034,148,4.920,0.706,0.639,465,6460 -Saint-Avit,16302,206,3.676,0.610,0.552,467,6464 -Chemenot,39136,36,4.809,0.698,0.632,892,6642 -Siorac-de-Ribérac,24537,254,21.033,1.460,1.322,490,6460 -Villetoureix,24586,911,16.208,1.281,1.160,491,6469 -Petit-Bersac,24323,180,10.799,1.046,0.947,484,6468 -Saint-Sulpice-de-Roumagnac,24504,274,10.843,1.048,0.949,498,6459 -Ribérac,24352,3897,22.707,1.517,1.374,494,6466 -Saint-Pardoux-de-Drône,24477,201,8.681,0.938,0.849,499,6460 -Duzey,55168,42,5.802,0.767,0.694,891,6922 -Rouffiac,16284,124,9.828,0.998,0.904,472,6469 -Aubeterre-sur-Dronne,16020,390,2.387,0.492,0.445,477,6466 -Floirac,33167,17182,8.561,0.931,0.843,423,6423 -Saint-Quentin-de-Chalais,16346,261,12.459,1.124,1.018,472,6465 -Quesques,62678,667,13.997,1.191,1.078,627,7066 -Saint Aulaye-Puymangou,24376,1441,46.159,2.163,1.958,474,6461 -Le Tourne,33534,812,2.523,0.506,0.458,430,6407 -Bourg-du-Bost,24058,229,7.299,0.860,0.779,484,6469 -Fontenay-sur-Loing,45148,1716,9.672,0.990,0.896,682,6780 -Saint Privat en Périgord,24490,1136,44.386,2.121,1.920,483,6464 -Saint-Émilion,33394,1876,26.989,1.654,1.498,447,6426 -Les Essards,16130,193,9.060,0.958,0.867,472,6463 -Saint-Martin-de-Ribérac,24455,717,16.394,1.289,1.167,495,6463 -Douchapt,24154,362,8.493,0.928,0.840,500,6465 -Dardenac,33148,84,1.522,0.393,0.356,445,6415 -Saint-Victor,24508,205,5.092,0.718,0.650,499,6465 -Chassaignes,24114,68,5.882,0.772,0.699,486,6464 -Camarsac,33083,999,5.404,0.740,0.670,435,6419 -Belluire,17039,211,4.511,0.676,0.612,421,6500 -Saint-Sigismond-de-Clermont,17402,162,5.351,0.736,0.666,423,6491 -Saint-Pierre-de-Bat,33464,317,8.974,0.954,0.864,444,6403 -Gageac-et-Rouillac,24193,448,14.122,1.196,1.083,489,6413 -Omet,33308,296,2.617,0.515,0.466,440,6401 -Villefranche-de-Lonchat,24584,973,15.169,1.240,1.123,470,6435 -Rions,33355,1565,10.748,1.044,0.945,435,6404 -Castres-Gironde,33109,2333,6.996,0.842,0.762,428,6407 -Monestier,24276,384,17.708,1.339,1.212,486,6415 -Saint-Brice,33379,316,5.703,0.760,0.688,453,6405 -Martres,33275,117,3.022,0.553,0.501,450,6405 -Pomport,24331,743,19.562,1.408,1.275,494,6412 -Langoiran,33226,2171,10.246,1.019,0.923,430,6407 -Ayguemorte-les-Graves,33023,1218,6.338,0.801,0.725,424,6405 -Pineuilh,33324,4357,17.329,1.325,1.200,481,6415 -La Brède,33213,4192,23.216,1.534,1.389,422,6405 -Montcaret,24289,1445,17.729,1.340,1.213,471,6423 -Escoussans,33156,311,5.140,0.722,0.654,442,6405 -Gardegan-et-Tourtirac,33181,286,9.671,0.990,0.896,463,6424 -Daubèze,33149,151,5.681,0.759,0.687,453,6407 -Ladaux,33215,196,4.303,0.660,0.598,443,6405 -Prigonrieux,24340,4148,26.178,1.629,1.475,497,6424 -Saint-Martin-du-Puy,33446,190,9.142,0.962,0.871,461,6403 -Saint-Ferme,33400,353,20.100,1.427,1.292,467,6407 -Saint-Médard-d'Eyrans,33448,2944,12.766,1.137,1.029,422,6405 -Beautiran,33037,2222,6.324,0.800,0.724,425,6405 -Montreuil-sous-Pérouse,35194,1020,16.142,1.279,1.158,388,6791 -Castelviel,33105,215,8.014,0.901,0.816,451,6400 -Loubès-Bernac,47151,412,19.247,1.396,1.264,490,6406 -Laroque,33231,281,2.974,0.549,0.497,438,6400 -Montignac,33292,147,6.495,0.811,0.734,444,6407 -Soulignac,33515,434,11.540,1.081,0.979,437,6405 -Saint-Sernin,47278,413,21.268,1.468,1.329,482,6407 -Coirac,33131,199,5.765,0.764,0.692,447,6403 -Gornac,33189,437,8.389,0.922,0.835,447,6403 -Châteauneuf-Grasse,6038,3364,9.020,0.956,0.866,1022,6294 -Cardan,33098,494,4.254,0.657,0.595,435,6404 -Fouquebrune,16143,670,27.917,1.682,1.523,480,6500 -Blanzaguet-Saint-Cybard,16047,298,11.955,1.101,0.997,492,6488 -Sainte-Croix-de-Mareuil,24394,148,12.387,1.120,1.014,497,6485 -Angeduc,16014,125,3.575,0.602,0.545,462,6490 -Chadurie,16072,508,16.520,1.294,1.172,475,6490 -Ladiville,16177,116,7.216,0.855,0.774,460,6493 -Édon,16125,252,16.612,1.297,1.174,495,6491 -Val des Vignes,16175,1418,50.983,2.273,2.058,466,6499 -Saint-Laurent-du-Var,6123,28645,9.466,0.979,0.886,1038,6293 -Champagne-Vigny,16075,248,8.391,0.922,0.835,471,6495 -Peymeinade,6095,8119,9.918,1.002,0.907,1014,6287 -Claix,16101,1010,14.894,1.228,1.112,473,6498 -Plassac-Rouffiac,16263,402,12.024,1.104,1.000,475,6496 -Bécheresse,16036,290,8.382,0.922,0.835,473,6492 -Le Plessis-Patte-d'Oie,60502,110,2.774,0.530,0.480,704,6953 -Gardes-le-Pontaroux,16147,269,13.340,1.163,1.053,490,6496 -Rougnac,16285,407,29.925,1.741,1.576,493,6500 -Magnac-Lavalette-Villars,16198,439,23.885,1.556,1.409,485,6496 -Charras,16084,340,15.283,1.244,1.126,497,6497 -Roquefort-les-Pins,6105,6695,21.658,1.481,1.341,1025,6297 -Étriac,16133,202,9.582,0.985,0.892,464,6494 -Saint-Laurent-des-Combes,16331,93,7.716,0.884,0.800,467,6475 -Saint-Romain,16347,545,22.963,1.525,1.381,474,6466 -Bellon,16037,163,9.155,0.963,0.872,475,6472 -Courgeac,16111,198,18.551,1.371,1.241,473,6478 -Vallauris,6155,26618,13.184,1.156,1.047,1030,6283 -Bardenac,16029,230,8.020,0.901,0.816,462,6472 -Poullignac,16267,86,8.989,0.954,0.864,463,6481 -Curac,16117,128,4.936,0.707,0.640,468,6472 -Bennecourt,78057,1864,6.923,0.838,0.759,593,6884 -Brie-sous-Chalais,16063,155,10.397,1.026,0.929,464,6473 -Montmoreau,16230,2573,65.088,2.568,2.325,473,6485 -Le Coudray,28110,4190,5.566,0.751,0.680,588,6816 -Saint-Félix,16315,113,8.117,0.907,0.821,467,6480 -Nojeon-en-Vexin,27437,338,12.921,1.144,1.036,597,6917 -Brie-sous-Barbezieux,16062,127,6.482,0.810,0.733,463,6483 -Nabinaud,16240,99,5.943,0.776,0.703,482,6472 -Rioux-Martin,16279,237,14.654,1.219,1.104,465,6463 -Saint-Martial,16334,134,9.321,0.972,0.880,468,6479 -Palluaud,16254,231,8.626,0.935,0.847,486,6474 -Laprade,16180,246,10.362,1.025,0.928,478,6468 -Courlac,16112,53,6.613,0.819,0.742,472,6469 -Sainte-Souline,16354,114,7.360,0.864,0.782,463,6481 -Château-Arnoux-Saint-Auban,4049,5162,18.533,1.370,1.240,940,6333 -Médillac,16215,158,5.883,0.772,0.699,465,6460 -Deviat,16118,146,8.443,0.925,0.838,465,6483 -Vaux-Lavalette,16394,99,6.785,0.829,0.751,487,6484 -Orival,16252,153,5.471,0.745,0.675,470,6471 -Bessac,16041,110,10.547,1.034,0.936,465,6486 -Montignac-le-Coq,16227,137,10.258,1.019,0.923,482,6478 -Chassignelles,89087,319,13.250,1.159,1.049,791,6744 -Châtignac,16091,180,9.778,0.995,0.901,467,6477 -Vendresse-Beaulne,2778,106,8.976,0.954,0.864,750,6926 -Lignan-de-Bordeaux,33245,827,8.999,0.955,0.865,429,6414 -Courpiac,33135,122,2.211,0.473,0.428,447,6411 -Saint-Genès-de-Lombaud,33408,395,6.131,0.788,0.713,435,6412 -Pouy,65368,44,1.929,0.442,0.400,502,6244 -Croignon,33141,618,4.644,0.686,0.621,436,6421 -Fresnay-le-Comte,28162,330,8.330,0.919,0.832,589,6800 -Cénac,33118,1820,7.498,0.872,0.790,428,6414 -Thivars,28388,1067,9.261,0.969,0.877,586,6808 -Arveyres,33015,1947,17.507,1.332,1.206,440,6424 -Dauphin,4068,824,9.826,0.998,0.904,924,6312 -Sallebœuf,33496,2420,14.639,1.218,1.103,435,6423 -Saint-Ambreuil,71384,507,18.342,1.363,1.234,836,6621 -Saint-Laurent-des-Combes,33426,262,3.877,0.627,0.568,452,6423 -Saint-Sylvestre-de-Cormeilles,27605,250,9.528,0.983,0.890,515,6907 -Haux,33201,827,10.555,1.034,0.936,435,6412 -Beychac-et-Caillau,33049,2194,15.854,1.267,1.147,437,6425 -Serville,28375,364,5.654,0.757,0.685,587,6853 -Carignan-de-Bordeaux,33099,3820,8.757,0.942,0.853,423,6418 -Saint-Léonard,76600,1742,11.844,1.095,0.991,509,6961 -Saint-Étienne-de-Lisse,33396,249,7.081,0.847,0.767,456,6427 -Saint-Pey-d'Armens,33459,203,4.262,0.657,0.595,452,6422 -Mérignas,33282,335,9.600,0.986,0.893,456,6417 -Créon,33140,4637,7.965,0.898,0.813,435,6412 -Bonnetan,33061,939,4.382,0.666,0.603,432,6419 -Tizac-de-Curton,33531,320,4.078,0.643,0.582,443,6418 -Branne,33071,1274,2.419,0.495,0.448,448,6420 -Camiac-et-Saint-Denis,33086,362,6.610,0.818,0.741,438,6416 -Montussan,33293,3136,8.463,0.926,0.838,431,6425 -Sadirac,33363,4157,19.055,1.389,1.258,432,6413 -Beauvallon,26042,1582,3.169,0.567,0.513,851,6420 -Saint-Caprais-de-Bordeaux,33381,3201,10.130,1.013,0.917,427,6410 -Houville-la-Branche,28194,438,13.927,1.188,1.076,597,6820 -Montastruc,65318,236,12.574,1.129,1.022,485,6240 -Baurech,33033,843,7.690,0.883,0.799,427,6408 -Gellainville,28177,677,12.079,1.106,1.001,591,6811 -Vignonet,33546,495,4.234,0.655,0.593,451,6423 -Romagne,33358,457,5.183,0.725,0.656,446,6414 -Flassans-sur-Issole,83057,3513,44.935,2.134,1.932,957,6258 -Saint-Vincent-de-Pertignas,33488,383,7.649,0.880,0.797,454,6414 -Baigneaux,33025,428,8.005,0.901,0.816,445,6408 -Issendolus,46132,513,19.040,1.389,1.258,601,6403 -Sainte-Colombe,33390,420,4.065,0.642,0.581,459,6426 -Rencurel,38333,313,34.578,1.872,1.695,896,6444 -Quinsac,33349,2174,8.176,0.910,0.824,422,6414 -Nogent-le-Rotrou,28280,9940,23.391,1.539,1.393,537,6801 -Saint-Jean-de-Blaignac,33421,438,5.771,0.765,0.693,451,6418 -Faleyras,33163,423,10.402,1.027,0.930,445,6415 -Le Ménil-Vicomte,61272,25,3.838,0.624,0.565,500,6852 -Camblanes-et-Meynac,33085,2872,8.849,0.947,0.857,426,6412 -Cessac,33121,192,3.706,0.613,0.555,447,6410 -Chérancé,53068,161,8.723,0.940,0.851,404,6753 -Tresses,33535,4557,11.882,1.097,0.993,426,6425 -Brieulles-sur-Bar,8085,214,13.154,1.154,1.045,834,6935 -Nérigean,33303,834,10.298,1.021,0.924,439,6423 -Pompignac,33330,2938,11.631,1.086,0.983,428,6425 -Saint-Léon,33431,341,4.426,0.670,0.607,442,6413 -Jugazan,33209,295,5.449,0.743,0.673,452,6413 -Isle-Saint-Georges,33206,529,4.363,0.665,0.602,423,6410 -La Bernardière,85021,1796,14.768,1.223,1.107,374,6668 -Baron,33028,1155,10.343,1.024,0.927,437,6418 -Plouisy,22223,1972,23.964,1.558,1.411,244,6852 -Bellefond,33044,228,3.217,0.571,0.517,448,6413 -Pulvérières,63290,406,14.703,1.221,1.106,693,6534 -Moulon,33298,998,13.259,1.159,1.049,447,6427 -Frontenac,33175,744,14.437,1.209,1.095,452,6410 -La Sauve,33505,1458,18.621,1.374,1.244,435,6410 -Daignac,33147,479,5.720,0.761,0.689,443,6415 -Saint-Hippolyte,33420,138,4.432,0.670,0.607,453,6425 -Saint-Léger-sur-Sarthe,61415,364,13.299,1.161,1.051,502,6823 -Saint-Sulpice-de-Faleyrens,33480,1379,20.021,1.424,1.289,448,6420 -Boissières,30043,548,3.358,0.583,0.528,800,6298 -Saint-Germain-du-Puch,33413,2152,12.073,1.106,1.001,435,6423 -Saint-Sulpice-et-Cameyrac,33483,4584,15.261,1.243,1.125,435,6428 -Yvrac,33554,2786,8.501,0.928,0.840,427,6424 -Gée-Rivière,32145,45,2.723,0.525,0.475,444,6291 -Saint-Genès-de-Castillon,33406,394,6.842,0.833,0.754,456,6427 -Saint-Magne-de-Castillon,33437,1989,14.019,1.192,1.079,459,6421 -Villers-Châtel,62857,140,3.225,0.572,0.518,672,7030 -Saint-Christophe-des-Bardes,33384,443,7.710,0.884,0.800,455,6426 -Naujan-et-Postiac,33301,565,11.163,1.064,0.963,450,6414 -Vayres,33539,3859,14.350,1.206,1.092,436,6427 -Le Collet-de-Dèze,48051,776,26.466,1.638,1.483,776,6347 -Lugasson,33258,290,6.373,0.804,0.728,452,6412 -Blésignac,33059,309,2.622,0.515,0.466,443,6415 -Réveillon,61348,368,11.906,1.098,0.994,521,6822 -Génissac,33185,1924,14.198,1.199,1.086,441,6422 -Saint-Géry,24420,234,18.830,1.381,1.250,488,6437 -Saint-Avit-Saint-Nazaire,33378,1478,18.808,1.380,1.249,482,6421 -Saint-Philippe-du-Seignal,33462,480,3.391,0.586,0.531,484,6418 -Saint-Genis-de-Saintonge,17331,1233,11.055,1.058,0.958,423,6491 -Tayac,33526,131,7.190,0.854,0.773,460,6433 -Kerlaz,29090,814,11.752,1.091,0.988,162,6802 -Caplong,33094,230,9.441,0.978,0.885,473,6412 -Saint-Antoine-de-Breuilh,24370,1884,18.069,1.353,1.225,471,6419 -Doulezon,33153,261,7.553,0.875,0.792,465,6413 -Trèves,69252,731,7.629,0.879,0.796,832,6496 -Ginestet,24197,725,12.976,1.147,1.039,497,6424 -Ligueux,33246,173,5.068,0.717,0.649,484,6416 -Saint-Géraud-de-Corps,24415,238,15.103,1.237,1.120,485,6431 -Petit-Palais-et-Cornemps,33320,724,14.247,1.201,1.087,460,6434 -Église-Neuve-d'Issac,24161,140,16.760,1.303,1.180,497,6431 -Arrentès-de-Corcieux,88014,176,17.121,1.317,1.192,988,6786 -Saint-Philippe-d'Aiguille,33461,373,5.934,0.775,0.702,461,6430 -Changé,72058,6463,35.281,1.891,1.712,498,6765 -Saint-Méard-de-Gurçon,24461,806,28.718,1.706,1.545,475,6424 -Montaillé,72204,548,30.557,1.760,1.594,527,6760 -Cunèges,24148,295,6.058,0.783,0.709,492,6414 -Lamonzie-Saint-Martin,24225,2515,20.654,1.447,1.310,491,6417 -Gardonne,24194,1577,8.338,0.919,0.832,490,6419 -Francs,33173,190,6.591,0.817,0.740,464,6434 -Coubeyrac,33133,70,5.622,0.755,0.684,468,6413 -La Force,24222,2643,15.582,1.256,1.137,490,6427 -Lournand,71264,332,11.245,1.067,0.966,825,6598 -Saussignac,24523,429,9.024,0.956,0.866,489,6413 -Saint-Jean-de-Rebervilliers,28341,235,10.947,1.053,0.953,571,6836 -Nastringues,24306,110,6.215,0.794,0.719,475,6424 -Lunas,24246,368,16.945,1.310,1.186,496,6430 -Bonneville-et-Saint-Avit-de-Fumadières,24048,320,7.097,0.848,0.768,471,6423 -Saint-Paul-du-Bois,49310,599,26.893,1.651,1.495,433,6670 -Saint-Sauveur-Lalande,24500,151,9.313,0.971,0.879,485,6433 -Lebetain,90063,428,4.916,0.706,0.639,998,6717 -Saint-Laurent-des-Vignes,24437,886,8.134,0.908,0.822,498,6416 -Labastide-de-Virac,7113,288,23.145,1.531,1.386,810,6364 -Bosset,24051,212,14.668,1.219,1.104,490,6432 -Pessac-sur-Dordogne,33319,464,7.775,0.888,0.804,471,6419 -Razac-de-Saussignac,24349,337,11.562,1.082,0.980,484,6418 -Saint-Vivien,24514,258,8.556,0.931,0.843,472,6424 -Fraisse,24191,171,21.495,1.476,1.336,486,6433 -Saint-Seurin-de-Prats,24501,490,5.492,0.746,0.675,470,6419 -Sainte-Radegonde,33468,468,12.453,1.123,1.017,466,6413 -Saint-Georges-Blancaneix,24413,239,14.041,1.193,1.080,490,6427 -Saint-Avit-de-Soulège,33377,79,2.831,0.536,0.485,472,6418 -Le Fleix,24182,1491,17.978,1.350,1.222,486,6422 -Juillac,33210,250,5.802,0.767,0.694,467,6418 -Rouffignac-de-Sigoulès,24357,321,6.524,0.813,0.736,499,6411 -Les Lèches,24234,366,21.416,1.473,1.334,496,6437 -Eynesse,33160,586,7.558,0.875,0.792,477,6418 -Castillon-la-Bataille,33108,3160,5.634,0.756,0.684,460,6422 -Mouliets-et-Villemartin,33296,1075,15.841,1.267,1.147,459,6421 -Flaujagues,33168,601,7.668,0.881,0.798,464,6421 -Belvès-de-Castillon,33045,333,6.720,0.825,0.747,459,6426 -Saint-Michel-de-Montaigne,24466,342,9.274,0.969,0.877,464,6426 -Ruch,33361,601,14.611,1.217,1.102,463,6414 -Lamothe-Montravel,24226,1310,12.720,1.135,1.028,467,6418 -Fougueyrolles,24189,495,11.606,1.084,0.981,477,6424 -Saint-Cibard,33386,179,3.531,0.598,0.541,463,6430 -Carsac-de-Gurson,24083,194,7.119,0.849,0.769,473,6430 -La Roquille,33360,338,6.548,0.815,0.738,480,6414 -Pierrefeu-du-Var,83091,6060,58.960,2.444,2.213,963,6240 -Listrac-de-Durèze,33247,170,5.306,0.733,0.664,465,6410 -Vodable,63466,196,11.667,1.087,0.984,707,6488 -Caumont,33112,151,7.621,0.879,0.796,462,6402 -Coatascorn,22041,256,8.148,0.909,0.823,241,6860 -Razac-d'Eymet,24348,290,12.336,1.118,1.012,499,6400 -Mauriac,33278,252,10.014,1.007,0.912,460,6408 -Thénac,24549,485,20.456,1.440,1.304,494,6408 -Rimons,33353,190,14.363,1.206,1.092,462,6402 -Villeneuve-de-Duras,47321,321,11.859,1.096,0.992,484,6409 -Le Puy,33345,398,8.524,0.929,0.841,468,6401 -Soussac,33516,187,6.631,0.820,0.742,464,6410 -Spicheren,57659,3225,8.120,0.907,0.821,987,6906 -Serres-et-Montguyard,24532,239,6.917,0.837,0.758,497,6404 -Fonroque,24186,324,9.044,0.957,0.866,497,6404 -Segrois,21597,43,2.274,0.480,0.435,844,6676 -Riocaud,33354,184,10.352,1.024,0.927,480,6411 -Pellegrue,33316,1093,38.120,1.965,1.779,465,6413 -Saint-Astier,47229,220,9.528,0.983,0.890,485,6405 -Cazaugitat,33117,253,14.446,1.210,1.096,465,6408 -Sainte-Colombe-de-Duras,47236,104,6.990,0.842,0.762,473,6405 -Singleyrac,24536,279,7.170,0.852,0.771,498,6407 -Auriolles,33020,139,7.067,0.846,0.766,465,6410 -Esclottes,47089,154,9.237,0.967,0.876,473,6404 -Cabris,6026,1296,5.426,0.741,0.671,1014,6294 -Auribeau-sur-Siagne,6007,3245,5.296,0.733,0.664,1016,6286 -Lapeyrouse,63187,565,36.159,1.914,1.733,689,6573 -Opio,6089,2206,9.337,0.973,0.881,1023,6291 -Mandelieu-la-Napoule,6079,22168,32.060,1.802,1.632,1014,6275 -Vaux-Montreuil,8467,108,8.367,0.921,0.834,812,6946 -Le Rouret,6112,4010,7.191,0.854,0.773,1022,6294 -Mons,83080,835,76.889,2.791,2.527,999,6301 -Saint-Germain-des-Angles,27546,179,1.857,0.434,0.393,564,6888 -Fréjus,83061,53168,104.781,3.258,2.950,1014,6278 -Antibes,6004,73798,26.790,1.648,1.492,1033,6284 -Spéracèdes,6137,1317,3.458,0.592,0.536,1010,6291 -Saint-Quentin-sur-Isère,38450,1423,19.410,1.402,1.269,903,6469 -Pégomas,6090,7909,11.102,1.061,0.961,1016,6282 -Mouans-Sartoux,6084,9668,12.629,1.131,1.024,1019,6286 -Biot,6018,9804,15.474,1.252,1.134,1032,6289 -La Roquette-sur-Siagne,6108,5393,6.232,0.795,0.720,1018,6285 -Lassy,35149,1674,9.865,1.000,0.905,338,6773 -Grasse,6069,50677,44.217,2.117,1.917,1014,6294 -Saint-Vallier-de-Thiey,6130,3560,52.068,2.297,2.080,1011,6292 -Théoule-sur-Mer,6138,1476,10.717,1.042,0.943,1019,6273 -Neufchâtel-en-Saosnois,72215,1029,23.452,1.541,1.395,497,6816 -Montauroux,83081,6346,37.215,1.942,1.758,1006,6290 -Échauffour,61150,742,33.239,1.835,1.661,504,6851 -Nice,6088,342637,73.767,2.734,2.475,1048,6301 -Beaulieu-sur-Mer,6011,3721,1.063,0.328,0.297,1049,6299 -Ouarville,28291,518,20.438,1.439,1.303,612,6809 -Neauphlette,78444,839,9.756,0.994,0.900,593,6870 -Boissets,78076,258,3.928,0.631,0.571,596,6861 -Bréval,78107,1839,11.528,1.081,0.979,590,6872 -Brethel,61060,161,3.013,0.553,0.501,518,6849 -Dammartin-en-Serve,78192,1186,13.869,1.185,1.073,596,6866 -Perdreauville,78484,635,11.209,1.066,0.965,595,6877 -Longnes,78346,1453,13.991,1.191,1.078,597,6873 -Mondreville,78413,406,4.482,0.674,0.610,593,6868 -Montchauvet,78417,279,7.994,0.900,0.815,601,6869 -Giverny,27285,502,6.474,0.810,0.733,594,6888 -Saint-Péver,22322,415,13.150,1.154,1.045,253,6836 -Mézières-en-Vexin,27408,620,12.784,1.138,1.030,590,6900 -Coulonges-sur-Sarthe,61126,538,9.729,0.993,0.899,510,6830 -Rosny-sur-Seine,78531,6208,19.252,1.397,1.265,602,6877 -Sainte-Geneviève-lès-Gasny,27540,665,4.174,0.650,0.589,594,6887 -Bois-Jérôme-Saint-Ouen,27072,748,10.450,1.029,0.932,593,6893 -Freneuse,78255,4483,10.394,1.026,0.929,599,6887 -Gommecourt,78276,675,5.767,0.764,0.692,596,6887 -Boëcé,61048,120,2.402,0.493,0.446,513,6828 -Gasny,27279,3085,12.926,1.144,1.036,599,6888 -Bonnières-sur-Seine,78089,4591,7.866,0.893,0.809,595,6882 -Limetz-Villez,78337,1940,9.473,0.980,0.887,594,6887 -Vexin-sur-Epte,27213,6121,114.303,3.403,3.081,590,6893 -Romans-sur-Isère,26281,33310,33.538,1.843,1.669,857,6439 -La Villeneuve-en-Chevrie,78668,635,11.856,1.096,0.992,595,6882 -Tilly,27644,545,12.204,1.112,1.007,595,6896 -Olizy-Primat,8333,233,21.434,1.474,1.335,831,6916 -Mignières,28253,1034,13.090,1.152,1.043,581,6807 -Illiers-Combray,28196,3325,33.921,1.854,1.679,569,6798 -Ollé,28286,610,13.085,1.151,1.042,575,6813 -Mittelhausbergen,67296,1934,1.723,0.418,0.378,1045,6846 -Marchéville,28234,489,12.610,1.130,1.023,567,6809 -Lugo-di-Nazza,2B149,78,25.330,1.602,1.450,1225,6131 -Landelles,28203,640,10.446,1.029,0.932,564,6820 -Saint-Luperce,28350,875,14.479,1.211,1.096,578,6817 -Luplanté,28222,386,16.713,1.301,1.178,580,6798 -Vernantes,49368,1990,41.702,2.056,1.862,473,6701 -Chuisnes,28099,1122,23.208,1.533,1.388,565,6814 -Nogent-sur-Eure,28281,500,9.194,0.965,0.874,580,6813 -Bissey-sous-Cruchaud,71034,344,11.245,1.067,0.966,826,6628 -Bailleau-le-Pin,28021,1567,16.715,1.301,1.178,579,6809 -Dammarie,28122,1511,32.817,1.823,1.651,586,6808 -Poudenas,47211,255,17.379,1.327,1.201,477,6329 -Fontaine-la-Guyon,28154,1669,14.701,1.220,1.105,577,6821 -Ermenonville-la-Petite,28142,187,5.136,0.721,0.653,578,6799 -Cintray,28100,417,3.996,0.636,0.576,578,6817 -Meslay-le-Grenet,28245,341,8.950,0.952,0.862,579,6809 -Le Ménil-Guyon,61266,79,2.815,0.534,0.483,501,6833 -La Bourdinière-Saint-Loup,28048,717,20.336,1.435,1.299,585,6800 -Prunay-le-Gillon,28309,1079,25.719,1.614,1.461,602,6809 -Amilly,28006,1850,20.206,1.431,1.296,581,6820 -Ermenonville-la-Grande,28141,321,12.101,1.107,1.002,581,6807 -Lèves,28209,5687,7.521,0.873,0.790,588,6822 -Sandarville,28365,406,9.574,0.985,0.892,576,6805 -Fontenay-sur-Eure,28158,965,13.812,1.183,1.071,580,6813 -Beaufai,61032,346,12.987,1.147,1.039,515,6851 -Saint-Denis-des-Puits,28333,139,13.789,1.182,1.070,560,6811 -Champ-Dolent,27141,69,2.336,0.487,0.441,553,6875 -Chartres,28085,38752,16.939,1.310,1.186,590,6815 -Courville-sur-Eure,28116,2817,11.185,1.065,0.964,572,6816 -Lucé,28218,15755,5.770,0.765,0.693,584,6817 -Magny,28225,657,13.216,1.157,1.048,573,6809 -Blandainville,28041,270,13.802,1.183,1.071,573,6800 -Lozay,17213,141,11.912,1.099,0.995,427,6559 -Épeautrolles,28139,183,9.300,0.971,0.879,576,6805 -Berchères-les-Pierres,28035,1008,20.108,1.427,1.292,591,6807 -Saint-Georges-sur-Eure,28337,2734,15.536,1.255,1.136,576,6813 -Mahéru,61244,263,19.777,1.416,1.282,511,6840 -Saint-Aubin-des-Bois,28325,993,18.258,1.360,1.231,578,6817 -Mainvilliers,28229,11323,12.046,1.105,1.000,587,6817 -Viersat,23261,305,29.357,1.725,1.562,660,6575 -Les Châtelliers-Notre-Dame,28091,133,11.004,1.056,0.956,566,6806 -Lezoux,63195,6062,34.722,1.876,1.699,728,6522 -Orrouer,28290,303,13.215,1.157,1.048,575,6813 -Osmoy,78475,357,2.570,0.510,0.462,607,6864 -Nogent-le-Phaye,28278,1425,14.998,1.233,1.116,597,6820 -Toujouse,32449,237,14.829,1.226,1.110,442,6306 -Gasville-Oisème,28173,1416,9.172,0.964,0.873,592,6818 -Sap-en-Auge,61460,978,29.936,1.742,1.577,506,6867 -Soligny-la-Trappe,61475,685,19.888,1.420,1.286,521,6842 -Sours,28380,1951,33.223,1.835,1.661,600,6814 -Theuville,28383,709,30.461,1.757,1.591,598,6806 -Saint-Aubin-d'Appenai,61365,400,11.323,1.071,0.970,505,6827 -Montireau,28264,141,10.477,1.030,0.933,553,6813 -Rémalard en Perche,61345,1974,51.053,2.274,2.059,535,6814 -La Loupe,28214,3406,7.376,0.864,0.782,552,6820 -Montigny-le-Chartif,28261,631,26.230,1.630,1.476,558,6803 -Saint-Cyr-la-Rosière,61379,236,18.889,1.383,1.252,523,6806 -La Madeleine-Bouvet,61241,406,12.892,1.143,1.035,545,6823 -Bézaudun-sur-Bîne,26051,72,17.867,1.345,1.218,874,6391 -Trizay-Coutretot-Saint-Serge,28395,450,11.201,1.065,0.964,541,6801 -Miraumont,80549,669,14.044,1.193,1.080,682,6997 -Champrond-en-Perchet,28072,402,9.272,0.969,0.877,542,6806 -Saint-Éliph,28335,901,23.828,1.554,1.407,559,6822 -Berd'huis,61043,1097,11.477,1.078,0.976,536,6807 -Mauves-sur-Huisne,61255,550,14.538,1.214,1.099,524,6816 -Le Thieulin,28385,450,11.933,1.100,0.996,565,6814 -Cour-Maugis sur Huisne,61050,619,47.380,2.191,1.984,531,6825 -Coëtmieux,22044,1776,8.212,0.912,0.826,287,6837 -Verrières,61501,423,17.833,1.344,1.217,537,6813 -Les Corvées-les-Yys,28109,316,13.731,1.180,1.068,560,6811 -Saint-Germain-des-Grois,61395,240,10.492,1.031,0.933,541,6816 -Nans,25419,102,3.250,0.574,0.520,956,6715 -Corbon,61118,138,8.491,0.928,0.840,525,6818 -Senonches,28373,3091,62.680,2.520,2.282,557,6827 -Saint-Jean-Pierre-Fixte,28342,260,7.076,0.847,0.767,540,6802 -La Chapelle,8101,184,7.546,0.874,0.791,846,6961 -Friaize,28166,240,10.670,1.040,0.942,560,6817 -Veauche,42323,8918,10.853,1.049,0.950,799,6499 -Chassant,28086,331,4.463,0.672,0.608,558,6800 -La Ventrouze,61500,122,7.156,0.852,0.771,532,6837 -La Gaudaine,28175,178,9.206,0.966,0.875,552,6801 -Saint-Victor-de-Buthon,28362,514,28.276,1.693,1.533,553,6812 -Le Favril,28148,358,23.951,1.558,1.411,559,6822 -Perche en Nocé,61309,2104,87.144,2.971,2.690,524,6815 -Dame-Marie,61142,154,13.330,1.162,1.052,522,6807 -Manou,28232,595,13.640,1.176,1.065,547,6828 -Vaupillon,28401,454,12.758,1.137,1.029,550,6817 -Navailles-Angos,64415,1495,14.295,1.203,1.089,431,6260 -Saint-Hilaire-sur-Erre,61405,528,15.332,1.246,1.128,536,6806 -Thiron-Gardais,28387,1006,13.475,1.168,1.058,557,6802 -Serres-Gaston,40298,389,8.955,0.953,0.863,414,6291 -Sorel-Moussel,28377,1798,13.003,1.148,1.039,586,6860 -Lignerolles,27368,325,6.164,0.790,0.715,575,6862 -Anet,28007,2712,7.955,0.898,0.813,586,6860 -Chaise-Dieu-du-Theil,27137,227,5.917,0.774,0.701,537,6851 -Boncourt,28050,265,3.702,0.612,0.554,587,6863 -Sainte-Marie-d'Attez,27578,575,26.295,1.632,1.478,554,6856 -Marcilly-sur-Eure,27391,1575,15.535,1.255,1.136,580,6857 -Boissy-lès-Perche,28046,501,33.740,1.849,1.674,542,6845 -Marcilly-la-Campagne,27390,1181,19.721,1.414,1.280,567,6863 -Bourguignon-lès-la-Charité,70088,120,4.248,0.656,0.594,924,6716 -Rouvres,28321,809,16.500,1.293,1.171,585,6859 -Illiers-l'Évêque,27350,996,20.904,1.455,1.317,576,6858 -Berchères-sur-Vesgre,28036,841,12.251,1.114,1.009,595,6864 -Saint-Lubin-de-la-Haye,28347,958,14.300,1.204,1.090,593,6856 -Saint-Martin-des-Pézerits,61425,136,4.662,0.687,0.622,515,6841 -Bonsmoulins,61053,247,7.605,0.878,0.795,521,6842 -Lussac,33261,1269,23.338,1.538,1.393,454,6437 -Buré,61066,110,5.779,0.765,0.693,508,6824 -La Ferrière-au-Doyen,61162,172,22.665,1.515,1.372,515,6848 -Chavanat,23060,143,12.752,1.137,1.029,622,6541 -Bonnefoi,61052,183,5.469,0.744,0.674,522,6845 -Arsans,70030,49,2.471,0.500,0.453,897,6700 -Gacé,61181,1886,6.498,0.811,0.734,504,6858 -Cunel,55140,13,4.676,0.688,0.623,855,6915 -Sainte-Céronne-lès-Mortagne,61373,253,12.773,1.138,1.030,520,6837 -Visan,84150,1987,42.182,2.067,1.871,859,6357 -Aunay-les-Bois,61013,151,8.573,0.932,0.844,500,6829 -La Trinité-des-Laitiers,61493,75,11.299,1.070,0.969,509,6856 -Le Plantis,61331,151,8.242,0.914,0.828,510,6837 -Coulmer,61122,86,6.711,0.825,0.747,503,6854 -Orgères,61317,153,12.204,1.112,1.007,503,6855 -Champeaux-sur-Sarthe,61087,170,9.504,0.981,0.888,510,6831 -Gâprée,61183,132,10.102,1.012,0.916,501,6837 -Les Authieux-du-Puits,61017,69,4.387,0.667,0.604,505,6848 -Saint-Langis-lès-Mortagne,61414,920,12.799,1.139,1.031,517,6823 -Planches,61330,193,12.566,1.128,1.021,508,6844 -Saint-Evroult-Notre-Dame-du-Bois,61386,460,34.499,1.870,1.693,514,6860 -Cierrey,27158,730,4.025,0.639,0.579,575,6880 -Le Sap-André,61461,115,9.504,0.981,0.888,507,6865 -Bazoches-sur-Hoëne,61029,871,21.513,1.476,1.336,514,6834 -Coulimer,61121,296,17.289,1.324,1.199,511,6821 -Semblançay,37245,2172,35.759,1.903,1.723,514,6715 -Saint-Hilaire-le-Châtel,61404,652,22.573,1.512,1.369,516,6829 -Mortagne-au-Perche,61293,3873,8.664,0.937,0.848,522,6827 -Barésia-sur-l'Ain,39038,153,11.105,1.061,0.961,908,6606 -Le Vieil-Évreux,27684,804,11.590,1.084,0.981,570,6878 -Tellières-le-Plessis,61481,77,5.515,0.748,0.677,506,6838 -Saint-Ouen-de-Sécherouvre,61438,178,10.159,1.015,0.919,515,6833 -Gadencourt,27273,383,3.897,0.628,0.569,582,6877 -Touquettes,61488,91,9.807,0.997,0.903,510,6860 -Le Chalange,61082,103,6.359,0.803,0.727,501,6837 -Moncontour,86161,979,41.424,2.049,1.855,473,6641 -Barville,61026,194,7.611,0.878,0.795,504,6821 -Ferrières-la-Verrerie,61166,155,14.638,1.218,1.103,508,6844 -Saint-Aubin-de-Courteraie,61367,134,10.271,1.020,0.924,510,6835 -Aube,61008,1316,5.734,0.762,0.690,518,6849 -Marchemaisons,61251,152,8.835,0.946,0.857,502,6830 -Saint-Agnan-sur-Sarthe,61360,110,6.640,0.820,0.742,511,6840 -La Ferté-en-Ouche,61167,3218,132.746,3.667,3.320,511,6862 -Résenlieu,61347,175,5.081,0.718,0.650,499,6858 -Cravent,78188,453,6.106,0.787,0.713,591,6877 -Bures,61067,165,9.609,0.987,0.894,511,6831 -Courtomer,61133,727,20.297,1.434,1.298,503,6837 -Saint-Pierre-des-Loges,61446,157,9.945,1.004,0.909,515,6853 -Auguaise,61012,202,2.212,0.473,0.428,519,6847 -Saint-Hilaire-sur-Risle,61406,314,6.662,0.822,0.744,518,6852 -Moulins-la-Marche,61297,747,13.175,1.155,1.046,513,6840 -Saint-Quentin-de-Blavou,61450,72,6.431,0.807,0.731,508,6822 -Grand-Auverné,44065,772,34.757,1.877,1.699,375,6732 -Saint-Aquilin-de-Corbion,61363,72,6.088,0.785,0.711,516,6840 -La Hague,50041,11785,150.035,3.899,3.530,345,6963 -Hautefond,71232,210,13.626,1.175,1.064,793,6594 -Cisai-Saint-Aubin,61108,155,14.609,1.217,1.102,508,6854 -Brullemail,61064,96,10.460,1.029,0.932,501,6842 -Pia,66141,8888,13.402,1.165,1.055,693,6186 -Fay,61159,71,8.506,0.928,0.840,509,6846 -La Genevraie,61188,104,13.449,1.167,1.057,499,6844 -Laleu,61215,362,11.471,1.078,0.976,503,6833 -Saint-Beauzile,81243,127,9.392,0.976,0.884,608,6324 -Santo-Pietro-di-Tenda,2B314,360,125.849,3.571,3.233,1214,6193 -Saint-Evroult-de-Montfort,61385,345,22.510,1.510,1.367,506,6862 -Courgeoût,61130,446,18.035,1.352,1.224,516,6824 -Guinecourt,62396,18,2.238,0.476,0.431,646,7029 -Fessanvilliers-Mattanvilliers,28151,175,11.816,1.094,0.991,558,6847 -Verneuil d'Avre et d'Iton,27679,8164,56.119,2.385,2.159,544,6853 -Marollette,72188,150,5.766,0.764,0.692,506,6813 -Villiers-sous-Mortagne,61507,286,13.193,1.156,1.047,523,6827 -Lamure-sur-Azergues,69107,1048,15.524,1.254,1.135,817,6549 -Montigny-sur-Avre,28263,261,7.462,0.870,0.788,556,6850 -Vertrieu,38539,653,4.449,0.671,0.608,881,6533 -Saint-Martin-d'Écublei,61423,642,12.079,1.106,1.001,527,6860 -Pont-Saint-Martin,44130,5877,21.900,1.490,1.349,356,6682 -Beauche,28030,273,16.907,1.309,1.185,551,6841 -Migré,17234,321,14.447,1.210,1.096,427,6560 -Chandai,61092,658,13.832,1.184,1.072,534,6849 -Pontgouin,28302,1121,25.431,1.605,1.453,560,6824 -Irai,61208,605,15.108,1.237,1.120,530,6847 -Rueil-la-Gadelière,28322,510,18.918,1.384,1.253,551,6850 -Bois-Arnault,27069,711,12.938,1.145,1.037,538,6861 -Pouvrai,61336,108,6.826,0.832,0.753,517,6799 -Rugles,27502,2279,14.146,1.197,1.084,532,6858 -Écorcei,61151,378,9.586,0.986,0.893,522,6847 -Saint-Pierre-des-Ormes,72313,226,10.248,1.019,0.923,509,6805 -Écotay-l'Olme,42087,1223,6.429,0.807,0.731,781,6498 -Mandres,27383,371,11.795,1.093,0.990,541,6854 -Saint-Jeoire-Prieuré,73249,1568,5.349,0.736,0.666,935,6498 -Montrevault-sur-Èvre,49218,15971,199.938,4.501,4.075,404,6698 -Le Mesnil-Thomas,28248,338,16.345,1.287,1.165,562,6835 -Savigny,74260,849,10.380,1.026,0.929,930,6558 -Le Pas-Saint-l'Homer,61323,139,9.442,0.978,0.885,548,6824 -Vriange,39584,152,5.900,0.773,0.700,896,6677 -Louvilliers-lès-Perche,28217,181,14.567,1.215,1.100,557,6835 -Gournay-le-Guérin,27291,132,12.302,1.116,1.010,536,6851 -Saint-Germain-de-la-Coudre,61394,762,26.211,1.630,1.476,525,6795 -Acon,27002,473,9.267,0.969,0.877,561,6851 -Droisy,27206,434,17.704,1.339,1.212,566,6856 -Saint-Michel-Tubœuf,61432,635,8.816,0.945,0.856,532,6853 -Garancières-en-Drouais,28170,270,6.531,0.813,0.736,575,6847 -Les Genettes,61187,193,6.519,0.813,0.736,523,6841 -Saint-Ange-et-Torçay,28323,286,16.659,1.299,1.176,568,6837 -La Puisaye,28310,287,20.576,1.444,1.307,552,6838 -Saint-Sauveur-Marville,28360,920,18.946,1.386,1.255,571,6836 -Bâlines,27036,563,3.749,0.616,0.558,550,6853 -Puiseux,28312,140,5.221,0.727,0.658,578,6839 -Pullay,27481,401,11.990,1.102,0.998,541,6847 -Jaudrais,28200,394,15.391,1.249,1.131,562,6835 -Nogent-sur-Aube,10267,327,16.020,1.274,1.153,797,6823 -Meaucé,28240,560,11.602,1.084,0.981,549,6823 -Lamblore,28202,343,10.835,1.048,0.949,547,6836 -Louye,27376,229,5.257,0.730,0.661,575,6856 -Bizou,61046,129,9.175,0.964,0.873,535,6821 -Courgeon,61129,371,10.588,1.036,0.938,525,6824 -Louvilliers-en-Drouais,28216,202,4.168,0.650,0.589,573,6850 -Saint-Antonin-de-Sommaire,27508,184,7.099,0.848,0.768,528,6859 -Trévron,22380,690,9.842,0.999,0.905,323,6820 -Le Mage,61242,235,25.603,1.611,1.459,539,6821 -Armentières-sur-Avre,27019,173,6.129,0.788,0.713,537,6844 -Courteilles,27182,147,6.237,0.795,0.720,552,6849 -Brezolles,28059,1819,14.284,1.203,1.089,555,6844 -Saint-Nicolas-de-Sommaire,61435,267,16.279,1.284,1.163,526,6861 -La Chapelle-Viel,61100,274,11.793,1.093,0.990,522,6847 -Saint-Christophe-sur-Avre,27521,146,10.740,1.043,0.944,536,6846 -Les Menus,61274,234,11.848,1.096,0.992,547,6828 -Breux-sur-Avre,27115,345,7.214,0.855,0.774,559,6852 -La Rochette,7195,56,14.143,1.197,1.084,800,6425 -Tourouvre au Perche,61491,3182,94.410,3.093,2.800,530,6843 -Novillard,90074,298,3.845,0.624,0.565,997,6729 -La Chapelle-Fortin,28077,189,14.566,1.215,1.100,544,6839 -Chéronvilliers,27156,521,21.549,1.478,1.338,538,6860 -Ambenay,27009,571,16.842,1.306,1.182,536,6864 -Rohaire,28316,129,10.037,1.008,0.913,539,6843 -Saint-Valery-sur-Somme,80721,2562,10.550,1.034,0.936,603,7009 -Beaulieu,61034,210,18.094,1.354,1.226,531,6842 -Saint-Lubin-de-Cravant,28346,57,6.935,0.838,0.759,558,6847 -Revercourt,28315,22,5.526,0.748,0.677,561,6849 -Les Barils,27038,260,9.581,0.985,0.892,539,6851 -Le Boullay-Mivoye,28054,477,11.064,1.059,0.959,583,6838 -Saint-Ouen-sur-Iton,61440,837,14.324,1.205,1.091,525,6851 -Saint-Symphorien-des-Bruyères,61457,506,16.176,1.280,1.159,524,6858 -Vitrai-sous-Laigle,61510,231,11.438,1.077,0.975,531,6847 -Boisset-Saint-Priest,42021,1208,18.276,1.361,1.232,788,6489 -L'Aigle,61214,8075,18.476,1.368,1.239,527,6853 -Bourth,27108,1295,18.670,1.375,1.245,537,6855 -La Mancelière,28231,191,5.938,0.776,0.703,553,6839 -Mévoisins,28249,624,4.317,0.661,0.598,596,6831 -Les Châtelets,28090,100,9.896,1.001,0.906,554,6844 -Sainte-Colombe,77404,1816,8.155,0.909,0.823,720,6824 -Feings,61160,199,20.359,1.436,1.300,528,6827 -Crulai,61140,871,22.810,1.520,1.376,530,6847 -Longny les Villages,61230,3024,153.041,3.938,3.566,539,6837 -Saint-Mard-de-Réno,61418,439,19.204,1.395,1.263,528,6827 -Sames,64502,704,13.077,1.151,1.042,360,6280 -Saint-Victor-sur-Avre,27610,59,6.906,0.836,0.757,544,6848 -Saint-Maurice-Saint-Germain,28354,414,12.178,1.111,1.006,560,6822 -Morvilliers,28271,158,9.991,1.006,0.911,549,6843 -Fresnay-le-Gilmert,28163,196,6.069,0.784,0.710,585,6825 -La Saucelle,28368,192,14.245,1.201,1.087,552,6838 -Savas,7310,904,12.553,1.128,1.021,830,6467 -Belhomert-Guéhouville,28033,800,10.973,1.054,0.954,554,6826 -Saint-Rémy-des-Monts,72316,689,10.279,1.021,0.924,506,6808 -Saint-Vincent-des-Prés,72324,519,10.607,1.037,0.939,507,6801 -Monhoudou,72202,212,7.550,0.875,0.792,503,6801 -Commerveil,72086,134,5.697,0.760,0.688,503,6804 -Blèves,72037,97,2.055,0.456,0.413,503,6821 -Cresserons,14197,1158,3.623,0.606,0.549,455,6916 -Pizieux,72238,77,4.513,0.676,0.612,503,6807 -Escondeaux,65161,280,3.810,0.621,0.562,468,6252 -Saint-Longis,72295,504,11.226,1.067,0.966,501,6810 -Comblot,61113,64,4.369,0.665,0.602,520,6820 -Menat,63223,554,20.525,1.442,1.306,693,6552 -Suré,61476,278,17.439,1.329,1.203,511,6812 -Bellavilliers,61037,144,15.881,1.268,1.148,516,6819 -Vieuvy,53270,127,7.314,0.861,0.780,414,6825 -Saint-Jouin-de-Blavou,61411,282,17.908,1.347,1.220,515,6822 -Igé,61207,647,27.942,1.683,1.524,519,6805 -Montgaudry,61286,82,11.204,1.065,0.964,506,6812 -Villeneuve-les-Genêts,89462,283,25.050,1.593,1.442,702,6738 -Vaunoise,61498,100,7.679,0.882,0.799,513,6807 -Pont-l'Abbé-d'Arnoult,17284,1814,12.499,1.125,1.019,403,6534 -Chemilli,61105,198,10.981,1.055,0.955,512,6807 -Belforêt-en-Perche,61196,1672,75.426,2.764,2.503,512,6812 -Appenai-sous-Bellême,61005,271,10.923,1.052,0.952,522,6808 -Lestards,19112,105,18.757,1.379,1.249,613,6493 -Origny-le-Roux,61319,268,14.340,1.205,1.091,506,6808 -La Chapelle-Souëf,61099,260,11.270,1.069,0.968,519,6804 -Le Dézert,50161,586,14.771,1.223,1.107,398,6906 -Le Pin-la-Garenne,61329,660,15.860,1.268,1.148,520,6820 -Sévignacq-Meyracq,64522,545,14.906,1.229,1.113,423,6232 -Saint-Fulgent-des-Ormes,61388,165,8.451,0.925,0.838,512,6807 -Saint-Romain-sous-Gourdon,71477,473,18.920,1.385,1.254,811,6611 -Moncé-en-Saosnois,72201,258,8.928,0.951,0.861,504,6801 -Saint-Prest,28358,1997,16.873,1.308,1.184,591,6820 -Mangonville,54344,231,3.861,0.625,0.566,942,6822 -Goussainville,28185,1279,13.249,1.159,1.049,596,6854 -Nonancourt,27438,2284,7.315,0.861,0.780,564,6856 -Maulette,78381,951,7.914,0.895,0.810,596,6853 -Saint-Germain-sur-Avre,27548,1184,5.498,0.746,0.675,573,6855 -Boutigny-Prouais,28056,1757,32.994,1.828,1.655,599,6850 -Fontaine-les-Ribouts,28155,209,7.139,0.850,0.770,570,6843 -Le Puech,34220,238,15.945,1.271,1.151,730,6287 -Thimert-Gâtelles,28386,1267,42.815,2.083,1.886,574,6825 -La Madeleine-de-Nonancourt,27378,1148,22.550,1.512,1.369,571,6854 -Villiers-le-Morhier,28417,1350,10.581,1.035,0.937,596,6835 -Châtaincourt,28087,240,14.809,1.225,1.109,571,6848 -Establet,26123,28,12.728,1.136,1.029,892,6382 -Saint-Georges-Motel,27543,903,4.979,0.710,0.643,580,6857 -Bergueneuse,62109,217,2.805,0.533,0.483,648,7041 -Jouy,28201,1945,13.001,1.148,1.039,590,6825 -Le Teilleul,50591,1715,67.893,2.623,2.375,415,6829 -ÃŽle-de-Bréhat,22016,364,3.163,0.566,0.512,257,6877 -Cherisy,28098,1870,12.461,1.124,1.018,583,6851 -Les Pinthières,28299,182,4.045,0.640,0.579,596,6847 -Bailleau-l'Évêque,28022,1174,19.834,1.418,1.284,584,6824 -Senantes,28372,586,7.701,0.883,0.799,597,6841 -Dampierre-sur-Avre,28124,745,18.358,1.364,1.235,564,6856 -Favières,28147,602,12.806,1.139,1.031,569,6825 -Montgilbert,73168,122,9.580,0.985,0.892,954,6499 -Peyre en Aubrac,48009,2322,153.389,3.942,3.569,728,6403 -Garnay,28171,872,14.378,1.207,1.093,576,6845 -Ontex,73193,100,4.597,0.682,0.617,920,6520 -Houdan,78310,3627,10.423,1.028,0.931,599,6857 -Rasiguères,66158,153,13.870,1.185,1.073,666,6183 -Coltainville,28104,877,17.973,1.349,1.221,598,6820 -Bezonvaux,55050,0,9.261,0.969,0.877,881,6905 -Laons,28206,693,15.868,1.268,1.148,565,6848 -Marché-Allouarde,80508,56,2.094,0.461,0.417,692,6959 -Saint-Maixme-Hauterive,28351,424,32.068,1.803,1.632,564,6830 -Argences en Aubrac,12223,1671,153.872,3.948,3.575,695,6409 -Allainville,28003,137,5.341,0.736,0.666,573,6847 -Maillebois,28226,930,41.291,2.045,1.852,566,6842 -Boissy-en-Drouais,28045,203,6.081,0.785,0.711,572,6848 -Le Fayel,60229,223,2.610,0.514,0.465,677,6920 -Briconville,28060,239,6.264,0.797,0.722,582,6827 -Vennezey,54561,51,3.467,0.593,0.537,957,6822 -Mittainville,78407,604,10.656,1.039,0.941,600,6840 -Challain-la-Potherie,49061,816,48.682,2.221,2.011,389,6732 -Montreuil,28267,504,6.290,0.798,0.723,582,6852 -Villemeux-sur-Eure,28415,1608,18.892,1.384,1.253,587,6839 -Le Boullay-Thierry,28055,556,13.043,1.150,1.041,586,6836 -Rouvres-sous-Meilly,21533,91,4.456,0.672,0.608,822,6679 -Aunay-sous-Crécy,28014,616,8.508,0.928,0.840,577,6840 -Crécy-Couvé,28117,259,6.680,0.823,0.745,574,6845 -Le Tartre-Gaudran,78606,35,4.305,0.660,0.598,596,6845 -Muzy,27423,821,9.096,0.960,0.869,579,6854 -Lormaye,28213,663,1.452,0.384,0.348,592,6840 -Lyon,69123,515695,47.992,2.205,1.996,847,6517 -Billancelles,28040,325,12.076,1.106,1.001,568,6826 -Esténos,31176,185,3.350,0.583,0.528,505,6207 -Saint-Lucien,28349,255,8.827,0.946,0.857,597,6838 -Savigneux,42299,3432,19.051,1.389,1.258,787,6502 -Abondant,28001,2358,35.125,1.887,1.709,580,6857 -Saint-Piat,28357,1047,11.503,1.080,0.978,595,6826 -Marson,51354,294,30.909,1.770,1.603,809,6870 -Pierres,28298,2786,10.533,1.033,0.935,592,6835 -La Chapelle-Forainvilliers,28076,204,5.431,0.742,0.672,591,6849 -Ardelles,28008,199,10.418,1.027,0.930,564,6830 -Launay,27364,202,2.336,0.487,0.441,535,6891 -Charpont,28082,586,7.220,0.855,0.774,583,6846 -Courcelles,17125,474,6.758,0.827,0.749,432,6546 -Sainte-Gemme-Moronval,28332,1095,5.544,0.749,0.678,586,6850 -Villorceau,45344,1138,9.534,0.983,0.890,593,6744 -Ouerre,28292,735,12.746,1.136,1.029,586,6847 -Bussière-Saint-Georges,23038,255,22.309,1.503,1.361,635,6586 -Bouglainval,28052,775,14.491,1.212,1.097,592,6832 -Saint-Jean-de-Maruéjols-et-Avéjan,30266,954,17.613,1.336,1.210,807,6352 -Saulnières,28369,694,10.740,1.043,0.944,574,6839 -Saint-Martin-de-Nigelles,28352,1564,12.506,1.126,1.019,596,6835 -Lardier-et-Valença,5071,329,14.805,1.225,1.109,938,6373 -Clévilliers,28102,705,15.914,1.270,1.150,580,6826 -Chaudon,28094,1680,11.494,1.079,0.977,590,6843 -Sainte-Eulalie-de-Cernon,12220,286,46.587,2.173,1.967,714,6320 -Courdemanche,27181,597,9.114,0.961,0.870,572,6858 -Sainte-Catherine,69184,988,13.731,1.180,1.068,821,6499 -Mézières-en-Drouais,28251,1079,8.516,0.929,0.841,587,6848 -Bernay,27056,10392,24.114,1.563,1.415,529,6890 -Saint-Lubin-des-Joncherets,28348,4020,14.443,1.210,1.096,565,6854 -Grandchamp,78283,326,6.104,0.786,0.712,597,6846 -Saint-Julien-de-Coppel,63368,1270,21.714,1.483,1.343,722,6514 -Vert-en-Drouais,28405,1100,9.735,0.993,0.899,573,6853 -Bû,28064,1948,23.059,1.529,1.384,586,6859 -Serazereux,28374,559,15.735,1.263,1.144,585,6831 -Chamouillac,17081,375,8.252,0.914,0.828,427,6472 -Nogent-le-Roi,28279,4132,13.189,1.156,1.047,593,6835 -Maintenon,28227,4245,11.508,1.080,0.978,596,6835 -Néron,28275,654,19.294,1.398,1.266,592,6835 -Saint-Arnoult-des-Bois,28324,890,20.663,1.447,1.310,569,6825 -Escorpain,28143,249,9.565,0.984,0.891,570,6850 -Portet,64455,170,7.895,0.894,0.809,442,6278 -Houx,28195,766,6.353,0.802,0.726,597,6830 -Plainville,27460,190,6.515,0.812,0.735,517,6891 -Berchères-Saint-Germain,28034,831,27.883,1.681,1.522,590,6826 -Prudemanche,28308,256,15.460,1.252,1.134,566,6848 -Mesnil-sur-l'Estrée,27406,912,5.834,0.769,0.696,575,6856 -Bréchamps,28058,335,5.513,0.747,0.676,591,6840 -Breteuil,27112,4495,55.323,2.368,2.144,547,6856 -Le Fidelaire,27242,1024,33.416,1.840,1.666,538,6877 -Émanville,27217,583,10.811,1.047,0.948,547,6890 -Beaumontel,27050,666,11.689,1.088,0.985,541,6892 -Épreville-près-le-Neubourg,27224,478,7.750,0.886,0.802,547,6893 -Saint-Jean-du-Thenney,27552,244,8.393,0.922,0.835,512,6881 -Épégard,27219,569,4.365,0.665,0.602,543,6900 -Plasnes,27463,709,16.275,1.284,1.163,527,6898 -Villers-au-Tertre,59620,619,4.563,0.680,0.616,714,7022 -Saint-Aubin-d'Écrosville,27511,704,14.726,1.221,1.106,552,6893 -Saint-Ciers-du-Taillon,17317,552,22.086,1.496,1.355,413,6488 -Broglie,27117,1076,7.989,0.900,0.815,518,6879 -Doullens,80253,6279,33.123,1.832,1.659,655,7001 -Menneval,27398,1400,6.643,0.820,0.742,524,6893 -Saint-Martin-des-Prés,22313,320,20.616,1.445,1.308,257,6820 -La Houssaye,27345,210,4.314,0.661,0.598,538,6878 -Hurtières,38192,166,3.405,0.587,0.531,932,6470 -Bois-Normand-près-Lyre,27075,339,16.891,1.308,1.184,534,6870 -Combre,42068,440,4.010,0.637,0.577,799,6548 -Juignettes,27359,213,13.039,1.149,1.040,526,6864 -Ormes,27446,500,14.148,1.197,1.084,553,6885 -Beaumont-le-Roger,27051,2946,36.562,1.925,1.743,539,6883 -Saint-Martin-la-Campagne,27570,98,3.492,0.595,0.539,561,6887 -Saint-Aubin-du-Thenney,27514,373,14.053,1.193,1.080,518,6880 -Ferrières-Haut-Clocher,27238,1188,11.375,1.074,0.972,555,6880 -Notre-Dame-du-Hamel,27442,216,13.685,1.178,1.067,518,6870 -Cressonsacq,60177,451,6.503,0.812,0.735,671,6927 -Saint-Agnan-de-Cernières,27505,155,7.506,0.872,0.790,521,6876 -La Croisille,27189,445,5.370,0.738,0.668,552,6877 -Saint-Bénigne,1337,1254,16.490,1.293,1.171,851,6594 -Ferrières-Saint-Hilaire,27239,417,9.848,0.999,0.905,524,6885 -Bérengeville-la-Campagne,27055,316,9.382,0.975,0.883,560,6892 -Chamblac,27138,391,21.151,1.464,1.326,523,6882 -Bacquepuis,27033,317,5.117,0.720,0.652,557,6888 -Collandres-Quincarnon,27162,226,7.975,0.899,0.814,543,6881 -Berville-la-Campagne,27063,243,8.682,0.938,0.849,544,6881 -Le Val-Doré,27447,919,20.132,1.428,1.293,552,6877 -Marbois,27157,1413,46.819,2.178,1.972,544,6867 -Montreuil-l'Argillé,27414,812,13.840,1.184,1.072,517,6875 -Courbépine,27179,732,12.145,1.109,1.004,521,6897 -Faverolles-la-Campagne,27235,155,4.711,0.691,0.626,548,6882 -Les Baux-de-Breteuil,27043,658,34.243,1.863,1.687,539,6860 -Les Bottereaux,27096,354,22.261,1.502,1.360,532,6864 -Fontaine-l'Abbé,27251,516,13.228,1.158,1.048,529,6890 -Saint-Léger-de-Rôes,27557,418,6.536,0.814,0.737,528,6892 -Barc,27037,1214,11.522,1.080,0.978,543,6891 -Saint-Denis-d'Augerons,27530,88,4.283,0.659,0.597,516,6872 -Épizon,52187,178,37.714,1.955,1.770,876,6811 -Glisolles,27287,833,10.949,1.053,0.953,556,6878 -Combon,27164,821,16.224,1.282,1.161,547,6893 -Les Ventes,27678,1047,20.633,1.446,1.309,557,6878 -Mesnil-Rousset,27404,92,7.297,0.860,0.779,521,6867 -Le Neubourg,27428,4127,9.903,1.002,0.907,548,6894 -Villettes,27692,175,6.852,0.833,0.754,556,6896 -Nogent-le-Sec,27436,419,10.137,1.013,0.917,552,6869 -Capelle-les-Grands,27130,433,13.327,1.162,1.052,513,6884 -Saint-Germain-le-Gaillard,50480,742,14.033,1.192,1.079,356,6941 -Louversey,27374,544,10.774,1.045,0.946,547,6882 -Le Plessis-Sainte-Opportune,27466,334,11.441,1.077,0.975,542,6885 -Le Lesme,27565,666,26.513,1.639,1.484,545,6867 -Sébécourt,27618,480,14.834,1.226,1.110,538,6878 -Belmont-Tramonet,73039,561,5.463,0.744,0.674,909,6498 -Le Noyer-en-Ouche,27444,227,10.966,1.054,0.954,539,6883 -Lacabarède,81121,309,14.636,1.218,1.103,669,6264 -Caorches-Saint-Nicolas,27129,585,11.925,1.099,0.995,519,6891 -Saint-James,50487,5006,87.638,2.980,2.698,378,6839 -Pleaux,15153,1503,93.270,3.074,2.783,635,6443 -Mesnil-en-Ouche,27049,4700,166.361,4.106,3.718,521,6875 -Saint-Pierre-de-Cernières,27590,219,11.835,1.095,0.991,520,6873 -Le Tilleul-Lambert,27641,248,5.813,0.767,0.694,550,6890 -Bois-Anzeray,27068,176,11.700,1.089,0.986,528,6870 -Beaubray,27047,320,15.442,1.251,1.133,547,6874 -La Chapelle-Gauthier,27148,404,16.593,1.297,1.174,518,6880 -Saint-Martin-de-Bienfaite-la-Cressonnière,14621,461,11.686,1.088,0.985,508,6887 -Barquet,27040,442,13.945,1.189,1.077,540,6883 -Grand-Camp,27295,488,14.109,1.196,1.083,522,6887 -Franqueville,27266,335,3.232,0.572,0.518,531,6898 -Claville,27161,1084,17.761,1.341,1.214,552,6884 -Aviron,27031,1103,7.356,0.863,0.781,564,6886 -Saint-Mards-de-Fresne,27564,340,13.586,1.173,1.062,517,6891 -Viefvillers,60673,182,4.024,0.639,0.579,637,6947 -Neaufles-Auvergny,27427,423,17.411,1.328,1.202,536,6868 -Verel-de-Montbel,73309,300,3.744,0.616,0.558,911,6498 -Romilly-la-Puthenaye,27492,319,11.949,1.100,0.996,541,6879 -Serquigny,27622,1994,11.478,1.078,0.976,534,6893 -Grosley-sur-Risle,27300,524,13.281,1.160,1.050,542,6885 -Drucourt,27207,603,12.024,1.104,1.000,514,6894 -Rumilly-en-Cambrésis,59520,1462,6.685,0.823,0.745,718,7004 -Chambord,27139,156,14.683,1.220,1.105,527,6866 -Portes,27472,269,9.440,0.978,0.885,551,6880 -Saint-Victor-de-Chrétienville,27608,461,5.860,0.771,0.698,516,6887 -Notre-Dame-de-l'Isle,27440,670,11.937,1.100,0.996,585,6895 -La Trinité-de-Réville,27660,241,11.330,1.071,0.970,521,6876 -Saint-Vincent-des-Bois,27612,334,5.334,0.735,0.665,582,6887 -La Haye-Saint-Sylvestre,27323,277,18.574,1.372,1.242,524,6868 -La Goulafrière,27289,163,14.372,1.207,1.093,511,6875 -Saint-Privat-des-Vieux,30294,5149,15.762,1.264,1.144,790,6336 -Saint-Aubin-de-Bonneval,61366,139,11.755,1.091,0.988,508,6878 -Nouzerolles,23147,101,8.165,0.910,0.824,605,6588 -La Chapelle-Hareng,27149,94,4.110,0.645,0.584,511,6894 -Saint-Pierre-la-Garenne,27599,926,7.807,0.889,0.805,585,6895 -Verneusses,27680,204,16.285,1.285,1.163,512,6873 -Saint-Germain-d'Aunay,61392,148,8.562,0.931,0.843,510,6876 -La Vespière-Friardel,14740,1211,18.234,1.359,1.230,513,6883 -Marolles,14403,779,12.392,1.121,1.015,511,6895 -La Folletière-Abenon,14273,133,10.862,1.049,0.950,512,6878 -Irreville,27353,471,5.600,0.753,0.682,568,6891 -Saint-Germain-la-Campagne,27547,887,22.320,1.504,1.362,508,6887 -Cordebugle,14179,150,9.037,0.957,0.866,507,6895 -Sainte-Opportune-du-Bosc,27576,656,8.182,0.910,0.824,543,6900 -Moyeuvre-Grande,57491,7790,9.584,0.985,0.892,920,6908 -Iville,27354,493,8.721,0.940,0.851,551,6900 -Boisney,27074,285,5.621,0.755,0.684,530,6899 -Fontaine-la-Louvet,27252,334,11.040,1.058,0.958,513,6897 -Mauvezin,65306,235,9.993,1.006,0.911,479,6230 -Ouilly-du-Houley,14484,237,9.076,0.959,0.868,506,6897 -Le Theil-Nolent,27627,253,4.123,0.646,0.585,519,6897 -Berthouville,27061,304,7.523,0.873,0.790,525,6898 -Saint-Jean-de-la-Blaquière,34268,631,17.293,1.324,1.199,736,6292 -Harcourt,27311,1039,15.248,1.243,1.125,541,6898 -Dénezé-sous-Doué,49121,464,23.933,1.557,1.410,456,6691 -Bazoques,27046,163,6.924,0.838,0.759,523,6899 -Bailly-Romainvilliers,77018,7564,7.816,0.890,0.806,686,6859 -Boissy-Lamberville,27079,342,8.093,0.906,0.820,525,6899 -Aclou,27001,322,3.770,0.618,0.560,531,6898 -Folleville,27248,201,6.108,0.787,0.713,522,6896 -Cailly-sur-Eure,27124,221,3.299,0.578,0.523,569,6892 -Normanville,27439,1083,9.070,0.959,0.868,568,6885 -Lacanau,33214,4745,217.931,4.699,4.255,385,6445 -Tourneville,27652,328,7.251,0.857,0.776,563,6889 -Saint-Marcel,27562,4541,10.023,1.008,0.913,584,6888 -Gravigny,27299,3915,10.044,1.009,0.914,568,6885 -La Pellerine,53177,355,8.401,0.923,0.836,399,6809 -Hennezis,27329,785,15.637,1.259,1.140,585,6900 -Rouvray,27501,267,2.502,0.503,0.455,579,6887 -Acquigny,27003,1531,17.866,1.345,1.218,564,6895 -Brosville,27118,627,7.202,0.854,0.773,560,6892 -Hondouville,27339,799,6.992,0.842,0.762,565,6895 -Blaru,78068,888,14.988,1.232,1.115,590,6882 -Vaux-sur-Eure,27674,273,2.880,0.540,0.489,577,6882 -Reuilly,27489,531,9.709,0.992,0.898,570,6890 -Émalleville,27216,536,4.204,0.653,0.591,566,6890 -Jouy-sur-Eure,27358,574,9.761,0.994,0.900,578,6886 -Saint-Étienne-sous-Bailleul,27539,393,4.322,0.662,0.599,584,6890 -Le Val d'Hazey,27022,5538,14.743,1.222,1.106,579,6900 -Berméricourt,51051,198,8.102,0.906,0.820,773,6917 -Clef Vallée d'Eure,27191,2519,25.902,1.620,1.467,573,6889 -Liederschiedt,57402,125,6.024,0.781,0.707,1027,6900 -Gaillon,27275,6977,10.362,1.025,0.928,581,6899 -Chauvé,44038,2814,40.994,2.038,1.845,322,6681 -Heudreville-sur-Eure,27335,1048,14.303,1.204,1.090,569,6891 -Champenard,27142,265,2.325,0.485,0.439,578,6890 -Saint-Nicolas-de-la-Taille,76627,1531,9.328,0.972,0.880,516,6936 -Autheuil-Authouillet,27025,958,11.731,1.090,0.987,577,6892 -Hyet,70288,123,6.422,0.807,0.731,931,6715 -Fontaine-sous-Jouy,27254,887,7.330,0.862,0.780,572,6885 -Bavent,14046,1791,18.546,1.371,1.241,468,6910 -Le Mesnil-Jourdain,27403,231,10.422,1.028,0.931,565,6901 -Cumières-le-Mort-Homme,55139,0,6.111,0.787,0.713,862,6906 -La Chapelle-Longueville,27554,3416,19.684,1.412,1.278,582,6891 -La Vacherie,27666,561,7.652,0.881,0.798,565,6893 -Le Mesnil-Fuguet,27401,174,3.575,0.602,0.545,563,6888 -Saint-Pierre-de-Bailleul,27589,963,6.487,0.811,0.734,584,6894 -Auge,8030,61,4.546,0.679,0.615,793,6974 -Houlbec-Cocherel,27343,1320,11.732,1.090,0.987,578,6886 -Moulhard,28273,144,11.448,1.077,0.975,556,6793 -Hermival-les-Vaux,14326,814,13.949,1.189,1.077,504,6899 -Grossœuvre,27301,1215,16.405,1.289,1.167,565,6874 -La Trinité,27659,116,2.979,0.549,0.497,570,6878 -Oulins,28293,1203,10.315,1.022,0.925,587,6865 -La Boissière,27078,273,3.440,0.590,0.534,580,6875 -Hécourt,27326,339,7.743,0.886,0.802,583,6879 -Réjaumont,32341,239,13.765,1.181,1.069,500,6306 -Le Val-David,27668,732,6.792,0.830,0.751,572,6876 -Ligré,37129,1069,27.797,1.678,1.519,491,6674 -Montmelard,71316,349,22.355,1.505,1.363,810,6580 -Arnières-sur-Iton,27020,1641,11.950,1.100,0.996,564,6879 -Saint-Vincent-des-Landes,44193,1521,33.758,1.849,1.674,359,6736 -Guichainville,27306,2682,15.330,1.246,1.128,568,6875 -Chavigny-Bailleul,27154,587,18.462,1.368,1.239,567,6864 -Le Plessis-Hébert,27465,396,11.790,1.093,0.990,580,6875 -Dolancourt,10126,137,4.880,0.703,0.637,821,6799 -Villiers-en-Désœuvre,27696,921,14.673,1.219,1.104,591,6874 -Miserey,27410,634,8.130,0.908,0.822,575,6882 -Breuilpont,27114,1227,12.307,1.117,1.011,587,6878 -Mouettes,27419,772,8.347,0.920,0.833,581,6868 -Le Cormier,27171,407,10.566,1.035,0.937,577,6877 -Guainville,28187,690,14.388,1.207,1.093,591,6870 -Bueil,27119,1632,4.898,0.704,0.637,587,6872 -Saint-Ouen-Marchefroy,28355,293,9.375,0.975,0.883,592,6865 -Meslières,25378,372,2.961,0.548,0.496,994,6710 -La Fouillouse,42097,4442,21.101,1.462,1.324,800,6492 -Évreux,27229,48899,26.440,1.637,1.482,561,6884 -Pacy-sur-Eure,27448,5092,22.001,1.493,1.352,585,6882 -Le Plessis-Grohan,27464,859,8.237,0.914,0.828,565,6874 -Bannes,46017,128,10.135,1.013,0.917,617,6413 -Les Baux-Sainte-Croix,27044,854,17.085,1.316,1.192,564,6877 -Crasville-la-Mallet,76189,152,3.217,0.571,0.517,534,6970 -La Chaussée-d'Ivry,28096,1123,8.472,0.926,0.838,587,6868 -Seninghem,62788,737,15.274,1.244,1.126,632,7066 -Pornic,44131,14703,94.635,3.097,2.804,318,6689 -Lommoye,78344,675,9.525,0.982,0.889,592,6876 -Issoire,63178,14662,19.689,1.412,1.278,717,6495 -Neuville-sur-Touques,61307,226,15.590,1.257,1.138,498,6866 -Le Mas-d'Artige,23125,101,16.359,1.287,1.165,639,6513 -Le Bosc-Renoult,61054,247,12.855,1.141,1.033,506,6872 -Courtonne-la-Meurdrac,14193,660,12.801,1.139,1.031,503,6894 -Avernes-Saint-Gourgon,61018,56,12.153,1.110,1.005,505,6875 -Glos,14303,926,13.015,1.148,1.039,503,6894 -Ourdon,65349,5,2.809,0.533,0.483,454,6220 -Saint-Martin-de-Mailloc,14626,891,7.325,0.861,0.780,500,6892 -Argoules,80025,325,9.501,0.981,0.888,618,7028 -Cléden-Cap-Sizun,29028,956,19.381,1.401,1.268,133,6802 -Courtefontaine,39172,244,13.759,1.181,1.069,910,6676 -Gisy-les-Nobles,89189,570,11.118,1.061,0.961,716,6797 -Saint-Germain-du-Salembre,24418,933,19.591,1.409,1.276,501,6452 -Vougécourt,70576,149,8.835,0.946,0.857,922,6765 -Aulnois-en-Perthois,55015,511,10.790,1.046,0.947,854,6840 -Saint-Médard-la-Rochette,23220,592,38.885,1.985,1.797,638,6546 -Mésangueville,76426,165,10.635,1.038,0.940,596,6938 -Sainte-Marie,58253,81,15.727,1.262,1.143,732,6671 -Cherves-Châtelars,16096,411,30.721,1.764,1.597,506,6528 -Vevy,39558,265,9.823,0.998,0.904,907,6623 -Ranzevelle,70437,18,2.381,0.491,0.445,923,6760 -Tinqueux,51573,10096,4.189,0.651,0.589,771,6904 -Maulay,86151,185,23.055,1.528,1.383,484,6652 -Saint-Gibrien,51483,522,4.019,0.638,0.578,796,6876 -Boëge,74037,1718,15.956,1.271,1.151,963,6576 -Le Ménil-Bérard,61259,75,7.457,0.869,0.787,519,6847 -Houville-en-Vexin,27346,233,8.102,0.906,0.820,580,6910 -Fréauville,76280,132,5.349,0.736,0.666,584,6969 -Passirac,16256,239,14.706,1.221,1.106,463,6477 -Viscomtat,63463,537,25.640,1.612,1.460,756,6528 -Faucompierre,88167,243,2.481,0.501,0.454,971,6788 -Le Bignon-du-Maine,53030,335,14.512,1.213,1.098,430,6765 -Villeloup,10414,120,16.479,1.292,1.170,766,6805 -Thueyts,7322,1207,21.431,1.474,1.335,796,6395 -Bédoin,84017,3101,90.597,3.030,2.743,871,6340 -Arbus,64037,1187,13.814,1.183,1.071,416,6256 -La Résie-Saint-Martin,70444,155,3.290,0.577,0.522,897,6692 -La Vernotte,70549,74,5.617,0.754,0.683,916,6715 -Foisches,8175,187,4.635,0.685,0.620,827,7006 -Saint-Denis-de-Mailloc,14571,298,4.363,0.665,0.602,503,6893 -Wasnes-au-Bac,59645,620,5.221,0.727,0.658,719,7018 -Vougrey,10443,49,4.193,0.652,0.590,793,6776 -Mayot,2473,209,3.558,0.600,0.543,727,6956 -Clermont-Créans,72084,1266,18.167,1.357,1.229,476,6743 -Boult-aux-Bois,8075,141,15.182,1.240,1.123,833,6923 -Croutelle,86088,812,1.494,0.389,0.352,493,6608 -Criquetot-sur-Ouville,76198,815,5.879,0.772,0.699,543,6956 -Montignac-de-Lauzun,47188,284,20.529,1.442,1.306,503,6389 -Saint-Barthélemy-de-Séchilienne,38364,439,12.329,1.118,1.012,925,6442 -Septmonts,2706,557,4.808,0.698,0.632,728,6916 -La Crique,76193,353,10.234,1.018,0.922,573,6957 -Saulx-lès-Champlon,55473,121,7.836,0.891,0.807,894,6890 -Fains,27231,423,3.763,0.617,0.559,583,6879 -Cavan,22034,1530,16.818,1.305,1.182,230,6863 -Bucey-lès-Traves,70105,115,2.784,0.531,0.481,925,6730 -Champrond-en-Gâtine,28071,647,34.381,1.866,1.690,558,6809 -Allenay,80018,260,2.215,0.474,0.429,593,7000 -Sassey,27615,187,4.307,0.661,0.598,568,6885 -Fixem,57214,423,3.533,0.598,0.541,938,6933 -Monestier-Merlines,19141,313,9.491,0.981,0.888,662,6505 -Petitmagny,90079,291,2.223,0.475,0.430,992,6742 -Saint-Étienne-de-Chomeil,15185,215,27.604,1.672,1.514,674,6473 -Reterre,23160,289,17.906,1.347,1.220,660,6555 -Cauroy,8092,189,17.507,1.332,1.206,804,6920 -Châteauneuf,71113,110,1.333,0.368,0.333,796,6569 -Quelaines-Saint-Gault,53186,2175,42.671,2.079,1.882,421,6766 -Villebois-Lavalette,16408,757,7.181,0.853,0.772,489,6488 -Lécussan,31289,260,7.517,0.873,0.790,492,6229 -Montchevrel,61284,240,11.041,1.058,0.958,504,6833 -Luché-Pringé,72175,1568,49.456,2.239,2.027,489,6734 -Paulx,44119,1978,36.024,1.910,1.729,333,6659 -Calcatoggio,2A048,532,23.095,1.530,1.385,1181,6120 -Froideterre,70259,368,2.904,0.542,0.491,965,6739 -Bourgueil,37031,3912,33.017,1.829,1.656,488,6688 -Contalmaison,80206,118,5.706,0.760,0.688,682,6992 -Fauville,27234,356,3.372,0.585,0.530,567,6884 -Saint-Loup,50505,723,6.496,0.811,0.734,385,6850 -Ablon,14001,1210,12.130,1.109,1.004,504,6929 -Clairoix,60156,2152,4.696,0.690,0.625,689,6928 -Saint-Pierre-du-Palais,17386,373,13.002,1.148,1.039,453,6454 -Saint-Jean-le-Centenier,7247,739,14.971,1.232,1.115,824,6387 -Le Plan-de-la-Tour,83094,2714,37.955,1.961,1.776,986,6252 -Cluses,74081,17371,10.458,1.029,0.932,978,6555 -Bromont-Lamothe,63055,974,37.994,1.962,1.776,685,6522 -Chaumont,18060,54,2.154,0.467,0.423,681,6639 -Flexbourg,67139,465,1.789,0.426,0.386,1027,6838 -Banassac-Canilhac,48017,1042,24.687,1.582,1.432,714,6367 -Saint-André-et-Appelles,33369,698,10.277,1.020,0.924,476,6416 -Contrisson,55125,815,11.912,1.099,0.995,847,6858 -La Rixouse,39460,191,12.533,1.127,1.020,918,6602 -Gigney,88200,47,5.163,0.723,0.655,946,6796 -Roannes-Saint-Mary,15163,1078,36.839,1.932,1.749,650,6415 -Ploumagoar,22225,5412,32.141,1.805,1.634,253,6845 -Flagey-Rigney,25242,110,2.970,0.549,0.497,944,6707 -Bouzeron,71051,141,3.644,0.608,0.550,832,6646 -Pont-à-Mousson,54431,14404,21.530,1.477,1.337,925,6877 -Bourréac,65107,107,1.280,0.360,0.326,456,6228 -Le Mesnil-Guillaume,14421,607,3.873,0.626,0.567,503,6893 -Maulévrier-Sainte-Gertrude,76418,982,14.374,1.207,1.093,531,6943 -Baneins,1028,596,9.076,0.959,0.868,849,6560 -Thierville,27631,371,3.645,0.608,0.550,535,6909 -Solérieux,26342,342,8.620,0.935,0.847,845,6361 -Abbans-Dessous,25001,264,3.206,0.570,0.516,919,6676 -Arnos,64048,103,5.731,0.762,0.690,414,6271 -Bégole,65079,210,10.308,1.022,0.925,480,6233 -Davignac,19071,213,30.073,1.746,1.581,631,6489 -Theizé,69246,1205,11.906,1.098,0.994,829,6540 -Santenay,41234,293,30.549,1.759,1.593,558,6718 -Sombacour,25549,632,19.341,1.400,1.268,950,6654 -Villy-Bocage,14760,802,11.596,1.084,0.981,434,6898 -Le Luart,72172,1445,12.425,1.122,1.016,518,6777 -Bordezac,30045,394,9.368,0.974,0.882,785,6358 -Laignelet,35138,1161,15.061,1.235,1.118,391,6815 -Saint-Nizier-de-Fornas,42266,668,15.963,1.272,1.152,783,6478 -Sorquainville,76680,185,4.499,0.675,0.611,524,6958 -La Vacheresse-et-la-Rouillie,88485,129,9.407,0.976,0.884,909,6785 -Vallan,89427,680,11.852,1.096,0.992,743,6738 -Bonnevent-Velloreille,70076,368,5.415,0.741,0.671,922,6705 -Valréas,84138,9457,58.665,2.438,2.207,865,6366 -La Bouillie,22012,857,11.009,1.056,0.956,300,6844 -Schlierbach,68301,1216,11.894,1.098,0.994,1030,6739 -Pélussin,42168,3786,32.451,1.813,1.642,828,6484 -Mouilly,55360,111,11.138,1.062,0.962,887,6885 -Bietlenheim,67038,266,2.207,0.473,0.428,1052,6859 -Weinbourg,67521,434,5.315,0.734,0.665,1027,6872 -Marnézia,39314,95,4.980,0.710,0.643,903,6611 -Chapelle-d'Huin,25122,510,23.891,1.556,1.409,944,6653 -Marson-sur-Barboure,55322,48,5.825,0.768,0.695,880,6838 -Montauban-sur-l'Ouvèze,26189,109,32.617,1.818,1.646,897,6357 -Pessac,33318,61859,38.669,1.979,1.792,403,6413 -Lamotte-Buleux,80462,348,6.142,0.789,0.714,615,7012 -Freix-Anglards,15072,213,17.684,1.339,1.212,648,6435 -Bulan,65111,60,3.406,0.587,0.531,478,6220 -Munwiller,68228,481,6.674,0.822,0.744,1024,6770 -Lolif,50276,557,12.595,1.130,1.023,378,6859 -Tréouergat,29299,335,6.137,0.789,0.714,138,6850 -Mignavillers,70347,338,7.721,0.884,0.800,967,6729 -Clergoux,19056,415,15.837,1.267,1.147,616,6463 -Figanières,83056,2602,28.346,1.695,1.535,986,6277 -Antigny,85005,1058,22.385,1.506,1.364,411,6616 -Saint-Avit,63320,242,19.445,1.404,1.271,661,6530 -Tourville-sur-Odon,14707,1026,1.744,0.420,0.380,444,6898 -Jullouville,50066,2301,21.758,1.485,1.345,364,6864 -Saint-Désirat,7228,894,7.445,0.869,0.787,838,6462 -Port-Sainte-Foy-et-Ponchapt,24335,2492,18.669,1.375,1.245,482,6422 -Francilly-Selency,2330,443,5.467,0.744,0.674,716,6971 -Fresney,27271,338,6.406,0.806,0.730,577,6872 -Bretteville-Saint-Laurent,76144,162,4.030,0.639,0.579,547,6965 -Saint-Hilaire-du-Maine,53226,851,30.511,1.758,1.592,411,6796 -Eschbourg,67133,483,14.099,1.195,1.082,1015,6863 -Échevannes,25211,89,5.338,0.735,0.665,946,6666 -Avesnes-en-Val,76049,280,16.628,1.298,1.175,582,6982 -Guesnain,59276,4651,4.061,0.641,0.580,711,7029 -Châtillon-sur-Lison,25134,9,2.891,0.541,0.490,927,6668 -Bouilh-Péreuilh,65103,86,7.862,0.893,0.809,471,6251 -Saint-Lambert-la-Potherie,49294,2731,14.170,1.198,1.085,425,6717 -Eyzin-Pinet,38160,2228,28.440,1.698,1.537,860,6489 -Épieds,49131,747,27.311,1.663,1.506,474,6679 -Grand-Camp,76318,694,4.942,0.708,0.641,527,6941 -Beaumettes,84013,251,2.658,0.519,0.470,877,6310 -Trésauvaux,55515,70,3.928,0.631,0.571,891,6889 -Cannes-et-Clairan,30066,541,12.128,1.109,1.004,786,6315 -Hardanges,53114,202,18.477,1.368,1.239,450,6811 -Septsarges,55484,48,8.891,0.949,0.859,857,6913 -Larzicourt,51316,280,16.850,1.307,1.183,831,6841 -Rives-en-Seine,76164,4143,34.240,1.863,1.687,539,6934 -Moncel-lès-Lunéville,54373,630,22.285,1.503,1.361,964,6838 -Crosville-la-Vieille,27192,596,7.797,0.889,0.805,550,6894 -Cléville,14163,372,8.707,0.939,0.850,474,6896 -Camlez,22028,911,11.767,1.092,0.989,234,6873 -Venise,25598,509,6.129,0.788,0.713,934,6700 -Champagnier,38068,1235,6.858,0.834,0.755,913,6452 -Theillay,41256,1284,96.429,3.126,2.830,623,6687 -Herlincourt,62435,106,2.973,0.549,0.497,649,7029 -Boult,70085,595,14.625,1.217,1.102,925,6700 -Balan,8043,1613,4.670,0.688,0.623,841,6954 -Les Préaux,27476,383,5.973,0.778,0.704,516,6916 -Plourac'h,22231,322,32.612,1.818,1.646,212,6832 -Saint-Gineis-en-Coiron,7242,114,13.566,1.172,1.061,821,6392 -Celles-lès-Condé,2146,84,3.912,0.630,0.570,743,6879 -Auchel,62048,10443,5.985,0.779,0.705,661,7048 -Eckartswiller,67117,425,12.240,1.114,1.009,1016,6864 -Villers-aux-Bois,51630,325,5.062,0.716,0.648,766,6872 -Abos,64005,539,8.465,0.926,0.838,413,6259 -Murat,15138,1915,20.177,1.430,1.295,690,6447 -Buis-les-Baronnies,26063,2293,34.105,1.859,1.683,880,6350 -Bonnieux,84020,1369,51.358,2.281,2.065,886,6310 -Égreville,77168,2151,31.728,1.793,1.623,690,6784 -Lignières,18127,1367,21.980,1.492,1.351,641,6628 -Bettange,57070,239,3.730,0.615,0.557,955,6911 -Montigny-lès-Condé,2515,61,4.825,0.699,0.633,741,6875 -Le Thil,27632,516,4.208,0.653,0.591,597,6913 -Ranzières,55415,80,13.930,1.188,1.076,883,6885 -Tremblois-lès-Carignan,8459,164,4.366,0.665,0.602,863,6952 -Brieux,61062,86,5.202,0.726,0.657,472,6864 -Coulevon,70179,181,2.659,0.519,0.470,940,6733 -Vallerois-Lorioz,70517,375,6.329,0.801,0.725,939,6721 -La Gonfrière,61193,312,13.013,1.148,1.039,516,6857 -Amange,39008,427,6.756,0.827,0.749,893,6679 -Saint-Viâtre,41231,1212,99.872,3.181,2.880,614,6717 -Fauconcourt,88168,129,4.907,0.705,0.638,960,6815 -Mey,57467,274,1.915,0.440,0.398,937,6898 -Hectomare,27327,223,2.003,0.450,0.407,550,6902 -Cauverville-en-Roumois,27134,234,3.312,0.579,0.524,528,6919 -Macogny,2449,77,6.166,0.790,0.715,715,6897 -ÃŽle-Tudy,29085,746,1.314,0.365,0.330,165,6775 -Orchies,59449,8634,10.932,1.052,0.952,716,7043 -Saint-Sauveur-Camprieu,30297,257,31.912,1.798,1.628,735,6337 -Saint-Sulpice-le-Dunois,23244,612,30.759,1.765,1.598,599,6579 -Tournedos-Bois-Hubert,27650,460,8.053,0.903,0.818,554,6888 -Saint-André-de-Lancize,48136,126,22.636,1.514,1.371,762,6352 -La Crau,83047,17920,37.519,1.950,1.766,952,6238 -Rogues,30219,105,30.603,1.761,1.594,742,6310 -Olendon,14476,191,7.455,0.869,0.787,467,6877 -Verneuil-Petit,55547,126,3.950,0.633,0.573,874,6940 -Sénaillac-Latronquière,46302,139,11.296,1.070,0.969,628,6414 -Saint-Eloy,29246,218,12.583,1.129,1.022,171,6830 -Montfort,4127,337,12.493,1.125,1.019,939,6332 -Châtelneuf,42054,328,8.459,0.926,0.838,777,6506 -Saint-Viaud,44192,2457,32.545,1.816,1.644,322,6689 -Aussurucq,64081,246,47.032,2.183,1.977,379,6233 -Amfreville-les-Champs,76006,171,4.546,0.679,0.615,544,6957 -Virargues,15263,133,11.095,1.060,0.960,694,6446 -Chepy,51149,428,8.703,0.939,0.850,804,6866 -Saint-Hilaire-du-Bois,33419,76,4.512,0.676,0.612,457,6399 -Commentry,3082,6262,20.959,1.457,1.319,680,6572 -Tilloy-et-Bellay,51572,212,19.342,1.400,1.268,820,6885 -Villery,10425,276,3.619,0.606,0.549,777,6788 -Saint-André-de-Double,24367,171,27.819,1.679,1.520,493,6455 -Saint-Martin-des-Champs,18224,306,18.927,1.385,1.254,694,6672 -Tournehem-sur-la-Hem,62827,1454,18.242,1.360,1.231,633,7074 -Étoile-Saint-Cyrice,5051,31,14.372,1.207,1.093,912,6360 -Huelgoat,29081,1490,14.838,1.226,1.110,201,6826 -Sarran,19251,275,25.927,1.621,1.468,616,6483 -Calmont,12043,1996,30.816,1.767,1.600,660,6354 -Rhodes,57579,119,15.445,1.251,1.133,989,6860 -Plouégat-Guérand,29182,1067,17.444,1.329,1.203,211,6853 -Saint-Domet,23190,177,15.654,1.259,1.140,646,6553 -Ger,64238,1888,31.655,1.791,1.622,449,6244 -Pouru-aux-Bois,8342,278,8.961,0.953,0.863,852,6957 -Seichamps,54498,4873,4.270,0.658,0.596,939,6851 -Ébaty,21236,258,2.119,0.463,0.419,835,6650 -Bonneil,2098,377,2.147,0.466,0.422,725,6878 -Saint-Pierre-le-Moûtier,58264,1957,48.038,2.206,1.997,715,6636 -Andernos-les-Bains,33005,11873,20.535,1.442,1.306,380,6417 -Gorniès,34115,127,29.279,1.722,1.559,750,6313 -Sauvat,15223,209,14.528,1.213,1.098,658,6469 -Wolfersdorf,68378,367,3.689,0.611,0.553,1008,6734 -Baule,45024,2086,11.929,1.099,0.995,602,6746 -Trancrainville,28392,164,11.707,1.089,0.986,618,6795 -Villenavotte,89458,179,2.223,0.475,0.430,718,6795 -Saint-Just,18218,639,14.890,1.228,1.112,664,6653 -Saint-Sigismond,45299,266,14.580,1.215,1.100,598,6765 -Montussaint,25408,59,3.045,0.555,0.503,949,6709 -Flipou,27247,330,6.968,0.840,0.761,577,6913 -Saint-Lumier-la-Populeuse,51497,48,2.417,0.495,0.448,831,6848 -Taron-Sadirac-Viellenave,64534,192,13.832,1.184,1.072,439,6275 -Vailly-sur-Aisne,2758,1998,9.977,1.005,0.910,735,6923 -Fignévelle,88171,44,4.454,0.672,0.608,917,6768 -Felleries,59226,1403,19.611,1.410,1.277,771,7005 -Noidans-le-Ferroux,70387,700,14.302,1.204,1.090,924,6722 -Saint-Pierre-Eynac,43218,1125,24.190,1.566,1.418,777,6439 -Monthodon,37155,618,33.964,1.855,1.680,540,6734 -Bonneval,28051,5154,28.872,1.710,1.548,580,6784 -Belmont,25052,66,4.672,0.688,0.623,955,6687 -Chozeau,38109,1047,8.245,0.914,0.828,872,6512 -Nantes-en-Ratier,38273,465,11.993,1.102,0.998,925,6428 -Pomoy,70416,210,7.575,0.876,0.793,950,6732 -Gontaud-de-Nogaret,47110,1681,29.537,1.730,1.566,480,6378 -Tourtenay,79331,116,7.858,0.892,0.808,465,6664 -Tocqueville-les-Murs,76695,281,3.485,0.594,0.538,520,6953 -Maillé,86142,681,12.297,1.116,1.010,476,6624 -Giromagny,90052,3129,5.726,0.762,0.690,987,6744 -Melay,71291,982,36.504,1.923,1.741,781,6565 -Vaux-lès-Saint-Claude,39547,699,9.460,0.979,0.886,912,6588 -Vernoil-le-Fourrier,49369,1269,33.251,1.835,1.661,482,6700 -Saint-Germain-de-Martigny,61396,74,3.900,0.629,0.570,513,6836 -Saint-Prancher,88433,82,4.438,0.671,0.608,919,6810 -La Chapelle-Glain,44031,816,34.786,1.877,1.699,388,6734 -Vaudeurs,89432,479,27.661,1.674,1.516,742,6779 -Madranges,19122,193,13.100,1.152,1.043,606,6484 -Limpiville,76386,363,4.242,0.656,0.594,520,6956 -Seich,65416,90,7.348,0.863,0.781,495,6211 -Dommartin,25201,694,6.461,0.809,0.732,950,6654 -Gye,54242,238,6.562,0.815,0.738,911,6841 -Caillavet,32071,214,14.622,1.217,1.102,489,6294 -Vinzelles,63461,353,13.428,1.166,1.056,729,6536 -Saint-Germain-sur-Eaulne,76584,200,8.746,0.941,0.852,590,6961 -Lalleu,35140,577,15.410,1.250,1.132,363,6758 -Gétigné,44063,3621,23.924,1.557,1.410,380,6670 -Tronsanges,58298,393,8.745,0.941,0.852,702,6667 -Chênex,74069,812,5.378,0.738,0.668,932,6559 -Thilay,8448,1064,36.129,1.913,1.732,833,6974 -Breteil,35040,3549,14.907,1.229,1.113,334,6792 -Moon-sur-Elle,50356,843,9.871,1.000,0.905,404,6910 -Willer-sur-Thur,68372,1845,18.016,1.351,1.223,1001,6755 -Sainte-Lucie-de-Tallano,2A308,444,25.590,1.610,1.458,1204,6087 -Saint-Christophe-en-Bresse,71398,1109,20.487,1.441,1.305,852,6627 -Brainville-sur-Meuse,52067,81,5.972,0.778,0.704,894,6790 -Chevillon-sur-Huillard,45092,1401,19.462,1.404,1.271,669,6760 -Villemoiron-en-Othe,10417,202,12.494,1.125,1.019,760,6790 -Collandres,15052,149,43.385,2.097,1.899,671,6453 -Saint-Symphorien-de-Thénières,12250,213,31.487,1.786,1.617,676,6403 -Clavans-en-Haut-Oisans,38112,105,35.781,1.904,1.724,947,6444 -Peyrouse,65360,276,4.794,0.697,0.631,448,6229 -Morville,88316,50,3.458,0.592,0.536,909,6797 -Geispolsheim,67152,7476,22.067,1.495,1.354,1046,6838 -Saint-Pons,7287,294,16.683,1.300,1.177,827,6390 -Raon-aux-Bois,88371,1241,23.996,1.559,1.412,958,6777 -Giscos,33188,183,32.139,1.805,1.634,443,6357 -La Roche-Clermault,37202,513,18.075,1.353,1.225,487,6678 -Maussans,70335,67,3.960,0.633,0.573,943,6709 -Å’ting,57521,2650,4.247,0.656,0.594,984,6904 -Saint-Étienne-en-Bresse,71410,807,19.701,1.413,1.279,855,6624 -La Bigottière,53031,499,18.678,1.376,1.246,416,6799 -Saint-Gérand-le-Puy,3235,1010,19.674,1.412,1.278,743,6577 -Thonne-la-Long,55508,326,9.531,0.983,0.890,875,6945 -Fontaine-lès-Luxeuil,70240,1356,27.975,1.684,1.525,953,6757 -Forest-sur-Marque,59247,1447,1.059,0.328,0.297,713,7060 -Sainte-Anne-sur-Vilaine,35249,1008,28.768,1.707,1.546,337,6745 -Saint-Rémy-sur-Avre,28359,4007,13.061,1.150,1.041,571,6854 -Angerville-la-Martel,76013,1027,10.181,1.016,0.920,519,6968 -Saint-Pierre-Laval,3250,365,24.107,1.563,1.415,761,6562 -Pluduno,22237,2195,28.852,1.710,1.548,312,6842 -Laneuville-au-Pont,52267,206,4.036,0.639,0.579,838,6836 -Ville-sur-Saulx,55568,289,4.097,0.644,0.583,853,6850 -Lebeuville,54307,175,6.294,0.799,0.723,940,6821 -Mallièvre,85134,256,0.208,0.145,0.131,406,6653 -Frespech,47105,304,11.798,1.093,0.990,526,6357 -Les Monts d'Andaine,61463,1806,37.580,1.951,1.766,452,6842 -Frambouhans,25256,892,10.125,1.013,0.917,988,6682 -Corancez,28107,388,6.890,0.836,0.757,591,6810 -Canteloup,14134,183,2.375,0.491,0.445,472,6898 -Malroy,57438,360,3.529,0.598,0.541,934,6900 -Luxiol,25354,161,6.395,0.805,0.729,951,6702 -Guincourt,8204,90,5.340,0.736,0.666,816,6940 -Plovan,29214,680,15.715,1.262,1.143,148,6786 -Saint-Quentin-les-Anges,53251,420,17.857,1.345,1.218,408,6748 -Saint-Céré,46251,3449,11.387,1.074,0.972,614,6419 -Moreuil,80570,3992,23.680,1.549,1.402,666,6962 -Lachamp-Raphaël,7120,68,14.151,1.197,1.084,804,6410 -Gerponville,76299,402,4.918,0.706,0.639,525,6965 -Toulis-et-Attencourt,2745,128,7.818,0.890,0.806,752,6955 -Taninges,74276,3406,42.562,2.077,1.881,975,6563 -Maisons-lès-Chaource,10218,163,5.892,0.773,0.700,786,6770 -Montagne,33290,1542,26.678,1.644,1.489,450,6434 -Cosne-Cours-sur-Loire,58086,10102,53.781,2.334,2.113,699,6710 -Bouzy-la-Forêt,45049,1222,37.396,1.947,1.763,656,6754 -Ids-Saint-Roch,18112,307,27.838,1.679,1.520,641,6627 -Remoulins,30212,2303,8.271,0.915,0.828,827,6318 -Couargues,18074,205,11.746,1.091,0.988,698,6686 -Vaugneray,69255,5571,25.151,1.596,1.445,832,6516 -Vernon,27681,23705,34.247,1.863,1.687,590,6894 -Ardin,79012,1249,30.102,1.746,1.581,430,6607 -Gestas,64242,66,2.168,0.469,0.425,385,6257 -Hirtzfelden,68140,1239,22.106,1.497,1.355,1031,6769 -Weyersheim,67529,3335,19.481,1.405,1.272,1059,6860 -Cornas,7070,2200,8.539,0.930,0.842,848,6430 -Heippes,55241,75,10.521,1.032,0.934,865,6878 -Marvelise,25369,164,4.190,0.652,0.590,970,6718 -Hautecour,73131,305,11.703,1.089,0.986,977,6495 -Sarragachies,32414,247,12.914,1.144,1.036,453,6293 -Cuverville-sur-Yères,76207,197,11.139,1.062,0.962,584,6983 -Neyron,1275,2507,5.300,0.733,0.664,852,6525 -Choux,39151,118,8.252,0.914,0.828,913,6584 -Yvrench,80832,305,9.295,0.970,0.878,629,7008 -Fessevillers,25238,159,6.117,0.787,0.713,995,6695 -Saint-Bandry,2672,272,6.176,0.791,0.716,713,6918 -Le Boulay-Morin,27099,771,5.498,0.746,0.675,566,6889 -Aynac,46012,558,21.653,1.481,1.341,611,6408 -Larouillies,59333,257,5.391,0.739,0.669,768,6993 -Plouzévédé,29213,1779,18.260,1.360,1.231,176,6858 -Plougonver,22216,733,36.429,1.921,1.739,229,6836 -Mesples,3172,127,15.354,1.247,1.129,649,6592 -Saint-Privat-d'Allier,43221,405,38.512,1.975,1.788,755,6437 -La Chapelle-Heulin,44032,3265,13.458,1.168,1.058,372,6682 -Vasseny,2763,211,3.220,0.571,0.517,736,6917 -Roggenhouse,68281,470,6.596,0.818,0.741,1035,6761 -Grandecourt,70274,44,3.362,0.584,0.529,915,6731 -Vyt-lès-Belvoir,25635,187,7.564,0.875,0.792,976,6701 -Tasso,2A322,109,16.816,1.305,1.182,1203,6115 -Ronvaux,55439,88,2.631,0.516,0.467,888,6896 -Aucaleuc,22003,974,6.541,0.814,0.737,321,6828 -Beauregard,1030,885,0.981,0.315,0.285,835,6546 -Capelle-lès-Hesdin,62212,470,5.615,0.754,0.683,627,7030 -Fontaine-le-Dun,76272,905,5.412,0.741,0.671,547,6971 -Pugnac,33341,2292,13.535,1.171,1.060,422,6450 -Aspin-en-Lavedan,65040,314,1.724,0.418,0.378,452,6224 -Girecourt-sur-Durbion,88203,339,6.916,0.837,0.758,966,6799 -Monfaucon,24277,299,24.820,1.586,1.436,481,6430 -Chatuzange-le-Goubet,26088,5413,28.230,1.691,1.531,865,6440 -Béhuard,49028,123,2.244,0.477,0.432,425,6704 -Saint-Jean-de-Sauves,86225,1380,56.676,2.396,2.169,473,6641 -Sainte-Marguerite-Lafigère,7266,104,9.813,0.997,0.903,779,6374 -Moitron-sur-Sarthe,72199,256,10.364,1.025,0.928,485,6798 -Étigny,89160,756,7.018,0.843,0.763,721,6784 -Alincthun,62022,332,10.002,1.007,0.912,616,7069 -Ménerville,78385,210,3.500,0.596,0.540,597,6873 -Faux-Mazuras,23078,180,19.900,1.420,1.286,605,6534 -Pleumeur-Bodou,22198,3968,27.539,1.670,1.512,216,6875 -Mouen,14454,1565,4.229,0.655,0.593,447,6900 -La Haye-de-Routot,27319,305,2.559,0.509,0.461,534,6926 -Châteauneuf-d'Entraunes,6040,53,29.489,1.729,1.565,1010,6349 -Charchigné,53061,495,14.910,1.229,1.113,445,6819 -Tressandans,25570,24,2.366,0.490,0.444,951,6717 -Bassens,33032,7151,10.276,1.020,0.924,420,6430 -Saint-Julien-sur-Calonne,14601,164,8.641,0.936,0.847,500,6912 -Quintal,74219,1224,9.118,0.961,0.870,941,6528 -Montrond,39364,493,25.760,1.616,1.463,919,6637 -La Vieux-Rue,76740,571,5.569,0.751,0.680,574,6935 -Tréflévénez,29286,244,9.793,0.996,0.902,171,6836 -Sanary-sur-Mer,83123,16733,19.757,1.415,1.281,925,6228 -Saint-Marcel,70468,95,7.234,0.856,0.775,911,6753 -Bernienville,27057,284,7.829,0.891,0.807,556,6890 -Lestiou,41114,285,8.370,0.921,0.834,591,6742 -Mercey,27399,50,3.555,0.600,0.543,584,6888 -Pont-les-Moulins,25465,187,4.962,0.709,0.642,955,6699 -Camphin-en-Carembault,59123,1646,7.444,0.868,0.786,700,7044 -Ploubezre,22211,3578,31.128,1.776,1.608,228,6864 -Saint-André-des-Eaux,44151,6355,25.238,1.599,1.448,299,6708 -Saint-Aubin-lès-Elbeuf,76561,8178,5.814,0.768,0.695,557,6912 -Mesnil-la-Comtesse,10235,44,0.962,0.312,0.282,788,6822 -Bassoues,32032,322,32.653,1.819,1.647,479,6283 -Awoingt,59039,844,6.314,0.800,0.724,722,7005 -Auriac-sur-Dropt,47018,180,5.283,0.732,0.663,481,6401 -Luneray,76400,2241,5.155,0.723,0.655,549,6972 -Montailleur,73162,680,15.205,1.241,1.124,955,6505 -Balazuc,7023,370,18.770,1.379,1.249,810,6381 -Bossugan,33064,43,2.412,0.494,0.447,457,6415 -Pontcharraud,23156,78,9.128,0.962,0.871,642,6529 -Flée,72134,543,17.546,1.333,1.207,507,6739 -Myans,73183,1209,3.565,0.601,0.544,931,6497 -Silly-la-Poterie,2718,129,2.370,0.490,0.444,712,6899 -Baverans,39042,499,3.405,0.587,0.531,892,6672 -Tartécourt,70496,29,2.257,0.478,0.433,923,6752 -Le Béage,7026,257,33.174,1.833,1.660,793,6418 -Hermanville,76356,117,4.680,0.689,0.624,556,6972 -Aubréville,55014,382,28.922,1.712,1.550,848,6895 -Soudan,44199,2000,54.049,2.340,2.119,374,6747 -Lannebert,22112,449,7.070,0.846,0.766,257,6854 -Sommesnil,76679,99,3.038,0.555,0.503,532,6958 -Sedan,8409,16846,16.293,1.285,1.163,838,6954 -Héricourt,62433,96,4.961,0.709,0.642,648,7027 -Saint-Vran,22333,758,28.372,1.695,1.535,295,6804 -Perrex,1291,824,11.195,1.065,0.964,850,6574 -Le Ployron,60503,112,4.208,0.653,0.591,668,6943 -Avessé,72019,370,18.687,1.376,1.246,458,6767 -Saint-Marcel-Bel-Accueil,38415,1374,18.397,1.365,1.236,876,6506 -Serémange-Erzange,57647,4328,3.742,0.616,0.558,924,6919 -Sourniac,15230,202,11.694,1.089,0.986,647,6462 -Chaumont,61103,179,19.566,1.408,1.275,506,6867 -Youx,63471,918,19.289,1.398,1.266,688,6558 -Bréziers,5022,220,30.602,1.761,1.594,957,6370 -Courtois-sur-Yonne,89127,755,4.259,0.657,0.595,718,6791 -Saint-Genis-du-Bois,33409,90,2.342,0.487,0.441,447,6404 -Charleville,51129,244,17.463,1.330,1.204,750,6858 -Villeperdrix,26376,117,26.238,1.630,1.476,881,6378 -Miélan,32252,1149,22.202,1.500,1.358,480,6266 -Quintenas,7188,1579,14.230,1.201,1.087,831,6457 -Bourgnac,24059,347,9.115,0.961,0.870,493,6439 -Chavanges,10094,594,29.904,1.741,1.576,812,6828 -Teissières-de-Cornet,15233,288,9.310,0.971,0.879,647,6429 -Prunelli-di-Fiumorbo,2B251,3652,37.558,1.951,1.766,1224,6121 -Rosans,5126,480,30.545,1.759,1.593,892,6372 -Thubœuf,53263,292,14.127,1.196,1.083,447,6829 -Saint-Eugène,17326,278,16.525,1.294,1.172,445,6497 -Cagnes-sur-Mer,6027,49902,18.138,1.356,1.228,1032,6294 -Beuvrages,59079,6660,2.987,0.550,0.498,736,7033 -Savigny-sur-Ardres,51527,266,9.034,0.957,0.866,758,6908 -Bouconville-sur-Madt,55062,111,8.580,0.932,0.844,897,6865 -Lonzac,17209,265,6.279,0.798,0.723,434,6505 -Le Manoir,27386,1257,2.425,0.496,0.449,568,6917 -Cherier,42061,555,28.795,1.708,1.546,766,6540 -Monléon-Magnoac,65315,437,19.666,1.412,1.278,496,6242 -Saint-Martin-la-Méanne,19222,340,27.497,1.669,1.511,624,6456 -Saint-Firmin-sur-Loire,45276,534,25.221,1.599,1.448,680,6724 -Bois-Héroult,76109,200,6.485,0.811,0.734,587,6941 -Le Bignon,44014,3718,27.918,1.682,1.523,357,6678 -Arsague,40011,352,7.256,0.857,0.776,395,6283 -La Chapelle-sur-Erdre,44035,19348,33.460,1.841,1.667,355,6705 -Pointre,39432,125,6.530,0.813,0.736,888,6685 -Montivernage,25401,29,3.305,0.579,0.524,957,6695 -Coulanges-la-Vineuse,89118,842,10.725,1.042,0.943,746,6732 -Vergranne,25602,109,5.277,0.731,0.662,956,6705 -Agon-Coutainville,50003,2795,12.939,1.145,1.037,364,6894 -Grentheville,14319,888,4.137,0.647,0.586,458,6900 -Laillé,35139,5089,32.047,1.802,1.632,346,6775 -Labastide,65239,162,5.619,0.755,0.684,485,6220 -Lostanges,19119,134,9.602,0.986,0.893,601,6440 -Cravanche,90029,1954,1.190,0.347,0.314,986,6734 -Cierges,2193,68,8.176,0.910,0.824,746,6895 -Épineau-les-Voves,89152,730,7.098,0.848,0.768,734,6763 -Hauteville-la-Guichard,50232,469,11.786,1.093,0.990,384,6901 -Port-Saint-Père,44133,2910,32.799,1.823,1.651,335,6682 -Saint-Martin-Château,23216,145,31.248,1.779,1.611,609,6526 -Rouvroy-en-Santerre,80682,211,7.406,0.866,0.784,679,6965 -Neufmanil,8316,1049,10.176,1.015,0.919,832,6974 -Achiet-le-Grand,62005,997,5.089,0.718,0.650,683,7005 -Liac,65273,198,4.189,0.651,0.589,465,6260 -Attenschwiller,68013,959,5.134,0.721,0.653,1034,6729 -Le Housseau-Brétignolles,53118,257,9.363,0.974,0.882,439,6827 -Oches,8332,44,6.779,0.829,0.751,838,6936 -Bazoches-les-Hautes,28029,316,17.124,1.317,1.192,615,6787 -Lagarde-Paréol,84061,316,9.293,0.970,0.878,846,6349 -Asswiller,67013,282,6.033,0.782,0.708,1011,6874 -Yainville,76750,1055,3.313,0.579,0.524,542,6930 -Teillay,35332,1066,26.616,1.642,1.487,365,6757 -Auboncourt-Vauzelles,8027,102,5.289,0.732,0.663,805,6942 -Chauvigné,35075,860,17.961,1.349,1.221,373,6820 -Jaujac,7107,1207,24.466,1.574,1.425,797,6389 -Saint-Priest-des-Champs,63388,718,46.004,2.159,1.955,681,6546 -La Jarne,17193,2473,8.434,0.924,0.837,385,6565 -Ancretteville-sur-Mer,76011,179,3.167,0.566,0.512,521,6969 -Chemazé,53066,1364,38.715,1.981,1.794,417,6746 -Beauvoir-sur-Niort,79031,1763,23.619,1.547,1.401,428,6569 -Laurenan,22122,735,31.168,1.777,1.609,292,6809 -Lindebeuf,76387,405,4.638,0.686,0.621,546,6959 -Tournon,73297,608,4.848,0.701,0.635,961,6510 -Tronville,54535,198,6.953,0.839,0.760,912,6890 -Latouille-Lentillac,46159,230,11.977,1.102,0.998,619,6415 -Bussière-Nouvelle,23037,91,8.646,0.936,0.847,653,6546 -Chevaigné-du-Maine,53069,175,13.255,1.159,1.049,449,6823 -Moulotte,55363,105,5.493,0.746,0.675,899,6894 -Saint-Martin-du-Vieux-Bellême,61426,585,16.077,1.276,1.155,518,6808 -Cruviers-Lascours,30100,705,5.579,0.752,0.681,794,6325 -Saint-Just-Sauvage,51492,1486,17.791,1.343,1.216,758,6826 -Gailhan,30121,244,5.485,0.745,0.675,784,6304 -Damouzy,8137,433,8.856,0.947,0.857,821,6967 -Tilly,78618,534,7.758,0.887,0.803,598,6865 -Trédias,22348,482,11.295,1.070,0.969,313,6818 -Wadelincourt,8494,481,4.239,0.655,0.593,840,6956 -Bayenghem-lès-Seninghem,62088,324,3.281,0.577,0.522,635,7067 -La Malène,48088,143,41.094,2.041,1.848,723,6360 -Montsaunès,31391,445,9.073,0.959,0.868,531,6228 -Mas-Blanc-des-Alpilles,13057,516,1.566,0.398,0.360,843,6300 -Saint-Vincent-de-Barrès,7302,832,18.848,1.382,1.251,832,6397 -Arzembouy,58014,69,12.971,1.146,1.038,729,6684 -La Plaine-sur-Mer,44126,4164,16.513,1.293,1.171,311,6684 -Belle Vie en Auge,14527,524,24.208,1.566,1.418,477,6899 -Nogent-l'Abbesse,51403,541,10.219,1.018,0.922,783,6904 -Églisolles,63147,261,20.593,1.444,1.307,771,6483 -Saint-Martin-des-Noyers,85246,2321,41.537,2.051,1.857,383,6632 -Zigliara,2A360,130,12.881,1.142,1.034,1199,6100 -Val-de-la-Haye,76717,705,10.246,1.019,0.923,553,6921 -Douai,59178,39657,16.880,1.308,1.184,711,7034 -La Dorée,53093,285,18.013,1.351,1.223,410,6823 -Ternand,69245,670,10.736,1.043,0.944,815,6541 -Vorges,2824,368,4.765,0.695,0.629,746,6937 -Pégairolles-de-l'Escalette,34196,157,31.863,1.797,1.627,726,6297 -Chaltrait,51110,60,6.617,0.819,0.742,764,6870 -Coizard-Joches,51157,76,10.891,1.050,0.951,761,6861 -Dumes,40092,247,2.466,0.500,0.453,412,6296 -Saint-Quentin-sur-Coole,51512,102,8.781,0.943,0.854,796,6859 -L'ÃŽle-d'Olonne,85112,2699,19.546,1.407,1.274,332,6621 -Séris,41245,373,17.543,1.333,1.207,591,6739 -Le Frestoy-Vaux,60262,256,8.861,0.948,0.858,673,6946 -Ugny-sur-Meuse,55522,108,4.293,0.660,0.598,898,6840 -La Hauteville,78302,178,4.900,0.705,0.638,599,6847 -Villiers-aux-Corneilles,51642,108,5.933,0.775,0.702,751,6832 -Millery,54369,624,7.435,0.868,0.786,931,6864 -Gardères,65185,441,15.393,1.249,1.131,447,6250 -Saint-Angel,3217,745,25.524,1.608,1.456,681,6584 -Rimplas,6102,90,24.837,1.586,1.436,1029,6338 -Villeparois,70559,212,2.948,0.547,0.495,939,6736 -Saint-Michel-le-Cloucq,85256,1297,17.706,1.339,1.212,415,6604 -Saint-Aubin-des-Préaux,50447,431,8.432,0.924,0.837,370,6864 -Saint-Léger-le-Petit,18220,357,10.056,1.009,0.914,698,6667 -Crasville-la-Rocquefort,76190,217,5.306,0.733,0.664,548,6970 -Bezannes,51058,1692,8.132,0.908,0.822,771,6901 -Beaumont-du-Ventoux,84015,282,28.120,1.688,1.528,882,6344 -Cerre-lès-Noroy,70115,231,10.060,1.010,0.914,950,6724 -Croth,27193,1321,10.527,1.033,0.935,582,6863 -Challet,28068,433,10.154,1.014,0.918,583,6831 -Ostel,2577,76,9.158,0.963,0.872,743,6926 -Saint-Jory-las-Bloux,24429,236,17.335,1.325,1.200,537,6472 -Mazières-en-Gâtine,79172,1003,19.289,1.398,1.266,448,6611 -Lezéville,52288,121,25.760,1.616,1.463,882,6817 -Greneville-en-Beauce,45160,688,22.583,1.513,1.370,632,6790 -Bernardvillé,67032,230,2.730,0.526,0.476,1026,6816 -Couvron-et-Aumencourt,2231,928,13.604,1.174,1.063,735,6948 -Le Claux,15050,187,27.988,1.684,1.525,675,6446 -Naucelles,15140,1996,11.732,1.090,0.987,654,6426 -Chelers,62221,266,8.280,0.916,0.829,666,7032 -Saint-Vigor,27611,326,6.571,0.816,0.739,572,6888 -Gréolières,6070,596,52.918,2.316,2.097,1010,6310 -Crasville,27184,127,2.486,0.502,0.455,559,6901 -Bouzemont,88071,52,4.976,0.710,0.643,939,6799 -Lépaud,23106,362,24.144,1.564,1.416,650,6570 -Fontvieille,13038,3614,40.268,2.020,1.829,835,6294 -Arnac,15011,163,22.103,1.496,1.355,642,6443 -Piseux,27457,768,19.634,1.410,1.277,547,6854 -Lartigue,33232,40,13.627,1.175,1.064,451,6354 -Pruniers,36169,521,49.200,2.233,2.022,626,6637 -Coësmes,35082,1483,23.788,1.552,1.405,366,6762 -Rettel,57576,726,6.761,0.828,0.750,941,6930 -Giverville,27286,396,6.181,0.791,0.716,524,6902 -Saint-Jean-Roure,7248,265,23.972,1.558,1.411,815,6427 -Pléneuf-Val-André,22186,4069,16.966,1.311,1.187,295,6846 -Bléneau,89046,1351,39.490,2.000,1.811,696,6729 -Chaumont-devant-Damvillers,55107,48,5.319,0.734,0.665,878,6915 -Saint-Août,36180,844,54.245,2.344,2.122,623,6630 -Motey-Besuche,70374,108,6.276,0.797,0.722,903,6693 -Anteuil,25018,666,24.216,1.566,1.418,969,6701 -Turny,89425,696,25.182,1.597,1.446,754,6768 -La Gaude,6065,6430,13.457,1.168,1.058,1033,6301 -Calmont,31100,2380,40.432,2.024,1.833,592,6243 -Saessolsheim,67423,563,6.652,0.821,0.743,1030,6855 -Val-de-Vesle,51571,916,37.191,1.941,1.757,788,6903 -Lavaré,72158,847,23.078,1.529,1.384,528,6779 -Lubey,54326,231,3.977,0.635,0.575,910,6909 -Montaiguët-en-Forez,3178,314,22.497,1.510,1.367,761,6576 -Le Luc,83073,10952,44.229,2.117,1.917,973,6256 -Montgiscard,31381,2323,13.214,1.157,1.048,584,6260 -Bois-Herpin,91075,76,3.923,0.630,0.570,643,6807 -Busset,3045,940,36.851,1.932,1.749,740,6547 -Authieux-Ratiéville,76038,411,5.253,0.730,0.661,565,6944 -Neuvy-en-Beauce,28276,215,15.818,1.266,1.146,617,6801 -Feuges,10149,330,11.049,1.058,0.958,780,6812 -Gland,2347,452,5.599,0.753,0.682,732,6886 -Bures,54106,63,5.768,0.764,0.692,963,6849 -Champagne,7051,613,4.136,0.647,0.586,842,6465 -La Suze-sur-Sarthe,72346,4462,21.521,1.477,1.337,477,6760 -Jouey,21325,186,24.237,1.567,1.419,809,6671 -Touffréville,14698,345,5.816,0.768,0.695,463,6903 -Ambrugeat,19008,201,29.643,1.733,1.569,625,6492 -Crusnes,54149,1574,6.081,0.785,0.711,912,6932 -Niedervisse,57507,259,5.757,0.764,0.692,961,6903 -Delut,55149,128,9.488,0.980,0.887,878,6926 -Nérondes,18160,1492,34.205,1.862,1.686,693,6655 -Saint-Michel-en-l'Herm,85255,2356,57.583,2.415,2.187,374,6596 -Caseneuve,84032,500,18.092,1.354,1.226,902,6314 -La Rochebeaucourt-et-Argentine,24353,315,17.340,1.325,1.200,495,6491 -Draillant,74106,811,10.372,1.025,0.928,965,6583 -La Chapelle-d'Alagnon,15041,247,9.154,0.963,0.872,691,6447 -Colombé-la-Fosse,10102,192,9.277,0.970,0.878,832,6796 -Ambrus,47008,112,12.295,1.116,1.010,482,6352 -Saint-Germain-lès-Senailly,21550,123,5.015,0.713,0.646,795,6723 -Saint-Éloy-les-Mines,63338,3715,22.088,1.496,1.355,691,6565 -Clermont-les-Fermes,2200,127,9.307,0.971,0.879,767,6953 -La Chapelle-Saint-Ouen,76171,126,7.886,0.894,0.809,584,6935 -Urdos,64542,66,36.585,1.925,1.743,414,6201 -Paisy-Cosdon,10276,340,17.788,1.342,1.215,751,6795 -Saint-Aubin-d'Arquenay,14558,972,3.299,0.578,0.523,461,6913 -Landange,57377,235,4.905,0.705,0.638,991,6847 -Samogneux,55468,94,6.158,0.790,0.715,869,6910 -Cossé-en-Champagne,53076,315,21.235,1.467,1.328,453,6772 -Gensac,33186,800,9.377,0.975,0.883,472,6414 -Saint-Loubouer,40270,443,16.927,1.310,1.186,422,6296 -Pléboulle,22174,859,14.178,1.199,1.086,308,6848 -Rochegude,30218,247,12.132,1.109,1.004,800,6351 -Villiers-le-Roux,16413,137,4.955,0.709,0.642,477,6555 -Chaignay,21127,523,25.032,1.593,1.442,850,6711 -Vouxey,88523,142,23.299,1.536,1.391,904,6807 -Romilly,41193,146,15.282,1.244,1.126,555,6761 -Valhuon,62835,577,9.219,0.966,0.875,655,7036 -Saint-Méen,29255,913,12.026,1.104,1.000,166,6854 -Motz,73180,435,10.014,1.007,0.912,922,6541 -Radinghem,62685,277,4.894,0.704,0.637,638,7049 -Gioux,23091,168,37.345,1.945,1.761,627,6521 -Rombly,62720,50,1.146,0.341,0.309,657,7056 -Saint-Jacques-d'Aliermont,76590,353,7.816,0.890,0.806,576,6972 -Locquirec,29133,1402,6.200,0.793,0.718,211,6861 -Hautecour,39265,190,5.181,0.725,0.656,914,6609 -La Serre-Bussière-Vieille,23172,122,14.349,1.206,1.092,648,6548 -Bretagnolles,27111,198,3.791,0.620,0.561,577,6873 -Rouffiac,15165,206,23.216,1.534,1.389,632,6434 -Saint-Trivier-de-Courtes,1388,1095,16.509,1.293,1.171,858,6600 -Le Russey,25512,2298,24.343,1.570,1.422,980,6678 -Chailloué,61081,909,35.894,1.907,1.727,499,6844 -Saint-Hilaire,63360,162,17.621,1.336,1.210,669,6559 -Frasne-les-Meulières,39238,124,4.865,0.702,0.636,889,6679 -Courpière,63125,4142,31.824,1.796,1.626,745,6514 -Beaumetz-lès-Aire,62095,240,4.215,0.654,0.592,643,7050 -Blussangeaux,25066,84,2.169,0.469,0.425,973,6709 -Saint-Nazaire-en-Royans,26320,799,3.556,0.600,0.543,877,6443 -Domvallier,88155,107,3.253,0.574,0.520,929,6806 -Mantoche,70331,451,16.826,1.306,1.182,889,6703 -Wassy,52550,2891,34.380,1.866,1.690,844,6821 -Le Trait,76709,5030,17.582,1.335,1.209,544,6936 -Rodilhan,30356,2885,4.705,0.690,0.625,817,6305 -Chermisey,88102,98,10.789,1.046,0.947,892,6816 -La Chabanne,3050,189,20.160,1.429,1.294,762,6547 -Saint-Armou,64470,636,12.482,1.125,1.019,432,6265 -Saint-Arroman,65385,90,4.344,0.663,0.600,487,6219 -Andelarrot,70020,235,5.691,0.759,0.687,935,6724 -Fresnes-en-Tardenois,2332,268,9.041,0.957,0.866,739,6892 -Bullion,78120,1922,21.275,1.468,1.329,625,6840 -Erbajolo,2B105,108,15.587,1.257,1.138,1215,6148 -Saint-Firmin,71413,883,15.813,1.266,1.146,810,6637 -Rozoy-le-Vieil,45265,422,8.229,0.913,0.827,695,6781 -Faverolles,28146,869,10.052,1.009,0.914,594,6843 -Josnes,41105,900,20.705,1.448,1.311,591,6742 -Le Vernoy,25608,170,3.317,0.580,0.525,977,6725 -Tartiers,2736,165,8.847,0.947,0.857,718,6928 -Mervent,85143,1049,22.505,1.510,1.367,410,6612 -Ponteils-et-Brésis,30201,358,27.666,1.674,1.516,778,6365 -Bagnols-en-Forêt,83008,2746,42.917,2.085,1.888,995,6275 -Muides-sur-Loire,41155,1284,9.181,0.964,0.873,587,6730 -Gilhac-et-Bruzac,7094,170,30.942,1.771,1.603,835,6421 -Langres,52269,7761,23.248,1.535,1.390,875,6756 -Saint-Nicolas-des-Biefs,3248,175,29.086,1.717,1.555,762,6547 -Saint-Étienne-de-Fontbellon,7231,2696,9.629,0.988,0.895,812,6388 -Esserval-Tartre,39214,117,12.064,1.106,1.001,930,6644 -Villebon,28414,75,2.259,0.478,0.433,568,6812 -Poggio-di-Venaco,2B238,212,13.307,1.161,1.051,1214,6148 -Pont-d'Ouilly,14764,1019,19.541,1.407,1.274,448,6868 -Canisy,50095,1778,18.376,1.365,1.236,394,6897 -Hautecourt-Romanèche,1184,784,21.434,1.474,1.335,890,6568 -Les Cresnays,50152,232,10.021,1.008,0.913,396,6855 -Hauteville-sur-Fier,74141,922,5.043,0.715,0.647,931,6540 -Chisa,2B366,99,29.507,1.729,1.565,1216,6111 -Vallentigny,10393,185,15.692,1.261,1.142,821,6819 -Saint-Hilaire-les-Monges,63359,96,10.697,1.041,0.943,675,6525 -Jully-lès-Buxy,71247,365,16.726,1.302,1.179,833,6624 -Chamelet,69039,669,14.759,1.223,1.107,813,6543 -La Goutelle,63170,622,24.286,1.569,1.421,681,6523 -Nouzerines,23146,250,19.085,1.391,1.259,634,6592 -Jury,57351,1034,3.171,0.567,0.513,938,6890 -Parigné-l'Évêque,72231,4999,63.688,2.540,2.300,507,6766 -Saint-Denis-du-Maine,53212,428,14.623,1.217,1.102,435,6773 -Échenoz-la-Méline,70207,3215,8.174,0.910,0.824,936,6729 -Couret,31155,241,4.329,0.662,0.599,524,6219 -La Mesnière,61277,286,12.221,1.113,1.008,510,6830 -Richeville,27490,273,3.918,0.630,0.570,595,6908 -Hochstett,67203,367,2.132,0.465,0.421,1043,6864 -Laroquebrou,15094,888,17.208,1.320,1.195,634,6427 -Puymirol,47217,937,19.640,1.411,1.278,528,6344 -Belmont-lès-Darney,88049,111,4.139,0.648,0.587,926,6780 -Oyes,51421,79,7.675,0.882,0.799,757,6858 -Ouches,42162,1164,10.103,1.012,0.916,774,6547 -Saint-Gal,48153,90,9.821,0.998,0.904,732,6398 -Vellemoz,70538,83,4.268,0.658,0.596,910,6713 -Nagel-Séez-Mesnil,27424,327,11.734,1.090,0.987,551,6872 -Moulis-en-Médoc,33297,1806,20.777,1.451,1.314,402,6445 -Fontaines,89173,479,25.419,1.605,1.453,718,6736 -Lavancia-Epercy,39283,655,10.789,1.046,0.947,904,6585 -Artenay,45008,1859,20.425,1.439,1.303,617,6779 -Chevrotaine,39143,32,5.320,0.734,0.665,920,6621 -Sireix,65428,65,1.718,0.417,0.378,442,6211 -Soulce-Cernay,25551,122,8.641,0.936,0.847,990,6698 -Gourdon,7098,91,12.783,1.138,1.030,813,6404 -Valeille,42319,729,16.464,1.292,1.170,796,6513 -Launay-Villiers,53129,386,9.442,0.978,0.885,404,6788 -Altier,48004,204,54.750,2.355,2.132,768,6379 -Bernac-Debat,65083,671,3.934,0.631,0.571,463,6234 -Sari-d'Orcino,2A270,331,22.144,1.498,1.356,1184,6123 -Arronnes,3008,377,26.055,1.625,1.471,742,6554 -Beillé,72031,528,8.602,0.934,0.846,516,6779 -Éclaron-Braucourt-Sainte-Livière,52182,2040,59.237,2.450,2.218,837,6837 -Oëlleville,88334,302,10.131,1.013,0.917,923,6806 -Saint-Fortunat-sur-Eyrieux,7237,769,23.073,1.529,1.384,830,6415 -Villemurlin,45340,590,48.947,2.227,2.016,655,6733 -Fléchin,62336,485,10.973,1.054,0.954,647,7053 -Saint-Germain-le-Vieux,61398,58,3.249,0.574,0.520,502,6837 -La Cavalerie,12063,1075,40.866,2.035,1.843,710,6325 -Les Brouzils,85038,2791,41.746,2.057,1.862,370,6658 -Longueville-sur-Aube,10207,124,11.667,1.087,0.984,768,6826 -Vaux-en-Beaujolais,69257,1087,17.702,1.339,1.212,819,6551 -Bermering,57065,228,5.750,0.763,0.691,972,6878 -Le Petit-Quevilly,76498,22134,4.348,0.664,0.601,560,6926 -Épernay-sous-Gevrey,21246,185,5.436,0.742,0.672,855,6675 -Villeneuve-sur-Fère,2806,277,10.707,1.042,0.943,734,6895 -Maffrécourt,51336,57,6.743,0.827,0.749,835,6891 -Frontenay-Rohan-Rohan,79130,2882,33.816,1.851,1.676,426,6583 -Chierry,2187,1097,2.851,0.537,0.486,732,6883 -Roucourt,59513,450,3.193,0.569,0.515,712,7025 -Angles,85004,2785,33.394,1.839,1.665,366,6598 -Autrey-lès-Cerre,70040,233,5.538,0.749,0.678,950,6728 -Saint-André-de-Briouze,61361,186,12.244,1.114,1.009,454,6851 -Saint-Gonlay,35277,343,9.267,0.969,0.877,323,6789 -Ruillé-en-Champagne,72261,339,15.002,1.233,1.116,464,6779 -Léoville,17204,317,10.257,1.019,0.923,441,6480 -Vitot,27698,558,4.701,0.690,0.625,544,6900 -Philondenx,40225,204,9.768,0.995,0.901,421,6278 -Haut-de-Bosdarros,64257,325,12.311,1.117,1.011,429,6233 -Bosc-Mesnil,76126,310,9.354,0.974,0.882,581,6955 -Circourt,88103,88,5.909,0.774,0.701,945,6801 -Saint-Justin,40267,975,66.257,2.591,2.346,436,6326 -La Chapelle-Saint-Sépulcre,45076,244,6.231,0.795,0.720,688,6767 -Montlieu-la-Garde,17243,1298,31.912,1.798,1.628,448,6466 -Nomécourt,52356,109,10.788,1.045,0.946,854,6815 -Sassey-sur-Meuse,55469,109,4.415,0.669,0.606,859,6928 -Auberville-la-Manuel,76032,128,3.032,0.554,0.502,527,6972 -Le Tholy,88470,1581,30.720,1.764,1.597,978,6781 -Valfleury,42320,707,8.853,0.947,0.857,820,6494 -Cropus,76204,249,4.872,0.703,0.637,566,6963 -Ouanne,89283,614,38.753,1.982,1.795,734,6730 -Lançon,65255,33,2.845,0.537,0.486,486,6201 -Estivareilles,3111,1107,11.727,1.090,0.987,672,6589 -Le Cloître-Saint-Thégonnec,29034,657,28.641,1.704,1.543,201,6838 -Goux-les-Usiers,25282,728,17.833,1.344,1.217,955,6659 -Condé-sur-Ifs,14173,463,11.330,1.071,0.970,473,6884 -Gorze,57254,1176,17.950,1.349,1.221,919,6886 -Soyans,26344,381,25.708,1.614,1.461,858,6393 -Les Authieux-sur-Calonne,14032,292,10.288,1.021,0.924,500,6915 -Torpes,71541,378,15.918,1.270,1.150,876,6638 -Saint-Privat-la-Montagne,57622,1843,5.704,0.760,0.688,923,6902 -Gézier-et-Fontenelay,70268,207,12.268,1.115,1.010,920,6699 -Cazevieille,34066,184,16.234,1.283,1.162,766,6298 -Plivot,51434,753,12.696,1.134,1.027,781,6881 -Viols-le-Fort,34343,1203,16.845,1.306,1.182,758,6293 -Villargent,70553,122,2.909,0.543,0.492,963,6721 -Tourville-sur-Arques,76707,1251,5.919,0.774,0.701,563,6974 -Dingsheim,67097,1300,5.121,0.720,0.652,1043,6845 -Puiseux-Pontoise,95510,544,3.881,0.627,0.568,628,6887 -Saint-Flour-de-Mercoire,48150,192,12.105,1.107,1.002,765,6396 -Monpezat,64394,81,3.541,0.599,0.542,454,6272 -Pierrefitte-sur-Loire,3207,508,25.474,1.607,1.455,762,6603 -Landrichamps,8247,133,4.757,0.694,0.628,830,6998 -Mauléon,79079,8499,122.728,3.526,3.192,403,6660 -Mouilleron-le-Captif,85155,4913,20.027,1.424,1.289,356,6633 -Aimargues,30006,5602,26.603,1.642,1.487,798,6291 -L'Hosmes,27341,69,6.721,0.825,0.747,554,6856 -Corbès,30094,160,3.301,0.578,0.523,778,6331 -Fromy,8184,82,3.702,0.612,0.554,862,6947 -Saint-Marcel-lès-Annonay,7265,1429,17.039,1.314,1.190,825,6465 -Le Relecq-Kerhuon,29235,11434,6.540,0.814,0.737,151,6837 -Bény-sur-Mer,14062,445,6.742,0.827,0.749,449,6913 -La Tranche-sur-Mer,85294,2907,21.104,1.462,1.324,364,6593 -Lachassagne,69106,1086,3.533,0.598,0.541,829,6537 -Béon,1039,464,10.225,1.018,0.922,915,6530 -Castex-d'Armagnac,32087,112,12.354,1.119,1.013,448,6313 -Châteauneuf-les-Bains,63100,308,16.958,1.311,1.187,693,6544 -Saint-Basile,7218,343,18.185,1.357,1.229,822,6427 -Semond,21602,24,6.055,0.783,0.709,817,6734 -Allineuc,22001,588,24.389,1.572,1.423,264,6820 -Frans,1166,2334,8.090,0.905,0.819,839,6544 -Loubressac,46177,550,23.382,1.539,1.393,607,6421 -Lagnes,84062,1629,16.869,1.307,1.183,873,6318 -Galgon,33179,3027,15.171,1.240,1.123,444,6436 -Vebret,15250,507,24.608,1.579,1.430,665,6475 -Valgorge,7329,444,26.437,1.637,1.482,791,6385 -Saint-Pé-Saint-Simon,47266,211,17.616,1.336,1.210,465,6325 -Siouville-Hague,50576,1073,6.373,0.804,0.728,350,6952 -Lanvéoc,29120,2158,19.283,1.398,1.266,153,6823 -Kerpert,22092,275,21.311,1.469,1.330,247,6831 -La Bazoche-Gouet,28027,1228,37.869,1.959,1.774,547,6781 -Viggianello,2A349,770,16.944,1.310,1.186,1196,6085 -Domancy,74103,2051,7.380,0.865,0.783,985,6540 -Grimonviller,54237,91,4.865,0.702,0.636,924,6815 -Cierges-sous-Montfaucon,55115,55,9.267,0.969,0.877,850,6912 -Saint-Clément,89338,2762,8.481,0.927,0.839,727,6793 -Vandenesse,58301,322,32.945,1.827,1.654,762,6643 -Flavigny,51251,163,7.969,0.899,0.814,780,6874 -Miramont-Sensacq,40185,356,25.584,1.610,1.458,434,6282 -Saint-Maurice-des-Noues,85251,654,21.590,1.479,1.339,416,6620 -Trémargat,22365,181,13.998,1.191,1.078,237,6824 -Lapte,43114,1710,31.230,1.779,1.611,795,6451 -Rigaud,6101,208,32.234,1.807,1.636,1022,6328 -Rougemont-le-Château,90089,1474,16.785,1.304,1.181,994,6746 -Liverdun,54318,6043,25.267,1.600,1.449,925,6852 -Saint-Gingolph,74237,816,7.380,0.865,0.783,991,6593 -Sainte-Marguerite-de-Carrouges,61419,225,8.711,0.939,0.850,468,6839 -Savines-le-Lac,5164,1057,30.452,1.757,1.591,967,6388 -Buxeuil,10068,134,4.311,0.661,0.598,807,6774 -La Prénessaye,22255,891,17.305,1.324,1.199,278,6800 -Orgères-en-Beauce,28287,1093,15.417,1.250,1.132,601,6780 -Chantérac,24104,620,19.040,1.389,1.258,495,6454 -Togny-aux-Bœufs,51574,137,9.960,1.005,0.910,807,6863 -Le Teil,7319,8557,26.641,1.643,1.488,835,6386 -Saint-Brieuc-de-Mauron,56208,345,14.930,1.230,1.114,301,6793 -Augerville-la-Rivière,45013,233,4.024,0.639,0.579,656,6794 -Gagnac-sur-Cère,46117,672,12.831,1.140,1.032,609,6428 -Favières,80303,462,12.709,1.135,1.028,607,7018 -Monthelon,71313,385,24.705,1.582,1.432,793,6649 -Dompnac,7081,64,16.288,1.285,1.163,786,6388 -Gan,64230,5528,39.300,1.995,1.806,424,6237 -Trégarvan,29289,128,9.699,0.991,0.897,161,6817 -Saint-Mesmin,21563,130,17.741,1.341,1.214,828,6694 -Dinozé,88134,597,2.938,0.546,0.494,958,6787 -Augy-sur-Aubois,18017,291,30.899,1.769,1.602,688,6634 -Châteauneuf-de-Vernoux,7060,244,6.096,0.786,0.712,828,6428 -Hauteroche,39177,942,39.766,2.007,1.817,902,6628 -Levoncourt,55289,57,7.897,0.895,0.810,870,6861 -Warnécourt,8498,366,5.309,0.733,0.664,820,6962 -Belle-Isle-en-Terre,22005,1034,14.344,1.206,1.092,228,6843 -La Neuville-aux-Bois,51397,148,14.597,1.216,1.101,842,6876 -Le Barroux,84008,632,16.040,1.275,1.154,866,6342 -Bougy-lez-Neuville,45044,161,16.883,1.308,1.184,627,6775 -Soumoulou,64526,1577,2.820,0.535,0.484,439,6245 -Rezé,44143,40368,15.667,1.260,1.141,356,6682 -Kernilis,29093,1466,10.159,1.015,0.919,157,6856 -Soudorgues,30322,281,25.869,1.619,1.466,760,6331 -Trémel,22366,421,11.911,1.099,0.995,210,6856 -Vienne-la-Ville,51620,173,7.502,0.872,0.790,834,6896 -Rémelfang,57567,173,3.321,0.580,0.525,957,6912 -Compertrix,51160,1547,4.725,0.692,0.627,794,6868 -Kesseldorf,67235,408,7.310,0.861,0.780,1069,6879 -La Genétouze,17173,231,37.118,1.939,1.756,461,6466 -Ubaye-Serre-Ponçon,4033,730,67.574,2.617,2.369,957,6379 -Saint-Martin-de-Hinx,40272,1407,25.673,1.613,1.460,350,6284 -Rancé,1318,727,9.599,0.986,0.893,846,6545 -Rouvroy-sur-Audry,8370,588,9.174,0.964,0.873,806,6966 -Lestanville,76383,94,1.662,0.410,0.371,554,6964 -Rotalier,39467,166,4.161,0.649,0.588,891,6612 -Bermont,90011,397,2.843,0.537,0.486,987,6726 -Sénezergues,15226,193,17.687,1.339,1.212,652,6406 -Saint-Gor,40262,306,53.892,2.337,2.116,437,6332 -Vanxains,24564,704,35.759,1.903,1.723,485,6464 -Vieilmoulin,21679,122,6.064,0.784,0.710,825,6693 -Saint-Aubin-Fosse-Louvain,53199,218,14.527,1.213,1.098,414,6825 -Saint-Germain-de-Coulamer,53223,362,17.803,1.343,1.216,465,6798 -Argentré-du-Plessis,35006,4344,41.259,2.045,1.852,391,6783 -Lépinas,23107,146,15.058,1.235,1.118,620,6551 -Saint-Gilles-Pligeaux,22294,290,19.981,1.423,1.288,253,6828 -Loctudy,29135,4051,13.346,1.163,1.053,164,6774 -Autheuil-en-Valois,60031,273,9.329,0.972,0.880,703,6897 -Moissac-Vallée-Française,48097,221,27.005,1.654,1.498,764,6337 -Saint-Ouen-d'Aunis,17376,1639,8.913,0.950,0.860,392,6577 -Trédaniel,22346,944,15.991,1.273,1.153,284,6818 -Castéra-Verduzan,32083,989,20.093,1.427,1.292,492,6306 -Fontaine-Simon,28156,936,17.135,1.318,1.193,554,6823 -Chavanne,70147,235,2.315,0.484,0.438,976,6724 -Fontaine-Bellenger,27249,1134,5.024,0.713,0.646,570,6898 -Champvans-les-Moulins,25119,348,2.544,0.508,0.460,919,6687 -Carnoux-en-Provence,13119,6546,3.719,0.614,0.556,908,6242 -Senots,60613,337,6.310,0.800,0.724,626,6909 -Gardefort,18098,148,8.448,0.925,0.838,687,6682 -Thurey-le-Mont,25563,129,4.889,0.704,0.637,934,6702 -Avignon,84007,92378,65.029,2.567,2.324,848,6324 -Présentevillers,25469,453,3.855,0.625,0.566,982,6717 -Saint-Gonnery,56215,1088,16.673,1.300,1.177,265,6798 -Saint-Victor-Malescours,43227,826,14.705,1.221,1.106,804,6470 -Champagne-et-Fontaine,24097,405,24.940,1.590,1.440,489,6488 -Aspach,68010,1128,4.212,0.653,0.591,1019,6736 -Mosnac,17250,458,12.737,1.136,1.029,425,6494 -Broué,28062,889,12.207,1.112,1.007,590,6850 -Ville-en-Blaisois,52528,155,6.949,0.839,0.760,842,6818 -Daours,80234,814,8.779,0.943,0.854,659,6976 -Asques,33016,468,6.231,0.795,0.720,432,6433 -Langon,33227,7377,13.776,1.181,1.069,443,6390 -L'Escarène,6057,2507,10.508,1.032,0.934,1050,6311 -Laroche-près-Feyt,19108,64,17.288,1.323,1.198,659,6513 -Marchamp,1233,131,13.216,1.157,1.048,901,6521 -Saint-Martin-le-Colonel,26316,190,3.216,0.571,0.517,881,6435 -Chanteloup-les-Bois,49070,710,27.565,1.671,1.513,417,6673 -Saint-Aignan-sur-Ry,76554,346,7.939,0.897,0.812,582,6934 -Villers-devant-Mouzon,8477,98,4.460,0.672,0.608,844,6949 -Melin,70337,56,5.723,0.761,0.689,910,6743 -Pierre-de-Bresse,71351,1951,28.178,1.690,1.530,876,6643 -Saint-Maixent,72296,730,22.423,1.507,1.364,525,6784 -Doncourt-aux-Templiers,55163,67,6.164,0.790,0.715,901,6888 -Vénestanville,76731,199,2.599,0.513,0.464,548,6967 -Montchaboud,38252,349,1.985,0.448,0.406,917,6447 -Maisoncelles-Pelvey,14389,262,5.517,0.748,0.677,433,6890 -La Motte,83085,2875,28.976,1.713,1.551,990,6277 -Serruelles,18250,78,7.582,0.876,0.793,653,6644 -Genilac,42225,3880,8.673,0.937,0.848,821,6493 -Anceaumeville,76007,652,4.686,0.689,0.624,561,6943 -Boutenac-Touvent,17060,223,3.175,0.567,0.513,408,6497 -Boncé,28049,244,8.994,0.955,0.865,593,6801 -Bégrolles-en-Mauges,49027,2040,14.716,1.221,1.106,401,6676 -La Boissière-des-Landes,85026,1379,23.936,1.557,1.410,364,6615 -Marcollin,38219,668,10.752,1.044,0.945,862,6468 -Morancez,28269,1741,7.150,0.851,0.771,590,6813 -Plainval,60495,401,9.088,0.960,0.869,662,6939 -Lugny-Bourbonnais,18131,36,5.312,0.734,0.665,676,6651 -Bessé-sur-Braye,72035,2222,20.575,1.444,1.307,527,6751 -Biniville,50055,115,3.020,0.553,0.501,374,6936 -Méréglise,28242,101,4.460,0.672,0.608,565,6800 -Gaillères,40103,610,14.057,1.193,1.080,430,6319 -Recoules-de-Fumas,48124,103,9.667,0.990,0.896,726,6391 -Montalet-le-Bois,78416,321,3.032,0.554,0.502,615,6882 -Gerbéviller,54222,1349,23.751,1.551,1.404,956,6826 -Lirey,10198,106,4.855,0.701,0.635,779,6784 -Marcy-sous-Marle,2460,192,4.548,0.679,0.615,752,6962 -Bizeneuille,3031,295,29.723,1.735,1.571,677,6586 -Os-Marsillon,64431,531,5.372,0.738,0.668,408,6262 -Firminy,42095,16994,10.487,1.031,0.933,802,6476 -Waldighofen,68355,1542,4.150,0.648,0.587,1026,6727 -Saint-Romain-la-Motte,42284,1440,28.001,1.684,1.525,778,6551 -Treignat,3288,416,29.356,1.725,1.562,653,6582 -Haut Valromey,1187,695,107.893,3.306,2.993,910,6558 -Vue,44220,1648,19.596,1.409,1.276,328,6690 -Pardaillan,47199,307,19.648,1.411,1.278,482,6397 -Sarniguet,65406,252,2.127,0.464,0.420,464,6252 -Linsdorf,68187,319,3.416,0.588,0.532,1033,6723 -Sainte-Tréphine,22331,188,12.681,1.134,1.027,241,6814 -Bonnal,25072,34,1.740,0.420,0.380,953,6718 -Lortet,65279,209,3.591,0.603,0.546,485,6218 -Marchezais,28235,328,2.223,0.475,0.430,592,6853 -Marnay,86148,695,45.430,2.145,1.942,499,6589 -Venisey,70545,139,6.908,0.837,0.758,924,6754 -Soirans,21609,478,4.468,0.673,0.609,872,6681 -Susville,38499,1292,10.022,1.008,0.913,919,6427 -Bezons,95063,28976,4.190,0.652,0.590,644,6870 -Champagne-sur-Loue,39095,125,3.773,0.618,0.560,914,6662 -Vinzier,74308,818,6.517,0.813,0.736,977,6587 -Parey-sous-Montfort,88343,144,7.104,0.848,0.768,918,6800 -Storckensohn,68328,210,5.096,0.719,0.651,996,6761 -Fayence,83055,5731,27.767,1.677,1.518,994,6281 -Digny,28130,967,40.705,2.031,1.839,563,6831 -Bernesq,14063,199,6.018,0.781,0.707,413,6917 -Daméraucourt,60193,221,8.587,0.933,0.845,623,6958 -Bonnay,71042,333,12.031,1.104,1.000,822,6606 -Vacquières,34318,593,14.703,1.221,1.106,775,6301 -Hambye,50228,1152,29.947,1.742,1.577,392,6879 -Avant-lès-Ramerupt,10021,156,20.851,1.453,1.316,792,6820 -Pannessières,39404,481,5.282,0.732,0.663,900,6626 -Languevoisin-Quiquery,80465,191,4.834,0.700,0.634,694,6961 -Sernhac,30317,1727,9.015,0.956,0.866,827,6313 -Ézanville,95229,9767,5.183,0.725,0.656,652,6882 -Limendous,64343,678,7.536,0.874,0.791,440,6248 -Tôes,76700,1569,7.543,0.874,0.791,558,6956 -Wacquinghen,62867,258,2.462,0.499,0.452,605,7076 -Pont-la-Ville,52399,132,10.335,1.023,0.926,837,6777 -Tailhac,43242,73,12.619,1.131,1.024,735,6438 -Saint-Andéol-de-Vals,7210,531,16.635,1.298,1.175,809,6398 -Rônai,61352,163,5.395,0.739,0.669,469,6862 -Yzeux,80835,267,5.046,0.715,0.647,635,6987 -Saint-Georges-de-la-Rivière,50471,273,3.822,0.622,0.563,358,6930 -Saint-Mars-d'Égrenne,61421,678,25.451,1.606,1.454,422,6837 -Saint-Donat-sur-l'Herbasse,26301,4107,19.768,1.415,1.281,856,6453 -Laval-en-Laonnois,2413,250,4.565,0.680,0.616,741,6935 -Château-Rouge,57131,294,4.332,0.663,0.600,963,6915 -Reinhardsmunster,67391,452,18.548,1.371,1.241,1017,6849 -Sorcy-Bauthémont,8428,151,11.143,1.063,0.962,813,6940 -Billy,41016,1007,26.575,1.641,1.486,589,6688 -Villars-sous-Dampjoux,25617,362,3.123,0.563,0.510,984,6701 -Durrenentzen,68076,879,6.229,0.794,0.719,1037,6787 -Cevins,73063,735,32.500,1.815,1.643,977,6509 -Jussey,70292,1645,33.766,1.850,1.675,921,6751 -Duras,47086,1319,20.155,1.429,1.294,476,6401 -La Bastide-d'Engras,30031,199,9.868,1.000,0.905,818,6332 -Saint-Bonnet-des-Quarts,42203,325,32.915,1.826,1.653,765,6555 -Escragnolles,6058,612,26.297,1.632,1.478,1004,6296 -Vervezelle,88502,130,1.905,0.439,0.397,978,6797 -Torpes,25564,1041,5.625,0.755,0.684,919,6678 -Chamaloc,26069,131,22.168,1.499,1.357,887,6417 -Beaulieu,7028,498,25.404,1.604,1.452,803,6364 -Bitry,58033,307,17.682,1.338,1.211,709,6707 -Guevenatten,68114,139,2.162,0.468,0.424,1008,6740 -Saint-Martin-de-Commune,71450,110,14.812,1.225,1.109,816,6642 -Cernay,28067,89,7.935,0.897,0.812,567,6811 -Saint-Étienne-sur-Reyssouze,1352,568,14.005,1.191,1.078,856,6589 -Orschwihr,68250,1052,7.051,0.845,0.765,1017,6768 -Buneville,62187,178,3.812,0.621,0.562,654,7026 -La Motte-Saint-Jean,71325,1224,21.572,1.478,1.338,773,6599 -La Trimouille,86273,904,42.172,2.067,1.871,548,6601 -Les Ponts-de-Cé,49246,12708,19.548,1.407,1.274,439,6708 -Saint-Maurice-en-Quercy,46279,222,13.024,1.149,1.040,615,6406 -L'Aiguillon-sur-Vie,85002,1941,23.249,1.535,1.390,335,6630 -Runan,22269,233,5.276,0.731,0.662,241,6860 -Saint-Vincent-de-Lamontjoie,47282,252,15.289,1.245,1.127,498,6339 -Ézy-sur-Eure,27230,3658,8.936,0.952,0.862,584,6864 -Reuilly,36171,2031,26.125,1.627,1.473,624,6669 -Rouessé-Vassé,72255,819,31.828,1.796,1.626,467,6789 -Vitrac,15264,262,18.068,1.353,1.225,644,6409 -Avon-la-Pèze,10023,196,12.790,1.138,1.030,751,6811 -Vandières,54546,923,12.653,1.132,1.025,916,6878 -Cuvergnon,60190,288,7.189,0.853,0.772,702,6897 -Sazeret,3270,150,18.091,1.354,1.226,694,6582 -La Chambre,73067,1156,3.078,0.558,0.505,957,6481 -They-sous-Vaudemont,54516,12,1.668,0.411,0.372,927,6816 -Savoyeux,70481,219,6.189,0.792,0.717,906,6722 -Saint-Georges-les-Bains,7240,2244,14.000,1.191,1.078,845,6418 -Louannec,22134,3073,14.393,1.208,1.094,230,6870 -Plessis-Barbuise,10291,196,5.575,0.752,0.681,743,6832 -Fleury,11145,3866,51.791,2.291,2.074,716,6239 -Bucquoy,62181,1467,20.781,1.451,1.314,677,7003 -Chazey-Bons,1098,1079,15.571,1.256,1.137,910,6523 -Chis,65146,315,3.801,0.621,0.562,467,6250 -Le Vieil-Dampierre,51619,119,13.845,1.184,1.072,844,6878 -La Belliole,89036,256,8.632,0.935,0.847,708,6782 -Lixhausen,67270,374,3.435,0.590,0.534,1036,6865 -Villedômer,37276,1384,35.246,1.890,1.711,543,6716 -Courcy,14190,139,9.070,0.959,0.868,477,6880 -Saint-Étienne-sur-Suippe,51477,313,7.767,0.887,0.803,780,6923 -Mouilleron-Saint-Germain,85154,1839,28.710,1.706,1.545,406,6630 -Oisly,41166,373,10.746,1.043,0.944,580,6701 -Gibles,71218,595,19.704,1.413,1.279,806,6584 -Pagney-derrière-Barine,54414,634,6.240,0.795,0.720,911,6847 -Bidache,64123,1370,30.368,1.754,1.588,363,6275 -Thaix,58290,54,20.201,1.431,1.296,757,6636 -Rouffy,51469,114,5.711,0.761,0.689,778,6873 -Regnauville,62700,212,4.182,0.651,0.589,630,7024 -Le Mesnil-Adelée,50300,171,6.883,0.835,0.756,400,6851 -Trémoins,70506,381,4.117,0.646,0.585,980,6724 -Mauves,7152,1172,7.324,0.861,0.780,842,6438 -Viey,65469,32,6.023,0.781,0.707,456,6205 -Les Authieux,27027,298,4.870,0.702,0.636,571,6867 -Villeneuve-en-Montagne,71579,160,15.626,1.258,1.139,824,6632 -L'Habit,27309,512,5.094,0.718,0.650,581,6865 -Velesmes-Essarts,25594,343,2.902,0.542,0.491,917,6682 -Chambon-sur-Lac,63077,410,47.569,2.195,1.987,686,6491 -Messimy-sur-Saône,1243,1210,5.965,0.777,0.704,835,6550 -Ville-devant-Belrain,55555,34,6.116,0.787,0.713,871,6865 -Nangis,77327,8652,24.127,1.564,1.416,698,6829 -Betoncourt-sur-Mance,70070,30,3.722,0.614,0.556,905,6753 -Jublains,53122,727,36.494,1.923,1.741,444,6803 -Bassigney,70052,132,6.161,0.790,0.715,939,6753 -Maisoncelles,72178,191,11.326,1.071,0.970,517,6762 -Floudès,33169,103,3.793,0.620,0.561,459,6391 -Saint-Hervé,22300,408,9.993,1.006,0.911,271,6813 -Champagney,70120,3809,37.174,1.941,1.757,973,6737 -Radenac,56189,1053,21.675,1.482,1.342,272,6774 -Venzolasca,2B343,1775,16.539,1.295,1.173,1237,6180 -Marciac,32233,1236,20.887,1.455,1.317,470,6271 -Beaucamps-le-Vieux,80062,1419,5.073,0.717,0.649,613,6973 -Arbouans,25020,930,1.327,0.367,0.332,986,6717 -Chalamont,1074,2406,33.004,1.829,1.656,864,6548 -Saint-Héand,42234,3593,30.955,1.771,1.603,805,6492 -Le Mesnil-sous-Jumièges,76436,649,6.723,0.825,0.747,544,6931 -Broût-Vernet,3043,1182,31.914,1.798,1.628,720,6571 -Les Adrets-de-l'Estérel,83001,2745,22.463,1.509,1.366,1012,6278 -Espinasse,63152,293,24.043,1.561,1.413,679,6546 -Saint-Étienne-les-Orgues,4178,1273,48.741,2.222,2.012,925,6332 -Ors,59450,651,17.725,1.340,1.213,744,7004 -Vaux-lès-Palameix,55540,55,10.578,1.035,0.937,887,6885 -Causse-de-la-Selle,34060,379,45.278,2.142,1.939,754,6299 -Chessy-les-Prés,10099,506,25.750,1.615,1.462,766,6767 -Sahurs,76550,1234,11.149,1.063,0.962,552,6919 -Amfreville-sur-Iton,27014,821,5.432,0.742,0.672,564,6897 -Bissy-sous-Uxelles,71036,69,3.162,0.566,0.512,832,6610 -Saint-Bressou,46249,115,10.078,1.011,0.915,618,6398 -Saint-Pierre-des-Jonquières,76635,75,8.425,0.924,0.837,588,6975 -Sainte-Anne,25513,39,6.848,0.833,0.754,929,6654 -Le Loroux,35157,655,11.435,1.076,0.974,400,6817 -Kruth,68171,943,22.048,1.495,1.354,997,6772 -Cremeaux,42076,908,33.375,1.839,1.665,773,6538 -Sewen,68307,503,21.445,1.474,1.335,988,6754 -Saint-Étienne-du-Valdonnez,48147,647,56.030,2.383,2.158,747,6369 -Saint-Bonnet-de-Joux,71394,751,29.466,1.728,1.565,814,6601 -Saint-Martin-sur-la-Chambre,73259,547,4.678,0.688,0.623,960,6482 -Ételfay,80293,380,8.154,0.909,0.823,671,6950 -Yquelon,50647,1069,2.177,0.470,0.426,367,6871 -Boucieu-le-Roi,7040,274,8.861,0.948,0.858,835,6438 -Espinchal,63153,103,8.912,0.950,0.860,688,6477 -Le Monteil,15131,278,23.362,1.539,1.393,665,6465 -Avèze,63024,181,22.134,1.498,1.356,665,6499 -Crœttwiller,67079,173,2.557,0.509,0.461,1069,6882 -Garlin,64233,1405,18.188,1.358,1.230,437,6276 -Chindrieux,73085,1353,19.656,1.411,1.278,919,6527 -Bassignac,15019,227,11.986,1.102,0.998,653,6466 -Autreppes,2040,179,6.855,0.833,0.754,762,6979 -Les Petites-Armoises,8020,64,4.425,0.670,0.607,834,6935 -Gouy-Servins,62380,344,3.324,0.580,0.525,675,7033 -Voisey,52544,293,31.692,1.792,1.623,906,6754 -Davayat,63135,603,2.342,0.487,0.441,710,6538 -Saint-Juan,25520,171,12.236,1.113,1.008,954,6691 -Celles-sur-Durolle,63066,1742,38.833,1.984,1.796,746,6528 -Saint-Maigner,63373,192,18.887,1.383,1.252,673,6556 -Comberanche-et-Épeluche,24128,167,3.932,0.631,0.571,488,6467 -Barbey-Seroux,88035,146,7.341,0.862,0.780,988,6786 -Guiseniers,27307,460,10.721,1.042,0.943,591,6901 -Beynat,19023,1272,34.824,1.878,1.700,602,6452 -Rubescourt,80687,134,3.965,0.634,0.574,671,6946 -Crottes-en-Pithiverais,45118,339,13.670,1.177,1.066,629,6782 -Saint-Pryvé-Saint-Mesmin,45298,5666,8.980,0.954,0.864,610,6752 -Maisoncelles-du-Maine,53143,523,15.974,1.272,1.152,428,6772 -Grosne,90055,326,3.640,0.607,0.550,1001,6726 -Messeix,63225,1044,39.522,2.001,1.812,663,6497 -Maussac,19130,435,13.975,1.190,1.077,632,6489 -Marchenoir,41123,649,9.521,0.982,0.889,581,6752 -Lescouët-Gouarec,22124,218,19.147,1.393,1.261,241,6802 -Huanne-Montmartin,25310,82,3.561,0.601,0.544,953,6710 -Blesmes,2094,436,9.840,0.998,0.904,733,6880 -Pierreville,54429,311,2.973,0.549,0.497,931,6832 -Lobsann,67271,638,2.723,0.525,0.475,1054,6884 -Bertreville-Saint-Ouen,76085,352,6.626,0.819,0.742,560,6971 -Langueux,22106,7648,9.257,0.968,0.876,281,6836 -Battexey,88038,33,2.725,0.525,0.475,935,6816 -Rédené,29234,2901,24.687,1.582,1.432,218,6771 -Porchères,33332,896,13.272,1.160,1.050,462,6442 -Vesaignes-sous-Lafauche,52517,126,13.921,1.188,1.076,882,6804 -Salbris,41232,5320,106.586,3.286,2.975,624,6696 -Saint-Laurent-en-Beaumont,38413,466,13.219,1.157,1.048,923,6427 -Chavenay,78152,1806,6.110,0.787,0.713,624,6860 -Saint-Lin,79267,334,11.375,1.074,0.972,451,6606 -Curis-au-Mont-d'Or,69071,1170,3.078,0.558,0.505,841,6533 -Marseille 7e Arrondissement,13207,35173,5.782,0.765,0.693,886,6245 -Lyon 9e Arrondissement,69389,50706,7.542,0.874,0.791,841,6521 -Marseille 9e Arrondissement,13209,74523,63.204,2.531,2.292,895,6238 -Marseille 8e Arrondissement,13208,80724,20.682,1.448,1.311,895,6233 -Paris 7e Arrondissement,75107,52512,4.087,0.644,0.583,649,6863 -Lyon 2e Arrondissement,69382,30435,3.443,0.591,0.535,842,6520 -Lyon 7e Arrondissement,69387,82045,9.459,0.979,0.886,843,6519 -Paris 4e Arrondissement,75104,27487,1.599,0.403,0.365,653,6861 -Marseille 4e Arrondissement,13204,48074,2.884,0.541,0.490,894,6249 -Marseille 5e Arrondissement,13205,46274,2.191,0.471,0.426,896,6247 -Lyon 5e Arrondissement,69385,48929,6.178,0.791,0.716,841,6520 -Marseille 10e Arrondissement,13210,56191,10.738,1.043,0.944,894,6246 -Paris 14e Arrondissement,75114,137105,5.614,0.754,0.683,650,6858 -Paris 12e Arrondissement,75112,141494,16.384,1.288,1.166,661,6860 -Marseille 11e Arrondissement,13211,57757,33.481,1.842,1.668,904,6244 -Marseille 15e Arrondissement,13215,76420,16.630,1.298,1.175,892,6250 -Marseille 13e Arrondissement,13213,91754,27.979,1.684,1.525,896,6249 -Marseille 12e Arrondissement,13212,60799,14.030,1.192,1.079,896,6247 -Marseille 2e Arrondissement,13202,24888,3.553,0.600,0.543,893,6247 -Paris 6e Arrondissement,75106,40916,2.150,0.467,0.423,651,6862 -Paris 3e Arrondissement,75103,34788,1.170,0.344,0.311,652,6863 -Marseille 1er Arrondissement,13201,40202,1.778,0.424,0.384,893,6246 -Lyon 4e Arrondissement,69384,36080,2.916,0.544,0.493,843,6522 -Lyon 1er Arrondissement,69381,29575,1.542,0.395,0.358,843,6520 -Lyon 6e Arrondissement,69386,51416,3.759,0.617,0.559,843,6520 -Lyon 8e Arrondissement,69388,84517,6.794,0.830,0.751,845,6518 -Paris 1er Arrondissement,75101,16252,1.826,0.430,0.389,652,6862 -Marseille 14e Arrondissement,13214,62199,16.356,1.287,1.165,894,6249 -Marseille 3e Arrondissement,13203,47773,2.542,0.508,0.460,894,6249 -Marseille 16e Arrondissement,13216,16390,14.249,1.202,1.088,888,6254 -Lyon 3e Arrondissement,69383,101992,6.359,0.803,0.727,847,6517 -Paris 18e Arrondissement,75118,195060,5.996,0.779,0.705,652,6865 -Paris 16e Arrondissement,75116,165446,16.416,1.290,1.168,649,6863 -Paris 9e Arrondissement,75109,59629,2.182,0.470,0.426,651,6863 -Paris 19e Arrondissement,75119,186393,6.787,0.829,0.751,654,6864 -Marseille 6e Arrondissement,13206,43070,2.060,0.457,0.414,894,6246 -Paris 2e Arrondissement,75102,20260,0.993,0.317,0.287,651,6864 -Paris 8e Arrondissement,75108,36453,3.888,0.628,0.569,651,6865 -Paris 11e Arrondissement,75111,147017,3.651,0.608,0.550,654,6864 -Paris 20e Arrondissement,75120,195604,5.997,0.780,0.706,657,6861 -Paris 10e Arrondissement,75110,91932,2.890,0.541,0.490,653,6865 -Paris 13e Arrondissement,75113,181552,7.140,0.851,0.771,653,6858 -Paris 15e Arrondissement,75115,233484,8.470,0.926,0.838,650,6861 -Paris 17e Arrondissement,75117,167835,5.663,0.757,0.685,651,6865 -Paris 5e Arrondissement,75105,59108,2.544,0.508,0.460,651,6860 diff --git a/mobility/data/surveys/entd-2008/.gitkeep b/mobility/data/surveys/entd-2008/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/mobility/experiments/iterative.py b/mobility/experiments/iterative.py deleted file mode 100644 index 4221885e..00000000 --- a/mobility/experiments/iterative.py +++ /dev/null @@ -1,169 +0,0 @@ -import os -import dotenv -import mobility as mobility -import pandas as pd -import numpy as np -import pathlib -import geopandas as gpd - -from mobility import CarMode, WalkMode, BicycleMode, PublicTransportMode, ModalShift -from mobility import PublicTransportRoutingParameters -from mobility.concat_costs import concat_generalized_cost, concat_travel_costs - -dotenv.load_dotenv() - -mobility.set_params( - package_data_folder_path=os.environ["MOBILITY_PACKAGE_DATA_FOLDER"], - project_data_folder_path=os.environ["MOBILITY_PROJECT_DATA_FOLDER"], - debug=True -) - -# 12202 -transport_zones = mobility.TransportZones("fr-12202", radius=40.0, level_of_detail=1) - - - - -ssi = [] - - -for car_vot in [0.0]: - - walk = mobility.WalkMode( - transport_zones, - generalized_cost_parameters=mobility.GeneralizedCostParameters( - cost_constant=0.0, - cost_of_distance=0.0, - cost_of_time=mobility.CostOfTimeParameters( - intercept=14.0, - breaks=[0.0, 2.0, 10.0, 10000.0], - slopes=[0.0, (18.0-14.0)/(6.0-2.0), (26.0-22.0)/(50.0-10.0)], - max_value=26.0 - ) - ) - ) - - bicycle = mobility.BicycleMode( - transport_zones, - generalized_cost_parameters=mobility.GeneralizedCostParameters( - cost_constant=0.0, - cost_of_distance=0.0, - cost_of_time=mobility.CostOfTimeParameters( - intercept=28.0, - breaks=[0.0, 2.0, 10.0, 10000.0], - slopes=[0.0, (34.0-28.0)/(6.0-2.0), (41.0-40.0)/(50.0-10.0)], - max_value=41.0 - ) - ) - ) - - car_cost_constant = 0.0 - car_cost_of_distance = 0.1 - - car_cost_of_time = mobility.CostOfTimeParameters( - intercept=9.0, - breaks=[0.0, 2.0, 10.0, 10000.0], - slopes=[0.0, (12.0-9.0)/(6.0-2.0), (27.0-15.0)/(50.0-10.0)], - max_value=26.0 - ) - - car = mobility.CarMode( - transport_zones, - generalized_cost_parameters=mobility.GeneralizedCostParameters( - cost_constant=car_cost_constant, - cost_of_distance=car_cost_of_distance, - cost_of_time=car_cost_of_time - ), - congestion=True - ) - - pt_gen_cost_parms = generalized_cost_parameters=mobility.GeneralizedCostParameters( - cost_constant=5.0, - cost_of_distance=0.0, - cost_of_time=mobility.CostOfTimeParameters( - intercept=11.0, - breaks=[0.0, 2.0, 10.0, 10000.0], - slopes=[0.0, (15.0-11.0)/(6.0-2.0), (21.0-19.0)/(50.0-10.0)], - max_value=21.0 - ) - ) - - walk_pt = mobility.PublicTransportMode( - transport_zones, - first_leg_mode=walk, - last_leg_mode=walk, - first_modal_shift=ModalShift( - max_travel_time=20.0/60.0, - average_speed=5.0, - shift_time=1.0 - ), - last_modal_shift=ModalShift( - max_travel_time=20.0/60.0, - average_speed=5.0, - shift_time=1.0 - ), - generalized_cost_parameters=pt_gen_cost_parms - ) - - modes = [ - walk, - car, - walk_pt, - bicycle - ] - - - work_dest_parms = mobility.WorkDestinationChoiceModelParameters( - model={ - "type": "radiation", - "lambda": 0.9998, - "end_of_contract_rate": 0.001, - "job_change_utility_constant": -5.0, - "max_iterations": 20, - "tolerance": 0.005, - "cost_update": True - } - ) - - work_dest_cm = mobility.WorkDestinationChoiceModel( - transport_zones, - modes=modes, - parameters=work_dest_parms - ) - - work_dest_cm.get() - - - flows = pd.read_parquet(work_dest_cm.cache_path["od_flows"]) - - comparison = work_dest_cm.get_comparison() - work_dest_cm.plot_model_fit(comparison[comparison["flow_volume"] > 1.0]) - work_dest_cm.compute_ssi(comparison, 100) - work_dest_cm.compute_ssi(comparison, 200) - work_dest_cm.compute_ssi(comparison, 400) - work_dest_cm.compute_ssi(comparison, 1000) - - tc = car.travel_costs.get() - - - comparison.groupby("local_admin_unit_id_from")[["flow_volume", "ref_flow_volume"]].sum().sum() - x = comparison.groupby("local_admin_unit_id_to")[["flow_volume", "ref_flow_volume"]].sum() - - - ssi.append([car_vot, work_dest_cm.compute_ssi(comparison, 200)]) - - - -print(ssi) - - -comparison = comparison[(comparison["ref_flow_volume"] > 200.0) | (comparison["flow_volume"] > 200.0)] -comparison["delta"] = comparison["flow_volume"] - comparison["ref_flow_volume"] -comparison["relative_error"] = comparison["delta"]/comparison["ref_flow_volume"] - -rmse = np.sqrt((comparison["delta"].pow(2)).sum()/comparison.shape[0]) -nrmse = rmse/comparison["ref_flow_volume"].mean() - -mape = (comparison["delta"].abs()/comparison["ref_flow_volume"]).mean() - -r2 = 1.0 - comparison["delta"].pow(2).sum()/(comparison["ref_flow_volume"] - comparison["ref_flow_volume"].mean()).pow(2).sum() diff --git a/mobility/parsers/ademe_base_carbone.py b/mobility/impacts/ademe_base_carbone.py similarity index 100% rename from mobility/parsers/ademe_base_carbone.py rename to mobility/impacts/ademe_base_carbone.py diff --git a/mobility/carbon_computation.py b/mobility/impacts/carbon_computation.py similarity index 97% rename from mobility/carbon_computation.py rename to mobility/impacts/carbon_computation.py index 4934e191..9ac8de2a 100644 --- a/mobility/carbon_computation.py +++ b/mobility/impacts/carbon_computation.py @@ -2,6 +2,7 @@ import numpy as np from pathlib import Path import os +from importlib import resources def get_ademe_factors(file_path): @@ -76,7 +77,7 @@ def carbon_computation(trips, ademe_database="Base_Carbone_V22.0.csv"): # CREATE FACTORS DATABASE # --------------------------------------------- - data_folder_path = Path(os.path.dirname(__file__)) / "data" + data_folder_path = Path(str(resources.files("mobility.runtime.resources"))) # ENTD modes and carbon factors types modes = pd.read_excel(data_folder_path / "surveys/entd_mode.xlsx", dtype=str) diff --git a/mobility/transport_modes/default_gwp.py b/mobility/impacts/default_gwp.py similarity index 100% rename from mobility/transport_modes/default_gwp.py rename to mobility/impacts/default_gwp.py diff --git a/mobility/localized_trips.py b/mobility/localized_trips.py deleted file mode 100644 index ca68523c..00000000 --- a/mobility/localized_trips.py +++ /dev/null @@ -1,412 +0,0 @@ -import os -import pathlib -import logging -import pandas as pd -import numpy as np -import random - -from typing import List - -from mobility.file_asset import FileAsset -from mobility.choice_models.destination_choice_model import DestinationChoiceModel -from mobility.choice_models.transport_mode_choice_model import TransportModeChoiceModel - - -class LocalizedTrips(FileAsset): - """ - Localizes trips by assigning origin, destination, and transport mode. - - This class uses destination and mode choice models to assign plausible - from/to transport zones and a mode of transport to each trip, based on - individual-level attributes and OD probabilities. - - Parameters - ---------- - dest_cm_list : list of DestinationChoiceModel - List of destination choice models, each tied to specific motives. - mode_cm_list : list of TransportModeChoiceModel - List of transport mode choice models, aligned with the destination models. - trips : FileAsset - File containing the base trips to localize (must include individual_id, - trip_id, motive, previous_motive). - - Returns - ------- - pd.DataFrame - Localized trips with updated from/to zones, mode_id, and travel distance. - """ - - - def __init__( - self, - dest_cm_list: List[TransportModeChoiceModel], - mode_cm_list: List[DestinationChoiceModel], - trips: FileAsset, - keep_survey_cols: bool = False - ): - - inputs = { - "dest_cm_list": dest_cm_list, - "mode_cm_list": mode_cm_list, - "trips": trips, - "keep_survey_cols": keep_survey_cols - } - - file_name = "trips_localized.parquet" - cache_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / file_name - - super().__init__(inputs, cache_path) - - - def get_cached_asset(self) -> pd.DataFrame: - """ - Load cached localized trips. - - Returns - ------- - pd.DataFrame - Cached localized trips. - """ - logging.info(f"Trips already localized. Reusing the file: {self.cache_path}") - return pd.read_parquet(self.cache_path) - - def create_and_get_asset(self) -> pd.DataFrame: - """ - Run the localization process (origin, destination, and mode), - cache the result, and return the final trips. - - Returns - ------- - pd.DataFrame - Localized and cached trips. - """ - logging.info("Localizing each trip...") - - trips = self.inputs["trips"].get() - population = self.inputs["trips"].inputs["population"].get() - dest_cm_list = self.inputs["dest_cm_list"] - mode_cm_list = self.inputs["mode_cm_list"] - keep_survey_cols = self.inputs["keep_survey_cols"] - - trips = self.localize_trips(trips, population, dest_cm_list, mode_cm_list, keep_survey_cols) - trips.to_parquet(self.cache_path) - return trips - - def localize_trips( - self, - trips: pd.DataFrame, - population: pd.DataFrame, - dest_cm_list: List[DestinationChoiceModel], - mode_cm_list: List[TransportModeChoiceModel], - keep_survey_cols: bool - ) -> pd.DataFrame: - """ - Apply all localization steps: - - Assign origin/destination zones - - Sample a transport mode - - Replace distances - - Parameters - ---------- - trips : pd.DataFrame - Input trips to localize. - population : pd.DataFrame - Population table linked to individuals. - dest_cm_list : list of DestinationChoiceModel - List of destination choice models. - mode_cm_list : list of TransportModeChoiceModel - List of transport mode choice models. - - Returns - ------- - pd.DataFrame - Fully localized trips. - """ - - trips = self.sample_origins_destinations(trips, population, dest_cm_list) - trips = self.sample_modes(trips, mode_cm_list, dest_cm_list, keep_survey_cols) - trips = self.compute_new_distances(trips, dest_cm_list, keep_survey_cols) - - return trips - - def sample_origins_destinations( - self, - trips: pd.DataFrame, - population: pd.DataFrame, - dest_cm_list: List[TransportModeChoiceModel] - ) -> pd.DataFrame: - """ - Assign origin and destination zones to each trip. - - Uses probabilistic destination choice based on: - - home zone for the first trip - - previous destination for chained trips - - Returns - ------- - pd.DataFrame - Trips with added 'from_transport_zone_id' and 'to_transport_zone_id'. - """ - logging.info("Assigning origins and destinations to transport zones...") - - home = population[["individual_id", "transport_zone_id"]].copy() - home["model_id"] = "home" - home["prob"] = 1.0 - - # Assign motive ids to models and assemble a dataframe with destination - # probabilities for all models - motive_id_to_model_id = {"1.1": "home"} - - for dest_cm in dest_cm_list: - for motive_id in dest_cm.inputs["parameters"].motive_ids: - motive_id_to_model_id[motive_id] = dest_cm.inputs_hash - - dest_probs = [ - ( - dest_cm - .get() - .assign(model_id=dest_cm.inputs_hash) - .assign(n_possible_destinations=dest_cm.n_possible_destinations) - .rename({"from": "from_transport_zone_id", "to": "to_transport_zone_id"}, axis=1) - ) - for dest_cm in dest_cm_list - ] - - dest_probs = pd.concat(dest_probs) - - # Choose n destinations for each model as if every origin was the home - potential_dests = pd.merge( - population[["individual_id", "transport_zone_id"]].rename({"transport_zone_id": "from_transport_zone_id"}, axis=1), - dest_probs, - on="from_transport_zone_id" - ) - - potential_dests = potential_dests.sample(frac=1.0, weights="prob") - mask = potential_dests.groupby(["individual_id", "model_id"]).cumcount() < potential_dests["n_possible_destinations"] - potential_dests = potential_dests[mask] - - potential_dests = pd.concat([ - potential_dests[["individual_id", "model_id", "to_transport_zone_id", "prob"]].rename({"to_transport_zone_id": "transport_zone_id"}, axis=1), - home - ]) - - # Map motives to models in the trips dataframe - loc_trips = trips.copy() - loc_trips["from_model_id"] = loc_trips["previous_motive"].map(motive_id_to_model_id) - loc_trips["to_model_id"] = loc_trips["motive"].map(motive_id_to_model_id) - loc_trips = loc_trips[(~loc_trips["from_model_id"].isnull()) & (~loc_trips["to_model_id"].isnull())] - - # Sample origins - loc_trips = pd.merge( - loc_trips, - potential_dests.rename({"model_id": "from_model_id", "transport_zone_id": "from_transport_zone_id"}, axis=1), - on=["individual_id", "from_model_id"] - ) - - loc_trips = loc_trips.sample(frac=1.0, weights="prob", ignore_index=True).drop_duplicates("trip_id", keep="first") - loc_trips.drop("prob", axis=1, inplace=True) - - # Sample destinations - loc_trips = pd.merge( - loc_trips, - potential_dests.rename({"model_id": "to_model_id", "transport_zone_id": "to_transport_zone_id"}, axis=1), - on=["individual_id", "to_model_id"] - ) - - loc_trips = loc_trips.sample(frac=1.0, weights="prob", ignore_index=True).drop_duplicates("trip_id", keep="first") - - # Assign the trip origins and destinations in the trips dataframe - trips = pd.merge( - trips, - loc_trips[["trip_id", "from_transport_zone_id", "to_transport_zone_id"]], - on="trip_id", - how="left" - ) - - return trips - - - - def sample_modes( - self, - trips: pd.DataFrame, - mode_cm_list: List[TransportModeChoiceModel], - dest_cm_list: List[TransportModeChoiceModel], - keep_survey_cols: bool - ) -> pd.DataFrame: - """ - Assign transport modes to trips based on origin-destination pairs and motive. - - Each transport mode model is applied only to the subset of trips associated - with the motives it is calibrated for. - - Parameters - ---------- - trips : pd.DataFrame - DataFrame containing the trips to be updated with transport modes. - mode_cm_list : list of TransportModeChoiceModel - List of transport mode choice models. - dest_cm_list : list of DestinationChoiceModel - List of destination choice models (used to retrieve relevant motives). - - Returns - ------- - pd.DataFrame - Trips with an additional column 'mode_id' representing the selected mode. - """ - logging.info("Assigning transport modes for localized trips...") - - # Assign motive ids to models and assemble a dataframe with mode - # probabilities for all models - motive_id_to_model_id = {"1.1": mode_cm_list[0].inputs_hash} - - for mode_cm, dest_cm in zip(mode_cm_list, dest_cm_list): - for motive_id in dest_cm.inputs["parameters"].motive_ids: - motive_id_to_model_id[motive_id] = mode_cm.inputs_hash - - mode_probs = [ - ( - mode_cm - .get() - .assign(model_id=mode_cm.inputs_hash) - .rename({"from": "from_transport_zone_id", "to": "to_transport_zone_id"}, axis=1) - ) - for mode_cm in mode_cm_list - ] - - mode_probs = pd.concat(mode_probs) - - # Find the unique OD pairs that each individual travels - ods = ( - trips - .groupby(["individual_id", "motive", "from_transport_zone_id", "to_transport_zone_id"], as_index=False) - .head(1) - [["individual_id", "motive", "from_transport_zone_id", "to_transport_zone_id"]] - .dropna() - ) - - # Map them to the available models and mode probabilities - ods["model_id"] = ods["motive"].map(motive_id_to_model_id) - - # !!! BUG : - # A small number of ODs (like 5 out of 100 000) have no mode_probs, - # which makes the next sampling step crash. - # This should not happen because ODs are sampled based on destination - # probabilities, which are based on mode costs (so there should be at - # least one mode available). - ods = pd.merge( - ods, - mode_probs, - on=["model_id", "from_transport_zone_id", "to_transport_zone_id"] - ) - - # Sample one mode for each OD pair - ods = ( - ods - .sample(frac=1.0, weights="prob", random_state=42) - .groupby( - [ - "individual_id", "motive", - "from_transport_zone_id", "to_transport_zone_id" - ], - as_index=False - ) - .first() - ) - - # Assign the modes to each of the OD pairs that could be sampled, - # and use the survey modes otherwise - trips = pd.merge( - trips, - ods, - on=[ - "individual_id", "motive", - "from_transport_zone_id", "to_transport_zone_id" - ], - how="left" - ) - - trips["mode"] = trips["mode_id"].where( - trips["mode"].isnull(), - trips["mode"] - ) - - trips.drop(["model_id", "prob"], axis=1, inplace=True) - - # If the user wants to keep the original mode (the one from the survey), - # create a new survey_mode_id column, otherwise replace the survey mode - # with the modelled/survey modes - if keep_survey_cols is True: - trips["survey_mode_id"] = trips["mode_id"] - trips.drop("mode_id", axis=1, inplace=True) - trips.rename({"mode": "mode_id"}, axis=1, inplace=True) - else: - trips.drop("mode_id", axis=1, inplace=True) - trips.rename({"mode": "mode_id"}, axis=1, inplace=True) - - return trips - - - - def compute_new_distances( - self, - trips: pd.DataFrame, - dest_cm_list: List[DestinationChoiceModel], - keep_survey_cols: bool - ) -> pd.DataFrame: - """ - Replace or add travel distances to trips using OD-specific distance matrices - by transport mode and motive. - - Parameters - ---------- - trips : pd.DataFrame - Trips DataFrame with at least from/to zones, mode, and motive. - dest_cm_list : list of DestinationChoiceModel - Destination models containing access to OD travel costs (distance). - - Returns - ------- - pd.DataFrame - Trips with the column 'distance' updated where new values are available. - """ - logging.info("Replacing distances for localized trips...") - - - mode_dists = ( - dest_cm_list[0].inputs["costs"] - .get( - metrics=["distance"], - congestion=True, - aggregate_by_od=False, - detail_distances=True - ) - .to_pandas() - .rename( - { - "from": "from_transport_zone_id", - "to": "to_transport_zone_id", - "mode": "mode_id" - }, - axis=1 - ) - ) - - - trips = pd.merge( - trips, - mode_dists, - on=["from_transport_zone_id", "to_transport_zone_id", "mode_id"], - how="left", - suffixes=["_survey", ""] - ) - - trips["distance"] = trips["distance_survey"].where( - trips["distance"].isnull(), - trips["distance"] - ) - - if keep_survey_cols is False: - trips.drop("distance_survey", axis=1, inplace=True) - - return trips diff --git a/mobility/motives/__init__.py b/mobility/motives/__init__.py deleted file mode 100644 index 933e5dda..00000000 --- a/mobility/motives/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from .motive import Motive -from .work import WorkMotive -from .home import HomeMotive -from .leisure import LeisureMotive -from .shopping import ShoppingMotive -from .other import OtherMotive -from .studies import StudiesMotive \ No newline at end of file diff --git a/mobility/parsers/__init__.py b/mobility/parsers/__init__.py deleted file mode 100644 index d94ae8d7..00000000 --- a/mobility/parsers/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -from .patch_openpyxl import patch_openpyxl -patch_openpyxl() - -from .work_home_flows import download_work_home_flows -from .city_legal_population import CityLegalPopulation -from .census_localized_individuals import CensusLocalizedIndividuals -from .mobility_survey import MobilitySurvey -from .local_admin_units import LocalAdminUnits -from .jobs_active_population_distribution import JobsActivePopulationDistribution -from .jobs_active_population_flows import JobsActivePopulationFlows \ No newline at end of file diff --git a/mobility/parsers/urban_units.py b/mobility/parsers/urban_units.py deleted file mode 100644 index c31ba459..00000000 --- a/mobility/parsers/urban_units.py +++ /dev/null @@ -1,46 +0,0 @@ -import os -import pathlib -import zipfile -import pandas as pd -import numpy as np -from mobility.parsers.download_file import download_file - - -def prepare_french_urban_units(): - - url = "https://www.data.gouv.fr/fr/datasets/r/c59f74bb-8095-4e41-9627-5fecca95668d" - path = pathlib.Path(os.environ["MOBILITY_PACKAGE_DATA_FOLDER"]) / "insee/UU2020_au_01-01-2023.zip" - download_file(url, path) - - # Unzip the content - with zipfile.ZipFile(path, "r") as zip_ref: - zip_ref.extractall(path.parent) - - -def get_french_urban_units(): - - path = pathlib.Path(os.environ["MOBILITY_PACKAGE_DATA_FOLDER"]) / "insee/UU2020_au_01-01-2023.xlsx" - - if path.exists() is False: - prepare_french_urban_units() - - urban_units = pd.read_excel( - path, - sheet_name="Composition_communale", - skiprows=5 - ) - - urban_units = urban_units.iloc[:, [0, 5]] - urban_units.columns = ["INSEE_COM", "urban_unit_category"] - urban_units["urban_unit_category"] = np.where( - urban_units["urban_unit_category"] != "H", - urban_units["urban_unit_category"], - "R" - ) - - return urban_units - - - - - \ No newline at end of file diff --git a/mobility/population/__init__.py b/mobility/population/__init__.py new file mode 100644 index 00000000..ae585b08 --- /dev/null +++ b/mobility/population/__init__.py @@ -0,0 +1,10 @@ +from .population import Population, PopulationParameters +from .city_legal_population import CityLegalPopulation +from .census_localized_individuals import CensusLocalizedIndividuals + +__all__ = [ + "Population", + "PopulationParameters", + "CityLegalPopulation", + "CensusLocalizedIndividuals", +] diff --git a/mobility/parsers/census_localized_individuals.py b/mobility/population/census_localized_individuals.py similarity index 97% rename from mobility/parsers/census_localized_individuals.py rename to mobility/population/census_localized_individuals.py index 2e286f78..7411c704 100644 --- a/mobility/parsers/census_localized_individuals.py +++ b/mobility/population/census_localized_individuals.py @@ -5,8 +5,8 @@ import pandas as pd import numpy as np -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file class CensusLocalizedIndividuals(FileAsset): @@ -147,4 +147,4 @@ def create_and_get_asset(self) -> pd.DataFrame: os.unlink(output_path) os.unlink(unzipped_output_path) - return individuals \ No newline at end of file + return individuals diff --git a/mobility/parsers/city_legal_population.py b/mobility/population/city_legal_population.py similarity index 96% rename from mobility/parsers/city_legal_population.py rename to mobility/population/city_legal_population.py index c88e23c5..7c3c5d30 100644 --- a/mobility/parsers/city_legal_population.py +++ b/mobility/population/city_legal_population.py @@ -5,8 +5,8 @@ import pandas as pd import numpy as np -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file class CityLegalPopulation(FileAsset): @@ -98,4 +98,4 @@ def prepare_swiss_cities_legal_populations(self) -> pd.DataFrame: pop.columns = ["local_admin_unit_id", "legal_population"] - return pop \ No newline at end of file + return pop diff --git a/mobility/population.py b/mobility/population/population.py similarity index 97% rename from mobility/population.py rename to mobility/population/population.py index 05fcf975..b7ccee61 100644 --- a/mobility/population.py +++ b/mobility/population/population.py @@ -12,10 +12,10 @@ from rich.progress import Progress -from mobility.file_asset import FileAsset -from mobility.parsers import CityLegalPopulation -from mobility.parsers import CensusLocalizedIndividuals -from mobility.parsers.admin_boundaries import get_french_regions_boundaries, get_french_cities_boundaries +from mobility.runtime.assets.file_asset import FileAsset +from mobility.population.city_legal_population import CityLegalPopulation +from mobility.population.census_localized_individuals import CensusLocalizedIndividuals +from mobility.spatial.admin_boundaries import get_french_regions_boundaries, get_french_cities_boundaries class Population(FileAsset): @@ -302,4 +302,4 @@ class PopulationParameters(BaseModel): "Number of inhabitants to sample within the selected transport zones." ), ), - ] \ No newline at end of file + ] diff --git a/mobility/r_utils/get_aon.R b/mobility/r_utils/get_aon.R deleted file mode 100644 index 281c2ccf..00000000 --- a/mobility/r_utils/get_aon.R +++ /dev/null @@ -1,64 +0,0 @@ -library(dodgr) -library(osmdata) -library(log4r) -library(sf) -library(cppRouting) -library(DBI) -library(duckdb) -library(jsonlite) -library(data.table) -library(FNN) - -args <- commandArgs(trailingOnly = TRUE) - -package_path <- args[1] -cppr_graph_fp <- args[2] -od_flows_fp <- args[3] -traffic_fp <- args[4] -output_fp <- args[5] - -package_path <- "D:/dev/mobility_oss/mobility" -cppr_graph_fp <- "D:/data/mobility/projects/experiments/path_graph_car/simplified/62b22e6f35a51af629cb515adbc5234e-done" -od_flows_fp <- "D:/data/mobility/projects/experiments/path_graph_car/simplified/62b22e6f35a51af629cb515adbc5234e-od_flows.parquet" -output_fp <- "D:/data/mobility/projects/experiments/path_graph_car/simplified/62b22e6f35a51af629cb515adbc5234e-traffic.parquet" - -source(file.path(package_path, "r_utils", "cpprouting_io.R")) - -logger <- logger(appenders = console_appender()) - -hash <- strsplit(basename(cppr_graph_path), "-")[[1]][1] -cppr_graph <- read_cppr_graph(dirname(cppr_graph_path), hash) -vertices <- read_parquet(file.path(dirname(dirname(cppr_graph_fp)), paste0(hash, "-vertices.parquet"))) - - -od_flows <- as.data.table(read_parquet(od_flows_fp)) - -transport_zones <- st_read("D:/data/mobility/projects/experiments/90c5d8004cebc13d3c4fdfa89d17d8ce-transport_zones.gpkg") -buildings <- read_parquet("D:/data/mobility/projects/experiments/90c5d8004cebc13d3c4fdfa89d17d8ce-transport_zones_buildings.parquet") - -buildings[, building_id := 1:.N] -buildings[, vertex_id := get_buildings_nearest_vertex_id(buildings, vertices)] -buildings <- merge(buildings[, list(building_id, transport_zone_id, n_clusters, weight, vertex_id)], vertices, by = "vertex_id") - -vertex_pairs <- tz_pairs_to_vertex_pairs( - tz_id_from = od_flows$from, - tz_id_to = od_flows$to, - transport_zones = as.data.table(transport_zones), - buildings = buildings, - max_crowfly_time = 10.0 -) - -od_flows <- merge(od_flows, vertex_pairs, by.x = c("from", "to"), by.y = c("tz_id_from", "tz_id_to")) -od_flows[, flow_volume := flow_volume*weight] - - -traffic <- assign_traffic( - cppr_graph, - from = od_flows$vertex_id_from, - to = od_flows$vertex_id_to, - demand = od_flows$flow_volume*4, - aon_method = "cbi" -) - -write_parquet(as.data.table(traffic), output_fp) - diff --git a/mobility/r_utils/plot_flows.R b/mobility/r_utils/plot_flows.R deleted file mode 100644 index f0527763..00000000 --- a/mobility/r_utils/plot_flows.R +++ /dev/null @@ -1,39 +0,0 @@ -library(log4r) -library(arrow) -library(ggplot2) -library(data.table) -library(sf) - -args <- commandArgs(trailingOnly = TRUE) - -tz_file_path <- args[1] -flows_file_path <- args[2] -output_file_path <- args[3] - -transport_zones <- st_read(tz_file_path, quiet = TRUE) - -transport_zones_centroids <- as.data.table(st_coordinates(st_centroid(transport_zones))) -transport_zones_centroids$transport_zone_id <- transport_zones$transport_zone_id - -study_zone_outline <- st_union(transport_zones) -study_zone_outline <- st_buffer(st_buffer(study_zone_outline, 500), -500) - -ch_outline <- st_union(transport_zones[substr(transport_zones$local_admin_unit_id, 1, 2) == "ch", ]) -ch_outline <- st_buffer(st_buffer(ch_outline, 500), -500) - -flows <- as.data.table(read_parquet(flows_file_path)) -flows <- flows[flow_volume > 10] - -flows <- merge(flows, transport_zones_centroids, by.x = "from", by.y = "transport_zone_id") -flows <- merge(flows, transport_zones_centroids, by.x = "to", by.y = "transport_zone_id", suffixes = c("_from", "_to")) - -p <- ggplot() -p <- p + geom_sf(data = transport_zones, fill = NA, linewidth = 0.25, color = "#f5f6fa") -p <- p + geom_sf(data = study_zone_outline, fill = NA, linewidth = 0.25, color = "#7f8fa6") -p <- p + geom_segment(data = flows[from != to], aes(x = X_from, y = Y_from, xend = X_to, yend = Y_to, linewidth = flow_volume), alpha = 0.075, col = "#2f4b7c", lineend = "round") -p <- p + geom_segment(data = flows[from == to], aes(x = X_from, y = Y_from, xend = X_to, yend = Y_to, linewidth = flow_volume), alpha = 0.3, col = "#2f4b7c", lineend = "round") -p <- p + scale_linewidth(range = c(0, 20), limits = c(0, max(flows$flow_volume))) -p <- p + theme_void() - -ggsave(plot = p, filename = output_file_path, width = 8, height = 8) - diff --git a/mobility/r_utils/plot_graph_around_vertex.R b/mobility/r_utils/plot_graph_around_vertex.R deleted file mode 100644 index b2f1a5a8..00000000 --- a/mobility/r_utils/plot_graph_around_vertex.R +++ /dev/null @@ -1,31 +0,0 @@ - -plot_graph_around_vertex <- function(graph, verts, v_id, d = 400) { - - dict <- as.data.table(graph$dict) - - vertex_index <- dict[dict$ref == v_id, id] - vertex_xy <- verts[vertex_id == v_id, list(x, y)] - - nearby_vertices <- verts[sqrt((x - vertex_xy$x)^2 + (y - vertex_xy$y)^2) < d] - nearby_vertices_index <- dict[ref %in% nearby_vertices$vertex_id, id] - - shortcuts <- as.data.table(graph$shortcuts) - setnames(shortcuts, c("from", "to", "shortc")) - - edges <- as.data.table(graph$data) - edges <- edges[from %in% nearby_vertices_index | to %in% nearby_vertices_index] - # edges <- edges[!shortcuts[, list(from, to)], on = list(from, to)] - edges <- merge(edges, dict, by.x = "from", by.y = "id") - edges <- merge(edges, dict, by.x = "to", by.y = "id", suffixes = c("_from", "_to")) - edges <- merge(edges, verts, by.x = "ref_from", by.y = "vertex_id") - edges <- merge(edges, verts, by.x = "ref_to", by.y = "vertex_id", suffixes = c("_from", "_to")) - - p <- ggplot(edges) - p <- p + geom_point(data = nearby_vertices, aes(x = x, y = y)) - p <- p + geom_segment(data = edges, aes(x = x_from, y = y_from, xend = x_to, yend = y_to), arrow = arrow(length = unit(5, "pt"))) - p <- p + geom_point(data = vertex_xy, aes(x = x, y = y), color = "red") - p <- p + coord_equal(xlim = c(vertex_xy$x -d/2, vertex_xy$x+d/2), ylim = c(vertex_xy$y -d/2, vertex_xy$y+d/2)) - p <- p + theme_void() - p - -} \ No newline at end of file diff --git a/mobility/r_utils/plumber_functions.R b/mobility/r_utils/plumber_functions.R deleted file mode 100644 index c9b3437c..00000000 --- a/mobility/r_utils/plumber_functions.R +++ /dev/null @@ -1,413 +0,0 @@ - - -tz_pairs_to_vertex_pairs <- function( - tz_id_from, - tz_id_to, - transport_zones, - buildings, - max_crowfly_speed = 110.0, - max_crowfly_time = 1.0 -) { - - # Compute the crowfly distance and travel time between transport zones centers, - # the number of representative buildings to use for each transport zone pair, - # and filter out pairs that are too far away - pairs <- data.table( - tz_id_from = tz_id_from, - tz_id_to = tz_id_to - ) - - pairs <- merge(pairs, transport_zones[, list(transport_zone_id, x, y)], by.x = "tz_id_from", by.y = "transport_zone_id") - pairs <- merge(pairs, transport_zones[, list(transport_zone_id, x, y)], by.x = "tz_id_to", by.y = "transport_zone_id", suffixes = c("_from", "_to")) - - pairs[, distance := sqrt((x_from - x_to)^2 + (y_from - y_to)^2)] - pairs[, time := distance/1000/max_crowfly_speed] - pairs[, n_clusters := round(1 + 4*exp(-distance/1000/2))] - - pairs <- pairs[time < max_crowfly_time, list(tz_id_from, tz_id_to, n_clusters)] - - # Merge the tz pairs with the representative buildings locations and weights - # Compute the crowfly distance between these buildings, agregating weights - # when there are duplicates (which can happen when buildings are mapped - # to the same network vertex) - pairs <- merge( - pairs, - buildings[, list(transport_zone_id, n_clusters, vertex_id, x, y, weight)], - by.x = c("tz_id_from", "n_clusters"), - by.y = c("transport_zone_id", "n_clusters"), - all.x = TRUE, - allow.cartesian = TRUE - ) - - pairs <- merge( - pairs, - buildings[, list(transport_zone_id, n_clusters, vertex_id, x, y, weight)], - by.x = c("tz_id_to", "n_clusters"), - by.y = c("transport_zone_id", "n_clusters"), - all.x = TRUE, - suffixes = c("_from", "_to"), - allow.cartesian = TRUE - ) - - pairs <- pairs[vertex_id_from != vertex_id_to] - pairs[, distance := sqrt((x_from - x_to)^2 + (y_from - y_to)^2)] - - pairs[, weight := weight_from*weight_to] - pairs[, weight := weight/sum(weight), list(tz_id_from, tz_id_to)] - - pairs <- pairs[, list(weight = sum(weight), distance = mean(distance)), by = list(tz_id_from, tz_id_to, vertex_id_from, vertex_id_to)] - - return(pairs) - -} - -get_buildings_nearest_vertex_id <- function(buildings, vertices) { - knn <- get.knnx( - vertices[, list(x, y)], - buildings[, list(x, y)], - k = 1 - ) - return(vertices$vertex_id[knn$nn.index]) -} - - -get_cost_pair <- function(graph, vertex_id_from, vertex_id_to, approx_speed, variable = "time") { - - aggregate_aux <- variable != "time" - - get_distance_pair( - graph, - vertex_id_from, - vertex_id_to, - aggregate_aux = aggregate_aux - ) - -} - - -# get_updated_travel_times <- function(graph, tz_id_from, tz_id_to, flow, flow_weight, approx_speed, time_step = 15.0) { -# -# -# -# f <- flows[sample(1:.N, 10000, replace = TRUE, prob = flow_weight)] -# f <- f[!duplicated(f[, list(vertex_id_from, vertex_id_to)])] -# vertex_id_from <- f$vertex_id_from -# vertex_id_to <- f$vertex_id_to -# flow <- f$flow -# -# # Get the sequence of nodes of the shortest paths for each vertex pair -# paths <- get_path_pair(graph, vertex_id_from, vertex_id_to, algorithm = "NBA", constant = 1/(approx_speed/3.6), long = TRUE) -# paths <- as.data.table(paths) -# paths[, previous_node := shift(node, 1, type = "lag"), by = list(from, to)] -# -# # Add the flows -# flows <- data.table( -# from = vertex_id_from, -# to = vertex_id_to, -# flow = flow -# ) -# -# paths <- merge(paths, flows, by = c("from", "to")) -# -# # Add the time take to travel each edge -# times <- as.data.table(graph$data) -# setnames(times, c("from", "to", "time")) -# -# times <- merge(times, graph$dict, by.x = "from", by.y = "id") -# times <- merge(times, graph$dict, by.x = "to", by.y = "id", suffixes = c("_from", "_to")) -# times <- times[, list(previous_node = ref_from, node = ref_to, time)] -# -# paths <- merge(paths, times, by = c("previous_node", "node"), sort = FALSE) -# paths[, cum_time := cumsum(time), by = list(from, to)] -# -# # Offset all times to make all trips arrive at the same time -# paths[, cum_time := cum_time - max(cum_time), by = list(from, to)] -# paths[, cum_time := cum_time - min(cum_time)] -# -# # Create a data.table of events recording when the flow enters or leaves each edge -# paths[, `:=`( -# edge = paste(previous_node, node, sep = "_"), -# start_time = cum_time - time, -# end_time = cum_time -# )] -# -# events <- rbind( -# paths[, .(edge, time = start_time, flow_change = flow)], -# paths[, .(edge, time = end_time, flow_change = -flow)] -# ) -# -# setorder(events, edge, time) -# -# # Cumulate the events to get the actual flow at each time step -# events[, cum_flow := cumsum(flow_change), by = edge] -# events[, next_time := shift(time, type = "lead"), by = edge] -# -# # Align the flows on regular time intervals -# delta_time <- time_step*60 -# min_time <- round(min(events$time)/60)*60 -# max_time <- round(max(events$time)/60)*60 -# -# intervals <- data.table( -# start_time = seq(min_time, max_time, delta_time), -# end_time = seq(min_time + delta_time, max_time + delta_time, delta_time) -# ) -# -# intervals$start_time_cp <- intervals$start_time -# intervals$end_time_cp <- intervals$end_time -# -# events[, next_time_cp := next_time] -# events[, time_cp := time] -# -# events <- events[intervals, on = .(next_time_cp >= start_time_cp, time_cp < end_time_cp), list(edge, start_time, end_time, time, next_time, cum_flow), nomatch = 0L] -# events[, interval_overlap := (pmin(end_time, next_time) - pmax(start_time, time))/delta_time] -# events <- events[, list(cum_flow = sum(cum_flow*3600/delta_time*interval_overlap)), by = list(edge, start_time, end_time)] -# -# # Smooth the result to simulate the spread in departure / arrival times -# offsets <- seq(-1, 0, 1) -# weights <- rep(1/length(offsets), length(offsets)) -# cols <- paste0("offset", offsets) -# -# events[, c(cols) := shift(cum_flow, n = offsets, fill = 0.0), by = edge] -# events[, cum_flow_smooth := rowSums(.SD[, cols, with = FALSE]*weights)] -# -# # Compute the maximum flow on each edge -# edges_max_flow <- events[, list(max_flow = max(cum_flow_smooth)), by = edge] -# -# edges_max_flow[, node := unlist(lapply(strsplit(edge, "_"), "[[", 1))] -# edges_max_flow[, previous_node := unlist(lapply(strsplit(edge, "_"), "[[", 2))] -# -# # Compute the updated speed based on the volume decay function of each edge and its traffic -# edges_max_flow <- merge(edges_max_flow, graph$dict, by.x = "node", by.y = "ref") -# edges_max_flow <- merge(edges_max_flow, graph$dict, by.x = "previous_node", by.y = "ref", suffixes = c("_from", "_to")) -# edges_max_flow <- merge(as.data.table(graph$data), edges_max_flow[, c("id_from", "id_to", "max_flow")], by.x = c("from", "to"), by.y = c("id_from", "id_to"), all.x = TRUE, sort = FALSE) -# -# edges_max_flow[is.na(max_flow), max_flow := 0.0] -# edges_max_flow[, k_speed := 1/(1 + graph$attrib$alpha*(max_flow/graph$attrib$cap)^graph$attrib$beta)] -# edges_max_flow[, dist := dist*k_speed] -# -# return(edges_max_flow$dist) -# -# } - -get_updated_travel_times <- function(graph, vertex_id_from, vertex_id_to, flow, min_flow = 1.0) { - - total_flow <- sum(flow) - index <- flow > min_flow - - vertex_id_from <- vertex_id_from[index] - vertex_id_to <- vertex_id_to[index] - flow <- flow[index] - flow <- flow*total_flow/sum(flow) - - # Get the all or nothing flow assignment on the network - contr_graph <- cpp_contract(graph, silent = TRUE) - aon <- get_aon(contr_graph, vertex_id_from, vertex_id_to, demand = flow) - aon <- as.data.table(aon) - - # Compute the updated speed based on the volume decay function of each edge and its traffic - aon <- merge(aon, as.data.table(contr_graph$dict), by.x = "from", by.y = "ref") - aon <- merge(aon, as.data.table(contr_graph$dict), by.x = "to", by.y = "ref", suffixes = c("_from", "_to")) - aon <- merge(as.data.table(graph$data), aon[, c("id_from", "id_to", "flow")], by.x = c("from", "to"), by.y = c("id_from", "id_to"), all.x = TRUE, sort = FALSE) - - return(aon$flow) - -} - - -get_travel_costs <- function( - tz_id_from, - tz_id_to, - od_flows = NULL, - edge_flows = NULL, - mode, - max_crowfly_speed = 110.0, - max_crowfly_time = 1.0, - approx = TRUE, - approx_routing_speed = 40.0 -) { - - # Load transport zones - transport_zones <- st_read(tz_fp, quiet = TRUE) - transport_zones <- as.data.table(st_drop_geometry(transport_zones)) - - # Load cpprouting graph - hash <- strsplit(basename(graph_fp), "-")[[1]][1] - vertices <- read_parquet(file.path(dirname(dirname(graph_fp)), paste0(hash, "-vertices.parquet"))) - graph <- read_cppr_graph(dirname(graph_fp), hash) - graph$coords <- vertices - - # Load representative buildings - buildings <- as.data.table(read_parquet(buildings_sample_fp)) - buildings[, building_id := 1:.N] - buildings[, vertex_id := get_buildings_nearest_vertex_id(buildings, vertices)] - buildings <- merge(buildings[, list(building_id, transport_zone_id, n_clusters, weight, vertex_id)], vertices, by = "vertex_id") - - # Transform transport zones pairs into representative buildings pairs - vertex_pairs <- tz_pairs_to_vertex_pairs( - tz_id_from, - tz_id_to, - transport_zones, - buildings, - max_crowfly_speed, - max_crowfly_time - ) - - # Modify speeds given the current flows on the network - if (!is.null(edge_flows)) { - - info(logger, "Estimating congestion...") - - k_speed <- 1 + graph$attrib$alpha*(edge_flows/graph$attrib$cap)^graph$attrib$beta - graph$data$dist <- graph$data$dist*k_speed - - } - - # Use crowfly distances and a constant speed for the approximate calculation, - # or real distances and times on the routing graph - info(logger, "Computing travel times and distances...") - - if (approx == TRUE) { - - vertex_pairs[, time := distance/1000/approx_routing_speed*3600] - edge_flows <- edge_flows - - } else { - - contr_graph <- cpp_contract(graph, silent = TRUE) - - vertex_pairs[, time := get_cost_pair(contr_graph, vertex_id_from, vertex_id_to, approx_routing_speed, "time")] - vertex_pairs[, distance := get_cost_pair(contr_graph, vertex_id_from, vertex_id_to, approx_routing_speed, "distance")] - - # Compute updated edge flows - od_flows <- data.table( - tz_id_from = tz_id_from, - tz_id_to = tz_id_to, - flow = od_flows - ) - - od_flows <- merge(vertex_pairs, od_flows, by = c("tz_id_from", "tz_id_to")) - od_flows[, flow := flow*weight] - - edge_flows <- get_updated_edge_flows(contr_graph, od_flows$vertex_id_from, od_flows$vertex_id_to, od_flows$flow, min_flow = 1.0) - - } - - costs <- vertex_pairs[, - list( - distance = sum(distance*weight)/1000, - time = sum(time*weight)/3600 - ), - by = list(tz_id_from, tz_id_to) - ] - - return(list( - costs = costs, - edge_flows = edge_flows - )) - - -} -# -# -# all_tz_pairs <- CJ( -# tz_id_from = transport_zones$transport_zone_id, -# tz_id_to = transport_zones$transport_zone_id -# ) -# # tz_id_from <- all_tz_pairs$tz_id_from[1:100] -# # tz_id_to <- all_tz_pairs$tz_id_to[200:299] -# -# tz_id_from <- all_tz_pairs$tz_id_from -# tz_id_to <- all_tz_pairs$tz_id_to -# max_crowfly_speed <- 110.0 -# max_crowfly_time <- 1.0 -# -# -# costs_0 <- get_travel_costs( -# tz_id_from = all_tz_pairs$tz_id_from, -# tz_id_to = all_tz_pairs$tz_id_to, -# mode = "car", -# approx = TRUE -# ) -# -# sources <- data.table( -# transport_zone_id = transport_zones$transport_zone_id, -# source_volume = runif(nrow(transport_zones), 1000, 10000) -# ) -# -# sinks <- data.table( -# transport_zone_id = transport_zones$transport_zone_id, -# sink_volume = runif(nrow(transport_zones), 1000, 10000) -# ) -# -# flows_0 <- merge(costs_0, sources, by.x = "tz_id_from", by.y = "transport_zone_id") -# flows_0 <- merge(flows_0, sinks, by.x = "tz_id_to", by.y = "transport_zone_id") -# -# flows_0 <- flows_0[order(time)] -# -# flows_0[, p := source_volume*sink_volume/(source_volume + cumsum(source_volume))/(source_volume + cumsum(source_volume) + sink_volume), by = tz_id_from] -# flows_0[, p := p/sum(p), by = tz_id_from] -# flows_0[, flow := source_volume*p] -# -# tz_id_from <- flows_0$tz_id_from -# tz_id_to <- flows_0$tz_id_to -# flow <- flows_0$flow -# flow_weight <- flows_0[, distance*flow] -# -# -# costs_1 <- get_travel_costs( -# tz_id_from = flows_0$tz_id_from, -# tz_id_to = flows_0$tz_id_to, -# od_flows = flows_0$flow, -# mode = "car", -# approx = FALSE -# ) -# -# -# flows_1 <- merge(costs_1, sources, by.x = "tz_id_from", by.y = "transport_zone_id") -# flows_1 <- merge(flows_1, sinks, by.x = "tz_id_to", by.y = "transport_zone_id") -# -# flows_1 <- flows_1[order(time)] -# -# flows_1[, p := source_volume*sink_volume/(source_volume + cumsum(source_volume))/(source_volume + cumsum(source_volume) + sink_volume), by = tz_id_from] -# flows_1[, p := p/sum(p), by = tz_id_from] -# flows_1[, flow := source_volume*p] -# -# tz_id_from <- flows_1$tz_id_from -# tz_id_to <- flows_1$tz_id_to -# flow <- flows_1$flow -# flow_weight <- flows_1[, distance*flow] -# -# -# -# comp[order(-flow_0)] -# -# -# -# -# costs_2 <- get_travel_costs( -# tz_id_from = flows_1$tz_id_from, -# tz_id_to = flows_1$tz_id_to, -# flow = flows_1$flow, -# mode = "car", -# approx = FALSE -# ) -# -# -# flows_2 <- merge(costs_2, sources, by.x = "tz_id_from", by.y = "transport_zone_id") -# flows_2 <- merge(flows_2, sinks, by.x = "tz_id_to", by.y = "transport_zone_id") -# -# flows_2 <- flows_2[order(time)] -# -# flows_2[, p := source_volume*sink_volume/(source_volume + cumsum(source_volume))/(source_volume + cumsum(source_volume) + sink_volume), by = tz_id_from] -# flows_2[, p := p/sum(p), by = tz_id_from] -# flows_2[, flow := source_volume*p] -# -# -# -# -# -# -# comp <- merge(flows_0[, list(tz_id_from, tz_id_to, flow_0 = flow)], flows_1[, list(tz_id_from, tz_id_to, flow_1 = flow)], by = c("tz_id_from", "tz_id_to")) -# comp <- merge(comp, flows_2[, list(tz_id_from, tz_id_to, flow_2 = flow)], by = c("tz_id_from", "tz_id_to")) -# -# comp[order(-flow_2)] diff --git a/mobility/r_utils/routing_plumber.R b/mobility/r_utils/routing_plumber.R deleted file mode 100644 index e24e998d..00000000 --- a/mobility/r_utils/routing_plumber.R +++ /dev/null @@ -1,69 +0,0 @@ -library(plumber) -library(dodgr) -library(log4r) -library(sfheaders) -library(nngeo) -library(data.table) -library(reshape2) -library(arrow) -library(cppRouting) -library(DBI) -library(duckdb) -library(jsonlite) -library(FNN) -library(fields) -library(ggplot2) -library(FNN) -library(xgboost) - -args <- commandArgs(trailingOnly = TRUE) - -package_path <- args[1] -tz_fp <- args[2] -graph_fp <- args[3] -max_speed <- as.numeric(args[4]) -max_time <- as.numeric(args[5]) -output_fp <- args[6] - -package_path <- "D:/dev/mobility_oss/mobility" -tz_fp <- "D:\\data\\mobility\\projects\\study_area\\d2b01e6ba3afa070549c111f1012c92d-transport_zones.gpkg" -max_speed <- 80.0 -max_time <- 1.0 -graph_fp <- "D:\\data\\mobility\\projects\\haut-doubs\\path_graph_car\\simplified\\9a6f4500ffbf148bfe6aa215a322e045-done" - -buildings_sample_fp <- file.path( - dirname(tz_fp), - paste0( - gsub("-transport_zones.gpkg", "", basename(tz_fp)), - "-transport_zones_buildings.parquet" - ) -) - -source(file.path(package_path, "r_utils", "cpprouting_io.R")) - -logger <- logger(appenders = console_appender()) - -transport_zones <- st_read(tz_fp) -transport_zones <- as.data.table(st_drop_geometry(transport_zones)) - -buildings_sample <- as.data.table(read_parquet(buildings_sample_fp)) -buildings_sample[, building_id := 1:.N] - -# Load cpprouting graph -hash <- strsplit(basename(graph_fp), "-")[[1]][1] -graph <- read_cppr_graph(dirname(graph_fp), hash) -vertices <- read_parquet(file.path(dirname(dirname(graph_fp)), paste0(hash, "-vertices.parquet"))) -graph$coords <- vertices - -set.seed(0) - -# Sample 1000 origins and 1000 destinations -# from <- sample(graph$dict$ref, 10000) -# to <- sample(graph$dict$ref, 10000) - - - - -plumber <- pr(file.path(package_path, "r_utils", "plumber_functions.R")) - -pr_run(plumber) diff --git a/mobility/radiation_model.py b/mobility/radiation_model.py deleted file mode 100644 index cb10a39d..00000000 --- a/mobility/radiation_model.py +++ /dev/null @@ -1,502 +0,0 @@ -import logging -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt - - -def radiation_model(sources, sinks, costs, alpha=0, beta=1): - """ - This function computes the volume of flows between source and sink nodes, - according to the radiation model. The model takes into account the volume - of "demand" and "opportunities" at each node (active persons and jobs for - example). It takes also into account the cost/benefit delta for a person - when going from one node to another. The nodes can represent any kind of - transport zone (neighborhood, city...). - - Args: - sources (pd.DataFrame): - Index: - transport_zone_id (str): unique id of the transport zone. - Columns: - source_volume (float): volume of "demand" of the transport zones. - sinks (pd.DataFrame): - Index: - transport_zone_id (str): unique id of the transport zone. - Columns: - sink_volume (float): volume of "opportunities" of the transport zones. - costs (pd.DataFrame): - Index: - from (str): trip origin transport zone id. - to (str): trip destination transport zone id. - Columns: - cost (float): cost/benefit to go from the origin (source) to the destination (sink). - alpha (float): - Must be in [0,1] s.t alpha+beta<=1. - Parameter of the radiation model: reflects the behavior of the individual's tendency - to choose the destination whose benefit is higher than the benefits of the origin - and the intervening opportunities . - (see "A universal opportunity model for human mobility", developped by Liu and Yan) - beta (float): - Must be in [0,1] s.t alpha+beta<=1. - Parameter of the radiation model: reflects the behavior of the individual’s tendency - to choose the destination whose benefit is higher than the benefit of the origin, - and the benefit of the origin is higher than the benefits of the intervening opportunities. - (see "A universal opportunity model for human mobility", developped by Liu and Yan) - Returns: - flows (pd.DataFrame): - Index: - from (str): trip origin transport zone id (source). - to (str): trip destination transport zone id (sink). - Columns: - flow_volume (float): flow volume between source and sink nodes. - source_rest_volume (pd.Series): - Index: - from (str): unique id of the transport zone. - Name: - source_volume (float): rest of the volum of demand of the transport zone. - sink_rest_volume (pd.Series): - Index: - to (str): unique id of the transport zone. - Name: - sink_volume (float): rest of the volume of oopportunities of the transport zone. - """ - - # The pseudo-code is in the documentation. - - # Epsilon value under which values are set to 0 in order to avoid numerical errors - # during the successive iterations - eps = 1e-6 - - matrix_origin_destinations = pd.merge( - sources, costs, left_index=True, right_on="from" - ) - matrix_origin_destinations = pd.merge( - matrix_origin_destinations, sinks, left_on="to", right_index=True - ) - - # Compute the number of "intervening opportunities" - # = total volume of sinks in locations which are less costly than the location at hand - # To do so for each origin, compute the cumulative sum of the sink volume in ascending ordrer of cost - matrix_origin_destinations.sort_values(by=["from", "cost"], inplace=True, ascending=False) - matrix_origin_destinations["s_ij"] = matrix_origin_destinations.groupby("from")[ - "sink_volume" - ].cumsum() - - matrix_origin_destinations["s_ij"] = np.maximum( - matrix_origin_destinations["s_ij"] - matrix_origin_destinations["sink_volume"], - 0, - ) - - # Compute the probabilities with the UO model - matrix_origin_destinations["p_ij"] = ( - matrix_origin_destinations["source_volume"] - + alpha * matrix_origin_destinations["s_ij"] - ) - matrix_origin_destinations["p_ij"] *= matrix_origin_destinations["sink_volume"] - matrix_origin_destinations["p_ij"] /= ( - matrix_origin_destinations["source_volume"] - + (alpha + beta) * matrix_origin_destinations["s_ij"] - ) - matrix_origin_destinations["p_ij"] /= ( - matrix_origin_destinations["source_volume"] - + (alpha + beta) * matrix_origin_destinations["s_ij"] - + matrix_origin_destinations["sink_volume"] - ) - - # Keep only the first 95% of the distribution ? - - # Normalize the probabilities such that the sum for each origin is equal to one - temp = matrix_origin_destinations.groupby("from")["p_ij"].sum() - temp.name = "p_i" - - matrix_origin_destinations.reset_index(inplace=True) - matrix_origin_destinations = pd.merge( - matrix_origin_destinations, temp, left_on="from", right_index=True - ) - matrix_origin_destinations.set_index(["from", "to"], inplace=True) - - matrix_origin_destinations["p_ij"] /= matrix_origin_destinations["p_i"] - - matrix_origin_destinations["p_ij"].where( - matrix_origin_destinations["p_ij"].notna(), 0, inplace=True - ) - - # The flow volume is calibrated to respect the total source volume - # (not the total sink volume) - matrix_origin_destinations["flow_volume"] = ( - matrix_origin_destinations["source_volume"] * matrix_origin_destinations["p_ij"] - ) - - # Possibility to directly modifity the p_ij to adjust the flow according to the sinks rather than having an iterative process? - - # Set to 0 the small flow volume in order to avoid numerical errors - # during the next iterations - matrix_origin_destinations["flow_volume"].where( - matrix_origin_destinations["flow_volume"] > eps, 0.0, inplace=True - ) - - # Compute the overflow for each sink : sum(flow_volume) - sink_volume - overflow = ( - matrix_origin_destinations.groupby("to")["flow_volume"].sum() - - matrix_origin_destinations.groupby("to")["sink_volume"].first() - ) - overflow = overflow.where(overflow > 0, 0.0) - overflow.name = "overflow" - matrix_origin_destinations = pd.merge( - matrix_origin_destinations, overflow, how="left", left_on="to", right_index=True - ) - - # Substract the overflow to the flow volume - # so that the flow volume stays samller than the sink volume - # This overflow is split among the origins according to its contribution - - # Contribution of each origin to every sink - flow_volume_per_sink = matrix_origin_destinations.groupby("to")["flow_volume"].sum() - flow_volume_per_sink.name = "flow_volume_per_sink" - matrix_origin_destinations = pd.merge( - matrix_origin_destinations, flow_volume_per_sink, left_on="to", right_index=True - ) - - mask = matrix_origin_destinations["flow_volume_per_sink"] > 0 - - # Substract the overflow to the flow volume weighted by the contribution of the origin - matrix_origin_destinations.loc[ - mask, "flow_volume" - ] = matrix_origin_destinations.loc[mask, "flow_volume"] * ( - 1 - - matrix_origin_destinations.loc[mask, "overflow"] - / matrix_origin_destinations.loc[mask, "flow_volume_per_sink"] - ) - - matrix_origin_destinations["flow_volume"].where( - matrix_origin_destinations["flow_volume"] != np.inf, 0, inplace=True - ) - - # Compute the rest of the demand volume and the sink volume - source_rest_volume = ( - matrix_origin_destinations.groupby("from")["source_volume"].first() - - matrix_origin_destinations.groupby("from")["flow_volume"].sum() - ) - sink_rest_volume = ( - matrix_origin_destinations.groupby("to")["sink_volume"].first() - - matrix_origin_destinations.groupby("to")["flow_volume"].sum() - ) - source_rest_volume.name = "source_volume" - sink_rest_volume.name = "sink_volume" - - source_rest_volume.where(source_rest_volume > eps, 0, inplace=True) - sink_rest_volume.where(sink_rest_volume > eps, 0, inplace=True) - - return ( - matrix_origin_destinations[["flow_volume"]], - source_rest_volume, - sink_rest_volume, - ) - - -def iter_radiation_model( - sources, sinks, costs, alpha=0, beta=1, max_iter=20, plot=False -): - """ - Iterates the radiation model between source and sink nodes. - - At each iteration, the flows between the sources and the sinks are computed - as well as the rest of the volume of demand and opportunities, - according to the radiation model. The next iteration, the rest of the volume - of demand and opportunities are used. - The iterations stops after max_iter or when the flow volume computed is small - compared to the total source volume. - - Args: - sources (pd.DataFrame): - Index: - transport_zone_id (str): unique id of the transport zone. - Columns: - source_volume (float): volume of "demand" of the transport zones. - sinks (pd.DataFrame): - Index: - transport_zone_id (str): unique id of the transport zone. - Columns: - sink_volume (float): volume of "opportunities" of the transport zones. - costs (pd.DataFrame): - Index: - from (str): trip origin transport zone id. - to (str): trip destination transport zone id. - Columns: - cost (float): cost/benefit to go from the origin (source) to the destination (sink). - alpha (float): - Must be in [0,1] s.t alpha+beta<=1. - Parameter of the radiation model: reflects the behavior of the individual's tendency - to choose the destination whose benefit is higher than the benefits of the origin - and the intervening opportunities . - (see "A universal opportunity model for human mobility", developped by Liu and Yan) - beta (float): - Must be in [0,1] s.t alpha+beta<=1. - Parameter of the radiation model: reflects the behavior of the individual’s tendency - to choose the destination whose benefit is higher than the benefit of the origin, - and the benefit of the origin is higher than the benefits of the intervening opportunities. - (see "A universal opportunity model for human mobility", developped by Liu and Yan) - max_iter (int): - Maximum number of iterations of the radiation model. - plot (boolean): - Indicates whether the evolution of the demand volume and opportunities volume - should be plotted. - - Returns: - total_flows (pd.Series): - Index: - from (str): trip origin transport zone id (source). - to (str): trip destination transport zone id (sink). - Columns: - flow_volume (float): flow volume between source and sink nodes. - source_rest_volume (pd.Series): - Index: - from (str): unique id of the transport zone. - Name: - source_volume (float): rest of the volum of demand of the transport zone. - sink_rest_volume (pd.Series): - Index: - to (str): unique id of the transport zone. - Name: - sink_volume (float): rest of the volume of oopportunities of the transport zone. - """ - - # First iteration of the radiation model - iteration = 1 - flows, source_volume, sink_volume = radiation_model( - sources, sinks, costs, alpha=alpha, beta=beta - ) - total_flows = flows["flow_volume"] - - total_source_volume = sources["source_volume"].sum() - - rest_source = [] - rest_sink = [] - rest_source.append(source_volume.sum()) - rest_sink.append(sink_volume.sum()) - - # The convergence criteria is when the volume of flow computed at the iteration i - # is less than 1% of the original source volume - while ( - iteration < max_iter and flows["flow_volume"].sum() > 0.01 * total_source_volume - ): - # logging.info("Iteration n°{} of the radiation model".format(iteration)) - iteration += 1 - - # Compute the radiation model with the rest of the demand and sink volume - flows, source_volume, sink_volume = radiation_model( - source_volume, sink_volume, costs, alpha=alpha, beta=beta - ) - - total_flows += flows["flow_volume"] - - rest_source.append(source_volume.sum()) - rest_sink.append(sink_volume.sum()) - - if iteration == max_iter: - logging.info("The iterations of the radiation model didn't converge") - if plot: - plt.figure(figsize=(18, 5)) - plt.subplot(121) - plt.plot(np.arange(1, iteration + 1), rest_source) - plt.xticks(np.arange(1, iteration + 1)) - plt.xlabel("n° itérations") - plt.ylabel("Demand volume not fulfilled") - - print("Total demand volume : {}".format(sources["source_volume"].sum())) - print( - "Rest of demand volume after {} iterations : {}".format( - iteration, rest_source[-1] - ) - ) - - plt.subplot(122) - plt.plot(np.arange(1, iteration + 1), rest_sink) - plt.xticks(np.arange(1, iteration + 1)) - plt.xlabel("n° itérations") - plt.ylabel("Opportunity volume not fulfilled") - - print("Total opportunity volume : {}".format(sinks["sink_volume"].sum())) - print( - "Rest of opportunity volume after {} iterations : {}".format( - iteration, rest_sink[-1] - ) - ) - - # Remove possible null flows - total_flows = total_flows[total_flows > 0.0] - - return total_flows, source_volume, sink_volume - - -def plot_volume(volume_location, coordinates, n_locations=10, title=""): - """ - Plot each location whose size is proportional to the volume at the location. - Display also the label of the location for the biggest n_locations. - - Args: - volume_location (pd.DataFrame): a dataframe with one row per location - Index: - CODGEO (str): geographic code of the location - Columns: - volume (float): volume at the location - coordinates (pd.DataFrame): a dataframe with one row per location - Index: - CODGEO (str): geographic code of the location - Columns: - NOM_COM (str): name of the location - x (float): x coordinate of the location - y (float): y coordinate of the location - n_locations (int): display the labels of only the biggest n_locations locations - according to the volume from sources - """ - plt.figure() - plt.title(title) - # Normalization - volume_location["volume"] = ( - 100 - * (volume_location["volume"] - volume_location["volume"].min()) - / volume_location["volume"].max() - ) - - # Plot the locations - volume_location = pd.merge( - volume_location, coordinates, left_index=True, right_index=True - ) - plt.scatter(volume_location["x"], volume_location["y"], s=volume_location["volume"]) - - # n_locations biggest location to display - volume_location.sort_values(by="volume", inplace=True) - idx_show = volume_location.iloc[-n_locations:].index - - volume_location.sort_index(inplace=True) - for idx in idx_show: - plt.text( - volume_location.loc[idx, "x"], - volume_location.loc[idx, "y"], - volume_location.loc[idx, "NOM_COM"][0:14], - ) - return - - -def plot_flow( - flows, coordinates, sources=None, n_flows=100, n_locations=5, size=1, title="" -): - """ - Plot the flows between the locations. - - The bigger the flow is, the bigger the plot line - will be. THe points are the locations. If sources=None, then the size of each location - is proportionnal to the internal flow within the location. Otherwise, the size of the - location is proportionnal to the source volume from sources. - - Args: - flows (pd.DataFrame): a dataframe with one row per couple origin/destination - Columns: - from (str): geographic code of the flow origin - to (str): geographic code of the flow destination - flow_volume (float): flow volume between the origin and the destination - coordinates (pd.DataFrame): a dataframe with one row per location - Index: - CODGEO (str): geographic code of the location - Columns: - NOM_COM (str): name of the location - x (float): x coordinate of the location - y (float): y coordinate of the location - sources (pd.DataFrame): a dataframe with one row per location - If None is passed - Index: - CODGEO (str): geographic code of the location - Columns: - source_volume (float): the source volume at the location - n_flows (int): plot only the n_flows biggest flows (to avoid too heavy computations). - If n_flows=-1 then plot all the flows - n_locations (int): display the labels of only the biggest n_locations locations according to the volume from sources - size (int): determines the size of the figure (size>=1). Default is 1. - """ - # Normalization - flows["flow_volume"] = ( - size - * 100 - * (flows["flow_volume"] - flows["flow_volume"].min()) - / flows["flow_volume"].max() - ) - - # Get the coordinates for each origin/destination - flows = pd.merge(flows, coordinates, left_on="from", right_index=True) - flows.rename({"x": "from_x", "y": "from_y"}, axis=1, inplace=True) - flows = pd.merge(flows, coordinates, left_on="to", right_index=True) - flows.rename({"x": "to_x", "y": "to_y"}, axis=1, inplace=True) - flows.sort_values(by="flow_volume", ascending=False, inplace=True) - - idx_show = flows.iloc[:n_flows].index - - plt.figure(figsize=(6 * size, 4 * size)) - plt.title(title, fontsize=5 * size) - # Plot the flows - for idx in idx_show: - plt.plot( - [flows.loc[idx, "from_x"], flows.loc[idx, "to_x"]], - [flows.loc[idx, "from_y"], flows.loc[idx, "to_y"]], - linewidth=flows.loc[idx, "flow_volume"], - color="lightblue", - zorder=0, - ) - - if sources is None: - # Plot the locations based on the internal flow - internal_flows = flows.loc[flows["from"] == flows["to"]] - # Normalization - internal_flows.loc[:, "flow_volume"] = ( - size**2 - * 100 - * ( - internal_flows.loc[:, "flow_volume"] - - internal_flows["flow_volume"].min() - ) - / internal_flows["flow_volume"].max() - ) - plt.scatter( - internal_flows["from_x"], - internal_flows["from_y"], - s=internal_flows["flow_volume"], - zorder=1, - ) - - # n_locations biggest location to display - internal_flows.sort_values(by="flow_volume", ascending=False, inplace=True) - - temp = internal_flows.iloc[:n_locations].index - idx_show = internal_flows.loc[temp, "from"].to_numpy() - for idx in idx_show: - plt.text( - coordinates.loc[idx, "x"], - coordinates.loc[idx, "y"], - coordinates.loc[idx, "NOM_COM"][0:14], - fontsize=5 * size, - ) - else: - # Normalization - sources["source_volume"] = ( - size**2 - * 100 - * (sources["source_volume"] - sources["source_volume"].min()) - / sources["source_volume"].max() - ) - - # Plot the locations - sources = pd.merge(sources, coordinates, left_index=True, right_index=True) - plt.scatter(sources["x"], sources["y"], s=sources["source_volume"], zorder=1) - - # n_locations biggest location to display - sources.sort_values(by="source_volume", inplace=True) - idx_show = sources.iloc[-n_locations:].index - - sources.sort_index(inplace=True) - for idx in idx_show: - plt.text( - sources.loc[idx, "x"], - sources.loc[idx, "y"], - sources.loc[idx, "NOM_COM"][0:14], - fontsize=5 * size, - ) diff --git a/mobility/radiation_model_selection.py b/mobility/radiation_model_selection.py deleted file mode 100644 index 25456b35..00000000 --- a/mobility/radiation_model_selection.py +++ /dev/null @@ -1,333 +0,0 @@ -import logging -import pandas as pd -import numpy as np -import polars as pl -import pathlib -from scipy.optimize import minimize_scalar -import matplotlib.pyplot as plt -from scipy.linalg import lstsq - -from mobility.r_utils.r_script import RScript - -# def radiation_model_selection( -# sources, sinks, costs, utilities, selection_lambda, max_iter=20, plot=False -# ): - -# # Convert input DataFrames to Polars DataFrames -# sources = pl.DataFrame(sources.reset_index()).with_columns([ -# pl.col("from").cast(pl.Int64) -# ]) - -# sinks = pl.DataFrame(sinks.reset_index()).with_columns([ -# pl.col("to").cast(pl.Int64) -# ]) - - -# flows = compute_flows( -# sources, -# sinks, -# costs, -# utilities, -# selection_lambda -# ) - -# flows = flows.to_pandas().set_index(["from", "to"])["flow_volume"] - -# return flows, 0.0, 0.0 - - - - -def apply_radiation_model(sources, sinks, costs, utilities, selection_lambda): - - eps = 1e-6 - - # Smooth the opportunities locations and costs to account for uncertainty - # (for now with a constant cost delta and a gaussian distribution, but - # could be estimated from the cost uncertainty specific to each OD) - def offset_costs(costs, delta, prob): - return ( - costs - .with_columns([ - (pl.col("cost") + delta).alias("cost"), - pl.lit(prob).alias("prob") - ]) - ) - - costs = pl.concat([ - offset_costs(costs, -2.0, 0.07), - offset_costs(costs, -1.0, 0.24), - offset_costs(costs, +0.0, 0.38), - offset_costs(costs, +1.0, 0.24), - offset_costs(costs, +2.0, 0.07) - ]) - - # Remove zero sources / sinks transport zones - sources = sources.filter(pl.col("source_volume") > 0.0) - sinks = sinks.filter(pl.col("sink_volume") > 0.0) - - # Merge sources, sinks, costs and utilities - od = ( - sources - .join(costs, on="from") - .join(sinks, on="to") - .join(utilities, on="to") - .with_columns([(pl.col("sink_volume")*pl.col("prob")).alias("sink_volume")]) - ) - - # Compute the net utility for each OD - od = od.with_columns([ - (pl.col("utility") - 2*pl.col("cost")).alias('net_utility') - ]) - - # Bin the net utility and compute the probability of each destination within - # each from -> net utility bin - od = od.with_columns([pl.col("net_utility").round().alias("net_utility_bin")]) - od = od.with_columns([(pl.col("sink_volume")/pl.col("sink_volume").sum().over(["from", "net_utility_bin"])).alias("p_to_bin")]) - - # Aggregate opportunities within each bin, for each origin - od_bin = od.group_by(["from", "net_utility_bin"]).agg(pl.col("sink_volume").sum()) - - # Compute the probabilities to choose a destination according to the - # radiation model with selection - od_bin = od_bin.sort(['from', 'net_utility_bin'], descending=[False, True]) - - od_bin = od_bin.with_columns([ - pl.col('sink_volume') - .cum_sum() - .over('from') - .alias('s_ij') - ]) - - od_bin = od_bin.with_columns([ - ((1 - selection_lambda**(1+pl.col('s_ij'))) / (1+pl.col('s_ij')) / (1-selection_lambda)).alias('p_a'), - ]) - - - od_bin = od_bin.with_columns([ - pl.col('p_a') - .shift(fill_value=1.0) - .over('from') - .alias('p_a_lag') - ]) - - od_bin = od_bin.with_columns([ - (pl.col('p_a_lag') - pl.col('p_a')).alias('p_ij') - ]) - - # Normalize p_ij within each group - od_bin = od_bin.with_columns([ - (pl.col('p_ij') / pl.col('p_ij').sum().over('from')) - .alias('p_ij') - ]) - - - # Disagregate the flows from source to destination - # First step : source -> bin (with p_ij) - # Second step : bin -> destination (with p_to_bin) - flows = ( - od_bin - .select(["from", "net_utility_bin", "p_ij"]) - .join(sources.select(["from", "source_volume"]), on="from") - .join(od.select(["from", "net_utility_bin", "to", "p_to_bin"]), on=["from", "net_utility_bin"]) - ) - - flows = flows.with_columns([ - (pl.col('source_volume') * pl.col('p_ij') * pl.col("p_to_bin")) - .alias('flow_volume') - ]) - - # Re-aggregate at OD level - flows = flows.group_by(['from', 'to']).agg([ - pl.col('source_volume').first(), - pl.col('flow_volume').sum() - ]) - - # Remove small flows and rescale the remaining flows so that the source - # volumes stay the same - flows = ( - flows - .filter(pl.col('flow_volume') > 0.1) - .with_columns([(pl.col('flow_volume') / pl.col('flow_volume').sum().over('from')).alias('p_ij')]) - .with_columns((pl.col("source_volume")*pl.col("p_ij")).alias("flow_volume")) - ) - - return flows.select(['from', 'to', 'flow_volume']) - - - - - -def plot_volume(volume_location, coordinates, n_locations=10, title=""): - """ - Plot each location whose size is proportional to the volume at the location. - Display also the label of the location for the biggest n_locations. - - Args: - volume_location (pd.DataFrame): a dataframe with one row per location - Index: - CODGEO (str): geographic code of the location - Columns: - volume (float): volume at the location - coordinates (pd.DataFrame): a dataframe with one row per location - Index: - CODGEO (str): geographic code of the location - Columns: - NOM_COM (str): name of the location - x (float): x coordinate of the location - y (float): y coordinate of the location - n_locations (int): display the labels of only the biggest n_locations locations - according to the volume from sources - """ - plt.figure() - plt.title(title) - # Normalization - volume_location["volume"] = ( - 100 - * (volume_location["volume"] - volume_location["volume"].min()) - / volume_location["volume"].max() - ) - - # Plot the locations - volume_location = pd.merge( - volume_location, coordinates, left_index=True, right_index=True - ) - plt.scatter(volume_location["x"], volume_location["y"], s=volume_location["volume"]) - - # n_locations biggest location to display - volume_location.sort_values(by="volume", inplace=True) - idx_show = volume_location.iloc[-n_locations:].index - - volume_location.sort_index(inplace=True) - for idx in idx_show: - plt.text( - volume_location.loc[idx, "x"], - volume_location.loc[idx, "y"], - volume_location.loc[idx, "NOM_COM"][0:14], - ) - return - - -def plot_flow( - flows, coordinates, sources=None, n_flows=100, n_locations=5, size=1, title="" -): - """ - Plots the flows between the locations. - - The bigger the flow is, the bigger the plot line - will be. THe points are the locations. If sources=None, then the size of each location - is proportionnal to the internal flow within the location. Otherwise, the size of the - location is proportionnal to the source volume from sources. - - Args: - flows (pd.DataFrame): a dataframe with one row per couple origin/destination - Columns: - from (str): geographic code of the flow origin - to (str): geographic code of the flow destination - flow_volume (float): flow volume between the origin and the destination - coordinates (pd.DataFrame): a dataframe with one row per location - Index: - CODGEO (str): geographic code of the location - Columns: - NOM_COM (str): name of the location - x (float): x coordinate of the location - y (float): y coordinate of the location - sources (pd.DataFrame): a dataframe with one row per location - If None is passed - Index: - CODGEO (str): geographic code of the location - Columns: - source_volume (float): the source volume at the location - n_flows (int): plot only the n_flows biggest flows (to avoid too heavy computationss) - If n_flows=-1 then plot all the flows - n_locations (int): display the labels of only the biggest n_locations locations - according to the volume from sources - size (int): determines the size of the figure (size>=1). Default is 1. - """ - - # Normalization - flows["flow_volume"] = ( - size - * 100 - * (flows["flow_volume"] - flows["flow_volume"].min()) - / flows["flow_volume"].max() - ) - - # Get the coordinates for each origin/destination - flows = pd.merge(flows, coordinates, left_on="from", right_index=True) - flows.rename({"x": "from_x", "y": "from_y"}, axis=1, inplace=True) - flows = pd.merge(flows, coordinates, left_on="to", right_index=True) - flows.rename({"x": "to_x", "y": "to_y"}, axis=1, inplace=True) - flows.sort_values(by="flow_volume", ascending=False, inplace=True) - - idx_show = flows.iloc[:n_flows].index - - plt.figure(figsize=(6 * size, 4 * size)) - plt.title(title, fontsize=5 * size) - # Plot the flows - for idx in idx_show: - plt.plot( - [flows.loc[idx, "from_x"], flows.loc[idx, "to_x"]], - [flows.loc[idx, "from_y"], flows.loc[idx, "to_y"]], - linewidth=flows.loc[idx, "flow_volume"], - color="lightblue", - zorder=0, - ) - - if sources is None: - # Plot the locations based on the internal flow - internal_flows = flows.loc[flows["from"] == flows["to"]] - # Normalization - internal_flows.loc[:, "flow_volume"] = ( - size**2 - * 100 - * ( - internal_flows.loc[:, "flow_volume"] - - internal_flows["flow_volume"].min() - ) - / internal_flows["flow_volume"].max() - ) - plt.scatter( - internal_flows["from_x"], - internal_flows["from_y"], - s=internal_flows["flow_volume"], - zorder=1, - ) - - # n_locations biggest location to display - internal_flows.sort_values(by="flow_volume", ascending=False, inplace=True) - - temp = internal_flows.iloc[:n_locations].index - idx_show = internal_flows.loc[temp, "from"].to_numpy() - for idx in idx_show: - plt.text( - coordinates.loc[idx, "x"], - coordinates.loc[idx, "y"], - coordinates.loc[idx, "NOM_COM"][0:14], - fontsize=5 * size, - ) - else: - # Normalization - sources["source_volume"] = ( - size**2 - * 100 - * (sources["source_volume"] - sources["source_volume"].min()) - / sources["source_volume"].max() - ) - - # Plot the locations - sources = pd.merge(sources, coordinates, left_index=True, right_index=True) - plt.scatter(sources["x"], sources["y"], s=sources["source_volume"], zorder=1) - - # n_locations biggest location to display - sources.sort_values(by="source_volume", inplace=True) - idx_show = sources.iloc[-n_locations:].index - - sources.sort_index(inplace=True) - for idx in idx_show: - plt.text( - sources.loc[idx, "x"], - sources.loc[idx, "y"], - sources.loc[idx, "NOM_COM"][0:14], - fontsize=5 * size, - ) diff --git a/mobility/runtime/__init__.py b/mobility/runtime/__init__.py new file mode 100644 index 00000000..9e151da8 --- /dev/null +++ b/mobility/runtime/__init__.py @@ -0,0 +1 @@ +"""Core package infrastructure.""" diff --git a/mobility/runtime/assets/__init__.py b/mobility/runtime/assets/__init__.py new file mode 100644 index 00000000..9cf937d2 --- /dev/null +++ b/mobility/runtime/assets/__init__.py @@ -0,0 +1,9 @@ +from .asset import Asset +from .file_asset import FileAsset +from .in_memory_asset import InMemoryAsset + +__all__ = [ + "Asset", + "FileAsset", + "InMemoryAsset", +] diff --git a/mobility/asset.py b/mobility/runtime/assets/asset.py similarity index 100% rename from mobility/asset.py rename to mobility/runtime/assets/asset.py diff --git a/mobility/file_asset.py b/mobility/runtime/assets/file_asset.py similarity index 99% rename from mobility/file_asset.py rename to mobility/runtime/assets/file_asset.py index 43342373..fb7f9ecf 100644 --- a/mobility/file_asset.py +++ b/mobility/runtime/assets/file_asset.py @@ -2,7 +2,7 @@ import os import networkx as nx -from mobility.asset import Asset +from mobility.runtime.assets.asset import Asset from typing import Any from abc import abstractmethod diff --git a/mobility/in_memory_asset.py b/mobility/runtime/assets/in_memory_asset.py similarity index 80% rename from mobility/in_memory_asset.py rename to mobility/runtime/assets/in_memory_asset.py index 08f465f4..42b17362 100644 --- a/mobility/in_memory_asset.py +++ b/mobility/runtime/assets/in_memory_asset.py @@ -1,5 +1,5 @@ from abc import abstractmethod -from mobility.asset import Asset +from mobility.runtime.assets.asset import Asset class InMemoryAsset(Asset): @@ -11,4 +11,4 @@ def get_cached_hash(self): # @abstractmethod def get(self): - pass \ No newline at end of file + pass diff --git a/mobility/runtime/io/__init__.py b/mobility/runtime/io/__init__.py new file mode 100644 index 00000000..5d34a76d --- /dev/null +++ b/mobility/runtime/io/__init__.py @@ -0,0 +1,4 @@ +from .download_file import clean_path, download_file +from .patch_openpyxl import patch_openpyxl + +__all__ = ["clean_path", "download_file", "patch_openpyxl"] diff --git a/mobility/parsers/download_file.py b/mobility/runtime/io/download_file.py similarity index 100% rename from mobility/parsers/download_file.py rename to mobility/runtime/io/download_file.py diff --git a/mobility/parsers/patch_openpyxl.py b/mobility/runtime/io/patch_openpyxl.py similarity index 100% rename from mobility/parsers/patch_openpyxl.py rename to mobility/runtime/io/patch_openpyxl.py diff --git a/mobility/runtime/r_integration/__init__.py b/mobility/runtime/r_integration/__init__.py new file mode 100644 index 00000000..e8fff2e3 --- /dev/null +++ b/mobility/runtime/r_integration/__init__.py @@ -0,0 +1,3 @@ +from .r_script_runner import RScriptRunner, RScriptRunnerError + +__all__ = ["RScriptRunner", "RScriptRunnerError"] diff --git a/mobility/r_utils/install_packages.R b/mobility/runtime/r_integration/install_packages.R similarity index 100% rename from mobility/r_utils/install_packages.R rename to mobility/runtime/r_integration/install_packages.R diff --git a/mobility/r_utils/r_script.py b/mobility/runtime/r_integration/r_script_runner.py similarity index 92% rename from mobility/r_utils/r_script.py rename to mobility/runtime/r_integration/r_script_runner.py index f52c1eca..dd6ce798 100644 --- a/mobility/r_utils/r_script.py +++ b/mobility/runtime/r_integration/r_script_runner.py @@ -7,7 +7,7 @@ from importlib import resources -class RScript: +class RScriptRunner: """ Class to run the R scripts from the Python code. @@ -16,7 +16,7 @@ class RScript: Parameters ---------- script_path : str | contextlib._GeneratorContextManager - Path of the R script. Mobility R scripts are stored in the r_utils folder. + Path of the R script. """ @@ -45,7 +45,7 @@ def run(self, args: list) -> None: Raises ------ - RScriptError + RScriptRunnerError Exception when the R script returns an error. """ @@ -69,7 +69,7 @@ def run(self, args: list) -> None: stderr_thread.join() if process.returncode != 0: - raise RScriptError( + raise RScriptRunnerError( """ Rscript error (the error message is logged just before the error stack trace). If you want more detail, you can print all R output by setting debug=True when calling set_params. @@ -100,10 +100,9 @@ def print_output(self, stream, is_error=False): msg = msg.strip() logging.info(msg) elif is_error and "Error" in msg or "Erreur" in msg: - logging.error("RScript execution failed, with the following message : " + msg) + logging.error("R script execution failed, with the following message : " + msg) - -class RScriptError(Exception): +class RScriptRunnerError(Exception): """Exception for R errors.""" pass diff --git a/mobility/runtime/resources/__init__.py b/mobility/runtime/resources/__init__.py new file mode 100644 index 00000000..48623894 --- /dev/null +++ b/mobility/runtime/resources/__init__.py @@ -0,0 +1 @@ +"""Small static package resources bundled with Mobility.""" diff --git a/mobility/data/ademe/Base_Carbone_V22.0.csv b/mobility/runtime/resources/ademe/Base_Carbone_V22.0.csv similarity index 100% rename from mobility/data/ademe/Base_Carbone_V22.0.csv rename to mobility/runtime/resources/ademe/Base_Carbone_V22.0.csv diff --git a/mobility/data/ademe/mapping.csv b/mobility/runtime/resources/ademe/mapping.csv similarity index 100% rename from mobility/data/ademe/mapping.csv rename to mobility/runtime/resources/ademe/mapping.csv diff --git a/mobility/data/bfs/je-f-21.03.01.xlsx b/mobility/runtime/resources/bfs/je-f-21.03.01.xlsx similarity index 100% rename from mobility/data/bfs/je-f-21.03.01.xlsx rename to mobility/runtime/resources/bfs/je-f-21.03.01.xlsx diff --git a/mobility/data/gtfs/gtfs_route_types.csv b/mobility/runtime/resources/gtfs/gtfs_route_types.csv similarity index 100% rename from mobility/data/gtfs/gtfs_route_types.csv rename to mobility/runtime/resources/gtfs/gtfs_route_types.csv diff --git a/mobility/data/insee/insee_RP2021_mobpro_border_cities.csv b/mobility/runtime/resources/insee/insee_RP2021_mobpro_border_cities.csv similarity index 100% rename from mobility/data/insee/insee_RP2021_mobpro_border_cities.csv rename to mobility/runtime/resources/insee/insee_RP2021_mobpro_border_cities.csv diff --git a/mobility/resources/osmdata_0.2.5.005.zip b/mobility/runtime/resources/osmdata_0.2.5.005.zip similarity index 100% rename from mobility/resources/osmdata_0.2.5.005.zip rename to mobility/runtime/resources/osmdata_0.2.5.005.zip diff --git a/mobility/data/surveys/entd_mode.xlsx b/mobility/runtime/resources/surveys/entd_mode.xlsx similarity index 100% rename from mobility/data/surveys/entd_mode.xlsx rename to mobility/runtime/resources/surveys/entd_mode.xlsx diff --git a/mobility/spatial/__init__.py b/mobility/spatial/__init__.py new file mode 100644 index 00000000..cf6c3bcf --- /dev/null +++ b/mobility/spatial/__init__.py @@ -0,0 +1,9 @@ +from .study_area import StudyArea, StudyAreaParameters +from .transport_zones import TransportZones, TransportZonesParameters + +__all__ = [ + "StudyArea", + "StudyAreaParameters", + "TransportZones", + "TransportZonesParameters", +] diff --git a/mobility/parsers/admin_boundaries.py b/mobility/spatial/admin_boundaries.py similarity index 98% rename from mobility/parsers/admin_boundaries.py rename to mobility/spatial/admin_boundaries.py index d6e41ac2..ccabe9bc 100644 --- a/mobility/parsers/admin_boundaries.py +++ b/mobility/spatial/admin_boundaries.py @@ -5,7 +5,7 @@ import pandas as pd import geopandas as gpd -from mobility.parsers.download_file import download_file +from mobility.runtime.io.download_file import download_file def prepare_french_admin_boundaries(): @@ -106,4 +106,4 @@ def get_french_regions_boundaries(): - \ No newline at end of file + diff --git a/mobility/parsers/local_admin_units.py b/mobility/spatial/local_admin_units.py similarity index 96% rename from mobility/parsers/local_admin_units.py rename to mobility/spatial/local_admin_units.py index c4d97cf0..c3d02bdb 100644 --- a/mobility/parsers/local_admin_units.py +++ b/mobility/spatial/local_admin_units.py @@ -7,9 +7,9 @@ import geopandas as gpd import pandas as pd -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file -from mobility.parsers.local_admin_units_categories import LocalAdminUnitsCategories +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file +from mobility.spatial.local_admin_units_categories import LocalAdminUnitsCategories class LocalAdminUnits(FileAsset): """FileAsset class preparing local admin units in France and Switzerland. diff --git a/mobility/parsers/local_admin_units_categories.py b/mobility/spatial/local_admin_units_categories.py similarity index 97% rename from mobility/parsers/local_admin_units_categories.py rename to mobility/spatial/local_admin_units_categories.py index 19077a3f..26b53a2a 100644 --- a/mobility/parsers/local_admin_units_categories.py +++ b/mobility/spatial/local_admin_units_categories.py @@ -5,8 +5,8 @@ import pandas as pd import numpy as np -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file class LocalAdminUnitsCategories(FileAsset): diff --git a/mobility/parsers/osm/__init__.py b/mobility/spatial/osm/__init__.py similarity index 100% rename from mobility/parsers/osm/__init__.py rename to mobility/spatial/osm/__init__.py diff --git a/mobility/parsers/osm/geofabrik_extract.py b/mobility/spatial/osm/geofabrik_extract.py similarity index 77% rename from mobility/parsers/osm/geofabrik_extract.py rename to mobility/spatial/osm/geofabrik_extract.py index 5bda2c41..79079fbf 100644 --- a/mobility/parsers/osm/geofabrik_extract.py +++ b/mobility/spatial/osm/geofabrik_extract.py @@ -1,8 +1,8 @@ import pathlib import os -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file class GeofabrikExtract(FileAsset): @@ -19,4 +19,4 @@ def get_cached_asset(self): def create_and_get_asset(self): download_file(self.download_url, self.cache_path) - return self.cache_path \ No newline at end of file + return self.cache_path diff --git a/mobility/parsers/osm/geofabrik_regions.py b/mobility/spatial/osm/geofabrik_regions.py similarity index 98% rename from mobility/parsers/osm/geofabrik_regions.py rename to mobility/spatial/osm/geofabrik_regions.py index af777cc7..baf67cb2 100644 --- a/mobility/parsers/osm/geofabrik_regions.py +++ b/mobility/spatial/osm/geofabrik_regions.py @@ -5,7 +5,7 @@ import geopandas as gpd from shapely.geometry import Polygon -from mobility.file_asset import FileAsset +from mobility.runtime.assets.file_asset import FileAsset class GeofabrikRegions(FileAsset): """ diff --git a/mobility/parsers/osm/osm_country_border.py b/mobility/spatial/osm/osm_country_border.py similarity index 92% rename from mobility/parsers/osm/osm_country_border.py rename to mobility/spatial/osm/osm_country_border.py index cd00b655..50c241f8 100644 --- a/mobility/parsers/osm/osm_country_border.py +++ b/mobility/spatial/osm/osm_country_border.py @@ -3,8 +3,8 @@ import subprocess import logging -from mobility.file_asset import FileAsset -from mobility.parsers.osm.geofabrik_extract import GeofabrikExtract +from mobility.runtime.assets.file_asset import FileAsset +from mobility.spatial.osm.geofabrik_extract import GeofabrikExtract class OSMCountryBorder(FileAsset): diff --git a/mobility/parsers/osm/osm_data.py b/mobility/spatial/osm/osm_data.py similarity index 98% rename from mobility/parsers/osm/osm_data.py rename to mobility/spatial/osm/osm_data.py index 4d779c20..36ae0166 100644 --- a/mobility/parsers/osm/osm_data.py +++ b/mobility/spatial/osm/osm_data.py @@ -14,10 +14,10 @@ from typing import Tuple, List from concurrent.futures import ThreadPoolExecutor, as_completed -from mobility.parsers.osm.geofabrik_extract import GeofabrikExtract -from mobility.parsers.osm.geofabrik_regions import GeofabrikRegions -from mobility.file_asset import FileAsset -from mobility.study_area import StudyArea +from mobility.spatial.osm.geofabrik_extract import GeofabrikExtract +from mobility.spatial.osm.geofabrik_regions import GeofabrikRegions +from mobility.runtime.assets.file_asset import FileAsset +from mobility.spatial.study_area import StudyArea class OSMData(FileAsset): """ diff --git a/mobility/r_utils/prepare_transport_zones.R b/mobility/spatial/prepare_transport_zones.R similarity index 100% rename from mobility/r_utils/prepare_transport_zones.R rename to mobility/spatial/prepare_transport_zones.R diff --git a/mobility/study_area.py b/mobility/spatial/study_area.py similarity index 98% rename from mobility/study_area.py rename to mobility/spatial/study_area.py index 344bfcbc..169b77db 100644 --- a/mobility/study_area.py +++ b/mobility/spatial/study_area.py @@ -10,8 +10,8 @@ from pydantic import BaseModel, ConfigDict, Field from typing import Annotated -from mobility.file_asset import FileAsset -from mobility.parsers.local_admin_units import LocalAdminUnits +from mobility.runtime.assets.file_asset import FileAsset +from mobility.spatial.local_admin_units import LocalAdminUnits class StudyArea(FileAsset): diff --git a/mobility/transport_zones.py b/mobility/spatial/transport_zones.py similarity index 96% rename from mobility/transport_zones.py rename to mobility/spatial/transport_zones.py index 84c44da2..8182a959 100644 --- a/mobility/transport_zones.py +++ b/mobility/spatial/transport_zones.py @@ -11,10 +11,10 @@ from shapely.geometry import Point from pydantic import BaseModel, ConfigDict, Field, model_validator -from mobility.file_asset import FileAsset -from mobility.study_area import StudyArea, StudyAreaParameters -from mobility.parsers.osm import OSMData -from mobility.r_utils.r_script import RScript +from mobility.runtime.assets.file_asset import FileAsset +from mobility.spatial.study_area import StudyArea, StudyAreaParameters +from mobility.spatial.osm import OSMData +from mobility.runtime.r_integration.r_script_runner import RScriptRunner class TransportZones(FileAsset): """ @@ -145,7 +145,7 @@ def create_and_get_asset(self) -> gpd.GeoDataFrame: study_area_fp = self.study_area.cache_path["polygons"] osm_buildings_fp = self.osm_buildings.get() - script = RScript(resources.files('mobility.r_utils').joinpath('prepare_transport_zones.R')) + script = RScriptRunner(resources.files('mobility.spatial').joinpath('prepare_transport_zones.R')) script.run( args=[ str(study_area_fp), diff --git a/mobility/parsers/mobility_survey/__init__.py b/mobility/surveys/__init__.py similarity index 100% rename from mobility/parsers/mobility_survey/__init__.py rename to mobility/surveys/__init__.py diff --git a/mobility/parsers/mobility_survey/aggregator.py b/mobility/surveys/aggregator.py similarity index 96% rename from mobility/parsers/mobility_survey/aggregator.py rename to mobility/surveys/aggregator.py index 8f91a792..e93becd7 100644 --- a/mobility/parsers/mobility_survey/aggregator.py +++ b/mobility/surveys/aggregator.py @@ -1,6 +1,6 @@ import pandas as pd from collections import defaultdict -from mobility.in_memory_asset import InMemoryAsset +from mobility.runtime.assets.in_memory_asset import InMemoryAsset class MobilitySurveyAggregator(InMemoryAsset): diff --git a/mobility/parsers/mobility_survey/france/__init__.py b/mobility/surveys/france/__init__.py similarity index 100% rename from mobility/parsers/mobility_survey/france/__init__.py rename to mobility/surveys/france/__init__.py diff --git a/mobility/parsers/mobility_survey/france/emp.py b/mobility/surveys/france/emp.py similarity index 99% rename from mobility/parsers/mobility_survey/france/emp.py rename to mobility/surveys/france/emp.py index e2f34016..f175e01c 100644 --- a/mobility/parsers/mobility_survey/france/emp.py +++ b/mobility/surveys/france/emp.py @@ -5,9 +5,9 @@ import pandas as pd import numpy as np -from mobility.parsers.mobility_survey import MobilitySurvey -from mobility.parsers.download_file import download_file -from mobility.parsers.mobility_survey.mobility_survey import ( +from mobility.surveys import MobilitySurvey +from mobility.runtime.io.download_file import download_file +from mobility.surveys.mobility_survey import ( MobilitySurveyParameters, ) diff --git a/mobility/parsers/mobility_survey/france/entd.py b/mobility/surveys/france/entd.py similarity index 99% rename from mobility/parsers/mobility_survey/france/entd.py rename to mobility/surveys/france/entd.py index add3579c..a790c910 100644 --- a/mobility/parsers/mobility_survey/france/entd.py +++ b/mobility/surveys/france/entd.py @@ -5,9 +5,9 @@ import pandas as pd import numpy as np -from mobility.parsers.mobility_survey import MobilitySurvey -from mobility.parsers.download_file import download_file -from mobility.parsers.mobility_survey.mobility_survey import ( +from mobility.surveys import MobilitySurvey +from mobility.runtime.io.download_file import download_file +from mobility.surveys.mobility_survey import ( MobilitySurveyParameters, ) diff --git a/mobility/parsers/mobility_survey/mobility_survey.py b/mobility/surveys/mobility_survey.py similarity index 99% rename from mobility/parsers/mobility_survey/mobility_survey.py rename to mobility/surveys/mobility_survey.py index f4a61ae1..3d5dcda2 100644 --- a/mobility/parsers/mobility_survey/mobility_survey.py +++ b/mobility/surveys/mobility_survey.py @@ -5,7 +5,7 @@ import pandas as pd from typing import Annotated, Any from pydantic import BaseModel, ConfigDict, Field -from mobility.file_asset import FileAsset +from mobility.runtime.assets.file_asset import FileAsset class MobilitySurvey(FileAsset): diff --git a/mobility/transport/__init__.py b/mobility/transport/__init__.py new file mode 100644 index 00000000..78d05fbe --- /dev/null +++ b/mobility/transport/__init__.py @@ -0,0 +1 @@ +"""Transport supply and cost engine.""" diff --git a/mobility/transport/costs/__init__.py b/mobility/transport/costs/__init__.py new file mode 100644 index 00000000..1a95aee4 --- /dev/null +++ b/mobility/transport/costs/__init__.py @@ -0,0 +1,19 @@ +from .od_flows_asset import VehicleODFlowsAsset +from .transport_costs_aggregator import TransportCostsAggregator +from .parameters import ( + CostOfTimeParameters, + GeneralizedCostParameters, + PathRoutingParameters, +) +from .path import PathGeneralizedCost, PathTravelCosts, PathTravelCostsSnapshot + +__all__ = [ + "CostOfTimeParameters", + "GeneralizedCostParameters", + "PathGeneralizedCost", + "PathRoutingParameters", + "PathTravelCosts", + "PathTravelCostsSnapshot", + "TransportCostsAggregator", + "VehicleODFlowsAsset", +] diff --git a/mobility/transport_costs/od_flows_asset.py b/mobility/transport/costs/od_flows_asset.py similarity index 93% rename from mobility/transport_costs/od_flows_asset.py rename to mobility/transport/costs/od_flows_asset.py index ce55aa18..19035d4e 100644 --- a/mobility/transport_costs/od_flows_asset.py +++ b/mobility/transport/costs/od_flows_asset.py @@ -3,7 +3,7 @@ import pandas as pd import logging -from mobility.file_asset import FileAsset +from mobility.runtime.assets.file_asset import FileAsset class VehicleODFlowsAsset(FileAsset): @@ -13,7 +13,7 @@ class VehicleODFlowsAsset(FileAsset): ["from","to","vehicle_volume"]. The cache key is (run_key, is_weekday, iteration, mode_name), where run_key - should be PopulationTrips.inputs_hash (includes the seed). + should be GroupDayTrips.inputs_hash (includes the seed). """ def __init__( diff --git a/mobility/transport/costs/parameters/__init__.py b/mobility/transport/costs/parameters/__init__.py new file mode 100644 index 00000000..c3ed7dda --- /dev/null +++ b/mobility/transport/costs/parameters/__init__.py @@ -0,0 +1,9 @@ +from .cost_of_time_parameters import CostOfTimeParameters +from .generalized_cost_parameters import GeneralizedCostParameters +from .path_routing_parameters import PathRoutingParameters + +__all__ = [ + "CostOfTimeParameters", + "GeneralizedCostParameters", + "PathRoutingParameters", +] diff --git a/mobility/cost_of_time_parameters.py b/mobility/transport/costs/parameters/cost_of_time_parameters.py similarity index 100% rename from mobility/cost_of_time_parameters.py rename to mobility/transport/costs/parameters/cost_of_time_parameters.py diff --git a/mobility/generalized_cost_parameters.py b/mobility/transport/costs/parameters/generalized_cost_parameters.py similarity index 82% rename from mobility/generalized_cost_parameters.py rename to mobility/transport/costs/parameters/generalized_cost_parameters.py index d2259b06..6c20538c 100644 --- a/mobility/generalized_cost_parameters.py +++ b/mobility/transport/costs/parameters/generalized_cost_parameters.py @@ -2,7 +2,7 @@ from pydantic import BaseModel, ConfigDict, Field -from mobility.cost_of_time_parameters import CostOfTimeParameters +from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters class GeneralizedCostParameters(BaseModel): diff --git a/mobility/path_routing_parameters.py b/mobility/transport/costs/parameters/path_routing_parameters.py similarity index 100% rename from mobility/path_routing_parameters.py rename to mobility/transport/costs/parameters/path_routing_parameters.py diff --git a/mobility/transport/costs/path/__init__.py b/mobility/transport/costs/path/__init__.py new file mode 100644 index 00000000..2d14e8a2 --- /dev/null +++ b/mobility/transport/costs/path/__init__.py @@ -0,0 +1,9 @@ +from .path_generalized_cost import PathGeneralizedCost +from .path_travel_costs import PathTravelCosts +from .path_travel_costs_snapshot import PathTravelCostsSnapshot + +__all__ = [ + "PathGeneralizedCost", + "PathTravelCosts", + "PathTravelCostsSnapshot", +] diff --git a/mobility/transport_costs/path_generalized_cost.py b/mobility/transport/costs/path/path_generalized_cost.py similarity index 90% rename from mobility/transport_costs/path_generalized_cost.py rename to mobility/transport/costs/path/path_generalized_cost.py index fcbfdc4a..2376b3f5 100644 --- a/mobility/transport_costs/path_generalized_cost.py +++ b/mobility/transport/costs/path/path_generalized_cost.py @@ -1,6 +1,12 @@ +from __future__ import annotations + import pandas as pd -from mobility.in_memory_asset import InMemoryAsset -from mobility.choice_models.congestion_state import CongestionState +from typing import TYPE_CHECKING + +from mobility.runtime.assets.in_memory_asset import InMemoryAsset + +if TYPE_CHECKING: + from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class PathGeneralizedCost(InMemoryAsset): diff --git a/mobility/transport_costs/path_travel_costs.py b/mobility/transport/costs/path/path_travel_costs.py similarity index 88% rename from mobility/transport_costs/path_travel_costs.py rename to mobility/transport/costs/path/path_travel_costs.py index e17d35a7..f1731729 100644 --- a/mobility/transport_costs/path_travel_costs.py +++ b/mobility/transport/costs/path/path_travel_costs.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import pathlib import logging @@ -7,19 +9,21 @@ import geopandas as gpd from importlib import resources -from mobility.transport_graphs.path_graph import PathGraph -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_zones import TransportZones -from mobility.path_routing_parameters import PathRoutingParameters -from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters -from mobility.transport_graphs.speed_modifier import SpeedModifier -from mobility.transport_graphs.congested_path_graph_snapshot import CongestedPathGraphSnapshot -from mobility.transport_graphs.contracted_path_graph_snapshot import ContractedPathGraphSnapshot -from mobility.transport_costs.path_travel_costs_snapshot import PathTravelCostsSnapshot -from mobility.choice_models.congestion_state import CongestionState - -from typing import List +from mobility.transport.graphs.core.path_graph import PathGraph +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters +from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters +from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier +from mobility.transport.graphs.congested.congested_path_graph_snapshot import CongestedPathGraphSnapshot +from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot +from mobility.transport.costs.path.path_travel_costs_snapshot import PathTravelCostsSnapshot + +from typing import TYPE_CHECKING, List + +if TYPE_CHECKING: + from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class PathTravelCosts(FileAsset): """ @@ -175,7 +179,7 @@ def compute_costs_by_OD( logging.info("Computing travel times and distances by OD...") - script = RScript(resources.files('mobility.r_utils').joinpath('prepare_dodgr_costs.R')) + script = RScriptRunner(resources.files('mobility.transport.costs.path').joinpath('prepare_dodgr_costs.R')) script.run( args=[ str(transport_zones.cache_path), diff --git a/mobility/transport_costs/path_travel_costs_snapshot.py b/mobility/transport/costs/path/path_travel_costs_snapshot.py similarity index 77% rename from mobility/transport_costs/path_travel_costs_snapshot.py rename to mobility/transport/costs/path/path_travel_costs_snapshot.py index f886586d..b074d491 100644 --- a/mobility/transport_costs/path_travel_costs_snapshot.py +++ b/mobility/transport/costs/path/path_travel_costs_snapshot.py @@ -5,11 +5,11 @@ from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_zones import TransportZones -from mobility.path_routing_parameters import PathRoutingParameters -from mobility.transport_graphs.contracted_path_graph_snapshot import ContractedPathGraphSnapshot +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters +from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot class PathTravelCostsSnapshot(FileAsset): @@ -48,7 +48,7 @@ def create_and_get_asset(self) -> pd.DataFrame: transport_zones.get() contracted_graph.get() - script = RScript(resources.files('mobility.r_utils').joinpath('prepare_dodgr_costs.R')) + script = RScriptRunner(resources.files('mobility.transport.costs.path').joinpath('prepare_dodgr_costs.R')) script.run( args=[ str(transport_zones.cache_path), diff --git a/mobility/r_utils/prepare_dodgr_costs.R b/mobility/transport/costs/path/prepare_dodgr_costs.R similarity index 98% rename from mobility/r_utils/prepare_dodgr_costs.R rename to mobility/transport/costs/path/prepare_dodgr_costs.R index 70719ccc..f24b49e6 100644 --- a/mobility/r_utils/prepare_dodgr_costs.R +++ b/mobility/transport/costs/path/prepare_dodgr_costs.R @@ -35,7 +35,7 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/choice_models/travel_costs_aggregator.py b/mobility/transport/costs/transport_costs_aggregator.py similarity index 97% rename from mobility/choice_models/travel_costs_aggregator.py rename to mobility/transport/costs/transport_costs_aggregator.py index 4383d2de..4457d991 100644 --- a/mobility/choice_models/travel_costs_aggregator.py +++ b/mobility/transport/costs/transport_costs_aggregator.py @@ -1,12 +1,18 @@ +from __future__ import annotations + import polars as pl import logging -from typing import List -from mobility.choice_models.congestion_state import CongestionState -from mobility.in_memory_asset import InMemoryAsset -from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset +from typing import TYPE_CHECKING, List + +from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset + +if TYPE_CHECKING: + from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState + -class TravelCostsAggregator(InMemoryAsset): +class TransportCostsAggregator(InMemoryAsset): def __init__(self, modes): self.modes = modes diff --git a/mobility/transport/graphs/__init__.py b/mobility/transport/graphs/__init__.py new file mode 100644 index 00000000..cd521398 --- /dev/null +++ b/mobility/transport/graphs/__init__.py @@ -0,0 +1,24 @@ +from .core import GraphGPKGExporter, PathGraph +from .congested import CongestedPathGraph +from .contracted import ContractedPathGraph +from .modified import ( + BorderCrossingSpeedModifier, + LimitedSpeedZonesModifier, + NewRoadModifier, + RoadLaneNumberModifier, + SpeedModifier, +) +from .simplified import SimplifiedPathGraph + +__all__ = [ + "BorderCrossingSpeedModifier", + "CongestedPathGraph", + "ContractedPathGraph", + "GraphGPKGExporter", + "LimitedSpeedZonesModifier", + "NewRoadModifier", + "PathGraph", + "RoadLaneNumberModifier", + "SimplifiedPathGraph", + "SpeedModifier", +] diff --git a/mobility/transport/graphs/congested/__init__.py b/mobility/transport/graphs/congested/__init__.py new file mode 100644 index 00000000..97f6fece --- /dev/null +++ b/mobility/transport/graphs/congested/__init__.py @@ -0,0 +1,4 @@ +from .congested_path_graph import CongestedPathGraph +from .congested_path_graph_snapshot import CongestedPathGraphSnapshot + +__all__ = ["CongestedPathGraph", "CongestedPathGraphSnapshot"] diff --git a/mobility/transport_graphs/congested_path_graph.py b/mobility/transport/graphs/congested/congested_path_graph.py similarity index 88% rename from mobility/transport_graphs/congested_path_graph.py rename to mobility/transport/graphs/congested/congested_path_graph.py index 6632df2d..774c235c 100644 --- a/mobility/transport_graphs/congested_path_graph.py +++ b/mobility/transport/graphs/congested/congested_path_graph.py @@ -5,10 +5,10 @@ import json from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_graphs.modified_path_graph import ModifiedPathGraph -from mobility.transport_zones import TransportZones +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.graphs.modified.modified_path_graph import ModifiedPathGraph +from mobility.spatial.transport_zones import TransportZones from typing import List @@ -70,7 +70,7 @@ def load_graph( congestion_flows_scaling_factor: float, ) -> None: - script = RScript(resources.files('mobility.transport_graphs').joinpath('load_path_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.congested').joinpath('load_path_graph.R')) script.run( args=[ diff --git a/mobility/transport_graphs/congested_path_graph_snapshot.py b/mobility/transport/graphs/congested/congested_path_graph_snapshot.py similarity index 82% rename from mobility/transport_graphs/congested_path_graph_snapshot.py rename to mobility/transport/graphs/congested/congested_path_graph_snapshot.py index 65e2084a..e390ec4d 100644 --- a/mobility/transport_graphs/congested_path_graph_snapshot.py +++ b/mobility/transport/graphs/congested/congested_path_graph_snapshot.py @@ -4,11 +4,11 @@ from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_graphs.modified_path_graph import ModifiedPathGraph -from mobility.transport_zones import TransportZones -from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.graphs.modified.modified_path_graph import ModifiedPathGraph +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset class CongestedPathGraphSnapshot(FileAsset): @@ -51,7 +51,7 @@ def create_and_get_asset(self) -> pathlib.Path: logging.info("Building congested snapshot graph...") vehicle_flows.get() # ensure parquet exists - script = RScript(resources.files('mobility.transport_graphs').joinpath('load_path_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.congested').joinpath('load_path_graph.R')) script.run( args=[ str(self.inputs["modified_graph"].get()), diff --git a/mobility/r_utils/duplicate_cpprouting_graph.R b/mobility/transport/graphs/congested/duplicate_cpprouting_graph.R similarity index 100% rename from mobility/r_utils/duplicate_cpprouting_graph.R rename to mobility/transport/graphs/congested/duplicate_cpprouting_graph.R diff --git a/mobility/r_utils/initialize_travel_costs.R b/mobility/transport/graphs/congested/initialize_travel_costs.R similarity index 100% rename from mobility/r_utils/initialize_travel_costs.R rename to mobility/transport/graphs/congested/initialize_travel_costs.R diff --git a/mobility/transport_graphs/load_path_graph.R b/mobility/transport/graphs/congested/load_path_graph.R similarity index 93% rename from mobility/transport_graphs/load_path_graph.R rename to mobility/transport/graphs/congested/load_path_graph.R index dcc9de0c..a5fce235 100644 --- a/mobility/transport_graphs/load_path_graph.R +++ b/mobility/transport/graphs/congested/load_path_graph.R @@ -29,9 +29,9 @@ congestion_flows_scaling_factor <- args[6] output_fp <- args[7] -source(file.path(package_fp, "r_utils", "cpprouting_io.R")) -source(file.path(package_fp, "r_utils", "tz_pairs_to_vertex_pairs.R")) -source(file.path(package_fp, "r_utils", "get_buildings_nearest_vertex_id.R")) +source(file.path(package_fp, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_fp, "transport", "graphs", "common", "tz_pairs_to_vertex_pairs.R")) +source(file.path(package_fp, "transport", "graphs", "common", "get_buildings_nearest_vertex_id.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/graphs/contracted/__init__.py b/mobility/transport/graphs/contracted/__init__.py new file mode 100644 index 00000000..29207c29 --- /dev/null +++ b/mobility/transport/graphs/contracted/__init__.py @@ -0,0 +1,4 @@ +from .contracted_path_graph import ContractedPathGraph +from .contracted_path_graph_snapshot import ContractedPathGraphSnapshot + +__all__ = ["ContractedPathGraph", "ContractedPathGraphSnapshot"] diff --git a/mobility/transport_graphs/contract_path_graph.R b/mobility/transport/graphs/contracted/contract_path_graph.R similarity index 94% rename from mobility/transport_graphs/contract_path_graph.R rename to mobility/transport/graphs/contracted/contract_path_graph.R index 5c1e8220..dbe17f2e 100644 --- a/mobility/transport_graphs/contract_path_graph.R +++ b/mobility/transport/graphs/contracted/contract_path_graph.R @@ -20,7 +20,7 @@ package_fp <- args[1] cppr_graph_fp <- args[2] output_fp <- args[3] -source(file.path(package_fp, "r_utils", "cpprouting_io.R")) +source(file.path(package_fp, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport_graphs/contracted_path_graph.py b/mobility/transport/graphs/contracted/contracted_path_graph.py similarity index 81% rename from mobility/transport_graphs/contracted_path_graph.py rename to mobility/transport/graphs/contracted/contracted_path_graph.py index 5c217582..67798ee9 100644 --- a/mobility/transport_graphs/contracted_path_graph.py +++ b/mobility/transport/graphs/contracted/contracted_path_graph.py @@ -3,10 +3,10 @@ import logging from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_graphs.congested_path_graph import CongestedPathGraph -from mobility.transport_zones import TransportZones +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.graphs.congested.congested_path_graph import CongestedPathGraph +from mobility.spatial.transport_zones import TransportZones class ContractedPathGraph(FileAsset): @@ -49,7 +49,7 @@ def contract_graph( output_file_path: pathlib.Path ) -> None: - script = RScript(resources.files('mobility.transport_graphs').joinpath('contract_path_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.contracted').joinpath('contract_path_graph.R')) script.run( args=[ diff --git a/mobility/transport_graphs/contracted_path_graph_snapshot.py b/mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py similarity index 76% rename from mobility/transport_graphs/contracted_path_graph_snapshot.py rename to mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py index ff2cdb0c..d5bdf166 100644 --- a/mobility/transport_graphs/contracted_path_graph_snapshot.py +++ b/mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py @@ -4,9 +4,9 @@ from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_graphs.congested_path_graph_snapshot import CongestedPathGraphSnapshot +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.graphs.congested.congested_path_graph_snapshot import CongestedPathGraphSnapshot class ContractedPathGraphSnapshot(FileAsset): @@ -30,7 +30,7 @@ def create_and_get_asset(self) -> pathlib.Path: logging.info("Contracting snapshot graph...") congested_graph_path = self.inputs["congested_graph"].get() - script = RScript(resources.files('mobility.transport_graphs').joinpath('contract_path_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.contracted').joinpath('contract_path_graph.R')) script.run(args=[str(congested_graph_path), str(self.cache_path)]) return self.cache_path diff --git a/mobility/transport/graphs/core/__init__.py b/mobility/transport/graphs/core/__init__.py new file mode 100644 index 00000000..c5a037da --- /dev/null +++ b/mobility/transport/graphs/core/__init__.py @@ -0,0 +1,4 @@ +from .graph_gpkg_exporter import GraphGPKGExporter +from .path_graph import PathGraph + +__all__ = ["GraphGPKGExporter", "PathGraph"] diff --git a/mobility/r_utils/cpprouting_io.R b/mobility/transport/graphs/core/cpprouting_io.R similarity index 100% rename from mobility/r_utils/cpprouting_io.R rename to mobility/transport/graphs/core/cpprouting_io.R diff --git a/mobility/r_utils/get_buildings_nearest_vertex_id.R b/mobility/transport/graphs/core/get_buildings_nearest_vertex_id.R similarity index 100% rename from mobility/r_utils/get_buildings_nearest_vertex_id.R rename to mobility/transport/graphs/core/get_buildings_nearest_vertex_id.R diff --git a/mobility/transport_graphs/get_path_pair.R b/mobility/transport/graphs/core/get_path_pair.R similarity index 92% rename from mobility/transport_graphs/get_path_pair.R rename to mobility/transport/graphs/core/get_path_pair.R index 45350fbf..5516c22f 100644 --- a/mobility/transport_graphs/get_path_pair.R +++ b/mobility/transport/graphs/core/get_path_pair.R @@ -26,7 +26,7 @@ from <- args[3] to <- args[4] output_fp <- args[5] -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) from <- fromJSON(from) to <- fromJSON(to) diff --git a/mobility/transport_graphs/graph_gpkg_exporter.py b/mobility/transport/graphs/core/graph_gpkg_exporter.py similarity index 100% rename from mobility/transport_graphs/graph_gpkg_exporter.py rename to mobility/transport/graphs/core/graph_gpkg_exporter.py diff --git a/mobility/transport_graphs/path_graph.py b/mobility/transport/graphs/core/path_graph.py similarity index 61% rename from mobility/transport_graphs/path_graph.py rename to mobility/transport/graphs/core/path_graph.py index 5ad753d3..917ad757 100644 --- a/mobility/transport_graphs/path_graph.py +++ b/mobility/transport/graphs/core/path_graph.py @@ -1,13 +1,13 @@ import pathlib import geopandas as gpd -from mobility.transport_zones import TransportZones -from mobility.transport_graphs.simplified_path_graph import SimplifiedPathGraph -from mobility.transport_graphs.modified_path_graph import ModifiedPathGraph -from mobility.transport_graphs.congested_path_graph import CongestedPathGraph -from mobility.transport_graphs.contracted_path_graph import ContractedPathGraph -from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters -from mobility.transport_graphs.speed_modifier import SpeedModifier +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.graphs.simplified.simplified_path_graph import SimplifiedPathGraph +from mobility.transport.graphs.modified.modified_path_graph import ModifiedPathGraph +from mobility.transport.graphs.congested.congested_path_graph import CongestedPathGraph +from mobility.transport.graphs.contracted.contracted_path_graph import ContractedPathGraph +from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters +from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier from typing import List diff --git a/mobility/r_utils/tz_pairs_to_vertex_pairs.R b/mobility/transport/graphs/core/tz_pairs_to_vertex_pairs.R similarity index 100% rename from mobility/r_utils/tz_pairs_to_vertex_pairs.R rename to mobility/transport/graphs/core/tz_pairs_to_vertex_pairs.R diff --git a/mobility/transport/graphs/modified/__init__.py b/mobility/transport/graphs/modified/__init__.py new file mode 100644 index 00000000..c01b0c2b --- /dev/null +++ b/mobility/transport/graphs/modified/__init__.py @@ -0,0 +1,17 @@ +from .modified_path_graph import ModifiedPathGraph +from .modifiers import ( + BorderCrossingSpeedModifier, + LimitedSpeedZonesModifier, + NewRoadModifier, + RoadLaneNumberModifier, + SpeedModifier, +) + +__all__ = [ + "BorderCrossingSpeedModifier", + "LimitedSpeedZonesModifier", + "ModifiedPathGraph", + "NewRoadModifier", + "RoadLaneNumberModifier", + "SpeedModifier", +] diff --git a/mobility/r_utils/concatenate_graphs.R b/mobility/transport/graphs/modified/concatenate_graphs.R similarity index 100% rename from mobility/r_utils/concatenate_graphs.R rename to mobility/transport/graphs/modified/concatenate_graphs.R diff --git a/mobility/transport_graphs/modified_path_graph.py b/mobility/transport/graphs/modified/modified_path_graph.py similarity index 78% rename from mobility/transport_graphs/modified_path_graph.py rename to mobility/transport/graphs/modified/modified_path_graph.py index 07500de4..3ef5d5dd 100644 --- a/mobility/transport_graphs/modified_path_graph.py +++ b/mobility/transport/graphs/modified/modified_path_graph.py @@ -4,11 +4,11 @@ import json from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_graphs.simplified_path_graph import SimplifiedPathGraph -from mobility.transport_graphs.speed_modifier import SpeedModifier -from mobility.transport_graphs.graph_gpkg_exporter import GraphGPKGExporter +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.graphs.simplified.simplified_path_graph import SimplifiedPathGraph +from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier +from mobility.transport.graphs.core.graph_gpkg_exporter import GraphGPKGExporter from typing import List @@ -56,7 +56,7 @@ def modify_graph( speed_modifiers: List[SpeedModifier] ) -> None: - script = RScript(resources.files('mobility.transport_graphs').joinpath('modify_path_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.modified').joinpath('modify_path_graph.R')) speed_modifiers = [sm.get() for sm in speed_modifiers] diff --git a/mobility/transport/graphs/modified/modifiers/__init__.py b/mobility/transport/graphs/modified/modifiers/__init__.py new file mode 100644 index 00000000..1d977584 --- /dev/null +++ b/mobility/transport/graphs/modified/modifiers/__init__.py @@ -0,0 +1,15 @@ +from .speed_modifier import ( + BorderCrossingSpeedModifier, + LimitedSpeedZonesModifier, + NewRoadModifier, + RoadLaneNumberModifier, + SpeedModifier, +) + +__all__ = [ + "BorderCrossingSpeedModifier", + "LimitedSpeedZonesModifier", + "NewRoadModifier", + "RoadLaneNumberModifier", + "SpeedModifier", +] diff --git a/mobility/transport_graphs/graph_modifiers/apply_border_crossing_speed_modifier.R b/mobility/transport/graphs/modified/modifiers/apply_border_crossing_speed_modifier.R similarity index 100% rename from mobility/transport_graphs/graph_modifiers/apply_border_crossing_speed_modifier.R rename to mobility/transport/graphs/modified/modifiers/apply_border_crossing_speed_modifier.R diff --git a/mobility/transport_graphs/graph_modifiers/apply_limited_speed_zones_modifier.R b/mobility/transport/graphs/modified/modifiers/apply_limited_speed_zones_modifier.R similarity index 100% rename from mobility/transport_graphs/graph_modifiers/apply_limited_speed_zones_modifier.R rename to mobility/transport/graphs/modified/modifiers/apply_limited_speed_zones_modifier.R diff --git a/mobility/transport_graphs/graph_modifiers/apply_new_road_modifier.R b/mobility/transport/graphs/modified/modifiers/apply_new_road_modifier.R similarity index 100% rename from mobility/transport_graphs/graph_modifiers/apply_new_road_modifier.R rename to mobility/transport/graphs/modified/modifiers/apply_new_road_modifier.R diff --git a/mobility/transport_graphs/graph_modifiers/apply_road_lane_number_modifier.R b/mobility/transport/graphs/modified/modifiers/apply_road_lane_number_modifier.R similarity index 100% rename from mobility/transport_graphs/graph_modifiers/apply_road_lane_number_modifier.R rename to mobility/transport/graphs/modified/modifiers/apply_road_lane_number_modifier.R diff --git a/mobility/transport_graphs/speed_modifier.py b/mobility/transport/graphs/modified/modifiers/speed_modifier.py similarity index 96% rename from mobility/transport_graphs/speed_modifier.py rename to mobility/transport/graphs/modified/modifiers/speed_modifier.py index c70dcb9b..7e1dbf60 100644 --- a/mobility/transport_graphs/speed_modifier.py +++ b/mobility/transport/graphs/modified/modifiers/speed_modifier.py @@ -2,9 +2,9 @@ import json import geopandas as gpd -from mobility.in_memory_asset import InMemoryAsset -from mobility.transport_zones import TransportZones -from mobility.parsers.osm import GeofabrikRegions, GeofabrikExtract, OSMCountryBorder +from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.spatial.transport_zones import TransportZones +from mobility.spatial.osm import GeofabrikRegions, GeofabrikExtract, OSMCountryBorder class SpeedModifier(InMemoryAsset): def __init__(self, inputs): @@ -190,4 +190,4 @@ def get(self): "beta": self.beta, "max_speed": self.max_speed, "zones_geometry_file_path": self.zones_geometry_file_path - } \ No newline at end of file + } diff --git a/mobility/transport_graphs/modify_path_graph.R b/mobility/transport/graphs/modified/modify_path_graph.R similarity index 79% rename from mobility/transport_graphs/modify_path_graph.R rename to mobility/transport/graphs/modified/modify_path_graph.R index 3129d971..dd21c2b3 100644 --- a/mobility/transport_graphs/modify_path_graph.R +++ b/mobility/transport/graphs/modified/modify_path_graph.R @@ -23,11 +23,11 @@ cppr_graph_fp <- args[2] speed_modifiers <- args[3] output_fp <- args[4] -source(file.path(package_fp, "r_utils", "cpprouting_io.R")) -source(file.path(package_fp, "transport_graphs", "graph_modifiers", "apply_limited_speed_zones_modifier.R")) -source(file.path(package_fp, "transport_graphs", "graph_modifiers", "apply_border_crossing_speed_modifier.R")) -source(file.path(package_fp, "transport_graphs", "graph_modifiers", "apply_road_lane_number_modifier.R")) -source(file.path(package_fp, "transport_graphs", "graph_modifiers", "apply_new_road_modifier.R")) +source(file.path(package_fp, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_limited_speed_zones_modifier.R")) +source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_border_crossing_speed_modifier.R")) +source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_road_lane_number_modifier.R")) +source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_new_road_modifier.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/graphs/simplified/__init__.py b/mobility/transport/graphs/simplified/__init__.py new file mode 100644 index 00000000..87905681 --- /dev/null +++ b/mobility/transport/graphs/simplified/__init__.py @@ -0,0 +1,3 @@ +from .simplified_path_graph import SimplifiedPathGraph + +__all__ = ["SimplifiedPathGraph"] diff --git a/mobility/r_utils/create_graph_from_travel_costs.R b/mobility/transport/graphs/simplified/create_graph_from_travel_costs.R similarity index 100% rename from mobility/r_utils/create_graph_from_travel_costs.R rename to mobility/transport/graphs/simplified/create_graph_from_travel_costs.R diff --git a/mobility/transport_graphs/prepare_path_graph.R b/mobility/transport/graphs/simplified/prepare_path_graph.R similarity index 99% rename from mobility/transport_graphs/prepare_path_graph.R rename to mobility/transport/graphs/simplified/prepare_path_graph.R index f88d097f..d29c4e51 100644 --- a/mobility/transport_graphs/prepare_path_graph.R +++ b/mobility/transport/graphs/simplified/prepare_path_graph.R @@ -43,7 +43,7 @@ osm_capacity_parameters <- cbind( rbindlist(osm_capacity_parameters) ) -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport_graphs/simplified_path_graph.py b/mobility/transport/graphs/simplified/simplified_path_graph.py similarity index 84% rename from mobility/transport_graphs/simplified_path_graph.py rename to mobility/transport/graphs/simplified/simplified_path_graph.py index 74a511bc..1ffd5294 100644 --- a/mobility/transport_graphs/simplified_path_graph.py +++ b/mobility/transport/graphs/simplified/simplified_path_graph.py @@ -5,12 +5,12 @@ import geopandas as gpd from importlib import resources -from mobility.parsers.osm import OSMData -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters -from mobility.transport_zones import TransportZones -from mobility.transport_graphs.graph_gpkg_exporter import GraphGPKGExporter +from mobility.spatial.osm import OSMData +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.graphs.core.graph_gpkg_exporter import GraphGPKGExporter class SimplifiedPathGraph(FileAsset): @@ -83,7 +83,7 @@ def prepare_path_graph( logging.info("Creating a routable graph, this might take a while...") - script = RScript(resources.files('mobility.transport_graphs').joinpath('prepare_path_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.simplified').joinpath('prepare_path_graph.R')) script.run( args=[ diff --git a/mobility/transport/modes/__init__.py b/mobility/transport/modes/__init__.py new file mode 100644 index 00000000..7bcdf0a4 --- /dev/null +++ b/mobility/transport/modes/__init__.py @@ -0,0 +1,15 @@ +from .core import ( + IntermodalTransfer, + ModeRegistry, + OSMCapacityParameters, + TransportMode, + TransportModeParameters, +) + +__all__ = [ + "IntermodalTransfer", + "ModeRegistry", + "OSMCapacityParameters", + "TransportMode", + "TransportModeParameters", +] diff --git a/mobility/transport_modes/bicycle/bicycle_mode.py b/mobility/transport/modes/bicycle.py similarity index 65% rename from mobility/transport_modes/bicycle/bicycle_mode.py rename to mobility/transport/modes/bicycle.py index e08e697e..39147700 100644 --- a/mobility/transport_modes/bicycle/bicycle_mode.py +++ b/mobility/transport/modes/bicycle.py @@ -1,16 +1,16 @@ -from mobility.transport_zones import TransportZones -from mobility.transport_costs.path_travel_costs import PathTravelCosts -from mobility.transport_modes.transport_mode import TransportMode, TransportModeParameters -from mobility.path_routing_parameters import PathRoutingParameters -from mobility.generalized_cost_parameters import GeneralizedCostParameters -from mobility.cost_of_time_parameters import CostOfTimeParameters -from mobility.transport_costs.path_generalized_cost import PathGeneralizedCost -from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters -from mobility.transport_graphs.speed_modifier import SpeedModifier +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.costs.path.path_travel_costs import PathTravelCosts +from mobility.transport.modes.core.transport_mode import TransportMode, TransportModeParameters +from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters +from mobility.transport.costs.parameters.generalized_cost_parameters import GeneralizedCostParameters +from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters +from mobility.transport.costs.path.path_generalized_cost import PathGeneralizedCost +from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters +from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier from typing import List, Literal from pydantic import Field -class BicycleMode(TransportMode): +class Bicycle(TransportMode): def __init__( self, @@ -21,7 +21,7 @@ def __init__( speed_modifiers: List[SpeedModifier] = [], survey_ids: List[str] | None = None, ghg_intensity: float | None = None, - parameters: "BicycleModeParameters | None" = None, + parameters: "BicycleParameters | None" = None, ): mode_name = "bicycle" @@ -52,11 +52,11 @@ def __init__( vehicle="bicycle", survey_ids=survey_ids, parameters=parameters, - parameters_cls=BicycleModeParameters, + parameters_cls=BicycleParameters, ) -class BicycleModeParameters(TransportModeParameters): +class BicycleParameters(TransportModeParameters): """Parameters for bicycle mode.""" name: Literal["bicycle"] = "bicycle" @@ -66,3 +66,6 @@ class BicycleModeParameters(TransportModeParameters): multimodal: bool = False return_mode: None = None survey_ids: list[str] = Field(default_factory=lambda: ["2.20"]) + + +BicycleMode = Bicycle diff --git a/mobility/transport_modes/car/car_mode.py b/mobility/transport/modes/car.py similarity index 77% rename from mobility/transport_modes/car/car_mode.py rename to mobility/transport/modes/car.py index f9fe581f..4c2aa6c6 100644 --- a/mobility/transport_modes/car/car_mode.py +++ b/mobility/transport/modes/car.py @@ -1,21 +1,21 @@ from typing import List, Literal -from mobility.transport_zones import TransportZones -from mobility.transport_costs.path_travel_costs import PathTravelCosts -from mobility.transport_modes.transport_mode import TransportMode, TransportModeParameters -from mobility.transport_modes.defaults import ( +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.costs.path.path_travel_costs import PathTravelCosts +from mobility.transport.modes.core.transport_mode import TransportMode, TransportModeParameters +from mobility.transport.modes.core.defaults import ( DEFAULT_LONG_RANGE_MOTORIZED_MAX_BEELINE_DISTANCE_KM, ) -from mobility.path_routing_parameters import PathRoutingParameters -from mobility.generalized_cost_parameters import GeneralizedCostParameters -from mobility.cost_of_time_parameters import CostOfTimeParameters -from mobility.transport_costs.path_generalized_cost import PathGeneralizedCost -from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters -from mobility.transport_graphs.speed_modifier import SpeedModifier +from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters +from mobility.transport.costs.parameters.generalized_cost_parameters import GeneralizedCostParameters +from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters +from mobility.transport.costs.path.path_generalized_cost import PathGeneralizedCost +from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters +from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier from pydantic import Field import polars as pl -class CarMode(TransportMode): +class Car(TransportMode): """ A class for car transportation. Creates travel costs for the mode, using the provided parameters or default ones. @@ -35,7 +35,7 @@ def __init__( speed_modifiers: List[SpeedModifier] = [], survey_ids: List[str] | None = None, ghg_intensity: float | None = None, - parameters: "CarModeParameters | None" = None, + parameters: "CarParameters | None" = None, ): mode_name = "car" @@ -90,7 +90,7 @@ def __init__( vehicle="car", survey_ids=survey_ids, parameters=parameters, - parameters_cls=CarModeParameters, + parameters_cls=CarParameters, ) def build_congestion_flows(self, od_flows_by_mode): @@ -107,7 +107,7 @@ def build_congestion_flows(self, od_flows_by_mode): ) -class CarModeParameters(TransportModeParameters): +class CarParameters(TransportModeParameters): """Parameters for car mode.""" name: Literal["car"] = "car" @@ -119,3 +119,6 @@ class CarModeParameters(TransportModeParameters): survey_ids: list[str] = Field( default_factory=lambda: ["3.30", "3.31", "3.32", "3.33", "3.39"] ) + + +CarMode = Car diff --git a/mobility/transport_modes/carpool/__init__.py b/mobility/transport/modes/carpool/__init__.py similarity index 61% rename from mobility/transport_modes/carpool/__init__.py rename to mobility/transport/modes/carpool/__init__.py index ddb2b954..444349d2 100644 --- a/mobility/transport_modes/carpool/__init__.py +++ b/mobility/transport/modes/carpool/__init__.py @@ -1,2 +1,2 @@ from .detailed import DetailedCarpoolRoutingParameters, DetailedCarpoolGeneralizedCostParameters -from .carpool_mode import CarpoolMode \ No newline at end of file +from .carpool import Carpool, CarpoolMode, CarpoolParameters diff --git a/mobility/transport_modes/carpool/carpool_mode.py b/mobility/transport/modes/carpool/carpool.py similarity index 81% rename from mobility/transport_modes/carpool/carpool_mode.py rename to mobility/transport/modes/carpool/carpool.py index a647eb5c..d429022f 100644 --- a/mobility/transport_modes/carpool/carpool_mode.py +++ b/mobility/transport/modes/carpool/carpool.py @@ -1,24 +1,24 @@ from typing import List, Literal -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_modes.transport_mode import TransportModeParameters -from mobility.transport_modes.car import CarMode -from mobility.transport_modes.carpool.detailed import DetailedCarpoolRoutingParameters, DetailedCarpoolGeneralizedCostParameters, DetailedCarpoolTravelCosts, DetailedCarpoolGeneralizedCost -from mobility.transport_modes.modal_transfer import IntermodalTransfer +from mobility.transport.modes.core.transport_mode import TransportMode +from mobility.transport.modes.core.transport_mode import TransportModeParameters +from mobility.transport.modes.car import Car +from mobility.transport.modes.carpool.detailed import DetailedCarpoolRoutingParameters, DetailedCarpoolGeneralizedCostParameters, DetailedCarpoolTravelCosts, DetailedCarpoolGeneralizedCost +from mobility.transport.modes.core.modal_transfer import IntermodalTransfer from pydantic import Field import polars as pl -class CarpoolMode(TransportMode): +class Carpool(TransportMode): def __init__( self, - car_mode: CarMode, + car_mode: Car, routing_parameters: DetailedCarpoolRoutingParameters = None, generalized_cost_parameters: DetailedCarpoolGeneralizedCostParameters = None, intermodal_transfer: IntermodalTransfer = None, survey_ids: List[str] | None = None, ghg_intensity: float | None = None, - parameters: "CarpoolModeParameters | None" = None, + parameters: "CarpoolParameters | None" = None, ): routing_parameters = routing_parameters or DetailedCarpoolRoutingParameters() @@ -44,7 +44,7 @@ def __init__( return_mode="carpool_return", survey_ids=survey_ids, parameters=parameters, - parameters_cls=CarpoolModeParameters, + parameters_cls=CarpoolParameters, ) def build_congestion_flows(self, od_flows_by_mode): @@ -61,7 +61,7 @@ def build_congestion_flows(self, od_flows_by_mode): .select(["from", "to", "vehicle_volume"]) ) -class CarpoolModeParameters(TransportModeParameters): +class CarpoolParameters(TransportModeParameters): """Parameters for carpool mode.""" name: Literal["carpool"] = "carpool" @@ -70,3 +70,6 @@ class CarpoolModeParameters(TransportModeParameters): multimodal: bool = True return_mode: Literal["carpool_return"] = "carpool_return" survey_ids: list[str] = Field(default_factory=list) + + +CarpoolMode = Carpool diff --git a/mobility/transport_modes/carpool/detailed/__init__.py b/mobility/transport/modes/carpool/detailed/__init__.py similarity index 100% rename from mobility/transport_modes/carpool/detailed/__init__.py rename to mobility/transport/modes/carpool/detailed/__init__.py diff --git a/mobility/transport_modes/carpool/detailed/compute_carpool_travel_costs.R b/mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R similarity index 89% rename from mobility/transport_modes/carpool/detailed/compute_carpool_travel_costs.R rename to mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R index be22c63b..3b7d3fca 100644 --- a/mobility/transport_modes/carpool/detailed/compute_carpool_travel_costs.R +++ b/mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R @@ -42,11 +42,11 @@ buildings_sample_fp <- file.path( modal_shift <- fromJSON(modal_shift) -source(file.path(package_path, "r_utils", "duplicate_cpprouting_graph.R")) -source(file.path(package_path, "r_utils", "initialize_travel_costs.R")) -source(file.path(package_path, "r_utils", "concatenate_graphs.R")) -source(file.path(package_path, "r_utils", "create_graph_from_travel_costs.R")) -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "congested", "duplicate_cpprouting_graph.R")) +source(file.path(package_path, "transport", "graphs", "congested", "initialize_travel_costs.R")) +source(file.path(package_path, "transport", "graphs", "modified", "concatenate_graphs.R")) +source(file.path(package_path, "transport", "graphs", "simplified", "create_graph_from_travel_costs.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) @@ -166,4 +166,4 @@ travel_costs <- travel_costs[, list( ] -write_parquet(travel_costs, output_file_path) \ No newline at end of file +write_parquet(travel_costs, output_file_path) diff --git a/mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py similarity index 93% rename from mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py rename to mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py index 882a9c75..00e79507 100644 --- a/mobility/transport_modes/carpool/detailed/detailed_carpool_generalized_cost.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py @@ -1,11 +1,15 @@ +from __future__ import annotations + import pandas as pd import numpy as np -from typing import Annotated +from typing import TYPE_CHECKING, Annotated from pydantic import BaseModel, ConfigDict, Field -from mobility.choice_models.congestion_state import CongestionState -from mobility.in_memory_asset import InMemoryAsset -from mobility.cost_of_time_parameters import CostOfTimeParameters +from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters + +if TYPE_CHECKING: + from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class DetailedCarpoolGeneralizedCost(InMemoryAsset): diff --git a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py similarity index 88% rename from mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py rename to mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py index 9e7844d4..36b179bb 100644 --- a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py @@ -1,23 +1,27 @@ +from __future__ import annotations + import pathlib import os import logging import json import pandas as pd import shutil -from typing import Annotated +from typing import TYPE_CHECKING, Annotated from importlib import resources from pydantic import BaseModel, ConfigDict, Field -from mobility.choice_models.congestion_state import CongestionState -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_modes.modal_transfer import IntermodalTransfer -from mobility.transport_costs.path_travel_costs import PathTravelCosts -from mobility.transport_modes.carpool.detailed.detailed_carpool_travel_costs_snapshot import ( +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.modes.core.modal_transfer import IntermodalTransfer +from mobility.transport.costs.path.path_travel_costs import PathTravelCosts +from mobility.transport.modes.carpool.detailed.detailed_carpool_travel_costs_snapshot import ( DetailedCarpoolTravelCostsSnapshot, ) +if TYPE_CHECKING: + from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState + class DetailedCarpoolTravelCosts(FileAsset): def __init__( @@ -101,7 +105,7 @@ def compute_travel_costs( output_path: pathlib.Path ) -> pd.DataFrame: - script = RScript(resources.files('mobility.transport_modes.carpool.detailed').joinpath('compute_carpool_travel_costs.R')) + script = RScriptRunner(resources.files('mobility.transport.modes.carpool.detailed').joinpath('compute_carpool_travel_costs.R')) if congestion is True: graph = car_travel_costs.get_congested_graph_path() diff --git a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py similarity index 87% rename from mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py rename to mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py index 0cb5b67e..ab301238 100644 --- a/mobility/transport_modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py @@ -6,8 +6,8 @@ from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner class DetailedCarpoolTravelCostsSnapshot(FileAsset): @@ -39,8 +39,8 @@ def create_and_get_asset(self) -> pd.DataFrame: car_travel_costs = self.inputs["car_travel_costs"] graph = car_travel_costs.get_congested_graph_path(self.inputs["road_flow_asset"]) - script = RScript( - resources.files("mobility.transport_modes.carpool.detailed").joinpath( + script = RScriptRunner( + resources.files("mobility.transport.modes.carpool.detailed").joinpath( "compute_carpool_travel_costs.R" ) ) diff --git a/mobility/transport_modes/carpool/detailed/prepare_carpool_graph.R b/mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R similarity index 95% rename from mobility/transport_modes/carpool/detailed/prepare_carpool_graph.R rename to mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R index 688a2208..fae18212 100644 --- a/mobility/transport_modes/carpool/detailed/prepare_carpool_graph.R +++ b/mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R @@ -15,7 +15,7 @@ tz_file_path <- 'D:\\data\\mobility\\projects\\haut-doubs\\94c4efec9c89bdd5fae5a graph_fp <- "D:\\data\\mobility\\projects\\haut-doubs\\path_graph_car\\contracted\\f92c93e808a0af018f4858ddcc6bb1b5-done" modal_shift <- '{"max_travel_time": 0.33, "average_speed": 50.0, "shift_time": 10.0, "shortcuts_shift_time": null, "shortcuts_locations": null}' -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) transport_zones <- st_read(tz_file_path) diff --git a/mobility/transport_modes/carpool/simple/__init__.py b/mobility/transport/modes/carpool/simple/__init__.py similarity index 100% rename from mobility/transport_modes/carpool/simple/__init__.py rename to mobility/transport/modes/carpool/simple/__init__.py diff --git a/mobility/transport_modes/carpool/simple/simple_carpool_parameters.py b/mobility/transport/modes/carpool/simple/simple_carpool_parameters.py similarity index 100% rename from mobility/transport_modes/carpool/simple/simple_carpool_parameters.py rename to mobility/transport/modes/carpool/simple/simple_carpool_parameters.py diff --git a/mobility/transport_modes/carpool/simple/simple_carpool_travel_costs.py b/mobility/transport/modes/carpool/simple/simple_carpool_travel_costs.py similarity index 96% rename from mobility/transport_modes/carpool/simple/simple_carpool_travel_costs.py rename to mobility/transport/modes/carpool/simple/simple_carpool_travel_costs.py index f4ee7952..9d499214 100644 --- a/mobility/transport_modes/carpool/simple/simple_carpool_travel_costs.py +++ b/mobility/transport/modes/carpool/simple/simple_carpool_travel_costs.py @@ -4,9 +4,9 @@ import pandas as pd import numpy as np -from mobility.asset import Asset -from mobility.path_travel_costs import PathTravelCosts -from mobility.transport_modes.carpool.simple.simple_carpool_parameters import SimpleCarpoolParameters +from mobility.runtime.assets.asset import Asset +from mobility.transport.costs.path.path_travel_costs import PathTravelCosts +from mobility.transport.modes.carpool.simple.simple_carpool_parameters import SimpleCarpoolParameters class SimpleCarpoolTravelCosts(Asset): """ @@ -153,4 +153,4 @@ def compute_travel_costs(self) -> pd.DataFrame: costs["cost"] += params.cost_constant costs["cost"] -= revenues_distance + revenues_passenger - return costs \ No newline at end of file + return costs diff --git a/mobility/transport/modes/choice/__init__.py b/mobility/transport/modes/choice/__init__.py new file mode 100644 index 00000000..7739b0bd --- /dev/null +++ b/mobility/transport/modes/choice/__init__.py @@ -0,0 +1,11 @@ +from .compute_subtour_mode_probabilities import ( + compute_subtour_mode_probabilities_parallel, + compute_subtour_mode_probabilities_serial, + modes_list_to_dict, +) + +__all__ = [ + "compute_subtour_mode_probabilities_parallel", + "compute_subtour_mode_probabilities_serial", + "modes_list_to_dict", +] diff --git a/mobility/transport_modes/compute_subtour_mode_probabilities.py b/mobility/transport/modes/choice/compute_subtour_mode_probabilities.py similarity index 96% rename from mobility/transport_modes/compute_subtour_mode_probabilities.py rename to mobility/transport/modes/choice/compute_subtour_mode_probabilities.py index b8a17e76..99350b77 100644 --- a/mobility/transport_modes/compute_subtour_mode_probabilities.py +++ b/mobility/transport/modes/choice/compute_subtour_mode_probabilities.py @@ -3,7 +3,7 @@ import polars as pl from concurrent.futures import ProcessPoolExecutor -from mobility.transport_modes.compute_subtour_mode_probs_parallel_utilities import process_batch_parallel, process_batch_serial, worker_init, chunked +from mobility.transport.modes.choice.compute_subtour_mode_probs_parallel_utilities import process_batch_parallel, process_batch_serial, worker_init, chunked def compute_subtour_mode_probabilities_parallel( k_sequences, diff --git a/mobility/transport_modes/compute_subtour_mode_probs_parallel_utilities.py b/mobility/transport/modes/choice/compute_subtour_mode_probs_parallel_utilities.py similarity index 100% rename from mobility/transport_modes/compute_subtour_mode_probs_parallel_utilities.py rename to mobility/transport/modes/choice/compute_subtour_mode_probs_parallel_utilities.py diff --git a/mobility/transport/modes/core/__init__.py b/mobility/transport/modes/core/__init__.py new file mode 100644 index 00000000..34c572e1 --- /dev/null +++ b/mobility/transport/modes/core/__init__.py @@ -0,0 +1,14 @@ +from .defaults import DEFAULT_LONG_RANGE_MOTORIZED_MAX_BEELINE_DISTANCE_KM +from .modal_transfer import IntermodalTransfer +from .mode_registry import ModeRegistry +from .osm_capacity_parameters import OSMCapacityParameters +from .transport_mode import TransportMode, TransportModeParameters + +__all__ = [ + "DEFAULT_LONG_RANGE_MOTORIZED_MAX_BEELINE_DISTANCE_KM", + "IntermodalTransfer", + "ModeRegistry", + "OSMCapacityParameters", + "TransportMode", + "TransportModeParameters", +] diff --git a/mobility/transport_modes/defaults.py b/mobility/transport/modes/core/defaults.py similarity index 100% rename from mobility/transport_modes/defaults.py rename to mobility/transport/modes/core/defaults.py diff --git a/mobility/transport_modes/modal_transfer.py b/mobility/transport/modes/core/modal_transfer.py similarity index 100% rename from mobility/transport_modes/modal_transfer.py rename to mobility/transport/modes/core/modal_transfer.py diff --git a/mobility/transport_modes/mode_registry.py b/mobility/transport/modes/core/mode_registry.py similarity index 96% rename from mobility/transport_modes/mode_registry.py rename to mobility/transport/modes/core/mode_registry.py index 108749f5..b567807c 100644 --- a/mobility/transport_modes/mode_registry.py +++ b/mobility/transport/modes/core/mode_registry.py @@ -1,6 +1,6 @@ from typing import List -from mobility.transport_modes.transport_mode import TransportMode +from mobility.transport.modes.core.transport_mode import TransportMode class ModeRegistry: diff --git a/mobility/transport_modes/osm_capacity_parameters.py b/mobility/transport/modes/core/osm_capacity_parameters.py similarity index 100% rename from mobility/transport_modes/osm_capacity_parameters.py rename to mobility/transport/modes/core/osm_capacity_parameters.py diff --git a/mobility/transport_modes/transport_mode.py b/mobility/transport/modes/core/transport_mode.py similarity index 98% rename from mobility/transport_modes/transport_mode.py rename to mobility/transport/modes/core/transport_mode.py index a7debfd0..9b530dd8 100644 --- a/mobility/transport_modes/transport_mode.py +++ b/mobility/transport/modes/core/transport_mode.py @@ -1,6 +1,6 @@ from typing import Annotated, List -from mobility.in_memory_asset import InMemoryAsset +from mobility.runtime.assets.in_memory_asset import InMemoryAsset from pydantic import BaseModel, ConfigDict, Field class TransportMode(InMemoryAsset): diff --git a/mobility/transport/modes/public_transport/__init__.py b/mobility/transport/modes/public_transport/__init__.py new file mode 100644 index 00000000..67945707 --- /dev/null +++ b/mobility/transport/modes/public_transport/__init__.py @@ -0,0 +1,6 @@ +from .public_transport_graph import PublicTransportRoutingParameters +from .public_transport import ( + PublicTransport, + PublicTransportMode, + PublicTransportParameters, +) diff --git a/mobility/transport_modes/public_transport/compute_intermodal_public_transport_travel_costs.R b/mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R similarity index 99% rename from mobility/transport_modes/public_transport/compute_intermodal_public_transport_travel_costs.R rename to mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R index bdf2a10d..75597d3f 100644 --- a/mobility/transport_modes/public_transport/compute_intermodal_public_transport_travel_costs.R +++ b/mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R @@ -42,7 +42,7 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport_modes/public_transport/gtfs/__init__.py b/mobility/transport/modes/public_transport/gtfs/__init__.py similarity index 100% rename from mobility/transport_modes/public_transport/gtfs/__init__.py rename to mobility/transport/modes/public_transport/gtfs/__init__.py diff --git a/mobility/transport_modes/public_transport/gtfs/gtfs_data.py b/mobility/transport/modes/public_transport/gtfs/gtfs_data.py similarity index 95% rename from mobility/transport_modes/public_transport/gtfs/gtfs_data.py rename to mobility/transport/modes/public_transport/gtfs/gtfs_data.py index 93f9f4c4..df226106 100644 --- a/mobility/transport_modes/public_transport/gtfs/gtfs_data.py +++ b/mobility/transport/modes/public_transport/gtfs/gtfs_data.py @@ -4,8 +4,8 @@ import zipfile import hashlib -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file, clean_path +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file, clean_path class GTFSData(FileAsset): """ diff --git a/mobility/transport_modes/public_transport/gtfs/gtfs_router.py b/mobility/transport/modes/public_transport/gtfs/gtfs_router.py similarity index 96% rename from mobility/transport_modes/public_transport/gtfs/gtfs_router.py rename to mobility/transport/modes/public_transport/gtfs/gtfs_router.py index 61fc2d59..796800ab 100644 --- a/mobility/transport_modes/public_transport/gtfs/gtfs_router.py +++ b/mobility/transport/modes/public_transport/gtfs/gtfs_router.py @@ -6,12 +6,12 @@ import pandas as pd from importlib import resources -from mobility.file_asset import FileAsset -from mobility.transport_zones import TransportZones -from mobility.r_utils.r_script import RScript +from mobility.runtime.assets.file_asset import FileAsset +from mobility.spatial.transport_zones import TransportZones +from mobility.runtime.r_integration.r_script_runner import RScriptRunner -from mobility.parsers.download_file import download_file -from mobility.parsers.gtfs_stops import GTFSStops +from mobility.runtime.io.download_file import download_file +from mobility.transport.modes.public_transport.gtfs.gtfs_stops import GTFSStops from .gtfs_data import GTFSData @@ -109,13 +109,13 @@ def prepare_gtfs_router(self, transport_zones, gtfs_files): gtfs_files = ",".join(gtfs_files) - script = RScript(resources.files('mobility.transport_modes.public_transport.gtfs').joinpath('prepare_gtfs_router.R')) + script = RScriptRunner(resources.files('mobility.transport.modes.public_transport.gtfs').joinpath('prepare_gtfs_router.R')) script.run( args=[ str(transport_zones.cache_path), gtfs_files, - str(resources.files('mobility.data').joinpath('gtfs/gtfs_route_types.csv')), + str(resources.files('mobility.runtime.resources').joinpath('gtfs/gtfs_route_types.csv')), str(self.cache_path) ] ) diff --git a/mobility/parsers/gtfs_stops.py b/mobility/transport/modes/public_transport/gtfs/gtfs_stops.py similarity index 96% rename from mobility/parsers/gtfs_stops.py rename to mobility/transport/modes/public_transport/gtfs/gtfs_stops.py index 0fb70c1c..c4b37166 100644 --- a/mobility/parsers/gtfs_stops.py +++ b/mobility/transport/modes/public_transport/gtfs/gtfs_stops.py @@ -5,8 +5,8 @@ import geopandas as gpd import zipfile -from mobility.file_asset import FileAsset -from mobility.parsers.download_file import download_file +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.io.download_file import download_file class GTFSStops(FileAsset): """ diff --git a/mobility/transport_modes/public_transport/gtfs/prepare_gtfs_router.R b/mobility/transport/modes/public_transport/gtfs/prepare_gtfs_router.R similarity index 99% rename from mobility/transport_modes/public_transport/gtfs/prepare_gtfs_router.R rename to mobility/transport/modes/public_transport/gtfs/prepare_gtfs_router.R index 12926145..6f082aa0 100644 --- a/mobility/transport_modes/public_transport/gtfs/prepare_gtfs_router.R +++ b/mobility/transport/modes/public_transport/gtfs/prepare_gtfs_router.R @@ -12,7 +12,7 @@ args <- commandArgs(trailingOnly = TRUE) # 'D:\\dev\\mobility_oss\\mobility', # 'D:\\data\\mobility\\projects\\grand-geneve\\9f060eb2ec610d2a3bdb3bd731e739c6-transport_zones.gpkg', # 'D:\\mobility-data\\gtfs\\80d9147b5fa8f2a62c1f9492c239b0b7-a9867a67c4aca09a3214ee7de867fbd3_ucexportdownloadid1VXd01yQl2Mb67C9bkrx0P8sqNIL532_o.zip,D:\\mobility-data\\gtfs\\8dba4ccc087960568442cfb2a2b728c9-4a590cb87669fe2bc39328652ef1d2e9_gtfs_generic_eu.zip,D:\\mobility-data\\gtfs\\ad3958a96dacccb44825549e21e84979-7c570637abe59c4c966bdd7323db2746_naq-aggregated-gtfs.zip,D:\\mobility-data\\gtfs\\dccabe1db6bbe10b7457fa5a43069869-ebfa654bbde377deaf34c670d23e9cf6_lioapiKey2b160d626f783808095373766f18714901325e45typegtfs_lio.zip,D:\\mobility-data\\gtfs\\a1e0570cf593e64a24a17e0264183d21-7960742560564aec19bdfc92988923d9_gtfs_global.zip,D:\\mobility-data\\gtfs\\9e748ff3e0f6f3d11c7e7cf702348174-7eb92f86cd2571d4b6659470f41c66ce_KORRIGOBRET.gtfs.zip,D:\\mobility-data\\gtfs\\7dc7fdbf6d0b27516ab576a904ddc290-a2065509a9ecd722ae9bcd89c6a33bf8_pt-th-offer-atoumod-gtfs-20250912-914-opendata.zip,D:\\mobility-data\\gtfs\\45f4b3956a0b9c91f3b042a2d1a4ace4-d059c488bd33c0e0d9ed9d0363d06aa5_gtfs-20240903-154223.zip', -# 'D:\\dev\\mobility_oss\\mobility\\data\\gtfs\\gtfs_route_types.csv', +# 'D:\\dev\\mobility_oss\\mobility\\resources\\gtfs\\gtfs_route_types.csv', # 'D:\\test-09\\0a8bd50eb6f9cc645144a17944c656b6-gtfs_router.rds' # ) # diff --git a/mobility/transport_modes/public_transport/intermodal_transport_graph.py b/mobility/transport/modes/public_transport/intermodal_transport_graph.py similarity index 90% rename from mobility/transport_modes/public_transport/intermodal_transport_graph.py rename to mobility/transport/modes/public_transport/intermodal_transport_graph.py index 22a1f4f4..2adfef67 100644 --- a/mobility/transport_modes/public_transport/intermodal_transport_graph.py +++ b/mobility/transport/modes/public_transport/intermodal_transport_graph.py @@ -6,14 +6,14 @@ from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_zones import TransportZones -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_modes.modal_transfer import IntermodalTransfer -from mobility.transport_modes.public_transport.public_transport_graph import PublicTransportGraph, PublicTransportRoutingParameters -from mobility.transport_graphs.path_graph import ContractedPathGraph -from mobility.parsers.osm import OSMData +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.modes.core.transport_mode import TransportMode +from mobility.transport.modes.core.modal_transfer import IntermodalTransfer +from mobility.transport.modes.public_transport.public_transport_graph import PublicTransportGraph, PublicTransportRoutingParameters +from mobility.transport.graphs.core.path_graph import ContractedPathGraph +from mobility.spatial.osm import OSMData class IntermodalTransportGraph(FileAsset): """ @@ -130,7 +130,7 @@ def prepare_intermodal_graph( logging.info("Computing public transport travel costs...") - script = RScript(resources.files('mobility.transport_modes.public_transport').joinpath('prepare_intermodal_public_transport_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.modes.public_transport').joinpath('prepare_intermodal_public_transport_graph.R')) script.run( args=[ diff --git a/mobility/transport_modes/public_transport/prepare_intermodal_public_transport_graph.R b/mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R similarity index 97% rename from mobility/transport_modes/public_transport/prepare_intermodal_public_transport_graph.R rename to mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R index 09252e40..f83e483a 100644 --- a/mobility/transport_modes/public_transport/prepare_intermodal_public_transport_graph.R +++ b/mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R @@ -48,11 +48,11 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "r_utils", "duplicate_cpprouting_graph.R")) -source(file.path(package_path, "r_utils", "initialize_travel_costs.R")) -source(file.path(package_path, "r_utils", "concatenate_graphs.R")) -source(file.path(package_path, "r_utils", "create_graph_from_travel_costs.R")) -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "congested", "duplicate_cpprouting_graph.R")) +source(file.path(package_path, "transport", "graphs", "congested", "initialize_travel_costs.R")) +source(file.path(package_path, "transport", "graphs", "modified", "concatenate_graphs.R")) +source(file.path(package_path, "transport", "graphs", "simplified", "create_graph_from_travel_costs.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport_modes/public_transport/prepare_public_transport_graph.R b/mobility/transport/modes/public_transport/prepare_public_transport_graph.R similarity index 99% rename from mobility/transport_modes/public_transport/prepare_public_transport_graph.R rename to mobility/transport/modes/public_transport/prepare_public_transport_graph.R index b6b33c37..0abc0e05 100644 --- a/mobility/transport_modes/public_transport/prepare_public_transport_graph.R +++ b/mobility/transport/modes/public_transport/prepare_public_transport_graph.R @@ -21,7 +21,7 @@ gtfs_file_path <-args[3] parameters <- args[4] output_file_path <- args[5] -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport_modes/public_transport/public_transport_mode.py b/mobility/transport/modes/public_transport/public_transport.py similarity index 84% rename from mobility/transport_modes/public_transport/public_transport_mode.py rename to mobility/transport/modes/public_transport/public_transport.py index d574b63b..f56e4dd7 100644 --- a/mobility/transport_modes/public_transport/public_transport_mode.py +++ b/mobility/transport/modes/public_transport/public_transport.py @@ -2,18 +2,18 @@ from typing import List -from mobility.transport_zones import TransportZones -from mobility.transport_modes.transport_mode import TransportMode, TransportModeParameters -from mobility.transport_modes.mode_registry import ModeRegistry -from mobility.transport_modes.public_transport.public_transport_graph import PublicTransportRoutingParameters -from mobility.transport_modes.public_transport.public_transport_travel_costs import PublicTransportTravelCosts -from mobility.transport_modes.public_transport.public_transport_generalized_cost import PublicTransportGeneralizedCost -from mobility.transport_modes.modal_transfer import ( +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.modes.core.transport_mode import TransportMode, TransportModeParameters +from mobility.transport.modes.core.mode_registry import ModeRegistry +from mobility.transport.modes.public_transport.public_transport_graph import PublicTransportRoutingParameters +from mobility.transport.modes.public_transport.public_transport_travel_costs import PublicTransportTravelCosts +from mobility.transport.modes.public_transport.public_transport_generalized_cost import PublicTransportGeneralizedCost +from mobility.transport.modes.core.modal_transfer import ( IntermodalTransfer, default_intermodal_transfer_for_mode, ) -from mobility.generalized_cost_parameters import GeneralizedCostParameters -from mobility.cost_of_time_parameters import CostOfTimeParameters +from mobility.transport.costs.parameters.generalized_cost_parameters import GeneralizedCostParameters +from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters from pydantic import Field @@ -38,7 +38,7 @@ ] -class PublicTransportMode(TransportMode): +class PublicTransport(TransportMode): """Public transport mode with configurable access and egress leg modes.""" def __init__( @@ -53,7 +53,7 @@ def __init__( generalized_cost_parameters: GeneralizedCostParameters | None = None, survey_ids: List[str] | None = None, ghg_intensity: float | None = None, - parameters: "PublicTransportModeParameters | None" = None, + parameters: "PublicTransportParameters | None" = None, ): first_leg_mode = self._resolve_leg_mode( leg_mode=first_leg_mode, @@ -138,7 +138,7 @@ def __init__( return_mode=return_mode_name, survey_ids=survey_ids, parameters=parameters, - parameters_cls=PublicTransportModeParameters, + parameters_cls=PublicTransportParameters, ) def audit_gtfs(self): @@ -157,7 +157,7 @@ def _resolve_leg_mode( if mode_registry is None: raise ValueError( - "PublicTransportMode requires explicit `first_leg_mode` and " + "PublicTransport requires explicit `first_leg_mode` and " "`last_leg_mode`, or a `mode_registry` to resolve defaults " "(example: ModeRegistry([walk_mode, ...]))." ) @@ -170,9 +170,12 @@ def _resolve_leg_mode( return resolved_mode -class PublicTransportModeParameters(TransportModeParameters): +class PublicTransportParameters(TransportModeParameters): """Parameters for public transport mode.""" ghg_intensity: float = 0.05 multimodal: bool = True survey_ids: list[str] = Field(default_factory=lambda: list(DEFAULT_PUBLIC_TRANSPORT_SURVEY_IDS)) + + +PublicTransportMode = PublicTransport diff --git a/mobility/transport_modes/public_transport/public_transport_generalized_cost.py b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py similarity index 95% rename from mobility/transport_modes/public_transport/public_transport_generalized_cost.py rename to mobility/transport/modes/public_transport/public_transport_generalized_cost.py index 6249e2bc..cc844f2c 100644 --- a/mobility/transport_modes/public_transport/public_transport_generalized_cost.py +++ b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py @@ -1,7 +1,12 @@ +from __future__ import annotations + import pandas as pd +from typing import TYPE_CHECKING + +from mobility.runtime.assets.in_memory_asset import InMemoryAsset -from mobility.choice_models.congestion_state import CongestionState -from mobility.in_memory_asset import InMemoryAsset +if TYPE_CHECKING: + from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class PublicTransportGeneralizedCost(InMemoryAsset): diff --git a/mobility/transport_modes/public_transport/public_transport_graph.py b/mobility/transport/modes/public_transport/public_transport_graph.py similarity index 89% rename from mobility/transport_modes/public_transport/public_transport_graph.py rename to mobility/transport/modes/public_transport/public_transport_graph.py index 65d5d93c..aa99e123 100644 --- a/mobility/transport_modes/public_transport/public_transport_graph.py +++ b/mobility/transport/modes/public_transport/public_transport_graph.py @@ -10,16 +10,16 @@ from importlib import resources from pydantic import BaseModel, ConfigDict, Field, model_validator -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_zones import TransportZones -from mobility.transport_modes.defaults import ( +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.modes.core.defaults import ( DEFAULT_LONG_RANGE_MOTORIZED_MAX_BEELINE_DISTANCE_KM, ) from .gtfs.gtfs_router import GTFSRouter -from mobility.transport_costs.path_travel_costs import PathTravelCosts -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_modes.modal_transfer import IntermodalTransfer +from mobility.transport.costs.path.path_travel_costs import PathTravelCosts +from mobility.transport.modes.core.transport_mode import TransportMode +from mobility.transport.modes.core.modal_transfer import IntermodalTransfer class PublicTransportGraph(FileAsset): """ @@ -94,7 +94,7 @@ def gtfs_graph( logging.info("Computing public transport travel costs...") - script = RScript(resources.files('mobility.transport_modes.public_transport').joinpath('prepare_public_transport_graph.R')) + script = RScriptRunner(resources.files('mobility.transport.modes.public_transport').joinpath('prepare_public_transport_graph.R')) script.run( args=[ diff --git a/mobility/transport_modes/public_transport/public_transport_travel_costs.py b/mobility/transport/modes/public_transport/public_transport_travel_costs.py similarity index 89% rename from mobility/transport_modes/public_transport/public_transport_travel_costs.py rename to mobility/transport/modes/public_transport/public_transport_travel_costs.py index 653e555a..ca0ffc67 100644 --- a/mobility/transport_modes/public_transport/public_transport_travel_costs.py +++ b/mobility/transport/modes/public_transport/public_transport_travel_costs.py @@ -6,14 +6,14 @@ from importlib import resources -from mobility.file_asset import FileAsset -from mobility.r_utils.r_script import RScript -from mobility.transport_zones import TransportZones -from mobility.transport_modes.public_transport.public_transport_graph import PublicTransportGraph, PublicTransportRoutingParameters -from mobility.transport_modes.public_transport.intermodal_transport_graph import IntermodalTransportGraph -from mobility.transport_modes.transport_mode import TransportMode -from mobility.transport_modes.modal_transfer import IntermodalTransfer -from mobility.transport_graphs import SimplifiedPathGraph, ContractedPathGraph +from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.modes.public_transport.public_transport_graph import PublicTransportGraph, PublicTransportRoutingParameters +from mobility.transport.modes.public_transport.intermodal_transport_graph import IntermodalTransportGraph +from mobility.transport.modes.core.transport_mode import TransportMode +from mobility.transport.modes.core.modal_transfer import IntermodalTransfer +from mobility.transport.graphs import SimplifiedPathGraph, ContractedPathGraph class PublicTransportTravelCosts(FileAsset): """ @@ -128,7 +128,7 @@ def compute_travel_costs( logging.info("Computing public transport travel costs...") - script = RScript(resources.files('mobility.transport_modes.public_transport').joinpath('compute_intermodal_public_transport_travel_costs.R')) + script = RScriptRunner(resources.files('mobility.transport.modes.public_transport').joinpath('compute_intermodal_public_transport_travel_costs.R')) script.run( args=[ diff --git a/mobility/transport_modes/public_transport/routing_tests.R b/mobility/transport/modes/public_transport/routing_tests.R similarity index 100% rename from mobility/transport_modes/public_transport/routing_tests.R rename to mobility/transport/modes/public_transport/routing_tests.R diff --git a/mobility/transport_modes/public_transport/save_intermodal_public_transport_paths.R b/mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R similarity index 98% rename from mobility/transport_modes/public_transport/save_intermodal_public_transport_paths.R rename to mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R index 23b5c83a..a4a88da2 100644 --- a/mobility/transport_modes/public_transport/save_intermodal_public_transport_paths.R +++ b/mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R @@ -42,7 +42,7 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "r_utils", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport_modes/walk/walk_mode.py b/mobility/transport/modes/walk.py similarity index 68% rename from mobility/transport_modes/walk/walk_mode.py rename to mobility/transport/modes/walk.py index 8cb847b9..b4c63e3d 100644 --- a/mobility/transport_modes/walk/walk_mode.py +++ b/mobility/transport/modes/walk.py @@ -1,17 +1,17 @@ from typing import List from typing import Literal -from mobility.transport_zones import TransportZones -from mobility.transport_costs.path_travel_costs import PathTravelCosts -from mobility.transport_modes.transport_mode import TransportMode, TransportModeParameters -from mobility.path_routing_parameters import PathRoutingParameters -from mobility.generalized_cost_parameters import GeneralizedCostParameters -from mobility.cost_of_time_parameters import CostOfTimeParameters -from mobility.transport_costs.path_generalized_cost import PathGeneralizedCost -from mobility.transport_modes.osm_capacity_parameters import OSMCapacityParameters +from mobility.spatial.transport_zones import TransportZones +from mobility.transport.costs.path.path_travel_costs import PathTravelCosts +from mobility.transport.modes.core.transport_mode import TransportMode, TransportModeParameters +from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters +from mobility.transport.costs.parameters.generalized_cost_parameters import GeneralizedCostParameters +from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters +from mobility.transport.costs.path.path_generalized_cost import PathGeneralizedCost +from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters from pydantic import Field -class WalkMode(TransportMode): +class Walk(TransportMode): def __init__( self, @@ -21,7 +21,7 @@ def __init__( generalized_cost_parameters: GeneralizedCostParameters = None, survey_ids: List[str] | None = None, ghg_intensity: float | None = None, - parameters: "WalkModeParameters | None" = None, + parameters: "WalkParameters | None" = None, ): mode_name = "walk" @@ -61,11 +61,11 @@ def __init__( ghg_intensity=ghg_intensity, survey_ids=survey_ids, parameters=parameters, - parameters_cls=WalkModeParameters, + parameters_cls=WalkParameters, ) -class WalkModeParameters(TransportModeParameters): +class WalkParameters(TransportModeParameters): """Parameters for walk mode.""" name: Literal["walk"] = "walk" @@ -76,3 +76,6 @@ class WalkModeParameters(TransportModeParameters): return_mode: None = None survey_ids: list[str] = Field(default_factory=lambda: ["1.10", "1.11", "1.13"]) + +WalkMode = Walk + diff --git a/mobility/transport_costs/__init__.py b/mobility/transport_costs/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mobility/transport_graphs/__init__.py b/mobility/transport_graphs/__init__.py deleted file mode 100644 index c3e6c910..00000000 --- a/mobility/transport_graphs/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .simplified_path_graph import SimplifiedPathGraph -from .congested_path_graph import CongestedPathGraph -from .contracted_path_graph import ContractedPathGraph -from .graph_gpkg_exporter import GraphGPKGExporter \ No newline at end of file diff --git a/mobility/transport_modes/__init__.py b/mobility/transport_modes/__init__.py deleted file mode 100644 index 3fa7f0e0..00000000 --- a/mobility/transport_modes/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# from mobility.transport_modes.transport_mode import TransportMode -# from mobility.transport_modes.car import CarMode -# from mobility.transport_modes.walk import WalkMode -# from mobility.transport_modes.bicycle import BicycleMode -# from mobility.transport_modes.public_transport import PublicTransportMode, PublicTransportRoutingParameters -# from mobility.transport_modes.carpool import CarpoolMode, DetailedCarpoolRoutingParameters -# from mobility.transport_modes.modal_transfer import IntermodalTransfer \ No newline at end of file diff --git a/mobility/transport_modes/bicycle/__init__.py b/mobility/transport_modes/bicycle/__init__.py deleted file mode 100644 index e0397711..00000000 --- a/mobility/transport_modes/bicycle/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .bicycle_mode import BicycleMode \ No newline at end of file diff --git a/mobility/transport_modes/car/__init__.py b/mobility/transport_modes/car/__init__.py deleted file mode 100644 index 6313d13b..00000000 --- a/mobility/transport_modes/car/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .car_mode import CarMode \ No newline at end of file diff --git a/mobility/transport_modes/public_transport/__init__.py b/mobility/transport_modes/public_transport/__init__.py deleted file mode 100644 index 0c6b2835..00000000 --- a/mobility/transport_modes/public_transport/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .public_transport_graph import PublicTransportRoutingParameters -from .public_transport_mode import PublicTransportMode diff --git a/mobility/transport_modes/public_transport/prepare_public_transport_costs.R b/mobility/transport_modes/public_transport/prepare_public_transport_costs.R deleted file mode 100644 index 98ddadb2..00000000 --- a/mobility/transport_modes/public_transport/prepare_public_transport_costs.R +++ /dev/null @@ -1,65 +0,0 @@ -library(sf) -library(gtfsrouter) -library(log4r) -library(data.table) -library(arrow) -library(lubridate) -library(future.apply) -library(lubridate) -library(FNN) -library(cppRouting) -library(jsonlite) - -args <- commandArgs(trailingOnly = TRUE) - -package_path <- args[1] - -tz_file_path <- args[2] - -gtfs_file_path <- args[3] -gtfs_route_types_path <- args[4] - -start_time_min <- as.numeric(args[5]) -start_time_max <- as.numeric(args[6]) -max_traveltime <- as.numeric(args[7]) - -output_file_path <- args[8] - - -# package_path <- 'D:/dev/mobility_oss/mobility' -# tz_file_path <- 'D:\\data\\mobility\\projects\\study_area\\d2b01e6ba3afa070549c111f1012c92d-transport_zones.gpkg' -# gtfs_file_path <- 'D:/data/mobility/projects/study_area/3b724506861960add825434760d69b05-gtfs_router.rds' -# gtfs_route_types_path <- 'D:\\dev\\mobility_oss\\mobility\\data\\gtfs\\gtfs_route_types.xlsx' -# start_time_min <- as.numeric('6.5') -# start_time_max <- as.numeric('7.5') -# max_traveltime <- as.numeric('1.0') -# max_walking_time <- as.numeric('0.167') -# max_walking_speed <- as.numeric('5') -# output_file_path <- 'D:\\data\\mobility\\projects\\study_area\\92d64787200e7ed83bc8eadf88d3acc4-public_transport_travel_costs.parquet' - -source(file.path(package_path, "r_utils", "compute_gtfs_travel_costs.R")) - -logger <- logger(appenders = console_appender()) - -transport_zones <- st_read(tz_file_path) - -# Compute the travel costs between all stops in the GTFS data -gtfs <- readRDS(gtfs_file_path) -stops <- get_gtfs_stops(gtfs, transport_zones) - -travel_costs <- compute_gtfs_travel_costs( - gtfs, - stops, - start_time_min, - start_time_max, - max_traveltime, - gtfs_route_types_path -) - -travel_costs[, distance := distance/1000] -travel_costs[, time := time/3600] - -travel_costs <- travel_costs[time < max_traveltime] -travel_costs <- travel_costs[, list(from_stop_id, to_stop_id, time, distance)] - -write_parquet(travel_costs, output_file_path) diff --git a/mobility/transport_modes/walk/__init__.py b/mobility/transport_modes/walk/__init__.py deleted file mode 100644 index e7ccd094..00000000 --- a/mobility/transport_modes/walk/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .walk_mode import WalkMode \ No newline at end of file diff --git a/mobility/trips/__init__.py b/mobility/trips/__init__.py new file mode 100644 index 00000000..06341dde --- /dev/null +++ b/mobility/trips/__init__.py @@ -0,0 +1 @@ +"""Trip-generating model packages.""" diff --git a/mobility/trips/group_day_trips/__init__.py b/mobility/trips/group_day_trips/__init__.py new file mode 100644 index 00000000..da0ab775 --- /dev/null +++ b/mobility/trips/group_day_trips/__init__.py @@ -0,0 +1,9 @@ +from .core.parameters import Parameters +from .core.group_day_trips import GroupDayTrips +from .core.results import RunResults + +__all__ = [ + "GroupDayTrips", + "Parameters", + "RunResults", +] diff --git a/mobility/trips/group_day_trips/core/__init__.py b/mobility/trips/group_day_trips/core/__init__.py new file mode 100644 index 00000000..6a1f4838 --- /dev/null +++ b/mobility/trips/group_day_trips/core/__init__.py @@ -0,0 +1,12 @@ +from .parameters import Parameters +from .group_day_trips import GroupDayTrips +from .results import RunResults +from .run import Run, RunState + +__all__ = [ + "GroupDayTrips", + "Parameters", + "Run", + "RunResults", + "RunState", +] diff --git a/mobility/choice_models/population_trips.py b/mobility/trips/group_day_trips/core/group_day_trips.py similarity index 53% rename from mobility/choice_models/population_trips.py rename to mobility/trips/group_day_trips/core/group_day_trips.py index 4cc38313..71e0923a 100644 --- a/mobility/choice_models/population_trips.py +++ b/mobility/trips/group_day_trips/core/group_day_trips.py @@ -1,27 +1,26 @@ import polars as pl - from typing import Dict, List -from mobility.asset import Asset -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters -from mobility.choice_models.population_trips_run import PopulationTripsRun -from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator -from mobility.motives import HomeMotive, Motive, OtherMotive -from mobility.parsers.mobility_survey import MobilitySurvey +from mobility.runtime.assets.asset import Asset +from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator +from .parameters import Parameters +from .run import Run +from mobility.activities import Activity, Home, Other +from mobility.surveys import MobilitySurvey from mobility.population import Population -from mobility.transport_modes.transport_mode import TransportMode +from mobility.transport.modes.core.transport_mode import TransportMode -class PopulationTrips: - """Compatibility wrapper around weekday and weekend `PopulationTripsRun` assets.""" +class GroupDayTrips: + """Top-level asset exposing weekday and weekend grouped day trips.""" def __init__( self, population: Population, modes: List[TransportMode] = None, - motives: List[Motive] = None, + activities: List[Activity] = None, surveys: List[MobilitySurvey] = None, - parameters: PopulationTripsParameters = None, + parameters: Parameters = None, n_iterations: int = None, alpha: float = None, k_mode_sequences: int = None, @@ -33,11 +32,11 @@ def __init__( min_activity_time_constant: float = None, simulate_weekend: bool = None, ): - """Initialize the multi-day PopulationTrips compatibility wrapper. + """Initialize the grouped day-trips asset. The wrapper validates its high-level inputs, normalizes constructor - parameters into a `PopulationTripsParameters` instance, builds a shared - `TravelCostsAggregator`, and creates one underlying `PopulationTripsRun` + parameters into a `Parameters` instance, builds a shared + `TransportCostsAggregator`, and creates one underlying `Run` asset for weekdays plus one for weekends. The weekend run is enabled or disabled according to `simulate_weekend`. @@ -46,45 +45,45 @@ def __init__( zones. modes: Available transport modes. Must contain at least one `TransportMode`. - motives: Activity motives used to build and spatialize schedules. - Must contain at least one `Motive` and include `HomeMotive` and - `OtherMotive`. + activities: Activities used to build and spatialize schedules. + Must contain at least one `Activity` and include `Home` + and `Other`. surveys: Mobility surveys providing empirical activity chains. Must contain at least one `MobilitySurvey`. parameters: Parameter container. When provided, explicit keyword arguments are merged into this model and revalidated. n_iterations: Optional override for - `PopulationTripsParameters.n_iterations`. - alpha: Optional override for `PopulationTripsParameters.alpha`. + `Parameters.n_iterations`. + alpha: Optional override for `Parameters.alpha`. k_mode_sequences: Optional override for - `PopulationTripsParameters.k_mode_sequences`. + `Parameters.k_mode_sequences`. dest_prob_cutoff: Optional override for - `PopulationTripsParameters.dest_prob_cutoff`. + `Parameters.dest_prob_cutoff`. n_iter_per_cost_update: Optional override for - `PopulationTripsParameters.n_iter_per_cost_update`. + `Parameters.n_iter_per_cost_update`. cost_uncertainty_sd: Optional override for - `PopulationTripsParameters.cost_uncertainty_sd`. - seed: Optional override for `PopulationTripsParameters.seed`. + `Parameters.cost_uncertainty_sd`. + seed: Optional override for `Parameters.seed`. mode_sequence_search_parallel: Optional override for - `PopulationTripsParameters.mode_sequence_search_parallel`. + `Parameters.mode_sequence_search_parallel`. min_activity_time_constant: Optional override for - `PopulationTripsParameters.min_activity_time_constant`. + `Parameters.min_activity_time_constant`. simulate_weekend: Optional override for - `PopulationTripsParameters.simulate_weekend`. + `Parameters.simulate_weekend`. Raises: - ValueError: If modes, motives, or surveys are empty, or if required - motives are missing. - TypeError: If any element of modes, motives, or surveys has an + ValueError: If modes, activities, or surveys are empty, or if required + activities are missing. + TypeError: If any element of modes, activities, or surveys has an incorrect type. """ - self.validate_modes(modes) - self.validate_motives(motives) - self.validate_surveys(surveys) + self._validate_modes(modes) + self._validate_activities(activities) + self._validate_surveys(surveys) parameters = Asset.prepare_parameters( parameters=parameters, - parameters_cls=PopulationTripsParameters, + parameters_cls=Parameters, explicit_args={ "n_iterations": n_iterations, "alpha": alpha, @@ -97,15 +96,15 @@ def __init__( "min_activity_time_constant": min_activity_time_constant, "simulate_weekend": simulate_weekend, }, - owner_name="PopulationTrips", + owner_name="GroupDayTrips", ) - costs_aggregator = TravelCostsAggregator(modes) + costs_aggregator = TransportCostsAggregator(modes) - weekday_run = PopulationTripsRun( + weekday_run = Run( population=population, costs_aggregator=costs_aggregator, - motives=motives, + activities=activities, modes=modes, surveys=surveys, parameters=parameters, @@ -113,10 +112,10 @@ def __init__( enabled=True, ) - weekend_run = PopulationTripsRun( + weekend_run = Run( population=population, costs_aggregator=costs_aggregator, - motives=motives, + activities=activities, modes=modes, surveys=surveys, parameters=parameters, @@ -133,16 +132,18 @@ def __init__( def get(self) -> Dict[str, pl.LazyFrame]: """Return the combined weekday/weekend outputs for this wrapper. - This method delegates execution to the underlying `PopulationTripsRun` - assets, then exposes their cached parquet outputs through the legacy - `PopulationTrips` mapping. + This method delegates execution to the underlying + `Run` assets. Weekend outputs are included + only when the weekend run is enabled. Returns: - dict[str, pl.LazyFrame]: Lazy readers for weekday outputs, weekend - outputs, and shared `demand_groups`. + dict[str, pl.LazyFrame]: Lazy readers for weekday outputs, shared + `demand_groups`, and weekend outputs when weekend simulation is + enabled. """ self.weekday_run.get() - self.weekend_run.get() + if self.weekend_run.enabled: + self.weekend_run.get() return self.get_cached_asset() @@ -164,46 +165,41 @@ def get_cached_asset(self) -> Dict[str, pl.LazyFrame]: return {key: pl.scan_parquet(path) for key, path in self.cache_path.items()} - def remove(self, remove_checkpoints: bool = True): - """Remove cached outputs for the underlying day-type run assets. - - Args: - remove_checkpoints: When `True`, also remove saved checkpoints for - the underlying weekday and weekend runs. - """ - self.weekday_run.remove(remove_checkpoints=remove_checkpoints) - self.weekend_run.remove(remove_checkpoints=remove_checkpoints) + def remove(self): + """Remove cached outputs and saved iteration artifacts for both run assets.""" + self.weekday_run.remove() + self.weekend_run.remove() - def validate_motives(self, motives: List[Motive]) -> None: - """Validate the motives passed to the wrapper constructor. + def _validate_activities(self, activities: List[Activity]) -> None: + """Validate the activities passed to the wrapper constructor. Args: - motives: Motive objects that define the activity types available to + activities: Activity objects that define the activity types available to the simulation. Raises: - ValueError: If no motives are provided, or if `HomeMotive` or - `OtherMotive` is missing. - TypeError: If any element is not a `Motive` instance. + ValueError: If no activities are provided, or if `Home` or + `Other` is missing. + TypeError: If any element is not an `Activity` instance. """ - if not motives: - raise ValueError("PopulationTrips needs at least one motive in `motives`.") + if not activities: + raise ValueError("GroupDayTrips needs at least one activity in `activities`.") - for motive in motives: - if not isinstance(motive, Motive): + for activity in activities: + if not isinstance(activity, Activity): raise TypeError( - "PopulationTrips motives argument should be a list of `Motive` " - f"instances, but received one object of class {type(motive)}." + "GroupDayTrips activities argument should be a list of `Activity` " + f"instances, but received one object of class {type(activity)}." ) - if not any(isinstance(m, OtherMotive) for m in motives): - raise ValueError("PopulationTrips `motives` argument should contain a `OtherMotive`.") + if not any(isinstance(a, Other) for a in activities): + raise ValueError("GroupDayTrips `activities` argument should contain an `Other`.") - if not any(isinstance(m, HomeMotive) for m in motives): - raise ValueError("PopulationTrips `motives` argument should contain a `HomeMotive`.") + if not any(isinstance(a, Home) for a in activities): + raise ValueError("GroupDayTrips `activities` argument should contain a `Home`.") - def validate_modes(self, modes: List[TransportMode]) -> None: + def _validate_modes(self, modes: List[TransportMode]) -> None: """Validate the transport modes passed to the wrapper constructor. Args: @@ -214,16 +210,16 @@ def validate_modes(self, modes: List[TransportMode]) -> None: TypeError: If any element is not a `TransportMode` instance. """ if not modes: - raise ValueError("PopulationTrips needs at least one mode in `modes`.") + raise ValueError("GroupDayTrips needs at least one mode in `modes`.") for mode in modes: if not isinstance(mode, TransportMode): raise TypeError( - "PopulationTrips modes argument should be a list of `TransportMode` " + "GroupDayTrips modes argument should be a list of `TransportMode` " f"instances, but received one object of class {type(mode)}." ) - def validate_surveys(self, surveys: List[MobilitySurvey]) -> None: + def _validate_surveys(self, surveys: List[MobilitySurvey]) -> None: """Validate the mobility surveys passed to the wrapper constructor. Args: @@ -234,26 +230,28 @@ def validate_surveys(self, surveys: List[MobilitySurvey]) -> None: TypeError: If any element is not a `MobilitySurvey` instance. """ if not surveys: - raise ValueError("PopulationTrips needs at least one survey in `surveys`.") + raise ValueError("GroupDayTrips needs at least one survey in `surveys`.") for survey in surveys: if not isinstance(survey, MobilitySurvey): raise TypeError( - "PopulationTrips surveys argument should be a list of `MobilitySurvey` " + "GroupDayTrips surveys argument should be a list of `MobilitySurvey` " f"instances, but received one object of class {type(survey)}." ) def _build_cache_path(self) -> Dict[str, str]: - """Expose child run cache paths through the legacy wrapper keys. + """Expose child run cache paths through the wrapper keys. Returns: - dict[str, pathlib.Path]: Mapping from legacy `PopulationTrips` - output names to the underlying weekday and weekend run asset files. + dict[str, pathlib.Path]: Mapping from wrapper output names to the + underlying run asset files. Weekend keys are included only when + the weekend run is enabled. """ weekday_paths = self.weekday_run.cache_path - weekend_paths = self.weekend_run.cache_path - keys = ("flows", "sinks", "costs", "chains", "transitions") + keys = ("plan_steps", "opportunities", "costs", "chains", "transitions") cache_paths = {f"weekday_{key}": weekday_paths[key] for key in keys} - cache_paths.update({f"weekend_{key}": weekend_paths[key] for key in keys}) cache_paths["demand_groups"] = weekday_paths["demand_groups"] + if self.weekend_run.enabled: + weekend_paths = self.weekend_run.cache_path + cache_paths.update({f"weekend_{key}": weekend_paths[key] for key in keys}) return cache_paths diff --git a/mobility/choice_models/population_trips_parameters.py b/mobility/trips/group_day_trips/core/parameters.py similarity index 99% rename from mobility/choice_models/population_trips_parameters.py rename to mobility/trips/group_day_trips/core/parameters.py index a9a377d7..e06ae3bb 100644 --- a/mobility/choice_models/population_trips_parameters.py +++ b/mobility/trips/group_day_trips/core/parameters.py @@ -2,7 +2,7 @@ from typing import Annotated -class PopulationTripsParameters(BaseModel): +class Parameters(BaseModel): model_config = ConfigDict(extra="forbid") diff --git a/mobility/choice_models/population_trips_run_results.py b/mobility/trips/group_day_trips/core/results.py similarity index 89% rename from mobility/choice_models/population_trips_run_results.py rename to mobility/trips/group_day_trips/core/results.py index 74a2ec68..b294f9ff 100644 --- a/mobility/choice_models/population_trips_run_results.py +++ b/mobility/trips/group_day_trips/core/results.py @@ -9,17 +9,17 @@ from typing import Literal -from mobility.choice_models.evaluation.car_traffic_evaluation import CarTrafficEvaluation -from mobility.choice_models.evaluation.public_transport_network_evaluation import ( +from ..evaluation.car_traffic_evaluation import CarTrafficEvaluation +from ..evaluation.public_transport_network_evaluation import ( PublicTransportNetworkEvaluation, ) -from mobility.choice_models.evaluation.routing_evaluation import RoutingEvaluation -from mobility.choice_models.evaluation.travel_costs_evaluation import TravelCostsEvaluation -from mobility.choice_models.transition_metrics import state_waterfall as _state_waterfall +from ..evaluation.routing_evaluation import RoutingEvaluation +from ..evaluation.travel_costs_evaluation import TravelCostsEvaluation +from ..transitions.transition_metrics import state_waterfall as _state_waterfall -class PopulationTripsRunResults: - """Run-scoped analysis helper for one `PopulationTripsRun` output set.""" +class RunResults: + """Run-scoped analysis helper for one day-type output set.""" def __init__( self, @@ -28,8 +28,8 @@ def __init__( is_weekday: bool, transport_zones, demand_groups, - states_steps, - sinks, + plan_steps, + opportunities, costs, chains, transitions, @@ -37,11 +37,11 @@ def __init__( modes, ): self.inputs_hash = inputs_hash - self.is_weekday = bool(is_weekday) + self.is_weekday = is_weekday self.transport_zones = transport_zones self.demand_groups = demand_groups - self.states_steps = states_steps - self.sinks = sinks + self.plan_steps = plan_steps + self.opportunities = opportunities self.costs = costs self.chains = chains self.transitions = transitions @@ -51,7 +51,8 @@ def __init__( self.metrics_methods = { "global_metrics": self.global_metrics, "metrics_by_variable": self.metrics_by_variable, - "sink_occupation": self.sink_occupation, + "opportunity_occupation": self.opportunity_occupation, + "sink_occupation": self.opportunity_occupation, "state_waterfall": self.state_waterfall, "trip_count_by_demand_group": self.trip_count_by_demand_group, "distance_per_person": self.distance_per_person, @@ -72,7 +73,7 @@ def period(self) -> str: def global_metrics(self, normalize: bool = True): """Compute high-level trip, time, and distance metrics for this run.""" - ref_states_steps = ( + ref_plan_steps = ( self.chains.rename({"travel_time": "time"}) .with_columns(country=pl.col("country").cast(pl.String())) ) @@ -95,7 +96,7 @@ def global_metrics(self, normalize: bool = True): def aggregate(df): return ( - df.filter(pl.col("motive_seq_id") != 0) + df.filter(pl.col("activity_seq_id") != 0) .rename({"home_zone_id": "transport_zone_id"}) .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) .join(study_area_df.select(["local_admin_unit_id", "country"]), on=["local_admin_unit_id"]) @@ -109,8 +110,8 @@ def aggregate(df): .collect(engine="streaming") ) - trip_count = aggregate(self.states_steps) - trip_count_ref = aggregate(ref_states_steps) + trip_count = aggregate(self.plan_steps) + trip_count_ref = aggregate(ref_plan_steps) comparison = trip_count.join(trip_count_ref, on=["country", "variable"], suffix="_ref") @@ -131,12 +132,12 @@ def aggregate(df): def metrics_by_variable( self, - variable: Literal["mode", "motive", "time_bin", "distance_bin"] = None, + variable: Literal["mode", "activity", "time_bin", "distance_bin"] = None, normalize: bool = True, plot: bool = False, ): """Compare model outputs and reference chains by one categorical variable.""" - ref_states_steps = ( + ref_plan_steps = ( self.chains.rename({"travel_time": "time"}) .with_columns(mode=pl.col("mode").cast(pl.String())) ) @@ -156,7 +157,7 @@ def metrics_by_variable( def aggregate(df): return ( - df.filter(pl.col("motive_seq_id") != 0) + df.filter(pl.col("activity_seq_id") != 0) .rename({"home_zone_id": "transport_zone_id"}) .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) .with_columns( @@ -174,8 +175,8 @@ def aggregate(df): ) with pl.StringCache(): - trip_count = aggregate(self.states_steps) - trip_count_ref = aggregate(ref_states_steps) + trip_count = aggregate(self.plan_steps) + trip_count_ref = aggregate(ref_plan_steps) comparison = trip_count.join( trip_count_ref, @@ -243,7 +244,7 @@ def immobility(self, plot: bool = True): ) immobility = ( - self.states_steps.filter(pl.col("motive_seq_id") == 0) + self.plan_steps.filter(pl.col("activity_seq_id") == 0) .rename({"home_zone_id": "transport_zone_id"}) .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) .with_columns(pl.col("csp").cast(pl.String())) @@ -285,40 +286,40 @@ def immobility(self, plot: bool = True): return immobility - def sink_occupation(self, plot_motive: str = None, mask_outliers: bool = False): - """Compute sink occupation per zone and motive for this run.""" + def opportunity_occupation(self, plot_activity: str = None, mask_outliers: bool = False): + """Compute opportunity occupation per zone and activity for this run.""" transport_zones_df = ( pl.DataFrame(self.transport_zones.get().drop("geometry", axis=1)) .filter(pl.col("is_inner_zone")) .lazy() ) - sink_occupation = ( - self.states_steps.filter(pl.col("motive_seq_id") != 0) + opportunity_occupation = ( + self.plan_steps.filter(pl.col("activity_seq_id") != 0) .rename({"home_zone_id": "transport_zone_id"}) .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) - .group_by(["to", "motive"]) + .group_by(["to", "activity"]) .agg(pl.col("duration").sum()) - .join(self.sinks.select(["to", "motive", "sink_capacity"]), on=["to", "motive"]) - .with_columns(sink_occupation=pl.col("duration") / pl.col("sink_capacity")) + .join(self.opportunities.select(["to", "activity", "opportunity_capacity"]), on=["to", "activity"]) + .with_columns(opportunity_occupation=pl.col("duration") / pl.col("opportunity_capacity")) .rename({"to": "transport_zone_id"}) .collect(engine="streaming") ) - if plot_motive: + if plot_activity: tz = self.transport_zones.get().to_crs(4326) tz = tz.merge(transport_zones_df.collect().to_pandas(), on="transport_zone_id") tz = tz.merge( - sink_occupation.filter(pl.col("motive") == plot_motive).to_pandas(), + opportunity_occupation.filter(pl.col("activity") == plot_activity).to_pandas(), on="transport_zone_id", how="left", ) - tz["sink_occupation"] = tz["sink_occupation"].fillna(0.0) + tz["opportunity_occupation"] = tz["opportunity_occupation"].fillna(0.0) if mask_outliers: - tz["sink_occupation"] = self.mask_outliers(tz["sink_occupation"]) - self.plot_map(tz, "sink_occupation", plot_motive) + tz["opportunity_occupation"] = self.mask_outliers(tz["opportunity_occupation"]) + self.plot_map(tz, "opportunity_occupation", plot_activity) - return sink_occupation + return opportunity_occupation def state_waterfall( self, @@ -347,7 +348,7 @@ def trip_count_by_demand_group(self, plot: bool = False, mask_outliers: bool = F ) trip_count = ( - self.states_steps.filter(pl.col("motive_seq_id") != 0) + self.plan_steps.filter(pl.col("activity_seq_id") != 0) .rename({"home_zone_id": "transport_zone_id"}) .join(transport_zones_df.select(["transport_zone_id", "local_admin_unit_id"]), on=["transport_zone_id"]) .group_by(["transport_zone_id", "csp", "n_cars"]) @@ -392,7 +393,7 @@ def metric_per_person( metric_per_person = metric + "_per_person" metric_per_groups_and_transport_zones = ( - self.states_steps.filter(pl.col("motive_seq_id") != 0) + self.plan_steps.filter(pl.col("activity_seq_id") != 0) .rename({"home_zone_id": "transport_zone_id"}) .join(self.costs, on=["from", "to", "mode"]) .group_by(["transport_zone_id", "csp", "n_cars"]) @@ -408,15 +409,15 @@ def metric_per_person( try: compare_with.get() prefix = "weekday" if self.is_weekday else "weekend" - states_steps_comp = pl.scan_parquet(compare_with.cache_path[f"{prefix}_flows"]) + plan_steps_comp = pl.scan_parquet(compare_with.cache_path[f"{prefix}_plan_steps"]) costs_comp = pl.scan_parquet(compare_with.cache_path[f"{prefix}_costs"]) except Exception: - raise Exception("The PopulationTrips to compare with did not work. Try to run it alone?") + raise Exception("The GroupDayTrips to compare with did not work. Try to run it alone?") metric_comp = metric + "_comp" metric_per_person_comp = metric + "_per_person_comp" metric_per_groups_and_transport_zones_comp = ( - states_steps_comp.filter(pl.col("motive_seq_id") != 0) + plan_steps_comp.filter(pl.col("activity_seq_id") != 0) .rename({"home_zone_id": "transport_zone_id"}) .join(costs_comp, on=["from", "to", "mode"]) .group_by(["transport_zone_id", "csp", "n_cars"]) @@ -494,7 +495,7 @@ def time_per_person(self, *args, **kwargs): def cost_per_person(self, *args, **kwargs): return self.metric_per_person("cost", *args, **kwargs) - def plot_map(self, tz, value: str = None, motive: str = None, plot_method: str = "browser", + def plot_map(self, tz, value: str = None, activity: str = None, plot_method: str = "browser", color_continuous_scale="Viridis", color_continuous_midpoint=None): """Render a Plotly choropleth for a transport-zone metric.""" logging.getLogger("kaleido").setLevel(logging.WARNING) @@ -508,8 +509,8 @@ def plot_map(self, tz, value: str = None, motive: str = None, plot_method: str = color_continuous_scale=color_continuous_scale, color_continuous_midpoint=color_continuous_midpoint, projection="mercator", - title=motive, - subtitle=motive, + title=activity, + subtitle=activity, ) fig.update_geos(fitbounds="geojson", visible=False) fig.update_layout(margin=dict(l=0, r=0, t=0, b=0)) @@ -518,7 +519,7 @@ def plot_map(self, tz, value: str = None, motive: str = None, plot_method: str = def plot_modal_share(self, zone="origin", mode="car", labels=None, labels_size=[10, 6, 4], labels_color="black"): """Plot modal share for a selected mode by origin or destination zone.""" logging.info(f"Plotting {mode} modal share for {zone} zones during {self.period}") - population_df = self.states_steps.collect().to_pandas() + population_df = self.plan_steps.collect().to_pandas() left_column = "from" if zone == "origin" else "to" mode_share = population_df.groupby([left_column, "mode"]).sum("n_persons") @@ -550,7 +551,7 @@ def plot_modal_share(self, zone="origin", mode="car", labels=None, labels_size=[ def plot_od_flows( self, mode="all", - motive="all", + activity="all", level_of_detail=1, n_largest=2000, color="blue", @@ -569,11 +570,11 @@ def plot_od_flows( return NotImplemented logging.info(f"Plotting {mode} origin-destination flows during {self.period}") - if motive != "all": - logging.info("Speficic motives not implemented yet") + if activity != "all": + logging.info("Speficic activities not implemented yet") return NotImplemented - population_df = self.states_steps.collect().to_pandas() + population_df = self.plan_steps.collect().to_pandas() mode_name = mode.capitalize() if mode != "all": @@ -625,7 +626,7 @@ def plot_od_flows( def get_prominent_cities(self, n_cities=20, n_levels=3, distance_km=2): """Get the most prominent cities for labeling maps.""" - population_df = self.states_steps.collect().to_pandas() + population_df = self.plan_steps.collect().to_pandas() study_area_df = self.transport_zones.study_area.get() tzdf = self.transport_zones.get() diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py new file mode 100644 index 00000000..84e3be85 --- /dev/null +++ b/mobility/trips/group_day_trips/core/run.py @@ -0,0 +1,481 @@ +import logging +import os +import pathlib +import random +from dataclasses import dataclass +from typing import List + +import polars as pl + +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState +from ..iterations import Iteration, Iterations +from ..plans import DestinationSequences, ModeSequences, PlanInitializer, PlanUpdater +from .parameters import Parameters +from .results import RunResults +from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator +from mobility.runtime.assets.file_asset import FileAsset +from mobility.activities import Activity +from mobility.surveys import MobilitySurvey +from mobility.population import Population +from mobility.transport.modes.core.transport_mode import TransportMode + + +@dataclass +class RunState: + chains_by_activity: pl.DataFrame + chains: pl.DataFrame + demand_groups: pl.DataFrame + activity_dur: pl.DataFrame + home_night_dur: pl.DataFrame + stay_home_plan: pl.DataFrame + opportunities: pl.DataFrame + current_plans: pl.DataFrame + remaining_opportunities: pl.DataFrame + costs: pl.DataFrame + congestion_state: CongestionState | None + start_iteration: int + current_plan_steps: pl.DataFrame | None = None + + +class Run(FileAsset): + """Single day-type GroupDayTrips asset.""" + + def __init__( + self, + *, + population: Population, + costs_aggregator: TransportCostsAggregator, + activities: List[Activity], + modes: List[TransportMode], + surveys: List[MobilitySurvey], + parameters: Parameters, + is_weekday: bool, + enabled: bool = True, + ) -> None: + """Initialize a single weekday or weekend GroupDayTrips run.""" + inputs = { + "version": 1, + "population": population, + "costs_aggregator": costs_aggregator, + "activities": activities, + "modes": modes, + "surveys": surveys, + "parameters": parameters, + "is_weekday": is_weekday, + "enabled": enabled, + } + + self.rng = random.Random(parameters.seed) if parameters.seed is not None else random.Random() + self.initializer = PlanInitializer() + self.updater = PlanUpdater() + + project_folder = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) + + cache_path = { + "plan_steps": project_folder / "group_day_trips" / "plan_steps.parquet", + "opportunities": project_folder / "group_day_trips" / "opportunities.parquet", + "costs": project_folder / "group_day_trips" / "costs.parquet", + "chains": project_folder / "group_day_trips" / "chains.parquet", + "transitions": project_folder / "group_day_trips" / "transitions.parquet", + "demand_groups": project_folder / "group_day_trips" / "demand_groups.parquet", + } + super().__init__(inputs, cache_path) + + + def create_and_get_asset(self) -> dict[str, pl.LazyFrame]: + """Run the simulation for this day type and materialize cached outputs.""" + self._raise_if_disabled() + + iterations, resume_from_iteration = self._prepare_iterations(self.inputs_hash) + + state = self._build_state( + iterations=iterations, + resume_from_iteration=resume_from_iteration, + ) + for iteration_index in range(state.start_iteration, self.parameters.n_iterations + 1): + iteration = iterations.iteration(iteration_index) + self._run_model_iteration( + state=state, + iteration=iteration, + ) + iteration.save_state(state, self.rng.getstate()) + + self._assert_current_plan_steps_are_available(state) + + final_costs = self._build_final_costs(state) + final_plan_steps = self._build_final_plan_steps(state, final_costs) + transitions = self._build_transitions(iterations) + + self._write_outputs( + plan_steps=final_plan_steps, + opportunities=state.opportunities, + costs=final_costs, + chains=state.chains, + transitions=transitions, + demand_groups=state.demand_groups, + ) + + return self.get_cached_asset() + + + def _raise_if_disabled(self) -> None: + """Fail fast when callers try to access a disabled run.""" + if self.enabled: + return + + day_type = "weekday" if self.is_weekday else "weekend" + raise RuntimeError( + f"Run for {day_type} is disabled. " + "Enable this day type or avoid accessing its outputs." + ) + + + def _prepare_iterations( + self, + run_inputs_hash: str, + ) -> tuple[Iterations, int | None]: + """Prepare persisted iterations and determine the resume iteration.""" + iterations = Iterations( + run_inputs_hash=run_inputs_hash, + is_weekday=self.is_weekday, + base_folder=self.cache_path["plan_steps"].parent, + ) + resume_from_iteration = iterations.get_resume_iteration(self.parameters.n_iterations) + iterations.prepare(resume=(resume_from_iteration is not None)) + return iterations, resume_from_iteration + + + def _build_state( + self, + *, + iterations: Iterations, + resume_from_iteration: int | None, + ) -> RunState: + """Build the initial mutable state and restore it when resuming.""" + chains_by_activity, chains, demand_groups = self.initializer.get_chains( + self.population, + self.surveys, + self.activities, + self.modes, + self.is_weekday, + ) + activity_dur, home_night_dur = self.initializer.get_mean_activity_durations( + chains_by_activity, + demand_groups, + ) + stay_home_plan, current_plans = self.initializer.get_stay_home_state( + demand_groups, + home_night_dur, + self.activities, + self.parameters.min_activity_time_constant, + ) + opportunities = self.initializer.get_opportunities( + chains_by_activity, + self.activities, + self.population.transport_zones, + ) + state = RunState( + chains_by_activity=chains_by_activity, + chains=chains, + demand_groups=demand_groups, + activity_dur=activity_dur, + home_night_dur=home_night_dur, + stay_home_plan=stay_home_plan, + opportunities=opportunities, + current_plans=current_plans, + remaining_opportunities=opportunities.clone(), + costs=self.initializer.get_current_costs( + self.costs_aggregator, + congestion=False, + ), + congestion_state=None, + start_iteration=1, + ) + self._restore_saved_state( + iterations=iterations, + state=state, + resume_from_iteration=resume_from_iteration, + ) + return state + + + def _restore_saved_state( + self, + *, + iterations: Iterations, + state: RunState, + resume_from_iteration: int | None, + ) -> None: + """Restore the saved iteration state into the mutable run state.""" + if resume_from_iteration is None: + return + try: + saved_state = iterations.iteration(resume_from_iteration).load_state() + except Exception as exc: + raise RuntimeError( + "Failed to load saved GroupDayTrips iteration state for " + f"run_inputs_hash={self.inputs_hash}, is_weekday={self.is_weekday}, " + f"iteration={resume_from_iteration}. " + "Call `remove()` to clear cached iteration artifacts and rerun from scratch." + ) from exc + + try: + self.rng.setstate(saved_state.rng_state) + except Exception as exc: + raise RuntimeError( + "Failed to restore RNG state from saved GroupDayTrips iteration state for " + f"run_inputs_hash={self.inputs_hash}, is_weekday={self.is_weekday}, " + f"iteration={resume_from_iteration}. " + "Call `remove()` to clear cached iteration artifacts and rerun from scratch." + ) from exc + + iterations.discard_future_iterations(iteration=resume_from_iteration) + state.current_plans = saved_state.current_plans + state.remaining_opportunities = saved_state.remaining_opportunities + state.congestion_state = self.costs_aggregator.load_congestion_state( + run_key=self.inputs_hash, + is_weekday=self.is_weekday, + last_completed_iteration=resume_from_iteration, + cost_update_interval=self.parameters.n_iter_per_cost_update, + ) + state.start_iteration = resume_from_iteration + 1 + + logging.info( + "Resuming from saved iteration: run_key=%s is_weekday=%s iteration=%s", + self.inputs_hash, + str(self.is_weekday), + str(resume_from_iteration), + ) + state.costs = self.costs_aggregator.get( + congestion=(state.congestion_state is not None), + congestion_state=state.congestion_state, + ) + + + def _run_model_iteration( + self, + *, + state: RunState, + iteration: Iteration, + ) -> None: + """Execute one simulation iteration and update the mutable run state.""" + logging.info("Iteration %s", str(iteration.iteration)) + seed = self.rng.getrandbits(64) + + destination_sequences = self._sample_and_write_destination_sequences( + state, + iteration, + seed, + ) + mode_sequences = self._search_and_write_mode_sequences( + state, + iteration, + destination_sequences, + ) + transition_events = self._update_iteration_state( + state, + iteration, + destination_sequences, + mode_sequences, + ) + iteration.save_transition_events(transition_events) + + + def _sample_and_write_destination_sequences( + self, + state: RunState, + iteration: Iteration, + seed: int, + ) -> DestinationSequences: + """Run destination sampling and persist destination sequences for one iteration.""" + destination_sequences = iteration.destination_sequences( + activities=self.activities, + transport_zones=self.population.transport_zones, + remaining_opportunities=state.remaining_opportunities, + chains=state.chains_by_activity, + demand_groups=state.demand_groups, + costs=state.costs, + parameters=self.parameters, + seed=seed, + ) + destination_sequences.get() + return destination_sequences + + + def _search_and_write_mode_sequences( + self, + state: RunState, + iteration: Iteration, + destination_sequences: DestinationSequences, + ) -> ModeSequences: + """Run mode-sequence search and persist the results for one iteration.""" + mode_sequences = iteration.mode_sequences( + destination_sequences=destination_sequences, + costs_aggregator=self.costs_aggregator, + parameters=self.parameters, + congestion_state=state.congestion_state, + ) + mode_sequences.get() + return mode_sequences + + + def _update_iteration_state( + self, + state: RunState, + iteration: Iteration, + destination_sequences: DestinationSequences, + mode_sequences: ModeSequences, + ) -> pl.DataFrame: + """Advance the simulation state by one iteration and return transition events.""" + state.current_plans, state.current_plan_steps, transition_events = self.updater.get_new_plans( + state.current_plans, + state.current_plan_steps, + state.demand_groups, + state.chains_by_activity, + self.costs_aggregator, + state.congestion_state, + state.remaining_opportunities, + state.activity_dur, + iteration.iteration, + destination_sequences, + mode_sequences, + state.home_night_dur, + state.stay_home_plan, + self.parameters, + self.activities, + ) + state.costs, state.congestion_state = self.updater.get_new_costs( + state.costs, + iteration.iteration, + self.parameters.n_iter_per_cost_update, + state.current_plan_steps, + self.costs_aggregator, + congestion_state=state.congestion_state, + run_key=iteration.iterations.run_inputs_hash, + is_weekday=self.is_weekday, + ) + state.remaining_opportunities = self.updater.get_new_opportunities( + state.current_plan_steps, + state.opportunities, + self.activities, + ) + return transition_events + + + def _assert_current_plan_steps_are_available(self, state: RunState) -> None: + """Fail fast if final step-level plans were not produced by the iteration loop.""" + if state.current_plan_steps is not None: + return + + raise RuntimeError( + "Run reached finalization without `current_plan_steps`. " + "This usually means the run resumed after the final saved iteration " + "but before final outputs were materialized." + ) + + + def _build_final_costs(self, state: RunState) -> pl.DataFrame: + """Compute the final OD costs to attach to the written outputs.""" + return self.costs_aggregator.get_costs_by_od_and_mode( + ["cost", "distance", "time", "ghg_emissions"], + congestion=(state.congestion_state is not None), + congestion_state=state.congestion_state, + ) + + + def _build_final_plan_steps(self, state: RunState, costs: pl.DataFrame) -> pl.DataFrame: + """Join final per-step states with demand-group attributes and costs.""" + return ( + state.current_plan_steps + .join( + state.demand_groups.select(["demand_group_id", "home_zone_id", "csp", "n_cars"]), + on=["demand_group_id"], + ) + .drop("demand_group_id") + .join( + costs, + on=["from", "to", "mode"], + how="left", + ) + .with_columns( + is_weekday=pl.lit(self.is_weekday), + ) + ) + + + def _build_transitions(self, iterations: Iterations) -> pl.DataFrame: + """Combine persisted per-iteration transition events into the final table.""" + transition_paths = iterations.list_transition_event_paths() + if not transition_paths: + raise RuntimeError( + "Run finished without persisted transition events. " + "Call `remove()` to clear cached artifacts and rerun from scratch." + ) + + return pl.concat([pl.read_parquet(path) for path in transition_paths], how="vertical") + + + def _write_outputs( + self, + *, + plan_steps: pl.DataFrame, + opportunities: pl.DataFrame, + costs: pl.DataFrame, + chains: pl.DataFrame, + transitions: pl.DataFrame, + demand_groups: pl.DataFrame, + ) -> None: + """Write the final run artifacts to their parquet cache paths.""" + plan_steps.write_parquet(self.cache_path["plan_steps"]) + opportunities.write_parquet(self.cache_path["opportunities"]) + costs.write_parquet(self.cache_path["costs"]) + chains.write_parquet(self.cache_path["chains"]) + transitions.write_parquet(self.cache_path["transitions"]) + demand_groups.write_parquet(self.cache_path["demand_groups"]) + + + def get_cached_asset(self) -> dict[str, pl.LazyFrame]: + """Return lazy readers for this run's cached parquet outputs.""" + self._raise_if_disabled() + return {key: pl.scan_parquet(path) for key, path in self.cache_path.items()} + + + def results(self) -> RunResults: + """Return the analysis helper bound to this run's cached outputs.""" + self.get() + cached = self.get_cached_asset() + + return RunResults( + inputs_hash=self.inputs_hash, + is_weekday=self.is_weekday, + transport_zones=self.population.inputs["transport_zones"], + demand_groups=cached["demand_groups"], + plan_steps=cached["plan_steps"], + opportunities=cached["opportunities"], + costs=cached["costs"], + chains=cached["chains"], + transitions=cached["transitions"], + surveys=self.surveys, + modes=self.modes, + ) + + + def evaluate(self, metric, **kwargs) -> object: + """Evaluate this run using a named run-level metric.""" + results = self.results() + + if metric not in results.metrics_methods: + available = ", ".join(results.metrics_methods.keys()) + raise ValueError(f"Unknown evaluation metric: {metric}. Available metrics are: {available}") + + return results.metrics_methods[metric](**kwargs) + + + def remove(self) -> None: + """Remove cached outputs and saved iteration artifacts for this run.""" + super().remove() + Iterations( + run_inputs_hash=self.inputs_hash, + is_weekday=self.is_weekday, + base_folder=self.cache_path["plan_steps"].parent, + ).remove_all() diff --git a/mobility/trips/group_day_trips/evaluation/__init__.py b/mobility/trips/group_day_trips/evaluation/__init__.py new file mode 100644 index 00000000..a138cfdc --- /dev/null +++ b/mobility/trips/group_day_trips/evaluation/__init__.py @@ -0,0 +1,11 @@ +from .car_traffic_evaluation import CarTrafficEvaluation +from .public_transport_network_evaluation import PublicTransportNetworkEvaluation +from .routing_evaluation import RoutingEvaluation +from .travel_costs_evaluation import TravelCostsEvaluation + +__all__ = [ + "CarTrafficEvaluation", + "PublicTransportNetworkEvaluation", + "RoutingEvaluation", + "TravelCostsEvaluation", +] diff --git a/mobility/choice_models/evaluation/car_traffic_evaluation.py b/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py similarity index 100% rename from mobility/choice_models/evaluation/car_traffic_evaluation.py rename to mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py diff --git a/mobility/choice_models/evaluation/public_transport_network_evaluation.py b/mobility/trips/group_day_trips/evaluation/public_transport_network_evaluation.py similarity index 100% rename from mobility/choice_models/evaluation/public_transport_network_evaluation.py rename to mobility/trips/group_day_trips/evaluation/public_transport_network_evaluation.py diff --git a/mobility/choice_models/evaluation/routing_evaluation.py b/mobility/trips/group_day_trips/evaluation/routing_evaluation.py similarity index 98% rename from mobility/choice_models/evaluation/routing_evaluation.py rename to mobility/trips/group_day_trips/evaluation/routing_evaluation.py index 23ae46c4..06872146 100644 --- a/mobility/choice_models/evaluation/routing_evaluation.py +++ b/mobility/trips/group_day_trips/evaluation/routing_evaluation.py @@ -8,7 +8,7 @@ from shapely import linestrings from importlib import resources from sklearn.neighbors import NearestNeighbors -from mobility.r_utils.r_script import RScript +from mobility.runtime.r_integration.r_script_runner import RScriptRunner class RoutingEvaluation: """ @@ -395,7 +395,7 @@ def run_cpprouting_get_path_pair(self, routes, graph): unique_ods = routes.select(["vertex_id", "vertex_id_to"]).unique() - script = RScript(resources.files('mobility.transport_graphs').joinpath('get_path_pair.R')) + script = RScriptRunner(resources.files('mobility.transport.graphs.core').joinpath('get_path_pair.R')) output_path = graph.cache_path.parent / "path_pairs.parquet" script.run( diff --git a/mobility/choice_models/evaluation/travel_costs_evaluation.py b/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py similarity index 100% rename from mobility/choice_models/evaluation/travel_costs_evaluation.py rename to mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py diff --git a/mobility/trips/group_day_trips/iterations/__init__.py b/mobility/trips/group_day_trips/iterations/__init__.py new file mode 100644 index 00000000..9e917785 --- /dev/null +++ b/mobility/trips/group_day_trips/iterations/__init__.py @@ -0,0 +1,19 @@ +from .iteration_assets import ( + CurrentPlansAsset, + IterationCompleteAsset, + RemainingOpportunitiesAsset, + RngStateAsset, + TransitionEventsAsset, +) +from .iterations import Iteration, IterationState, Iterations + +__all__ = [ + "CurrentPlansAsset", + "Iteration", + "IterationCompleteAsset", + "Iterations", + "IterationState", + "RemainingOpportunitiesAsset", + "RngStateAsset", + "TransitionEventsAsset", +] diff --git a/mobility/trips/group_day_trips/iterations/iteration_assets.py b/mobility/trips/group_day_trips/iterations/iteration_assets.py new file mode 100644 index 00000000..71327667 --- /dev/null +++ b/mobility/trips/group_day_trips/iterations/iteration_assets.py @@ -0,0 +1,216 @@ +import json +import pathlib +import pickle + +import polars as pl + +from mobility.runtime.assets.file_asset import FileAsset + + +class CurrentPlansAsset(FileAsset): + """Persisted current plan distribution after one completed iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + current_plans: pl.DataFrame | None = None, + ) -> None: + self.current_plans = current_plans + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"current_plans_{iteration}.parquet" + super().__init__(inputs, cache_path) + + def get_cached_asset(self) -> pl.DataFrame: + return pl.read_parquet(self.cache_path) + + def create_and_get_asset(self) -> pl.DataFrame: + if self.current_plans is None: + raise ValueError("Cannot save current plans without a dataframe.") + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + self.current_plans.write_parquet(self.cache_path) + return self.get_cached_asset() + + +class RemainingOpportunitiesAsset(FileAsset): + """Persisted remaining opportunities after one completed iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + remaining_opportunities: pl.DataFrame | None = None, + ) -> None: + self.remaining_opportunities = remaining_opportunities + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"remaining_opportunities_{iteration}.parquet" + super().__init__(inputs, cache_path) + + def get_cached_asset(self) -> pl.DataFrame: + return pl.read_parquet(self.cache_path) + + def create_and_get_asset(self) -> pl.DataFrame: + if self.remaining_opportunities is None: + raise ValueError("Cannot save remaining opportunities without a dataframe.") + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + self.remaining_opportunities.write_parquet(self.cache_path) + return self.get_cached_asset() + + +class RngStateAsset(FileAsset): + """Persisted RNG state after one completed iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + rng_state=None, + ) -> None: + self.rng_state = rng_state + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"rng_state_{iteration}.pkl" + super().__init__(inputs, cache_path) + + def get_cached_asset(self): + with open(self.cache_path, "rb") as file: + return pickle.load(file) + + def create_and_get_asset(self): + if self.rng_state is None: + raise ValueError("Cannot save RNG state without a value.") + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + with open(self.cache_path, "wb") as file: + pickle.dump(self.rng_state, file, protocol=pickle.HIGHEST_PROTOCOL) + return self.get_cached_asset() + + +class IterationCompleteAsset(FileAsset): + """Persisted marker saying that one iteration state was fully written.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + ) -> None: + self.run_key = run_key + self.is_weekday = is_weekday + self.iteration = iteration + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"iteration_complete_{iteration}.json" + super().__init__(inputs, cache_path) + + def get_cached_asset(self) -> dict: + with open(self.cache_path, "r", encoding="utf-8") as file: + return json.load(file) + + def create_and_get_asset(self) -> dict: + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + with open(self.cache_path, "w", encoding="utf-8") as file: + json.dump( + { + "run_key": self.run_key, + "is_weekday": self.is_weekday, + "iteration": self.iteration, + }, + file, + sort_keys=True, + ) + return self.get_cached_asset() + + @classmethod + def find_latest_completed_iteration( + cls, + *, + base_folder: pathlib.Path, + run_key: str, + is_weekday: bool, + ) -> int | None: + """Return the latest iteration with a completion marker.""" + folder = pathlib.Path(base_folder) + if not folder.exists(): + return None + + latest_iteration = None + for path in folder.glob("*iteration_complete_*.json"): + try: + with open(path, "r", encoding="utf-8") as file: + marker = json.load(file) + except Exception: + continue + + if marker.get("run_key") != run_key or marker.get("is_weekday") != is_weekday: + continue + + iteration = marker.get("iteration") + if not isinstance(iteration, int): + continue + + if latest_iteration is None or iteration > latest_iteration: + latest_iteration = iteration + + return latest_iteration + + +class TransitionEventsAsset(FileAsset): + """Persisted transition events produced during one iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + transition_events: pl.DataFrame | None = None, + ) -> None: + self.transition_events = transition_events + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"transition_events_{iteration}.parquet" + super().__init__(inputs, cache_path) + + def get_cached_asset(self) -> pl.DataFrame: + return pl.read_parquet(self.cache_path) + + def create_and_get_asset(self) -> pl.DataFrame: + if self.transition_events is None: + raise ValueError("Cannot save transition events without a dataframe.") + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + self.transition_events.write_parquet(self.cache_path) + return self.get_cached_asset() diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py new file mode 100644 index 00000000..b0956fff --- /dev/null +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -0,0 +1,298 @@ +import pathlib +import re +import shutil +import logging +from dataclasses import dataclass +from typing import TYPE_CHECKING, Any + +import polars as pl + +from ..plans.destination_sequences import DestinationSequences +from ..plans.mode_sequences import ModeSequences +from .iteration_assets import ( + CurrentPlansAsset, + IterationCompleteAsset, + RemainingOpportunitiesAsset, + RngStateAsset, + TransitionEventsAsset, +) + +if TYPE_CHECKING: + from ..core.run import RunState + + +@dataclass(frozen=True) +class IterationState: + """Minimal persisted plan distribution required to resume a run from one iteration.""" + + current_plans: pl.DataFrame + remaining_opportunities: pl.DataFrame + rng_state: object + + +class Iteration: + """Persisted artifacts and saved state for one GroupDayTrips iteration.""" + + def __init__(self, iterations: "Iterations", iteration: int) -> None: + self.iterations = iterations + self.iteration = iteration + + + def destination_sequences( + self, + *, + activities: list[Any] | None = None, + transport_zones: Any = None, + remaining_opportunities: pl.DataFrame | None = None, + chains: pl.DataFrame | None = None, + demand_groups: pl.DataFrame | None = None, + costs: pl.DataFrame | None = None, + parameters: Any = None, + seed: int | None = None, + ) -> DestinationSequences: + """Return the destination-sequences asset for this iteration.""" + return DestinationSequences( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=self.iterations.folder_paths["destination-sequences"], + activities=activities, + transport_zones=transport_zones, + remaining_opportunities=remaining_opportunities, + chains=chains, + demand_groups=demand_groups, + costs=costs, + sequence_index_folder=self.iterations.folder_paths["sequences-index"], + parameters=parameters, + seed=seed, + ) + + + def mode_sequences( + self, + *, + destination_sequences: DestinationSequences, + costs_aggregator: Any = None, + parameters: Any = None, + congestion_state: Any = None, + ) -> ModeSequences: + """Return the mode-sequences asset for this iteration.""" + return ModeSequences( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=self.iterations.folder_paths["modes"], + destination_sequences=destination_sequences, + costs_aggregator=costs_aggregator, + working_folder=self.iterations.base_folder, + sequence_index_folder=self.iterations.folder_paths["sequences-index"], + parameters=parameters, + congestion_state=congestion_state, + ) + + + def load_state(self) -> IterationState: + """Load the saved run state for this completed iteration.""" + iteration_state_folder = self.iterations.folder_paths["iteration-state"] + return IterationState( + current_plans=CurrentPlansAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + ).get(), + remaining_opportunities=RemainingOpportunitiesAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + ).get(), + rng_state=RngStateAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + ).get(), + ) + + + def save_state(self, state: "RunState", rng_state: object) -> None: + """Persist the run state for this completed iteration.""" + iteration_state_folder = self.iterations.folder_paths["iteration-state"] + try: + CurrentPlansAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + current_plans=state.current_plans, + ).create_and_get_asset() + RemainingOpportunitiesAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + remaining_opportunities=state.remaining_opportunities, + ).create_and_get_asset() + RngStateAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + rng_state=rng_state, + ).create_and_get_asset() + IterationCompleteAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + ).create_and_get_asset() + except Exception as exc: + raise RuntimeError( + "Failed to save GroupDayTrips iteration state for " + f"run_inputs_hash={self.iterations.run_inputs_hash}, " + f"is_weekday={self.iterations.is_weekday}, iteration={self.iteration}. " + "Call `remove()` to clear cached iteration artifacts and rerun from scratch." + ) from exc + + + def save_transition_events(self, transition_events: pl.DataFrame) -> None: + """Persist transition events produced during this iteration.""" + TransitionEventsAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=self.iterations.folder_paths["transitions"], + transition_events=transition_events, + ).create_and_get_asset() + + +class Iterations: + """Persisted iteration collection for one GroupDayTrips run.""" + + def __init__( + self, + *, + run_inputs_hash: str, + is_weekday: bool, + base_folder: pathlib.Path, + ) -> None: + self.run_inputs_hash = run_inputs_hash + self.is_weekday = is_weekday + self.base_folder = pathlib.Path(base_folder) + self.folder_paths = self._build_folder_paths() + + + def prepare(self, *, resume: bool = False) -> None: + """Create run-scoped iteration folders, optionally clearing old contents first.""" + def ensure_dir(path: pathlib.Path) -> pathlib.Path: + if resume is False: + shutil.rmtree(path, ignore_errors=True) + path.mkdir(parents=True, exist_ok=True) + return path + + self.folder_paths = {name: ensure_dir(path) for name, path in self.folder_paths.items()} + + + def get_resume_iteration(self, n_iterations: int) -> int | None: + """Return and log the effective resume iteration for this run.""" + resume_iteration = self._find_latest_completed_iteration() + if resume_iteration is not None: + resume_iteration = min(int(resume_iteration), int(n_iterations)) + + if resume_iteration is None: + logging.info( + "No saved iteration found for run_key=%s is_weekday=%s. Starting from scratch.", + self.run_inputs_hash, + str(self.is_weekday), + ) + return None + + logging.info( + "Latest saved iteration found for run_key=%s is_weekday=%s: iteration=%s", + self.run_inputs_hash, + str(self.is_weekday), + str(resume_iteration), + ) + return resume_iteration + + + def iteration(self, iteration: int) -> Iteration: + """Return the persisted object for one iteration.""" + return Iteration(self, iteration) + + + def discard_future_iterations(self, *, iteration: int) -> None: + """Delete per-iteration artifacts strictly after the given iteration.""" + artifact_patterns = { + "destination-sequences": ["destination_sequences_*.parquet"], + "modes": ["mode_sequences_*.parquet"], + "transitions": ["*transition_events_*.parquet"], + "iteration-state": [ + "*current_plans_*.parquet", + "*remaining_opportunities_*.parquet", + "*rng_state_*.pkl", + "*iteration_complete_*.json", + ], + } + for folder_name, patterns in artifact_patterns.items(): + for pattern in patterns: + self._discard_files_after_iteration( + self.folder_paths[folder_name], + pattern, + iteration, + ) + + + def list_transition_event_paths(self) -> list[pathlib.Path]: + """Return persisted transition-event files in iteration order.""" + paths = list(self.folder_paths["transitions"].glob("*transition_events_*.parquet")) + return sorted(paths, key=self._get_iteration_from_path) + + + def remove_all(self) -> None: + """Remove all run-scoped iteration folders.""" + for path in self.folder_paths.values(): + shutil.rmtree(path, ignore_errors=True) + + + def _build_folder_paths(self) -> dict[str, pathlib.Path]: + """Return the run-scoped folders used for iteration artifacts.""" + folder_names = [ + "destination-sequences", + "modes", + "sequences-index", + "transitions", + "iteration-state", + ] + return {name: self.base_folder / f"{self.run_inputs_hash}-{name}" for name in folder_names} + + + def _find_latest_completed_iteration(self) -> int | None: + """Return the latest completed iteration marker available for this run.""" + return IterationCompleteAsset.find_latest_completed_iteration( + base_folder=self.folder_paths["iteration-state"], + run_key=self.run_inputs_hash, + is_weekday=self.is_weekday, + ) + + + def _discard_files_after_iteration( + self, + folder: pathlib.Path, + pattern: str, + keep_up_to_iteration: int, + ) -> None: + """Delete files matching one iteration pattern beyond the keep boundary.""" + for path in folder.glob(pattern): + file_iteration = self._get_iteration_from_path(path) + if file_iteration > keep_up_to_iteration: + path.unlink(missing_ok=True) + + + def _get_iteration_from_path(self, path: pathlib.Path) -> int: + """Extract the iteration number from one artifact filename.""" + match = re.search(r"(\d+)(?=\.[^.]+$)", path.name) + if match is None: + raise ValueError(f"Could not infer iteration from artifact path: {path}") + return int(match.group(1)) diff --git a/mobility/trips/group_day_trips/plans/__init__.py b/mobility/trips/group_day_trips/plans/__init__.py new file mode 100644 index 00000000..09202dd9 --- /dev/null +++ b/mobility/trips/group_day_trips/plans/__init__.py @@ -0,0 +1,11 @@ +from .destination_sequences import DestinationSequences +from .mode_sequences import ModeSequences +from .plan_initializer import PlanInitializer +from .plan_updater import PlanUpdater + +__all__ = [ + "DestinationSequences", + "ModeSequences", + "PlanInitializer", + "PlanUpdater", +] diff --git a/mobility/trips/group_day_trips/plans/destination_sequences.py b/mobility/trips/group_day_trips/plans/destination_sequences.py new file mode 100644 index 00000000..f1db0c0e --- /dev/null +++ b/mobility/trips/group_day_trips/plans/destination_sequences.py @@ -0,0 +1,397 @@ +import logging +import pathlib +from typing import Any + +import polars as pl +from scipy.stats import norm + +from .sequence_index import add_index +from mobility.runtime.assets.file_asset import FileAsset + + +class DestinationSequences(FileAsset): + """Persist destination sequences produced for one GroupDayTrips iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + activities: list[Any] | None = None, + transport_zones: Any = None, + remaining_opportunities: pl.DataFrame | None = None, + chains: pl.DataFrame | None = None, + demand_groups: pl.DataFrame | None = None, + costs: pl.DataFrame | None = None, + sequence_index_folder: pathlib.Path | None = None, + parameters: Any = None, + seed: int | None = None, + ) -> None: + self.activities = activities + self.transport_zones = transport_zones + self.remaining_opportunities = remaining_opportunities + self.chains = chains + self.demand_groups = demand_groups + self.costs = costs + self.sequence_index_folder = sequence_index_folder + self.parameters = parameters + self.seed = seed + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"destination_sequences_{iteration}.parquet" + super().__init__(inputs, cache_path) + + + def get_cached_asset(self) -> pl.DataFrame: + """Return cached destination sequences for one iteration.""" + return pl.read_parquet(self.cache_path) + + + def create_and_get_asset(self) -> pl.DataFrame: + """Compute and persist destination sequences for one iteration.""" + if self.activities is None: + raise ValueError("Cannot build destination sequences without activities.") + if self.transport_zones is None: + raise ValueError("Cannot build destination sequences without transport zones.") + if self.remaining_opportunities is None: + raise ValueError("Cannot build destination sequences without remaining opportunities.") + if self.chains is None: + raise ValueError("Cannot build destination sequences without chains.") + if self.demand_groups is None: + raise ValueError("Cannot build destination sequences without demand groups.") + if self.costs is None: + raise ValueError("Cannot build destination sequences without costs.") + if self.sequence_index_folder is None: + raise ValueError("Cannot build destination sequences without a sequence index folder.") + if self.parameters is None: + raise ValueError("Cannot build destination sequences without parameters.") + if self.seed is None: + raise ValueError("Cannot build destination sequences without a seed.") + + utilities = self._get_utilities( + self.activities, + self.transport_zones, + self.remaining_opportunities, + self.costs, + self.parameters.cost_uncertainty_sd, + ) + destination_probability = self._get_destination_probability( + utilities, + self.activities, + self.parameters.dest_prob_cutoff, + ) + chains = ( + self.chains + .filter(pl.col("activity_seq_id") != 0) + .join(self.demand_groups.select(["demand_group_id", "home_zone_id"]), on="demand_group_id") + .select(["demand_group_id", "home_zone_id", "activity_seq_id", "activity", "is_anchor", "seq_step_index"]) + ) + chains = self._spatialize_anchor_activities(chains, destination_probability, self.seed) + chains = self._spatialize_other_activities( + chains, + destination_probability, + self.costs, + self.parameters.alpha, + self.seed, + ) + + destination_sequences = ( + chains + .group_by(["demand_group_id", "activity_seq_id"]) + .agg(to=pl.col("to").sort_by("seq_step_index").cast(pl.Utf8())) + .with_columns(to=pl.col("to").list.join("-")) + .sort(["demand_group_id", "activity_seq_id"]) + ) + destination_sequences = add_index( + destination_sequences, + col="to", + index_col_name="dest_seq_id", + index_folder=self.sequence_index_folder, + ) + destination_sequences = ( + chains + .join( + destination_sequences.select(["demand_group_id", "activity_seq_id", "dest_seq_id"]), + on=["demand_group_id", "activity_seq_id"], + ) + .drop(["home_zone_id", "activity"]) + .with_columns(iteration=pl.lit(self.iteration).cast(pl.UInt32)) + ) + + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + destination_sequences.write_parquet(self.cache_path) + return self.get_cached_asset() + + + def _get_utilities( + self, + activities: list[Any], + transport_zones: Any, + opportunities: pl.DataFrame, + costs: pl.DataFrame, + cost_uncertainty_sd: float, + ) -> tuple[pl.LazyFrame, pl.LazyFrame]: + """Assemble destination utilities with cost uncertainty.""" + utilities = [(activity.name, activity.get_utilities(transport_zones)) for activity in activities] + utilities = [utility for utility in utilities if utility[1] is not None] + utilities = [utility[1].with_columns(activity=pl.lit(utility[0])) for utility in utilities] + + activity_values = opportunities.schema["activity"].categories + utilities = ( + pl.concat(utilities) + .with_columns(activity=pl.col("activity").cast(pl.Enum(activity_values))) + ) + + def offset_costs(costs_df: pl.DataFrame, delta: float, probability: float) -> pl.DataFrame: + return costs_df.with_columns( + [ + (pl.col("cost") + delta).alias("cost"), + pl.lit(probability).alias("prob"), + ] + ) + + x = [-2.0, -1.0, 0.0, 1.0, 2.0] + probabilities = norm.pdf(x, loc=0.0, scale=cost_uncertainty_sd) + probabilities /= probabilities.sum() + + costs = pl.concat( + [offset_costs(costs, x[i], probabilities[i]) for i in range(len(probabilities))] + ) + costs = ( + costs.lazy() + .join(opportunities.lazy(), on="to") + .join(utilities.lazy(), on=["activity", "to"], how="left") + .with_columns( + utility=pl.col("utility").fill_null(0.0), + effective_sink=( + pl.col("opportunity_capacity") + * pl.col("k_saturation_utility").fill_null(1.0) + * pl.col("prob") + ).clip(0.0), + ) + .drop("prob") + .filter(pl.col("effective_sink") > 0.0) + .with_columns(cost_bin=(pl.col("cost") - pl.col("utility")).floor()) + ) + cost_bin_to_destination = ( + costs + .with_columns( + p_to=pl.col("effective_sink") / pl.col("effective_sink").sum().over(["from", "activity", "cost_bin"]) + ) + .select(["activity", "from", "cost_bin", "to", "p_to"]) + ) + costs_by_bin = ( + costs + .group_by(["from", "activity", "cost_bin"]) + .agg(pl.col("effective_sink").sum()) + .sort(["from", "activity", "cost_bin"]) + ) + return costs_by_bin, cost_bin_to_destination + + + def _get_destination_probability( + self, + utilities: tuple[pl.LazyFrame, pl.LazyFrame], + activities: list[Any], + destination_probability_cutoff: float, + ) -> pl.DataFrame: + """Compute destination probabilities from utilities.""" + logging.info( + "Computing the probability of choosing a destination based on current location, potential destinations, and activity (with radiation models)..." + ) + costs_by_bin = utilities[0] + cost_bin_to_destination = utilities[1] + activities_lambda = { + activity.name: activity.inputs["parameters"].radiation_lambda for activity in activities + } + return ( + costs_by_bin + .with_columns( + s_ij=pl.col("effective_sink").cum_sum().over(["from", "activity"]), + selection_lambda=pl.col("activity").cast(pl.Utf8).replace_strict(activities_lambda), + ) + .with_columns( + p_a=(1 - pl.col("selection_lambda") ** (1 + pl.col("s_ij"))) + / (1 + pl.col("s_ij")) + / (1 - pl.col("selection_lambda")) + ) + .with_columns( + p_a_lag=pl.col("p_a").shift(fill_value=1.0).over(["from", "activity"]).alias("p_a_lag") + ) + .with_columns(p_ij=pl.col("p_a_lag") - pl.col("p_a")) + .with_columns(p_ij=pl.col("p_ij") / pl.col("p_ij").sum().over(["from", "activity"])) + .filter(pl.col("p_ij") > 0.0) + .with_columns(p_ij=pl.col("p_ij").round(9)) + .sort(["from", "activity", "p_ij", "cost_bin"], descending=[False, False, True, False]) + .with_columns( + p_ij_cum=pl.col("p_ij").cum_sum().over(["from", "activity"]), + p_count=pl.col("p_ij").cum_count().over(["from", "activity"]), + ) + .filter((pl.col("p_ij_cum") < destination_probability_cutoff) | (pl.col("p_count") == 1)) + .with_columns(p_ij=pl.col("p_ij") / pl.col("p_ij").sum().over(["from", "activity"])) + .join(cost_bin_to_destination, on=["activity", "from", "cost_bin"]) + .with_columns(p_ij=pl.col("p_ij") * pl.col("p_to")) + .group_by(["activity", "from", "to"]) + .agg(pl.col("p_ij").sum()) + .with_columns(p_ij=pl.col("p_ij").round(9)) + .sort(["from", "activity", "p_ij", "to"], descending=[False, False, True, False]) + .with_columns( + p_ij_cum=pl.col("p_ij").cum_sum().over(["from", "activity"]), + p_count=pl.col("p_ij").cum_count().over(["from", "activity"]), + ) + .filter((pl.col("p_ij_cum") < destination_probability_cutoff) | (pl.col("p_count") == 1)) + .with_columns(p_ij=pl.col("p_ij") / pl.col("p_ij").sum().over(["from", "activity"])) + .select(["activity", "from", "to", "p_ij"]) + .collect(engine="streaming") + ) + + + def _spatialize_anchor_activities( + self, + chains: pl.DataFrame, + destination_probability: pl.DataFrame, + seed: int, + ) -> pl.DataFrame: + """Sample destinations for anchor activities and fill anchor destinations.""" + logging.info("Spatializing anchor activities...") + spatialized_anchors = ( + chains + .filter((pl.col("is_anchor")) & (pl.col("activity") != "home")) + .select(["demand_group_id", "home_zone_id", "activity_seq_id", "activity"]) + .unique() + .join( + destination_probability, + left_on=["home_zone_id", "activity"], + right_on=["from", "activity"], + ) + .with_columns( + noise=( + pl.struct(["demand_group_id", "activity_seq_id", "activity", "to"]) + .hash(seed=seed) + .cast(pl.Float64) + .truediv(pl.lit(18446744073709551616.0)) + .log() + .neg() + ) + ) + .with_columns( + sample_score=( + pl.col("noise") / pl.col("p_ij").clip(1e-18) + + pl.col("to").cast(pl.Float64) * 1e-18 + ) + ) + .with_columns( + min_score=pl.col("sample_score").min().over(["demand_group_id", "activity_seq_id", "activity"]) + ) + .filter(pl.col("sample_score") == pl.col("min_score")) + .select(["demand_group_id", "activity_seq_id", "activity", "to"]) + ) + return ( + chains + .join( + spatialized_anchors.rename({"to": "anchor_to"}), + on=["demand_group_id", "activity_seq_id", "activity"], + how="left", + ) + .with_columns( + anchor_to=pl.when(pl.col("activity") == "home") + .then(pl.col("home_zone_id")) + .otherwise(pl.col("anchor_to")) + ) + .sort(["demand_group_id", "activity_seq_id", "seq_step_index"]) + .with_columns(anchor_to=pl.col("anchor_to").backward_fill().over(["demand_group_id", "activity_seq_id"])) + ) + + + def _spatialize_other_activities( + self, + chains: pl.DataFrame, + destination_probability: pl.DataFrame, + costs: pl.DataFrame, + alpha: float, + seed: int, + ) -> pl.DataFrame: + """Sample destinations for non-anchor activities step by step.""" + logging.info("Spatializing other activities...") + chains_step = ( + chains + .filter(pl.col("seq_step_index") == 1) + .with_columns(pl.col("home_zone_id").alias("from")) + ) + seq_step_index = 1 + spatialized_chains: list[pl.DataFrame] = [] + while chains_step.height > 0: + logging.info("Spatializing step %s...", str(seq_step_index)) + spatialized_step = ( + self._spatialize_trip_chain_step( + seq_step_index, + chains_step, + destination_probability, + costs, + alpha, + seed, + ) + .with_columns(seq_step_index=pl.lit(seq_step_index).cast(pl.UInt32)) + ) + spatialized_chains.append(spatialized_step) + seq_step_index += 1 + chains_step = ( + chains + .filter(pl.col("seq_step_index") == seq_step_index) + .join( + spatialized_step + .select(["demand_group_id", "home_zone_id", "activity_seq_id", "to"]) + .rename({"to": "from"}), + on=["demand_group_id", "home_zone_id", "activity_seq_id"], + ) + ) + return pl.concat(spatialized_chains) + + + def _spatialize_trip_chain_step( + self, + seq_step_index: int, + chains_step: pl.DataFrame, + destination_probability: pl.DataFrame, + costs: pl.DataFrame, + alpha: float, + seed: int, + ) -> pl.DataFrame: + """Sample destinations for one step between anchors.""" + steps = ( + chains_step + .filter(pl.col("is_anchor").not_()) + .join(destination_probability, on=["from", "activity"]) + .join(costs, left_on=["to", "anchor_to"], right_on=["from", "to"]) + .with_columns( + p_ij=((pl.col("p_ij").clip(1e-18).log() - alpha * pl.col("cost")).exp()), + noise=( + pl.struct(["demand_group_id", "activity_seq_id", "to"]) + .hash(seed=seed) + .cast(pl.Float64) + .truediv(pl.lit(18446744073709551616.0)) + .log() + .neg() + ), + ) + .with_columns( + sample_score=pl.col("noise") / pl.col("p_ij").clip(1e-18) + + pl.col("to").cast(pl.Float64) * 1e-18 + ) + .with_columns(min_score=pl.col("sample_score").min().over(["demand_group_id", "activity_seq_id"])) + .filter(pl.col("sample_score") == pl.col("min_score")) + .select(["demand_group_id", "home_zone_id", "activity_seq_id", "activity", "anchor_to", "from", "to"]) + ) + steps_anchor = ( + chains_step + .filter(pl.col("is_anchor")) + .with_columns(to=pl.col("anchor_to")) + .select(["demand_group_id", "home_zone_id", "activity_seq_id", "activity", "anchor_to", "from", "to"]) + ) + return pl.concat([steps, steps_anchor]) diff --git a/mobility/trips/group_day_trips/plans/mode_sequences.py b/mobility/trips/group_day_trips/plans/mode_sequences.py new file mode 100644 index 00000000..c0025c18 --- /dev/null +++ b/mobility/trips/group_day_trips/plans/mode_sequences.py @@ -0,0 +1,230 @@ +import json +import logging +import os +import pathlib +import pickle +import shutil +import subprocess +from collections import defaultdict +from importlib import resources +from typing import Any + +import polars as pl +from rich.live import Live +from rich.spinner import Spinner + +from .sequence_index import add_index +from mobility.runtime.assets.file_asset import FileAsset +from mobility.transport.modes.choice.compute_subtour_mode_probabilities import ( + compute_subtour_mode_probabilities_serial, + modes_list_to_dict, +) + + +class ModeSequences(FileAsset): + """Persist mode sequences produced for one GroupDayTrips iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + destination_sequences: FileAsset | None = None, + costs_aggregator: Any = None, + working_folder: pathlib.Path | None = None, + sequence_index_folder: pathlib.Path | None = None, + parameters: Any = None, + congestion_state: Any = None, + ) -> None: + self.destination_sequences = destination_sequences + self.costs_aggregator = costs_aggregator + self.working_folder = working_folder + self.sequence_index_folder = sequence_index_folder + self.parameters = parameters + self.congestion_state = congestion_state + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + "destination_sequences": destination_sequences, + } + cache_path = pathlib.Path(base_folder) / f"mode_sequences_{iteration}.parquet" + super().__init__(inputs, cache_path) + + + def get_cached_asset(self) -> pl.DataFrame: + """Return cached mode sequences for one iteration.""" + return pl.read_parquet(self.cache_path) + + + def create_and_get_asset(self) -> pl.DataFrame: + """Compute and persist mode sequences for one iteration.""" + if self.destination_sequences is None: + raise ValueError("Cannot build mode sequences without destination sequences.") + if self.costs_aggregator is None: + raise ValueError("Cannot build mode sequences without a costs aggregator.") + if self.working_folder is None: + raise ValueError("Cannot build mode sequences without a working folder.") + if self.sequence_index_folder is None: + raise ValueError("Cannot build mode sequences without a sequence index folder.") + if self.parameters is None: + raise ValueError("Cannot build mode sequences without parameters.") + + parent_folder_path = self.working_folder + destination_chains = self.destination_sequences.get_cached_asset() + + tmp_path = parent_folder_path / "tmp_results" + shutil.rmtree(tmp_path, ignore_errors=True) + os.makedirs(tmp_path) + + spatialized_chains = ( + destination_chains + .group_by(["demand_group_id", "activity_seq_id", "dest_seq_id"]) + .agg(locations=pl.col("from").sort_by("seq_step_index")) + .sort(["demand_group_id", "activity_seq_id", "dest_seq_id"]) + ) + unique_location_chains = ( + spatialized_chains + .group_by(["dest_seq_id"]) + .agg(pl.col("locations").first()) + .sort("dest_seq_id") + ) + + modes = modes_list_to_dict(self.costs_aggregator.modes) + mode_id = {name: index for index, name in enumerate(modes)} + id_to_mode = {index: name for index, name in enumerate(modes)} + + costs = ( + self.costs_aggregator.get_costs_by_od_and_mode( + ["cost"], + congestion=(self.congestion_state is not None), + detail_distances=False, + congestion_state=self.congestion_state, + ) + .with_columns( + mode_id=pl.col("mode").replace_strict(mode_id, return_dtype=pl.UInt8()), + cost=pl.col("cost").mul(1e6).cast(pl.Int64), + ) + .sort(["from", "to", "mode_id"]) + ) + costs = { + (row["from"], row["to"], row["mode_id"]): row["cost"] + for row in costs.to_dicts() + } + + is_return_mode = {mode_id[key]: value["is_return_mode"] for key, value in modes.items()} + leg_modes = defaultdict(list) + for from_zone, to_zone, mode in costs.keys(): + if not is_return_mode[mode]: + leg_modes[(from_zone, to_zone)].append(mode) + + if self.parameters.mode_sequence_search_parallel is False: + logging.info("Finding probable mode sequences for the spatialized trip chains...") + compute_subtour_mode_probabilities_serial( + self.parameters.k_mode_sequences, + unique_location_chains, + costs, + leg_modes, + modes, + tmp_path, + ) + else: + self._run_parallel_search( + parent_folder_path=parent_folder_path, + unique_location_chains=unique_location_chains, + costs=costs, + leg_modes=leg_modes, + modes=modes, + tmp_path=tmp_path, + ) + + all_results = ( + spatialized_chains.select(["demand_group_id", "activity_seq_id", "dest_seq_id"]) + .join(pl.read_parquet(tmp_path), on="dest_seq_id") + .with_columns(mode=pl.col("mode_index").replace_strict(id_to_mode)) + ) + mode_sequences = ( + all_results + .group_by(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_index"]) + .agg(mode_index=pl.col("mode_index").sort_by("seq_step_index").cast(pl.Utf8())) + .with_columns(mode_index=pl.col("mode_index").list.join("-")) + .sort(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_index", "mode_index"]) + ) + mode_sequences = add_index( + mode_sequences, + col="mode_index", + index_col_name="mode_seq_id", + index_folder=self.sequence_index_folder, + ) + all_results = ( + all_results + .join( + mode_sequences.select( + ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_index", "mode_seq_id"] + ), + on=["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_index"], + ) + .drop("mode_seq_index") + .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id", "seq_step_index", "mode"]) + .with_columns(iteration=pl.lit(self.iteration, dtype=pl.UInt32())) + ) + + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + all_results.write_parquet(self.cache_path) + return self.get_cached_asset() + + + def _run_parallel_search( + self, + *, + parent_folder_path: pathlib.Path, + unique_location_chains: pl.DataFrame, + costs: dict[tuple[Any, Any, Any], Any], + leg_modes: dict[tuple[Any, Any], list[Any]], + modes: dict[str, Any], + tmp_path: pathlib.Path, + ) -> None: + """Run the mode-sequence search in a subprocess.""" + costs_path = parent_folder_path / "tmp-costs.pkl" + leg_modes_path = parent_folder_path / "tmp-leg-modes.pkl" + modes_path = parent_folder_path / "modes-props.json" + location_chains_path = parent_folder_path / "tmp-location-chains.parquet" + + with open(modes_path, "w", encoding="utf-8") as file: + file.write(json.dumps(modes)) + with open(costs_path, "wb") as file: + pickle.dump(costs, file, protocol=pickle.HIGHEST_PROTOCOL) + with open(leg_modes_path, "wb") as file: + pickle.dump(leg_modes, file, protocol=pickle.HIGHEST_PROTOCOL) + unique_location_chains.write_parquet(location_chains_path) + + with Live( + Spinner("dots", text="Finding probable mode sequences for the spatialized trip chains..."), + refresh_per_second=10, + ): + process = subprocess.Popen( + [ + "python", + "-u", + str( + resources.files("mobility.transport.modes.choice") + / "compute_subtour_mode_probabilities.py" + ), + "--k_sequences", + str(self.parameters.k_mode_sequences), + "--location_chains_path", + str(location_chains_path), + "--costs_path", + str(costs_path), + "--leg_modes_path", + str(leg_modes_path), + "--modes_path", + str(modes_path), + "--tmp_path", + str(tmp_path), + ] + ) + process.wait() diff --git a/mobility/choice_models/state_initializer.py b/mobility/trips/group_day_trips/plans/plan_initializer.py similarity index 72% rename from mobility/choice_models/state_initializer.py rename to mobility/trips/group_day_trips/plans/plan_initializer.py index 9f127686..7bf680c4 100644 --- a/mobility/choice_models/state_initializer.py +++ b/mobility/trips/group_day_trips/plans/plan_initializer.py @@ -1,34 +1,36 @@ import math -import polars as pl -class StateInitializer: - """Builds initial chain demand, averages, and capacities for the model. +import polars as pl + + +class PlanInitializer: + """Builds initial chain demand, averages, and opportunities for the model. Provides helpers to (1) aggregate population groups and attach survey chain probabilities, (2) compute mean activity durations, (3) create - the stay-home baseline state, (4) derive destination capacities - (sinks), and (5) fetch current OD costs. + the stay-home baseline plan, (4) derive destination opportunities, + and (5) fetch current OD costs. """ - def get_chains(self, population, surveys, motives, modes, is_weekday): + def get_chains(self, population, surveys, activities, modes, is_weekday): """Aggregate demand groups and attach survey chain probabilities. Produces per-group trip chains with durations and anchor flags by joining population groups (zone/city category/CSP/cars) with survey chain probabilities, filtering by weekday/weekend, and indexing - motive sequences. + activity sequences. Args: population: Population container providing transport zones and groups. surveys: Iterable of survey objects exposing `get_chains_probability`. - motives: Iterable of motives; used to mark anchors. + activities: Iterable of activities; used to mark anchors. modes: is_weekday (bool): Select weekday (True) or weekend (False) chains. Returns: tuple[pl.DataFrame, pl.DataFrame]: - chains: Columns include - ["demand_group_id","motive_seq_id","seq_step_index","motive", + ["demand_group_id","activity_seq_id","seq_step_index","activity", "n_persons","duration","is_anchor"]. - demand_groups: Aggregated groups with ["demand_group_id","home_zone_id","csp","n_cars","n_persons"]. @@ -82,7 +84,7 @@ def get_chains(self, population, surveys, motives, modes, is_weekday): [ ( survey - .get_chains_probability(motives, modes) + .get_chains_probability(activities, modes) .with_columns( country=pl.lit(survey.inputs["parameters"].country) ) @@ -90,6 +92,10 @@ def get_chains(self, population, surveys, motives, modes, is_weekday): for survey in surveys ] ) + .rename({ + "motive": "activity", + "motive_seq": "activity_seq", + }) ) # Cast string columns to enums for better perf @@ -100,7 +106,7 @@ def get_col_values(df1, df2, col): city_category_values = get_col_values(demand_groups, p_chain, "city_category") csp_values = get_col_values(demand_groups, p_chain, "csp") n_cars_values = get_col_values(demand_groups, p_chain, "n_cars") - motive_values = p_chain["motive"].unique().sort().to_list() + activity_values = p_chain["activity"].unique().sort().to_list() mode_values = p_chain["mode"].unique().sort().to_list() p_chain = ( @@ -110,7 +116,7 @@ def get_col_values(df1, df2, col): city_category=pl.col("city_category").cast(pl.Enum(city_category_values)), csp=pl.col("csp").cast(pl.Enum(csp_values)), n_cars=pl.col("n_cars").cast(pl.Enum(n_cars_values)), - motive=pl.col("motive").cast(pl.Enum(motive_values)), + activity=pl.col("activity").cast(pl.Enum(activity_values)), mode=pl.col("mode").cast(pl.Enum(mode_values)), ) ) @@ -129,38 +135,38 @@ def get_col_values(df1, df2, col): .with_row_index("demand_group_id") ) - # Create an index for motive sequences to avoid moving giant strings around + # Create an index for activity sequences to avoid moving giant strings around # !!! Sorting before creating ids is VERY important for reproducibility - motive_seqs = ( + activity_seqs = ( p_chain - .select(["motive_seq", "seq_step_index", "motive"]) + .select(["activity_seq", "seq_step_index", "activity"]) .unique() ) - motive_seq_index = ( - motive_seqs.select("motive_seq") + activity_seq_index = ( + activity_seqs.select("activity_seq") .unique() - .sort("motive_seq") - .with_row_index("motive_seq_id") + .sort("activity_seq") + .with_row_index("activity_seq_id") ) - motive_seqs = ( - motive_seqs - .join(motive_seq_index, on="motive_seq") + activity_seqs = ( + activity_seqs + .join(activity_seq_index, on="activity_seq") ) p_chain = ( p_chain .join( - motive_seqs.select(["motive_seq", "motive_seq_id", "seq_step_index"]), - on=["motive_seq", "seq_step_index"] + activity_seqs.select(["activity_seq", "activity_seq_id", "seq_step_index"]), + on=["activity_seq", "seq_step_index"] ) - .drop("motive_seq") + .drop("activity_seq") ) - # Compute the amount of demand (= duration) per demand group and motive sequence - anchors = {m.name: m.is_anchor for m in motives} + # Compute the amount of demand (= duration) per demand group and activity sequence + anchors = {m.name: m.is_anchor for m in activities} chains = ( @@ -184,19 +190,19 @@ def get_col_values(df1, df2, col): ) - chains_by_motive = ( + chains_by_activity = ( chains - .group_by(["demand_group_id", "motive_seq_id", "seq_step_index", "motive"]) + .group_by(["demand_group_id", "activity_seq_id", "seq_step_index", "activity"]) .agg( n_persons=pl.col("n_persons").sum(), duration=(pl.col("n_persons")*pl.col("duration_per_pers")).sum() ) - .sort(["demand_group_id", "motive_seq_id", "seq_step_index"]) + .sort(["demand_group_id", "activity_seq_id", "seq_step_index"]) .with_columns( - is_anchor=pl.col("motive").cast(pl.Utf8).replace_strict(anchors) + is_anchor=pl.col("activity").cast(pl.Utf8).replace_strict(anchors) ) ) @@ -207,7 +213,7 @@ def get_col_values(df1, df2, col): .drop(["country", "city_category"]) ) - return chains_by_motive, chains, demand_groups + return chains_by_activity, chains, demand_groups def get_mean_activity_durations(self, chains, demand_groups): @@ -215,7 +221,7 @@ def get_mean_activity_durations(self, chains, demand_groups): """Compute mean per-person durations for activities and home-night. Uses chain step durations weighted by group sizes to estimate: - - mean activity duration per (CSP, motive) excluding final steps, and + - mean activity duration per (CSP, activity) excluding final steps, and - mean residual home-night duration per CSP. Enforces a small positive floor (~2 min) for numerical stability. @@ -225,7 +231,7 @@ def get_mean_activity_durations(self, chains, demand_groups): Returns: tuple[pl.DataFrame, pl.DataFrame]: - - mean_motive_durations: ["csp","motive","mean_duration_per_pers"]. + - mean_activity_durations: ["csp","activity","mean_duration_per_pers"]. - mean_home_night_durations: ["csp","mean_home_night_per_pers"]. """ @@ -237,10 +243,10 @@ def get_mean_activity_durations(self, chains, demand_groups): .with_columns(duration_per_pers=pl.col("duration")/pl.col("n_persons")) ) - mean_motive_durations = ( + mean_activity_durations = ( chains - .filter(pl.col("seq_step_index") != pl.col("seq_step_index").max().over(["demand_group_id", "motive_seq_id"])) - .group_by(["csp", "motive"]) + .filter(pl.col("seq_step_index") != pl.col("seq_step_index").max().over(["demand_group_id", "activity_seq_id"])) + .group_by(["csp", "activity"]) .agg( mean_duration_per_pers=pl.max_horizontal([ (pl.col("duration_per_pers")*pl.col("n_persons")).sum()/pl.col("n_persons").sum(), @@ -251,7 +257,7 @@ def get_mean_activity_durations(self, chains, demand_groups): mean_home_night_durations = ( chains - .group_by(["demand_group_id", "csp", "motive_seq_id"]) + .group_by(["demand_group_id", "csp", "activity_seq_id"]) .agg( n_persons=pl.col("n_persons").first(), home_night_per_pers=24.0 - pl.col("duration_per_pers").sum() @@ -265,14 +271,14 @@ def get_mean_activity_durations(self, chains, demand_groups): ) ) - return mean_motive_durations, mean_home_night_durations + return mean_activity_durations, mean_home_night_durations def get_stay_home_state( self, demand_groups, home_night_dur, - motives, + activities, min_activity_time_constant: float, ): @@ -290,112 +296,111 @@ def get_stay_home_state( Returns: tuple[pl.DataFrame, pl.DataFrame]: - stay_home_state: Columns - ["demand_group_id","iteration","motive_seq_id","mode_seq_id", + ["demand_group_id","iteration","activity_seq_id","mode_seq_id", "dest_seq_id","utility","n_persons"] with zeros for seq IDs. - current_states: A clone of `stay_home_state` for iteration start. """ - home_motive = [m for m in motives if m.name == "home"][0] + home_activity = [m for m in activities if m.name == "home"][0] stay_home_state = ( demand_groups.select(["demand_group_id", "csp", "n_persons"]) .with_columns( iteration=pl.lit(0, pl.UInt32()), - motive_seq_id=pl.lit(0, pl.UInt32()), + activity_seq_id=pl.lit(0, pl.UInt32()), mode_seq_id=pl.lit(0, pl.UInt32()), dest_seq_id=pl.lit(0, pl.UInt32()) ) .join(home_night_dur, on="csp") .with_columns( utility=( - home_motive.inputs["parameters"].value_of_time_stay_home + home_activity.inputs["parameters"].value_of_time_stay_home * pl.col("mean_home_night_per_pers") * (pl.col("mean_home_night_per_pers")/pl.col("mean_home_night_per_pers")/math.exp(-min_activity_time_constant)).log().clip(0.0) ) ) - .select(["demand_group_id", "iteration", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) + .select(["demand_group_id", "iteration", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) ) current_states = ( stay_home_state - .select(["demand_group_id", "iteration", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) + .select(["demand_group_id", "iteration", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) .clone() ) return stay_home_state, current_states - def get_sinks(self, chains, motives, transport_zones): + def get_opportunities(self, chains, activities, transport_zones): - """Compute destination capacities (sinks) per motive and zone. + """Compute destination opportunities per activity and zone. - Scales available opportunities by demand per motive and a - motive-specific saturation coefficient to derive per-destination + Scales available opportunities by demand per activity and a + activity-specific saturation coefficient to derive per-destination capacity and initial availability. Args: - chains (pl.DataFrame): Chains with total duration per motive. - motives: Iterable of motives exposing `get_opportunities(...)` and + chains (pl.DataFrame): Chains with total duration per activity. + activities: Iterable of activities exposing `get_opportunities(...)` and `sink_saturation_coeff`. - transport_zones: Zone container passed to motives. + transport_zones: Zone container passed to activities. Returns: - pl.DataFrame: ["to","motive","sink_capacity","k_saturation_utility"]. + pl.DataFrame: ["to","activity","opportunity_capacity","k_saturation_utility"]. """ demand = ( chains - .filter(pl.col("motive_seq_id") != 0) - .group_by(["motive"]) + .filter(pl.col("activity_seq_id") != 0) + .group_by(["activity"]) .agg(pl.col("duration").sum()) ) - motive_names = chains.schema["motive"].categories + activity_names = chains.schema["activity"].categories - # Load and adjust sinks - sinks = ( + opportunities = ( pl.concat( [ ( - motive + activity .get_opportunities(transport_zones) .with_columns( - motive=pl.lit(motive.name), - sink_saturation_coeff=pl.lit(motive.inputs["parameters"].sink_saturation_coeff) + activity=pl.lit(activity.name), + sink_saturation_coeff=pl.lit(activity.inputs["parameters"].sink_saturation_coeff) ) ) - for motive in motives if motive.has_opportunities is True + for activity in activities if activity.has_opportunities is True ] ) .filter(pl.col("n_opp") > 0.0) .with_columns( - motive=pl.col("motive").cast(pl.Enum(motive_names)), + activity=pl.col("activity").cast(pl.Enum(activity_names)), to=pl.col("to").cast(pl.Int32) ) - .join(demand, on="motive") + .join(demand, on="activity") .with_columns( - sink_capacity=( - pl.col("n_opp")/pl.col("n_opp").sum().over("motive") + opportunity_capacity=( + pl.col("n_opp")/pl.col("n_opp").sum().over("activity") * pl.col("duration")*pl.col("sink_saturation_coeff") ), k_saturation_utility=pl.lit(1.0, dtype=pl.Float64()) ) - .select(["to", "motive", "sink_capacity", "k_saturation_utility"]) + .select(["to", "activity", "opportunity_capacity", "k_saturation_utility"]) ) - return sinks + return opportunities def get_current_costs(self, costs, congestion): """Fetch current OD costs and cast endpoint IDs. Args: - costs: TravelCostsAggregator-like provider with `.get(congestion=...)`. + costs: TransportCostsAggregator-like provider with `.get(congestion=...)`. congestion (bool): Whether to use congested costs. Returns: diff --git a/mobility/choice_models/state_updater.py b/mobility/trips/group_day_trips/plans/plan_updater.py similarity index 56% rename from mobility/choice_models/state_updater.py rename to mobility/trips/group_day_trips/plans/plan_updater.py index 1c60cdcb..291dbf80 100644 --- a/mobility/choice_models/state_updater.py +++ b/mobility/trips/group_day_trips/plans/plan_updater.py @@ -4,123 +4,131 @@ import polars as pl -from mobility.choice_models.transition_schema import TRANSITION_EVENT_COLUMNS +from .destination_sequences import DestinationSequences +from .mode_sequences import ModeSequences +from ..transitions.transition_schema import TRANSITION_EVENT_COLUMNS -class StateUpdater: - """Updates population state distributions over motive/destination/mode sequences. + +class PlanUpdater: + """Updates population plan distributions over activity/destination/mode sequences. Builds candidate states, scores utilities (including home-night term), computes transition probabilities, applies transitions, and returns the updated aggregate states plus their per-step expansion. """ - def get_new_states( + def get_new_plans( self, - current_states: pl.DataFrame, + current_plans: pl.DataFrame, + current_plan_steps: pl.DataFrame | None, demand_groups: pl.DataFrame, chains: pl.DataFrame, costs_aggregator: Any, congestion_state: Any, - remaining_sinks: pl.DataFrame, - motive_dur: pl.DataFrame, + remaining_opportunities: pl.DataFrame, + activity_dur: pl.DataFrame, iteration: int, - tmp_folders: dict[str, Any], + destination_sequences: DestinationSequences, + mode_sequences: ModeSequences, home_night_dur: pl.DataFrame, - stay_home_state: pl.DataFrame, + stay_home_plan: pl.DataFrame, parameters: Any, - motives: list[Any] + activities: list[Any] ) -> tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame]: - """Advance one iteration of state updates. + """Advance one iteration of plan updates. Orchestrates: candidate step generation → state utilities → transition probabilities → transitioned states → per-step expansion. Args: - current_states (pl.DataFrame): Current aggregate states with columns - ["demand_group_id","motive_seq_id","dest_seq_id","mode_seq_id", + current_plans (pl.DataFrame): Current aggregate plans with columns + ["demand_group_id","activity_seq_id","dest_seq_id","mode_seq_id", "utility","n_persons"]. demand_groups (pl.DataFrame): Demand groups (e.g., csp, counts). chains (pl.DataFrame): Chain templates with durations per step. - costs_aggregator (TravelCostsAggregator): Provides mode/OD costs. - remaining_sinks (pl.DataFrame): Sink state per (motive,to) with - capacity and saturation utility penalty. - motive_dur (pl.DataFrame): Mean activity durations by (csp,motive). + costs_aggregator (TransportCostsAggregator): Provides mode/OD costs. + remaining_opportunities (pl.DataFrame): Opportunity state per (activity,to) + with capacity and saturation utility penalty. + activity_dur (pl.DataFrame): Mean activity durations by (csp,activity). iteration (int): Current iteration (1-based). - tmp_folders (dict[str, pathlib.Path]): Paths to “destination-sequences” and “modes”. + destination_sequences (DestinationSequences): Persisted destination sequences for the iteration. + mode_sequences (ModeSequences): Persisted mode sequences for the iteration. home_night_dur (pl.DataFrame): Mean remaining home-night duration by csp. - stay_home_state (pl.DataFrame): Baseline “stay-home” state rows. - parameters (PopulationTripsParameters): Coefficients and tunables. + stay_home_plan (pl.DataFrame): Baseline “stay-home” plan rows. + parameters (Parameters): Coefficients and tunables. Returns: tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame]: - Updated current states, expanded per-step states, and transition events. + Updated current plans, expanded per-step plans, and transition events. """ - - possible_states_steps = self.get_possible_states_steps( - current_states, + + possible_plan_steps = self.get_possible_plan_steps( + current_plans, + current_plan_steps, demand_groups, chains, costs_aggregator, congestion_state, - remaining_sinks, - motive_dur, + remaining_opportunities, + activity_dur, iteration, - motives, + activities, parameters.min_activity_time_constant, - tmp_folders + destination_sequences, + mode_sequences, ) - self._assert_current_states_covered_by_possible_steps( - current_states, - possible_states_steps, + self._assert_current_plans_covered_by_possible_plan_steps( + current_plans, + possible_plan_steps, iteration ) - home_motive = [m for m in motives if m.name == "home"][0] + home_activity = [m for m in activities if m.name == "home"][0] - possible_states_utility = self.get_possible_states_utility( - possible_states_steps, + possible_plan_utility = self.get_possible_plan_utility( + possible_plan_steps, home_night_dur, - home_motive.inputs["parameters"].value_of_time_stay_home, - stay_home_state, + home_activity.inputs["parameters"].value_of_time_stay_home, + stay_home_plan, parameters.min_activity_time_constant ) - - transition_prob = self.get_transition_probabilities(current_states, possible_states_utility) - current_states, transition_events = self.apply_transitions(current_states, transition_prob, iteration) - transition_events = self.add_transition_state_details(transition_events, possible_states_steps) - current_states_steps = self.get_current_states_steps(current_states, possible_states_steps) - - if current_states["n_persons"].is_null().any() or current_states["n_persons"].is_nan().any(): + + transition_prob = self.get_transition_probabilities(current_plans, possible_plan_utility) + current_plans, transition_events = self.apply_transitions(current_plans, transition_prob, iteration) + transition_events = self.add_transition_plan_details(transition_events, possible_plan_steps) + current_plan_steps = self.get_current_plan_steps(current_plans, possible_plan_steps) + + if current_plans["n_persons"].is_null().any() or current_plans["n_persons"].is_nan().any(): raise ValueError("Null or NaN values in the n_persons column, something went wrong.") - - return current_states, current_states_steps, transition_events - def _assert_current_states_covered_by_possible_steps( + return current_plans, current_plan_steps, transition_events + + def _assert_current_plans_covered_by_possible_plan_steps( self, - current_states: pl.DataFrame, - possible_states_steps: pl.LazyFrame, + current_plans: pl.DataFrame, + possible_plan_steps: pl.LazyFrame, iteration: int ) -> None: - """Fail when non-stay-home current states have no step details. + """Fail when non-stay-home current plans have no step details. Args: - current_states (pl.DataFrame): Current aggregate states. - possible_states_steps (pl.LazyFrame): Candidate state-step rows. + current_plans (pl.DataFrame): Current aggregate plans. + possible_plan_steps (pl.LazyFrame): Candidate plan-step rows. iteration (int): Current model iteration. Raises: - ValueError: If any non-stay-home current-state key is absent from - `possible_states_steps`. + ValueError: If any non-stay-home current-plan key is absent from + `possible_plan_steps`. """ - state_keys = ["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id"] + plan_keys = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] missing_current = ( - current_states.lazy() + current_plans.lazy() .filter(pl.col("mode_seq_id") != 0) - .select(state_keys) + .select(plan_keys) .join( - possible_states_steps.select(state_keys).unique(), - on=state_keys, + possible_plan_steps.select(plan_keys).unique(), + on=plan_keys, how="anti", ) .collect(engine="streaming") @@ -130,46 +138,49 @@ def _assert_current_states_covered_by_possible_steps( sample = missing_current.head(5).to_dicts() raise ValueError( - "Current non-stay-home states are missing from possible_states_steps " + "Current non-stay-home plans are missing from possible_plan_steps " f"at iteration={iteration}. Missing={missing_current.height}. " f"Sample keys={sample}" ) - def get_possible_states_steps( + def get_possible_plan_steps( self, - current_states, + current_plans, + current_plan_steps, demand_groups, chains, costs_aggregator, congestion_state, - sinks, - motive_dur, + opportunities, + activity_dur, iteration, - motives, + activities, min_activity_time_constant, - tmp_folders + destination_sequences: DestinationSequences, + mode_sequences: ModeSequences, ): - """Enumerate candidate state steps and compute per-step utilities. + """Enumerate candidate plan steps and compute per-step utilities. Joins latest spatialized chains and mode sequences, merges costs and mean activity durations, filters out saturated destinations, and computes per-step utility = activity utility − travel cost. Args: - current_states (pl.DataFrame): Current aggregate states (used for scoping). + current_plans (pl.DataFrame): Current aggregate plans (used for scoping). demand_groups (pl.DataFrame): Demand groups with csp and sizes. chains (pl.DataFrame): Chain steps with durations per person. - costs_aggregator (TravelCostsAggregator): Per-mode OD costs. - sinks (pl.DataFrame): Sink state per (motive,to). - motive_dur (pl.DataFrame): Mean durations per (csp,motive). + costs_aggregator (TransportCostsAggregator): Per-mode OD costs. + opportunities (pl.DataFrame): Opportunity state per (activity,to). + activity_dur (pl.DataFrame): Mean durations per (csp,activity). iteration (int): Current iteration to pick latest artifacts. activity_utility_coeff (float): Coefficient for activity utility. - tmp_folders (dict[str, pathlib.Path]): Must contain "destination-sequences" and "modes". + destination_sequences (DestinationSequences): Persisted destination sequences for the iteration. + mode_sequences (ModeSequences): Persisted mode sequences for the iteration. Returns: pl.DataFrame: Candidate per-step rows with columns including - ["demand_group_id","csp","motive_seq_id","dest_seq_id","mode_seq_id", - "seq_step_index","motive","from","to","mode", + ["demand_group_id","csp","activity_seq_id","dest_seq_id","mode_seq_id", + "seq_step_index","activity","from","to","mode", "duration_per_pers","utility"]. """ @@ -189,49 +200,61 @@ def get_possible_states_steps( .with_columns(duration_per_pers=pl.col("duration")/pl.col("n_persons")) ) - # Keep only the last occurrence of any motive - destination sequence + # Keep only the last occurrence of any activity - destination sequence # (the sampler might generate the same sequence twice) spat_chains = ( - pl.scan_parquet(tmp_folders['destination-sequences']) - .sort("iteration", descending=True) - .unique( - subset=["demand_group_id", "motive_seq_id", "dest_seq_id", "seq_step_index"], - keep="first" - ) - + destination_sequences.get_cached_asset().lazy() ) - # Keep only the last occurrence of any motive - destination - mode sequence + # Keep only the last occurrence of any activity - destination - mode sequence # (the sampler might generate the same sequence twice) modes = ( - pl.scan_parquet(tmp_folders['modes']) - .sort("iteration", descending=True) - .unique( - subset=["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id", "seq_step_index"], - keep="first" - ) - + mode_sequences.get_cached_asset().lazy() ) # Get the activities values of time value_of_time = ( pl.from_dicts( - [{"motive": m.name, "value_of_time": m.inputs["parameters"].value_of_time} for m in motives] + [{"activity": m.name, "value_of_time": m.inputs["parameters"].value_of_time} for m in activities] ) .with_columns( - motive=pl.col("motive").cast(pl.Enum(motive_dur["motive"].dtype.categories)) - ) - ) - - possible_states_steps = ( + activity=pl.col("activity").cast(pl.Enum(activity_dur["activity"].dtype.categories)) + ) + ) + + possible_plan_step_columns = [ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "mode_seq_id", + "seq_step_index", + "activity", + "from", + "to", + "mode", + "duration_per_pers", + "iteration", + "anchor_to", + "csp", + "cost", + "distance", + "time", + "mean_duration_per_pers", + "value_of_time", + "k_saturation_utility", + "min_activity_time", + "utility", + ] + + possible_plan_steps = ( modes - .join(spat_chains, on=["demand_group_id", "motive_seq_id", "dest_seq_id", "seq_step_index"]) - .join(chains_w_home.lazy(), on=["demand_group_id", "motive_seq_id", "seq_step_index"]) + .join(spat_chains, on=["demand_group_id", "activity_seq_id", "dest_seq_id", "seq_step_index"]) + .join(chains_w_home.lazy(), on=["demand_group_id", "activity_seq_id", "seq_step_index"]) .join(cost_by_od_and_modes.lazy(), on=["from", "to", "mode"]) - .join(motive_dur.lazy(), on=["csp", "motive"]) - .join(value_of_time.lazy(), on="motive") - .join(sinks.select(["to", "motive", "k_saturation_utility"]).lazy(), on=["to", "motive"], how="left") + .join(activity_dur.lazy(), on=["csp", "activity"]) + .join(value_of_time.lazy(), on="activity") + .join(opportunities.select(["to", "activity", "k_saturation_utility"]).lazy(), on=["to", "activity"], how="left") .with_columns( k_saturation_utility=pl.col("k_saturation_utility").fill_null(1.0), @@ -244,40 +267,103 @@ def get_possible_states_steps( - pl.col("cost") ) ) + .with_columns(iteration=pl.col("iteration")) + .select(possible_plan_step_columns) ) + + if current_plan_steps is not None: + zero_mass_steps = ( + current_plan_steps.lazy() + .filter(pl.col("n_persons") <= 0.0) + .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id", "seq_step_index", "n_persons"]) + .collect(engine="streaming") + ) + if zero_mass_steps.height > 0: + sample = zero_mass_steps.head(5).to_dicts() + raise ValueError( + "Found carried-forward current_plan_steps with non-positive n_persons while " + f"building possible_plan_steps at iteration={iteration}. " + f"Invalid rows={zero_mass_steps.height}. Sample={sample}" + ) + + current_possible_plan_steps = ( + current_plan_steps.lazy() + .with_columns( + duration_per_pers=pl.col("duration") / pl.col("n_persons"), + iteration=pl.lit(iteration).cast(pl.UInt32), + anchor_to=pl.col("to"), + ) + .join(demand_groups.select(["demand_group_id", "csp"]).lazy(), on="demand_group_id") + .join(cost_by_od_and_modes.lazy(), on=["from", "to", "mode"]) + .join(activity_dur.lazy(), on=["csp", "activity"]) + .join(value_of_time.lazy(), on="activity") + .join( + opportunities.select(["to", "activity", "k_saturation_utility"]).lazy(), + on=["to", "activity"], + how="left", + ) + .with_columns( + k_saturation_utility=pl.col("k_saturation_utility").fill_null(1.0), + min_activity_time=pl.col("mean_duration_per_pers") * math.exp(-min_activity_time_constant), + ) + .with_columns( + utility=( + pl.col("k_saturation_utility") + * pl.col("value_of_time") + * pl.col("mean_duration_per_pers") + * (pl.col("duration_per_pers") / pl.col("min_activity_time")).log().clip(0.0) + - pl.col("cost") + ) + ) + .select(possible_plan_step_columns) + ) + + possible_plan_steps = ( + pl.concat([possible_plan_steps, current_possible_plan_steps], how="vertical_relaxed") + .unique( + subset=[ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "mode_seq_id", + "seq_step_index", + ], + keep="first", + ) + ) - return possible_states_steps - + return possible_plan_steps + - def get_possible_states_utility( + def get_possible_plan_utility( self, - possible_states_steps, + possible_plan_steps, home_night_dur, value_of_time_stay_home, - stay_home_state, + stay_home_plan, min_activity_time_constant ): - """Aggregate per-step utilities to state-level utilities (incl. home-night). + """Aggregate per-step utilities to plan-level utilities (incl. home-night). Sums step utilities per state, adds home-night utility, prunes dominated states, and appends the explicit stay-home baseline. Args: - possible_states_steps (pl.DataFrame): Candidate step rows with per-step utility. + possible_plan_steps (pl.DataFrame): Candidate step rows with per-step utility. home_night_dur (pl.DataFrame): Mean home-night duration by csp. stay_home_utility_coeff (float): Coefficient for home-night utility. - stay_home_state (pl.DataFrame): Baseline state rows to append. + stay_home_plan (pl.DataFrame): Baseline plan rows to append. Returns: - pl.DataFrame: State-level utilities with - ["demand_group_id","motive_seq_id","mode_seq_id","dest_seq_id","utility"]. + pl.DataFrame: Plan-level utilities with + ["demand_group_id","activity_seq_id","mode_seq_id","dest_seq_id","utility"]. """ - possible_states_utility = ( + possible_plan_utility = ( - possible_states_steps - .group_by(["demand_group_id", "csp", "motive_seq_id", "dest_seq_id", "mode_seq_id"]) + possible_plan_steps + .group_by(["demand_group_id", "csp", "activity_seq_id", "dest_seq_id", "mode_seq_id"]) .agg( utility=pl.col("utility").sum(), home_night_per_pers=24.0 - pl.col("duration_per_pers").sum() @@ -304,68 +390,68 @@ def get_possible_states_utility( (pl.col("utility") > pl.col("utility").max().over(["demand_group_id"]) - 5.0) ) - .select(["demand_group_id", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility"]) + .select(["demand_group_id", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility"]) ) - possible_states_utility = ( + possible_plan_utility = ( pl.concat([ - possible_states_utility, + possible_plan_utility, ( - stay_home_state.lazy() - .select(["demand_group_id", "motive_seq_id", "mode_seq_id", "dest_seq_id", "utility"]) + stay_home_plan.lazy() + .select(["demand_group_id", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility"]) ) ]) ) - return possible_states_utility + return possible_plan_utility def get_transition_probabilities( self, - current_states: pl.DataFrame, - possible_states_utility: pl.LazyFrame, + current_plans: pl.DataFrame, + possible_plan_utility: pl.LazyFrame, transition_cost: float = 0.0 ) -> pl.DataFrame: - """Compute transition probabilities from current to candidate states. + """Compute transition probabilities from current to candidate plans. Uses softmax over Δutility (with stabilization and pruning) within each demand group and current state key. Args: - current_states (pl.DataFrame): Current states with utilities. - possible_states_utility (pl.DataFrame): Candidate states with utilities. + current_plans (pl.DataFrame): Current plans with utilities. + possible_plan_utility (pl.DataFrame): Candidate plans with utilities. Returns: pl.DataFrame: Transitions with - ["demand_group_id","motive_seq_id","dest_seq_id","mode_seq_id", - "motive_seq_id_trans","dest_seq_id_trans","mode_seq_id_trans", + ["demand_group_id","activity_seq_id","dest_seq_id","mode_seq_id", + "activity_seq_id_trans","dest_seq_id_trans","mode_seq_id_trans", "utility_trans","p_transition"]. """ - state_cols = ["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id"] + plan_cols = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] transition_probabilities = ( - current_states.lazy() - .select(state_cols + ["utility"]) + current_plans.lazy() + .select(plan_cols + ["utility"]) .rename({"utility": "utility_prev_from"}) - # Join the updated utility of the current states - .join(possible_states_utility, on=state_cols) + # Join the updated utility of the current plans + .join(possible_plan_utility, on=plan_cols) - # Join the possible states when they can improve the utility compared to the current states - # (join also the current state so it is included in the probability calculation) + # Join the possible plans when they can improve the utility compared to the current plans + # (join also the current plan so it is included in the probability calculation) .join_where( - possible_states_utility, + possible_plan_utility, ( (pl.col("demand_group_id") == pl.col("demand_group_id_trans")) & ( (pl.col("utility_trans") > pl.col("utility") - 5.0) | ( - (pl.col("motive_seq_id") == pl.col("motive_seq_id_trans")) & + (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) & (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) ) @@ -381,7 +467,7 @@ def get_transition_probabilities( utility_trans=( pl.when( ( - (pl.col("motive_seq_id") == pl.col("motive_seq_id_trans")) & + (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) & (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) ) @@ -393,23 +479,21 @@ def get_transition_probabilities( ) ) - .with_columns( - delta_utility=pl.col("utility_trans") - pl.col("utility_trans").max().over(state_cols) - ) + .with_columns(delta_utility=pl.col("utility_trans") - pl.col("utility_trans").max().over(plan_cols)) .filter( (pl.col("delta_utility") > -5.0) ) .with_columns( - p_transition=pl.col("delta_utility").exp()/pl.col("delta_utility").exp().sum().over(state_cols) + p_transition=pl.col("delta_utility").exp()/pl.col("delta_utility").exp().sum().over(plan_cols) ) # Keep only the first 99% of the distribution .sort("p_transition", descending=True) .with_columns( - p_transition_cum=pl.col("p_transition").cum_sum().over(state_cols), - p_count=pl.col("p_transition").cum_count().over(state_cols) + p_transition_cum=pl.col("p_transition").cum_sum().over(plan_cols), + p_count=pl.col("p_transition").cum_count().over(plan_cols) ) .filter((pl.col("p_transition_cum") < 0.99) | (pl.col("p_count") == 1)) .with_columns( @@ -417,13 +501,13 @@ def get_transition_probabilities( pl.col("p_transition") / pl.col("p_transition").sum() - .over(state_cols)) + .over(plan_cols)) ) .select([ "demand_group_id", - "motive_seq_id", "dest_seq_id", "mode_seq_id", - "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans", + "activity_seq_id", "dest_seq_id", "mode_seq_id", + "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans", "utility_prev_from", pl.col("utility").alias("utility_from_updated"), "utility_trans", @@ -439,38 +523,38 @@ def get_transition_probabilities( def apply_transitions( self, - current_states: pl.DataFrame, + current_plans: pl.DataFrame, transition_probabilities: pl.DataFrame, iteration: int ) -> tuple[pl.DataFrame, pl.DataFrame]: """Apply transition probabilities and emit transition events. - Left-joins transitions onto current states, defaults to self-transition + Left-joins transitions onto current plans, defaults to self-transition when absent, redistributes `n_persons` by `p_transition`, and aggregates by the new state keys. Args: - current_states (pl.DataFrame): Current states with ["n_persons","utility"]. + current_plans (pl.DataFrame): Current plans with ["n_persons","utility"]. transition_probabilities (pl.DataFrame): Probabilities produced by `get_transition_probabilities`. Returns: tuple[pl.DataFrame, pl.DataFrame]: - - Updated `current_states`, aggregated by destination state keys. + - Updated `current_plans`, aggregated by destination plan keys. - `transition_events` with one row per realized transition split. """ - state_cols = ["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id"] + plan_cols = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] transitions = ( - current_states - .join(transition_probabilities, on=state_cols, how="left") + current_plans + .join(transition_probabilities, on=plan_cols, how="left") .with_columns( p_transition=pl.col("p_transition").fill_null(1.0), utility_from_updated=pl.col("utility_from_updated").fill_null(pl.col("utility")), utility_trans=pl.coalesce([pl.col("utility_trans"), pl.col("utility")]), utility_prev_from=pl.coalesce([pl.col("utility_prev_from"), pl.col("utility")]), - motive_seq_id_trans=pl.coalesce([pl.col("motive_seq_id_trans"), pl.col("motive_seq_id")]), + activity_seq_id_trans=pl.coalesce([pl.col("activity_seq_id_trans"), pl.col("activity_seq_id")]), dest_seq_id_trans=pl.coalesce([pl.col("dest_seq_id_trans"), pl.col("dest_seq_id")]), mode_seq_id_trans=pl.coalesce([pl.col("mode_seq_id_trans"), pl.col("mode_seq_id")]), ) @@ -481,11 +565,11 @@ def apply_transitions( # Previous-iteration utility for destination state if it existed already. prev_to_lookup = ( - current_states - .select(["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id", "utility"]) + current_plans + .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id", "utility"]) .rename( { - "motive_seq_id": "motive_seq_id_trans", + "activity_seq_id": "activity_seq_id_trans", "dest_seq_id": "dest_seq_id_trans", "mode_seq_id": "mode_seq_id_trans", "utility": "utility_prev_to", @@ -495,7 +579,7 @@ def apply_transitions( transitions = transitions.join( prev_to_lookup, - on=["demand_group_id", "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], + on=["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], how="left", ) @@ -508,7 +592,7 @@ def apply_transitions( utility_prev_from=pl.col("utility_prev_from"), utility_prev_to=pl.col("utility_prev_to"), is_self_transition=( - (pl.col("motive_seq_id") == pl.col("motive_seq_id_trans")) + (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) & (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) ), @@ -517,10 +601,10 @@ def apply_transitions( [ "iteration", "demand_group_id", - "motive_seq_id", + "activity_seq_id", "dest_seq_id", "mode_seq_id", - "motive_seq_id_trans", + "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans", "n_persons_moved", @@ -535,14 +619,14 @@ def apply_transitions( new_states = ( transitions - .group_by(["demand_group_id", "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]) + .group_by(["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]) .agg( n_persons=pl.col("n_persons_moved").sum(), utility=pl.col("utility_trans").first() ) .rename( { - "motive_seq_id_trans": "motive_seq_id", + "activity_seq_id_trans": "activity_seq_id", "dest_seq_id_trans": "dest_seq_id", "mode_seq_id_trans": "mode_seq_id", } @@ -551,12 +635,12 @@ def apply_transitions( return new_states, transition_events - def add_transition_state_details( + def add_transition_plan_details( self, transition_events: pl.DataFrame, - possible_states_steps: pl.LazyFrame + possible_plan_steps: pl.LazyFrame ) -> pl.DataFrame: - """Attach full from/to state details to transition events. + """Attach full from/to plan details to transition events. This makes transition logs self-contained for diagnostics, so plotting code does not need to recover sequence details from final-state tables. @@ -564,32 +648,32 @@ def add_transition_state_details( Args: transition_events (pl.DataFrame): Transition rows produced by `apply_transitions`. - possible_states_steps (pl.LazyFrame): Candidate state-step rows used - to compute state-level details. + possible_plan_steps (pl.LazyFrame): Candidate plan-step rows used + to compute plan-level details. Returns: pl.DataFrame: Transition events enriched with from/to state details. Raises: ValueError: If non-stay-home transition from/to keys are missing from - the state-details lookup. + the plan-details lookup. """ - state_keys = ["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id"] + plan_keys = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] - state_details = ( - possible_states_steps + plan_details = ( + possible_plan_steps .with_columns( step_desc=pl.format( - "#{} | to: {} | motive: {} | mode: {} | dist_km: {} | time_h: {}", + "#{} | to: {} | activity: {} | mode: {} | dist_km: {} | time_h: {}", pl.col("seq_step_index"), pl.col("to").cast(pl.String), - pl.col("motive").cast(pl.String), + pl.col("activity").cast(pl.String), pl.col("mode").cast(pl.String), pl.col("distance").fill_null(0.0).round(3), pl.col("time").fill_null(0.0).round(3), ) ) - .group_by(state_keys) + .group_by(plan_keys) .agg( trip_count=pl.len().cast(pl.Float64), activity_time=pl.col("duration_per_pers").fill_null(0.0).sum(), @@ -600,7 +684,7 @@ def add_transition_state_details( .collect(engine="streaming") ) - from_details = state_details.rename( + from_details = plan_details.rename( { "trip_count": "trip_count_from", "activity_time": "activity_time_from", @@ -609,9 +693,9 @@ def add_transition_state_details( "steps": "steps_from", } ) - to_details = state_details.rename( + to_details = plan_details.rename( { - "motive_seq_id": "motive_seq_id_trans", + "activity_seq_id": "activity_seq_id_trans", "dest_seq_id": "dest_seq_id_trans", "mode_seq_id": "mode_seq_id_trans", "trip_count": "trip_count_to", @@ -625,16 +709,16 @@ def add_transition_state_details( missing_from_keys = ( transition_events .filter(pl.col("mode_seq_id") != 0) - .select(state_keys) - .join(from_details.select(state_keys), on=state_keys, how="anti") + .select(plan_keys) + .join(from_details.select(plan_keys), on=plan_keys, how="anti") ) missing_to_keys = ( transition_events .filter(pl.col("mode_seq_id_trans") != 0) - .select(["demand_group_id", "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]) + .select(["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]) .join( - to_details.select(["demand_group_id", "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]), - on=["demand_group_id", "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], + to_details.select(["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]), + on=["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], how="anti", ) ) @@ -642,17 +726,17 @@ def add_transition_state_details( sample_from = missing_from_keys.head(5).to_dicts() sample_to = missing_to_keys.head(5).to_dicts() raise ValueError( - "Transition keys are missing from state-details lookup for non-stay-home states. " + "Transition keys are missing from plan-details lookup for non-stay-home plans. " f"Missing from-keys={missing_from_keys.height}, to-keys={missing_to_keys.height}. " f"Sample from={sample_from}. Sample to={sample_to}." ) events_with_details = ( transition_events - .join(from_details, on=state_keys, how="left") + .join(from_details, on=plan_keys, how="left") .join( to_details, - on=["demand_group_id", "motive_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], + on=["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], how="left", ) ) @@ -689,7 +773,7 @@ def add_transition_state_details( raise ValueError( "Transition details are missing for non-stay-home states " f"(from={missing_from}, to={missing_to}). " - "This indicates inconsistent state keys between transitions and possible states." + "This indicates inconsistent plan keys between transitions and possible plans." ) return ( @@ -710,31 +794,31 @@ def add_transition_state_details( ) - def get_current_states_steps(self, current_states, possible_states_steps): - """Expand aggregate states to per-step rows (flows). + def get_current_plan_steps(self, current_plans, possible_plan_steps): + """Expand aggregate plans to per-step rows. Joins selected states back to their step sequences and converts per-person durations to aggregate durations. Args: - current_states (pl.DataFrame): Updated aggregate states. - possible_states_steps (pl.DataFrame): Candidate steps universe. + current_plans (pl.DataFrame): Updated aggregate plans. + possible_plan_steps (pl.DataFrame): Candidate steps universe. Returns: - pl.DataFrame: Per-step flows with columns including - ["demand_group_id","motive_seq_id","dest_seq_id","mode_seq_id", - "seq_step_index","motive","from","to","mode","n_persons","duration"]. + pl.DataFrame: Per-step plan steps with columns including + ["demand_group_id","activity_seq_id","dest_seq_id","mode_seq_id", + "seq_step_index","activity","from","to","mode","n_persons","duration"]. """ - current_states_steps = ( - current_states.lazy() + current_plan_steps = ( + current_plans.lazy() .join( - possible_states_steps.select([ - "demand_group_id", "motive_seq_id", "dest_seq_id", - "mode_seq_id", "seq_step_index", "motive", + possible_plan_steps.select([ + "demand_group_id", "activity_seq_id", "dest_seq_id", + "mode_seq_id", "seq_step_index", "activity", "from", "to", "mode", "duration_per_pers" ]), - on=["demand_group_id", "motive_seq_id", "dest_seq_id", "mode_seq_id"], + on=["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"], how="left" ) .with_columns( @@ -746,7 +830,7 @@ def get_current_states_steps(self, current_states, possible_states_steps): ) - return current_states_steps + return current_plan_steps @@ -756,7 +840,7 @@ def get_new_costs( costs, iteration, n_iter_per_cost_update, - current_states_steps, + current_plan_steps, costs_aggregator, congestion_state=None, run_key=None, @@ -764,7 +848,7 @@ def get_new_costs( ): """Return the OD costs to use after the current iteration. - This method aggregates step-level flows by OD and mode, then delegates + This method aggregates step-level plan steps by OD and mode, then delegates the congestion update decision to ``costs_aggregator``. When congestion updates are disabled, it returns the input ``costs`` unchanged. @@ -773,8 +857,8 @@ def get_new_costs( iteration (int): Current iteration, using 1-based indexing. n_iter_per_cost_update (int): Number of iterations between cost updates. Zero disables congestion updates. - current_states_steps (pl.DataFrame): Step-level flows by mode. - costs_aggregator (TravelCostsAggregator): Aggregator responsible for + current_plan_steps (pl.DataFrame): Step-level plan steps by mode. + costs_aggregator (TransportCostsAggregator): Aggregator responsible for updating and returning the current cost view. run_key (str | None): Optional run identifier used to isolate per-run congestion snapshots. @@ -788,8 +872,8 @@ def get_new_costs( return costs, congestion_state od_flows_by_mode = ( - current_states_steps - .filter(pl.col("motive_seq_id") != 0) + current_plan_steps + .filter(pl.col("activity_seq_id") != 0) .group_by(["from", "to", "mode"]) .agg( flow_volume=pl.col("n_persons").sum() @@ -806,24 +890,24 @@ def get_new_costs( ) - def get_new_sinks( + def get_new_opportunities( self, - current_states_steps, - sinks, - motives + current_plan_steps, + opportunities, + activities ): - """Recompute remaining opportunities per (motive, destination). + """Recompute remaining opportunities per (activity, destination). Subtracts assigned durations from capacities, computes availability and a saturation utility factor. Args: - current_states_steps (pl.DataFrame): Step-level assigned durations. - sinks (pl.DataFrame): Initial capacities per (motive,to). + current_plan_steps (pl.DataFrame): Step-level assigned durations. + opportunities (pl.DataFrame): Initial capacities per (activity,to). Returns: - pl.DataFrame: Updated sinks with - ["motive","to","sink_capacity","k_saturation_utility"]. + pl.DataFrame: Updated opportunities with + ["activity","to","opportunity_capacity","k_saturation_utility"]. """ logging.info("Computing remaining opportunities at destinations...") @@ -832,46 +916,46 @@ def get_new_sinks( pl.from_dicts( [ { - "motive": m.name, + "activity": m.name, "beta": m.inputs["parameters"].saturation_fun_beta, "ref_level": m.inputs["parameters"].saturation_fun_ref_level } - for m in motives + for m in activities ] ) .with_columns( - motive=pl.col("motive").cast(pl.Enum(sinks["motive"].dtype.categories)) + activity=pl.col("activity").cast(pl.Enum(opportunities["activity"].dtype.categories)) ) ) - # Compute the remaining number of opportunities by motive and destination + # Compute the remaining number of opportunities by activity and destination # once assigned flows are accounted for - remaining_sinks = ( + remaining_opportunities = ( - current_states_steps + current_plan_steps .filter( - (pl.col("motive_seq_id") != 0) & - (pl.col("motive") != "home") + (pl.col("activity_seq_id") != 0) & + (pl.col("activity") != "home") ) - .group_by(["to", "motive"]) + .group_by(["to", "activity"]) .agg( - sink_occupation=pl.col("duration").sum() + opportunity_occupation=pl.col("duration").sum() ) - .join(sinks, on=["to", "motive"], how="full", coalesce=True) - .join(saturation_fun_parameters, on="motive") + .join(opportunities, on=["to", "activity"], how="full", coalesce=True) + .join(saturation_fun_parameters, on="activity") .with_columns( - sink_occupation=pl.col("sink_occupation").fill_null(0.0) + opportunity_occupation=pl.col("opportunity_occupation").fill_null(0.0) ) .with_columns( - k=pl.col("sink_occupation")/pl.col("sink_capacity") + k=pl.col("opportunity_occupation")/pl.col("opportunity_capacity") ) .with_columns( k_saturation_utility=(1.0 - pl.col("k").pow(pl.col("beta"))/(pl.col("ref_level").pow(pl.col("beta")))).clip(0.0) ) - .select(["motive", "to", "sink_capacity", "k_saturation_utility"]) + .select(["activity", "to", "opportunity_capacity", "k_saturation_utility"]) ) - return remaining_sinks + return remaining_opportunities diff --git a/mobility/choice_models/add_index.py b/mobility/trips/group_day_trips/plans/sequence_index.py similarity index 85% rename from mobility/choice_models/add_index.py rename to mobility/trips/group_day_trips/plans/sequence_index.py index 3191ae83..be2e5a61 100644 --- a/mobility/choice_models/add_index.py +++ b/mobility/trips/group_day_trips/plans/sequence_index.py @@ -1,12 +1,15 @@ +import pathlib + import polars as pl -def add_index(df, col, index_col_name, tmp_folders): + +def add_index(df, col, index_col_name, index_folder: pathlib.Path): """ Ensure a stable integer index exists for a categorical or string column. This function maintains an append-only mapping between unique values in `df[col]` and a numeric index column named `index_col_name`. The mapping is - persisted to a parquet file in the workspace (`tmp_folders["sequences-index"]`), + persisted to a parquet file in the workspace index folder, so the same values always map to the same ids across iterations of the population trips sampling. @@ -25,8 +28,8 @@ def add_index(df, col, index_col_name, tmp_folders): Name of the column in `df` whose unique values should be indexed. index_col_name : str Name of the numeric index column to add to `df`. - tmp_folders : dict[str, pathlib.Path] - Dictionary of workspace folders; must contain "sequences-index". + index_folder : pathlib.Path + Folder where the persisted index parquet should live. Returns ------- @@ -34,7 +37,7 @@ def add_index(df, col, index_col_name, tmp_folders): A copy of `df` with `index_col_name` added. """ - index_path = tmp_folders["sequences-index"] / (index_col_name + ".parquet") + index_path = pathlib.Path(index_folder) / (index_col_name + ".parquet") if index_path.exists() is False: @@ -70,4 +73,4 @@ def add_index(df, col, index_col_name, tmp_folders): df = df.join(index, on=col) - return df \ No newline at end of file + return df diff --git a/mobility/trips/group_day_trips/transitions/__init__.py b/mobility/trips/group_day_trips/transitions/__init__.py new file mode 100644 index 00000000..106193fc --- /dev/null +++ b/mobility/trips/group_day_trips/transitions/__init__.py @@ -0,0 +1,10 @@ +from .congestion_state import CongestionState +from .transition_metrics import state_waterfall +from .transition_schema import TRANSITION_EVENT_COLUMNS, TRANSITION_EVENT_SCHEMA + +__all__ = [ + "CongestionState", + "state_waterfall", + "TRANSITION_EVENT_COLUMNS", + "TRANSITION_EVENT_SCHEMA", +] diff --git a/mobility/choice_models/congestion_state.py b/mobility/trips/group_day_trips/transitions/congestion_state.py similarity index 92% rename from mobility/choice_models/congestion_state.py rename to mobility/trips/group_day_trips/transitions/congestion_state.py index 6a55bcff..04f26f64 100644 --- a/mobility/choice_models/congestion_state.py +++ b/mobility/trips/group_day_trips/transitions/congestion_state.py @@ -1,6 +1,6 @@ from dataclasses import dataclass -from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset @dataclass(frozen=True) diff --git a/mobility/choice_models/transition_metrics.py b/mobility/trips/group_day_trips/transitions/transition_metrics.py similarity index 98% rename from mobility/choice_models/transition_metrics.py rename to mobility/trips/group_day_trips/transitions/transition_metrics.py index a93e3d8e..1e2b8bd0 100644 --- a/mobility/choice_models/transition_metrics.py +++ b/mobility/trips/group_day_trips/transitions/transition_metrics.py @@ -4,7 +4,7 @@ import plotly.graph_objects as go import polars as pl -from mobility.choice_models.transition_schema import TRANSITION_EVENT_COLUMNS +from .transition_schema import TRANSITION_EVENT_COLUMNS Quantity = Literal["distance", "utility", "travel_time", "trip_count"] @@ -129,7 +129,7 @@ def _validate_transition_inputs(transitions_df: pl.DataFrame) -> None: raise ValueError( "Missing required transition columns for `state_waterfall`: " + ", ".join(missing) - + ". Rerun PopulationTrips to regenerate transitions with embedded state details." + + ". Rerun GroupDayTrips to regenerate transitions with embedded state details." ) null_utility = transitions_df.filter( @@ -139,7 +139,7 @@ def _validate_transition_inputs(transitions_df: pl.DataFrame) -> None: if null_utility.height > 0: raise ValueError( "Found null utilities in transitions used by `state_waterfall` " - f"({null_utility.height} rows). Rerun PopulationTrips." + f"({null_utility.height} rows). Rerun GroupDayTrips." ) @@ -288,10 +288,10 @@ def _enrich_transitions( .with_columns(demand_group_id=pl.col("demand_group_id").cast(pl.UInt32)) .join(demand_group_keys, on="demand_group_id", how="left") .with_columns( - motive_seq_id=pl.col("motive_seq_id").cast(pl.UInt32), + activity_seq_id=pl.col("activity_seq_id").cast(pl.UInt32), dest_seq_id=pl.col("dest_seq_id").cast(pl.UInt32), mode_seq_id=pl.col("mode_seq_id").cast(pl.UInt32), - motive_seq_id_trans=pl.col("motive_seq_id_trans").cast(pl.UInt32), + activity_seq_id_trans=pl.col("activity_seq_id_trans").cast(pl.UInt32), dest_seq_id_trans=pl.col("dest_seq_id_trans").cast(pl.UInt32), mode_seq_id_trans=pl.col("mode_seq_id_trans").cast(pl.UInt32), home_zone_id_str=pl.col("home_zone_id").cast(pl.String), @@ -315,14 +315,14 @@ def _enrich_transitions( state_from=pl.format( "dg{}-m{}-d{}-mo{}", pl.col("demand_group_id"), - pl.col("motive_seq_id"), + pl.col("activity_seq_id"), pl.col("dest_seq_id"), pl.col("mode_seq_id"), ), state_to=pl.format( "dg{}-m{}-d{}-mo{}", pl.col("demand_group_id"), - pl.col("motive_seq_id_trans"), + pl.col("activity_seq_id_trans"), pl.col("dest_seq_id_trans"), pl.col("mode_seq_id_trans"), ), @@ -685,8 +685,8 @@ def _tokenize_line(line: str) -> list[str]: ordered = [step_id] if "to" in fields: ordered.append(f"to: {fields['to']}") - if "motive" in fields: - ordered.append(f"motive: {fields['motive']}") + if "activity" in fields: + ordered.append(f"activity: {fields['activity']}") if "mode" in fields: ordered.append(f"mode: {fields['mode']}") if "dist_km" in fields: diff --git a/mobility/choice_models/transition_schema.py b/mobility/trips/group_day_trips/transitions/transition_schema.py similarity index 84% rename from mobility/choice_models/transition_schema.py rename to mobility/trips/group_day_trips/transitions/transition_schema.py index 2e7cd05b..b9b8769e 100644 --- a/mobility/choice_models/transition_schema.py +++ b/mobility/trips/group_day_trips/transitions/transition_schema.py @@ -1,8 +1,8 @@ """Shared transition-events schema and column list. Used by: -- `StateUpdater` when producing transition events. -- `PopulationTrips` when writing empty transition tables. +- `PlanUpdater` when producing transition events. +- `GroupDayTrips` when writing empty transition tables. - `transition_metrics` when validating cached transitions. """ @@ -12,10 +12,10 @@ TRANSITION_EVENT_SCHEMA: dict[str, pl.DataType] = { "iteration": pl.UInt32, "demand_group_id": pl.UInt32, - "motive_seq_id": pl.UInt32, + "activity_seq_id": pl.UInt32, "dest_seq_id": pl.UInt32, "mode_seq_id": pl.UInt32, - "motive_seq_id_trans": pl.UInt32, + "activity_seq_id_trans": pl.UInt32, "dest_seq_id_trans": pl.UInt32, "mode_seq_id_trans": pl.UInt32, "n_persons_moved": pl.Float64, diff --git a/mobility/trips/individual_year_trips/__init__.py b/mobility/trips/individual_year_trips/__init__.py new file mode 100644 index 00000000..744a36b3 --- /dev/null +++ b/mobility/trips/individual_year_trips/__init__.py @@ -0,0 +1,19 @@ +from mobility.runtime.assets.file_asset import FileAsset +from mobility.surveys import MobilitySurveyAggregator +from mobility.surveys.france import EMPMobilitySurvey +from mobility.impacts.default_gwp import DefaultGWP + +from .safe_sample import filter_database, safe_sample +from .sample_travels import sample_travels +from .individual_year_trips import IndividualYearTrips + +__all__ = [ + "DefaultGWP", + "EMPMobilitySurvey", + "FileAsset", + "IndividualYearTrips", + "MobilitySurveyAggregator", + "filter_database", + "safe_sample", + "sample_travels", +] diff --git a/mobility/trips.py b/mobility/trips/individual_year_trips/individual_year_trips.py similarity index 98% rename from mobility/trips.py rename to mobility/trips/individual_year_trips/individual_year_trips.py index eb9a0817..efc45c03 100644 --- a/mobility/trips.py +++ b/mobility/trips/individual_year_trips/individual_year_trips.py @@ -7,18 +7,18 @@ import numpy as np from rich.progress import Progress -from mobility.file_asset import FileAsset +from mobility.runtime.assets.file_asset import FileAsset -from mobility.safe_sample import safe_sample, filter_database -from mobility.sample_travels import sample_travels -from mobility.parsers.mobility_survey import MobilitySurvey, MobilitySurveyAggregator -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey -from mobility.transport_modes.default_gwp import DefaultGWP +from .safe_sample import safe_sample, filter_database +from .sample_travels import sample_travels +from mobility.surveys import MobilitySurvey, MobilitySurveyAggregator +from mobility.surveys.france import EMPMobilitySurvey +from mobility.impacts.default_gwp import DefaultGWP from typing import Callable, Dict -class Trips(FileAsset): +class IndividualYearTrips(FileAsset): """ A class to model and generate trips based on a population asset and mobility survey data. diff --git a/mobility/safe_sample.py b/mobility/trips/individual_year_trips/safe_sample.py similarity index 100% rename from mobility/safe_sample.py rename to mobility/trips/individual_year_trips/safe_sample.py diff --git a/mobility/sample_travels.py b/mobility/trips/individual_year_trips/sample_travels.py similarity index 100% rename from mobility/sample_travels.py rename to mobility/trips/individual_year_trips/sample_travels.py diff --git a/mobility/ui/assets/dashExtensions_default.js b/mobility/ui/assets/dashExtensions_default.js deleted file mode 100644 index ffff1234..00000000 --- a/mobility/ui/assets/dashExtensions_default.js +++ /dev/null @@ -1,29 +0,0 @@ -window.dashExtensions = Object.assign({}, window.dashExtensions, { - default: { - function0: function(feature, context) { - - const { - classes, - colorscale, - style, - colorProp - } = context.hideout || {}; - const value = feature.properties[colorProp]; - - style.fillColor = 'gray'; - - if (value !== undefined && value !== null) { - for (let i = 0; i < classes.length - 1; ++i) { - if (value > classes[i] && value <= classes[i + 1]) { - style.fillColor = colorscale[i]; - break; - } - } - } - - return style; - - } - - } -}); \ No newline at end of file diff --git a/mobility/ui/ui.py b/mobility/ui/ui.py deleted file mode 100644 index 91edc024..00000000 --- a/mobility/ui/ui.py +++ /dev/null @@ -1,343 +0,0 @@ -import pathlib -import geopandas as gpd -import dash_leaflet as dl -import dash_leaflet.express as dlx -import dash -import sqlite3 -import json -import dash_bootstrap_components as dbc -import pandas as pd - -import matplotlib.pyplot as plt -import matplotlib.colors as colors - -from mapclassify import classify - -from dash_extensions.javascript import assign - -app = dash.Dash( - external_stylesheets=[dbc.themes.BOOTSTRAP] -) - -app.layout = dash.html.Div( - children=[ - dash.dcc.Store("paths-store"), - dbc.Row( - children=[ - dbc.Col( - width=3, - style={"padding": "2em"}, - children=[ - dash.html.H1("Mobility"), - dash.html.Hr(), - dbc.Row( - children=dbc.Col( - children=[ - dash.html.H5("Set up"), - ] - ) - ), - dbc.Row( - style={"margin-bottom": "1em"}, - children=dbc.Col( - children=[ - dbc.Label("Project folder"), - dbc.Input( - id="project-path-input" - ) - ] - ) - ), - dbc.Row( - dbc.Col( - children=dbc.Button( - id="update-button", - outline=True, - color="primary", - children="Update data links" - ) - ) - ), - dash.html.Hr(), - dbc.Row( - children=dbc.Col( - children=[ - dash.html.H5("Transport zones"), - ] - ) - ), - dbc.Row( - style={"margin-bottom": "1em"}, - children=dbc.Col( - children=[ - dbc.Label("Version"), - dash.dcc.Dropdown( - id="transport-zones-version-dropdown" - ) - ] - ) - ), - dbc.Row( - dbc.Col( - children=dbc.Button( - id="visualize-transport-zones-button", - outline=True, - color="primary", - children="Visualize" - ) - ) - ), - dash.html.Hr(), - dbc.Row( - children=dbc.Col( - children=[ - dash.html.H5("Transport costs"), - ] - ) - ), - dbc.Row( - style={"margin-bottom": "1em"}, - children=dbc.Col( - children=[ - dbc.Label("Mode"), - dash.dcc.Dropdown( - id="transport-costs-modes-dropdown" - ) - ] - ) - ), - dbc.Row( - style={"margin-bottom": "1em"}, - children=dbc.Col( - children=[ - dbc.Label("Version"), - dash.dcc.Dropdown( - id="transport-costs-version-dropdown" - ) - ] - ) - ), - dbc.Row( - style={"margin-bottom": "1em"}, - children=dbc.Col( - children=[ - dbc.Label("Origin (transport zone id)"), - dash.dcc.Dropdown( - id="transport-costs-origin-dropdown" - ) - ] - ) - ), - dbc.Row( - dbc.Col( - children=dbc.Button( - id="visualize-transport-costs-button", - outline=True, - color="primary", - children="Visualize" - ) - ) - ), - ] - ), - dbc.Col( - children=dl.Map( - id="map", - children=dl.TileLayer(), - center=[46.5545527, 4.4508261], zoom=7, - style={'height': '100vh'} - ) - ) - ] - ) - - - ] -) - - -@app.callback( - dash.Output("paths-store", "data"), - dash.Input("update-button", "n_clicks"), - dash.State("project-path-input", "value"), - prevent_initial_call=True -) -def update_file_paths(n, project_path): - - if project_path is None: - raise dash.exceptions.PreventUpdate - - db_path = pathlib.Path(project_path) / "ui.sqlite" - - if db_path.exists() is False: - raise dash.exceptions.PreventUpdate - - with sqlite3.connect(db_path) as conn: - cursor = conn.cursor() - cursor.execute("SELECT file_name, inputs_hash, cache_path FROM ui_cache") - rows = cursor.fetchall() - - ui_db_dict = {} - - for file_name, inputs_hash, cache_path in rows: - if file_name not in ui_db_dict: - ui_db_dict[file_name] = {} - ui_db_dict[file_name][inputs_hash] = cache_path - - return ui_db_dict - - - -@app.callback( - dash.Output("transport-zones-version-dropdown", "options"), - dash.Output("transport-costs-modes-dropdown", "options"), - dash.Input("paths-store", "data"), - prevent_initial_call=True -) -def update_options(data): - - tz_options = [{"value": cache_path, "label": inputs_hash} for inputs_hash, cache_path in data["transport_zones.gpkg"].items()] - - tc_keys = [k for k in data.keys() if "travel_costs_" in k] - tc_keys = list(set(tc_keys)) - tc_keys = [{"value": k, "label": k.replace("travel_costs_", "").replace(".parquet", "")} for k in tc_keys] - - return tz_options, tc_keys - - - -@app.callback( - dash.Output("transport-costs-version-dropdown", "options"), - dash.Input("transport-costs-modes-dropdown", "value"), - dash.State("paths-store", "data"), - prevent_initial_call=True -) -def update_transport_costs_version_options(mode, data): - - options = [{"value": cache_path, "label": inputs_hash} for inputs_hash, cache_path in data[mode].items()] - - return options - - -@app.callback( - dash.Output("transport-costs-origin-dropdown", "options"), - dash.Input("transport-costs-version-dropdown", "value"), - prevent_initial_call=True -) -def update_transport_costs_origin_options(path): - - if path is not None: - - tc = pd.read_parquet(path) - options = [{"value": tz_id, "label": tz_id} for tz_id in tc["from"].unique()] - - else: - - options = [] - - return options - - - - -# Function to generate color scale from colormap -def get_color_scale(colormap_name, num_classes): - cmap = plt.get_cmap(colormap_name, num_classes) - return [colors.rgb2hex(cmap(i)) for i in range(cmap.N)] - -colorscale = get_color_scale("magma", 9) -colorscale.reverse() - -style_fun = assign( - """ - function(feature, context){ - - const {classes, colorscale, style, colorProp} = context.hideout || {}; - const value = feature.properties[colorProp]; - - style.fillColor = 'gray'; - - if (value !== undefined && value !== null) { - for (let i = 0; i < classes.length-1; ++i) { - if (value > classes[i] && value <= classes[i+1]) { - style.fillColor = colorscale[i]; - break; - } - } - } - - return style; - - } - """ -) - - -@app.callback( - dash.Output("map", "children"), - dash.Input("visualize-transport-zones-button", "n_clicks"), - dash.Input("visualize-transport-costs-button", "n_clicks"), - dash.State("transport-zones-version-dropdown", "value"), - dash.State("transport-costs-version-dropdown", "value"), - dash.State("transport-costs-origin-dropdown", "value"), - prevent_initial_call=True -) -def show_transport_zones(n1, n2, tz_path, tc_path, origin): - - transport_zones_path = pathlib.Path(tz_path) - transport_zones = gpd.read_file(transport_zones_path) - - hideout = None - style_handle = None - - if tc_path is not None and origin is not None: - - travel_costs = pd.read_parquet(tc_path) - - transport_zones = pd.merge( - transport_zones, - travel_costs[travel_costs["from"] == origin], - left_on="transport_zone_id", - right_on="to", - how="left" - ) - - classifier = classify(transport_zones["time"].dropna(), scheme="quantiles", k=8) - classes = classifier.bins.tolist() - - classes = [0.0] + classes + [1000.0] - - style = dict(weight=2, opacity=1, color='white', fillOpacity=0.7) - - hideout = dict( - colorscale=colorscale, - classes=classes, - style=style, - colorProp="time" - ) - - style_handle = style_fun - - transport_zones_gbf = json.loads(transport_zones.to_json(to_wgs84=True)) - transport_zones_gbf = dlx.geojson_to_geobuf(transport_zones_gbf) - - children = [ - dl.TileLayer(), - dl.GeoJSON( - data=transport_zones_gbf, - format="geobuf", - zoomToBounds=True, - style=style_handle, - hideout=hideout - ) - ] - - return children - - - - - -if __name__ == '__main__': - - app.run(debug=True) \ No newline at end of file diff --git a/tests/back/integration/test_003_car_costs_can_be_computed.py b/tests/back/integration/test_003_car_costs_can_be_computed.py index ac1982b4..36bd7bea 100644 --- a/tests/back/integration/test_003_car_costs_can_be_computed.py +++ b/tests/back/integration/test_003_car_costs_can_be_computed.py @@ -65,7 +65,7 @@ def test_003_car_costs_can_be_computed(test_data, safe_json): radius=test_data["transport_zones_radius"], ) - car = mobility.CarMode(transport_zones) + car = mobility.Car(transport_zones) costs = car.travel_costs.get() # Some implementations return a DataFrame; others return a dict with paths. diff --git a/tests/back/integration/test_004_public_transport_costs_can_be_computed.py b/tests/back/integration/test_004_public_transport_costs_can_be_computed.py index 0132faee..836cecb7 100644 --- a/tests/back/integration/test_004_public_transport_costs_can_be_computed.py +++ b/tests/back/integration/test_004_public_transport_costs_can_be_computed.py @@ -87,7 +87,7 @@ def test_004_public_transport_costs_can_be_computed(test_data, safe_json): radius=test_data["transport_zones_radius"], ) - walk = mobility.WalkMode(transport_zones) + walk = mobility.Walk(transport_zones) transfer = mobility.IntermodalTransfer( max_travel_time=20.0 / 60.0, @@ -106,7 +106,7 @@ def test_004_public_transport_costs_can_be_computed(test_data, safe_json): ), ) - public_transport = mobility.PublicTransportMode( + public_transport = mobility.PublicTransport( transport_zones, first_leg_mode=walk, first_intermodal_transfer=transfer, diff --git a/tests/back/integration/test_005_mobility_surveys_can_be_prepared.py b/tests/back/integration/test_005_mobility_surveys_can_be_prepared.py index 277c363b..29033bb6 100644 --- a/tests/back/integration/test_005_mobility_surveys_can_be_prepared.py +++ b/tests/back/integration/test_005_mobility_surveys_can_be_prepared.py @@ -4,7 +4,7 @@ import pandas as pd import pytest -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey, ENTDMobilitySurvey +from mobility.surveys.france import EMPMobilitySurvey, ENTDMobilitySurvey @pytest.fixture diff --git a/tests/back/integration/test_006_trips_can_be_sampled.py b/tests/back/integration/test_006_trips_can_be_sampled.py index 4f027856..940c820b 100644 --- a/tests/back/integration/test_006_trips_can_be_sampled.py +++ b/tests/back/integration/test_006_trips_can_be_sampled.py @@ -116,7 +116,7 @@ def test_006_trips_can_be_sampled(test_data, safe_json): sample_size=test_data["population_sample_size"], ) - trips = mobility.Trips(population).get() + trips = mobility.IndividualYearTrips(population).get() trips_df = _to_pandas(trips) assert trips_df.shape[0] > 0 diff --git a/tests/back/integration/test_007_trips_can_be_localized.py b/tests/back/integration/test_007_trips_can_be_localized.py deleted file mode 100644 index 22b49b8a..00000000 --- a/tests/back/integration/test_007_trips_can_be_localized.py +++ /dev/null @@ -1,51 +0,0 @@ -import mobility -import pytest - -# Uncomment the next lines if you want to test interactively, outside of pytest, -# but still need the setup phase and input data defined in conftest.py -# Don't forget to recomment or the tests will not pass ! - -# from conftest import get_test_data, do_mobility_setup -# do_mobility_setup(True, False, False) -# test_data = get_test_data() -""" -@pytest.mark.dependency( - depends=["tests/test_006_trips_can_be_sampled.py::test_006_trips_can_be_sampled"], - scope="session" - ) -def test_007_trips_can_be_localized(test_data): - - transport_zones = mobility.TransportZones( - local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], - radius=test_data["transport_zones_radius"] - ) - - car = mobility.CarMode(transport_zones) - - work_dest_params = mobility.WorkDestinationChoiceModelParameters() - - work_dest_cm = mobility.WorkDestinationChoiceModel( - transport_zones, - modes=[car], - parameters=work_dest_params, - n_possible_destinations=1 - ) - - work_mode_cm = mobility.TransportModeChoiceModel(work_dest_cm) - - population = mobility.Population( - transport_zones=transport_zones, - sample_size=test_data["population_sample_size"] - ) - - trips = mobility.Trips(population) - - trips_localized = mobility.LocalizedTrips( - trips=trips, - mode_cm_list=[work_mode_cm], - dest_cm_list=[work_dest_cm], - keep_survey_cols=True - ) - trips_localized = trips_localized.get() - - assert trips_localized.shape[0] > 0""" \ No newline at end of file diff --git a/tests/back/integration/test_008_population_trips_can_be_computed.py b/tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py similarity index 82% rename from tests/back/integration/test_008_population_trips_can_be_computed.py rename to tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py index 17fd5201..c58129bd 100644 --- a/tests/back/integration/test_008_population_trips_can_be_computed.py +++ b/tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py @@ -5,10 +5,9 @@ import pandas as pd import mobility -from mobility.choice_models.population_trips import PopulationTrips -from mobility.motives import OtherMotive, HomeMotive, WorkMotive -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import Parameters, GroupDayTrips +from mobility.surveys.france import EMPMobilitySurvey @pytest.fixture @@ -95,7 +94,7 @@ def _to_pandas(val): # dict with path or dataframe-ish if isinstance(val, dict): # common keys - for k in ("weekday_flows", "flows", "path", "data", "output"): + for k in ("weekday_plan_steps", "plan_steps", "path", "data", "output"): if k in val: return _to_pandas(val[k]) @@ -126,7 +125,7 @@ def _to_pandas(val): ], scope="session", ) -def test_008_population_trips_can_be_computed(test_data, safe_json): +def test_008_population_segment_day_plans_can_be_computed(test_data, safe_json): transport_zones = mobility.TransportZones( local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], @@ -139,25 +138,21 @@ def test_008_population_trips_can_be_computed(test_data, safe_json): sample_size=test_data["population_sample_size"], ) - car_mode = mobility.CarMode(transport_zones) - walk_mode = mobility.WalkMode(transport_zones) - bicycle_mode = mobility.BicycleMode(transport_zones) + car_mode = mobility.Car(transport_zones) + walk_mode = mobility.Walk(transport_zones) + bicycle_mode = mobility.Bicycle(transport_zones) mode_registry = mobility.ModeRegistry([car_mode, walk_mode, bicycle_mode]) - public_transport_mode = mobility.PublicTransportMode( + public_transport_mode = mobility.PublicTransport( transport_zones, mode_registry=mode_registry, ) - pop_trips = PopulationTrips( + pop_trips = GroupDayTrips( population=pop, modes=[car_mode, walk_mode, bicycle_mode, public_transport_mode], - motives=[ - HomeMotive(), - WorkMotive(), - OtherMotive(population=pop), - ], + activities=[Home(), Work(), Other(population=pop)], surveys=[emp], - parameters=PopulationTripsParameters( + parameters=Parameters( n_iterations=1, n_iter_per_cost_update=0, alpha=0.01, @@ -170,9 +165,9 @@ def test_008_population_trips_can_be_computed(test_data, safe_json): ) result = pop_trips.get() - # result is expected to expose 'weekday_flows' - flows_raw = result["weekday_flows"] if isinstance(result, dict) else getattr(result, "weekday_flows", result) - df = _to_pandas(flows_raw) + # result is expected to expose 'weekday_plan_steps' + plan_steps_raw = result["weekday_plan_steps"] if isinstance(result, dict) else getattr(result, "weekday_plan_steps", result) + df = _to_pandas(plan_steps_raw) assert hasattr(df, "shape"), f"Expected a DataFrame-like, got {type(df)}" assert df.shape[0] > 0 diff --git a/tests/back/integration/test_009_population_trips_results_can_be_computed.py b/tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py similarity index 83% rename from tests/back/integration/test_009_population_trips_results_can_be_computed.py rename to tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py index 87542ee3..acd55fd8 100644 --- a/tests/back/integration/test_009_population_trips_results_can_be_computed.py +++ b/tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py @@ -5,10 +5,9 @@ import pytest import mobility -from mobility.choice_models.population_trips import PopulationTrips -from mobility.motives import OtherMotive, HomeMotive, WorkMotive -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import Parameters, GroupDayTrips +from mobility.surveys.france import EMPMobilitySurvey @pytest.fixture @@ -108,11 +107,11 @@ def _to_pandas(val): @pytest.mark.dependency( depends=[ - "tests/back/integration/test_008_population_trips_can_be_computed.py::test_008_population_trips_can_be_computed" + "tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py::test_008_population_segment_day_plans_can_be_computed" ], scope="session", ) -def test_009_population_trips_results_can_be_computed(test_data, safe_json): +def test_009_population_segment_day_plans_results_can_be_computed(test_data, safe_json): transport_zones = mobility.TransportZones( local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], @@ -124,12 +123,12 @@ def test_009_population_trips_results_can_be_computed(test_data, safe_json): sample_size=test_data["population_sample_size"], ) - pop_trips = PopulationTrips( + pop_trips = GroupDayTrips( population=pop, - modes=[mobility.CarMode(transport_zones)], - motives=[HomeMotive(), WorkMotive(), OtherMotive(population=pop)], + modes=[mobility.Car(transport_zones)], + activities=[Home(), Work(), Other(population=pop)], surveys=[emp], - parameters=PopulationTripsParameters( + parameters=Parameters( n_iterations=1, n_iter_per_cost_update=0, alpha=0.01, @@ -143,21 +142,21 @@ def test_009_population_trips_results_can_be_computed(test_data, safe_json): # Evaluate various metrics global_metrics = pop_trips.weekday_run.evaluate("global_metrics") - weekday_sink_occupation = pop_trips.weekday_run.evaluate("sink_occupation") + weekday_opportunity_occupation = pop_trips.weekday_run.evaluate("opportunity_occupation") weekday_trip_count_by_demand_group = pop_trips.weekday_run.evaluate("trip_count_by_demand_group") weekday_distance_per_person = pop_trips.weekday_run.evaluate("distance_per_person") weekday_time_per_person = pop_trips.weekday_run.evaluate("time_per_person") # Normalize results to pandas DataFrames gm_df = _to_pandas(global_metrics) - sink_df = _to_pandas(weekday_sink_occupation) + opportunity_df = _to_pandas(weekday_opportunity_occupation) trips_df = _to_pandas(weekday_trip_count_by_demand_group) dist_df = _to_pandas(weekday_distance_per_person) time_df = _to_pandas(weekday_time_per_person) # Assertions assert gm_df.shape[0] > 0 - assert sink_df.shape[0] > 0 + assert opportunity_df.shape[0] > 0 assert trips_df.shape[0] > 0 assert dist_df.shape[0] > 0 assert time_df.shape[0] > 0 diff --git a/tests/back/integration/test_010_population_trips_results_are_reproducible.py b/tests/back/integration/test_010_population_segment_day_plans_results_are_reproducible.py similarity index 65% rename from tests/back/integration/test_010_population_trips_results_are_reproducible.py rename to tests/back/integration/test_010_population_segment_day_plans_results_are_reproducible.py index 9b82ea1f..6c5adcf8 100644 --- a/tests/back/integration/test_010_population_trips_results_are_reproducible.py +++ b/tests/back/integration/test_010_population_segment_day_plans_results_are_reproducible.py @@ -2,18 +2,17 @@ import polars as pl import mobility -from mobility.choice_models.population_trips import PopulationTrips -from mobility.motives import OtherMotive, HomeMotive, WorkMotive -from mobility.choice_models.population_trips_parameters import PopulationTripsParameters -from mobility.parsers.mobility_survey.france import EMPMobilitySurvey +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import Parameters, GroupDayTrips +from mobility.surveys.france import EMPMobilitySurvey @pytest.mark.dependency( depends=[ - "tests/back/integration/test_008_population_trips_can_be_computed.py::test_008_population_trips_can_be_computed" + "tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py::test_008_population_segment_day_plans_can_be_computed" ], scope="session", ) -def test_010_population_trips_results_are_reproducible(test_data): +def test_010_population_segment_day_plans_results_are_reproducible(test_data): transport_zones = mobility.TransportZones( local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], @@ -26,12 +25,12 @@ def test_010_population_trips_results_are_reproducible(test_data): ) # Reuse the results from test 009 - pop_trips = PopulationTrips( + pop_trips = GroupDayTrips( population=pop, - modes=[mobility.CarMode(transport_zones)], - motives=[HomeMotive(), WorkMotive(), OtherMotive(population=pop)], + modes=[mobility.Car(transport_zones)], + activities=[Home(), Work(), Other(population=pop)], surveys=[emp], - parameters=PopulationTripsParameters( + parameters=Parameters( n_iterations=1, n_iter_per_cost_update=0, alpha=0.01, @@ -48,12 +47,12 @@ def test_010_population_trips_results_are_reproducible(test_data): # Remove the results then re run the model with the same inputs pop_trips.remove() - pop_trips = PopulationTrips( + pop_trips = GroupDayTrips( population=pop, - modes=[mobility.CarMode(transport_zones)], - motives=[HomeMotive(), WorkMotive(), OtherMotive(population=pop)], + modes=[mobility.Car(transport_zones)], + activities=[Home(), Work(), Other(population=pop)], surveys=[emp], - parameters=PopulationTripsParameters( + parameters=Parameters( n_iterations=1, n_iter_per_cost_update=0, alpha=0.01, diff --git a/tests/back/integration/test_901_ensure_quickstart_works.py b/tests/back/integration/test_901_ensure_quickstart_works.py index 26ebfc31..42d7a916 100644 --- a/tests/back/integration/test_901_ensure_quickstart_works.py +++ b/tests/back/integration/test_901_ensure_quickstart_works.py @@ -14,8 +14,8 @@ def test_901_ensure_quickstart_works(): spec.loader.exec_module(module) output = module.run_quickstart_ci() - weekday_flows = output["weekday_flows"] + weekday_plan_steps = output["weekday_plan_steps"] global_metrics = output["global_metrics"] - assert weekday_flows.height > 0 + assert weekday_plan_steps.height > 0 assert global_metrics is not None diff --git a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py index cd61109f..006f51e2 100644 --- a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py +++ b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py @@ -5,8 +5,8 @@ import pandas as pd from pydantic import BaseModel -from mobility.choice_models.travel_costs_aggregator import TravelCostsAggregator -from mobility.transport_costs.od_flows_asset import VehicleODFlowsAsset +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset +from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator class _FakeModeParameters(BaseModel): @@ -26,7 +26,7 @@ def _make_mode(*, name: str, congestion: bool): def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): # Use a minimal mode stub with congestion enabled so the test only exercises # the aggregator decision logic, not the real routing/cost stack. - aggregator = TravelCostsAggregator(modes=[_make_mode(name="car", congestion=True)]) + aggregator = TransportCostsAggregator(modes=[_make_mode(name="car", congestion=True)]) od_flows_by_mode = pl.DataFrame( {"from": [1], "to": [2], "mode": ["car"], "flow_volume": [10.0]} ) diff --git a/tests/back/unit/costs/travel_costs/conftest.py b/tests/back/unit/costs/travel_costs/conftest.py index 9c2d4337..84de9b52 100644 --- a/tests/back/unit/costs/travel_costs/conftest.py +++ b/tests/back/unit/costs/travel_costs/conftest.py @@ -8,7 +8,7 @@ @pytest.fixture(autouse=True) def patch_asset_init(monkeypatch): """Make Asset.__init__ a no-op so TravelCosts doesn't run heavy I/O.""" - import mobility.asset as asset_mod + import mobility.runtime.assets.asset as asset_mod def fake_init(self, inputs, cache_path): self.inputs = inputs @@ -49,7 +49,7 @@ def __init__(self, tz, modes): @pytest.fixture def patch_rscript(monkeypatch): - """Fake RScript to capture script paths and run() args.""" + """Fake RScriptRunner to capture script paths and run() args.""" import mobility.travel_costs as mod calls = {"scripts": [], "runs": []} @@ -60,6 +60,6 @@ def __init__(self, script_path): def run(self, args): calls["runs"].append(list(args)) - monkeypatch.setattr(mod, "RScript", FakeRScript) + monkeypatch.setattr(mod, "RScriptRunner", FakeRScript) return calls diff --git a/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py b/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py index b5947f40..ab08fa2f 100644 --- a/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py +++ b/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py @@ -1,7 +1,7 @@ import pytest -from mobility.path_routing_parameters import PathRoutingParameters -from mobility.transport_modes.public_transport.public_transport_graph import ( +from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters +from mobility.transport.modes.public_transport.public_transport_graph import ( PublicTransportRoutingParameters, ) diff --git a/tests/back/unit/domain/asset/conftest.py b/tests/back/unit/domain/asset/conftest.py index 6be91cd6..bd86627e 100644 --- a/tests/back/unit/domain/asset/conftest.py +++ b/tests/back/unit/domain/asset/conftest.py @@ -8,18 +8,18 @@ @pytest.fixture(scope="session", autouse=True) def _ensure_real_mobility_asset_module(): """ - Make sure mobility.asset is imported from your source tree and not replaced by any + Make sure mobility.runtime.assets.asset is imported from your source tree and not replaced by any higher-level test double. We reload the module to restore the real class. """ # If the module was never imported, import it; if it was imported (possibly stubbed), reload it. try: - mod = sys.modules.get("mobility.asset") + mod = sys.modules.get("mobility.runtime.assets.asset") if mod is None: - import_module("mobility.asset") + import_module("mobility.runtime.assets.asset") else: reload(mod) except Exception as exc: # surface import problems early and clearly - pytest.skip(f"Cannot import mobility.asset: {exc}") + pytest.skip(f"Cannot import mobility.runtime.assets.asset: {exc}") # ------------------------------------------------------------ @@ -120,9 +120,9 @@ def capture_writes(self): # --------------------------------------------------------- @pytest.fixture def asset_base_class(_ensure_real_mobility_asset_module): - from mobility.asset import Asset + from mobility.runtime.assets.asset import Asset # Sanity: ensure this is the real class (has the abstract 'get' attribute) - assert hasattr(Asset, "get"), "mobility.asset.Asset does not define .get; a stub may be shadowing it" + assert hasattr(Asset, "get"), "mobility.runtime.assets.asset.Asset does not define .get; a stub may be shadowing it" return Asset diff --git a/tests/back/unit/domain/population/conftest.py b/tests/back/unit/domain/population/conftest.py index 468e1f08..8d0bcb7d 100644 --- a/tests/back/unit/domain/population/conftest.py +++ b/tests/back/unit/domain/population/conftest.py @@ -42,10 +42,10 @@ def _maybe_stub_module(qualified_name: str): except Exception: return _ensure_dummy_module(qualified_name) -file_asset_module = _maybe_stub_module("mobility.file_asset") -parsers_module = _maybe_stub_module("mobility.parsers") -parsers_admin_module = _maybe_stub_module("mobility.parsers.admin_boundaries") -asset_module = _maybe_stub_module("mobility.asset") +file_asset_module = _maybe_stub_module("mobility.runtime.assets.file_asset") +population_pkg = _maybe_stub_module("mobility.population") +parsers_admin_module = _maybe_stub_module("mobility.spatial.admin_boundaries") +asset_module = _maybe_stub_module("mobility.runtime.assets.asset") # Only add stubs if attributes don’t exist yet (don’t overwrite real ones) if not hasattr(file_asset_module, "FileAsset"): @@ -61,19 +61,19 @@ def __init__(self, *args, **kwargs): pass setattr(asset_module, "Asset", _DummyAsset) -if not hasattr(parsers_module, "CityLegalPopulation"): +if not hasattr(population_pkg, "CityLegalPopulation"): class _DummyCityLegalPopulation: def get(self): return pd.DataFrame({"local_admin_unit_id": [], "legal_population": []}) - setattr(parsers_module, "CityLegalPopulation", _DummyCityLegalPopulation) + setattr(population_pkg, "CityLegalPopulation", _DummyCityLegalPopulation) -if not hasattr(parsers_module, "CensusLocalizedIndividuals"): +if not hasattr(population_pkg, "CensusLocalizedIndividuals"): class _DummyCensusLocalizedIndividuals: def __init__(self, region=None): self.region = region def get(self): return pd.DataFrame() - setattr(parsers_module, "CensusLocalizedIndividuals", _DummyCensusLocalizedIndividuals) + setattr(population_pkg, "CensusLocalizedIndividuals", _DummyCensusLocalizedIndividuals) if not hasattr(parsers_admin_module, "get_french_regions_boundaries"): def _dummy_regions_boundaries(): @@ -138,8 +138,8 @@ def _init(self, inputs, cache_path): monkeypatch.setattr(class_object, "__init__", _init, raising=True) - _patch_for("mobility.asset.Asset") - _patch_for("mobility.file_asset.FileAsset") + _patch_for("mobility.runtime.assets.asset.Asset") + _patch_for("mobility.runtime.assets.file_asset.FileAsset") @pytest.fixture(autouse=True) @@ -307,11 +307,11 @@ def fake_sjoin(left_geo_data_frame, right_geo_data_frame, predicate=None, how="i @pytest.fixture(autouse=True) def patch_mobility_parsers(monkeypatch): """ - Patch parsers to provide consistent tiny datasets AND also patch the already-imported + Patch population loaders to provide consistent tiny datasets AND also patch the already-imported names inside mobility.population (because it uses `from ... import ...`). """ - import mobility.parsers as parsers_module_local - import mobility.parsers.admin_boundaries as admin_boundaries_module + import mobility.population as population_pkg_local + import mobility.spatial.admin_boundaries as admin_boundaries_module population_module = sys.modules.get("mobility.population") class CityLegalPopulationFake: @@ -347,18 +347,18 @@ def cities_boundaries_fake(): "INSEE_CAN": ["C1", "C2"], }) - # Patch the parser modules - monkeypatch.setattr(parsers_module_local, "CityLegalPopulation", CityLegalPopulationFake, raising=True) - monkeypatch.setattr(parsers_module_local, "CensusLocalizedIndividuals", CensusLocalizedIndividualsFake, raising=True) + # Patch the population package + monkeypatch.setattr(population_pkg_local, "CityLegalPopulation", CityLegalPopulationFake, raising=True) + monkeypatch.setattr(population_pkg_local, "CensusLocalizedIndividuals", CensusLocalizedIndividualsFake, raising=True) monkeypatch.setattr(admin_boundaries_module, "get_french_regions_boundaries", regions_boundaries_fake, raising=True) monkeypatch.setattr(admin_boundaries_module, "get_french_cities_boundaries", cities_boundaries_fake, raising=True) # Also patch the already-imported names inside mobility.population (if loaded) if population_module is not None: - # population.py did: from mobility.parsers import CityLegalPopulation, CensusLocalizedIndividuals + # population.py did: from mobility.population import CityLegalPopulation, CensusLocalizedIndividuals monkeypatch.setattr(population_module, "CityLegalPopulation", CityLegalPopulationFake, raising=True) monkeypatch.setattr(population_module, "CensusLocalizedIndividuals", CensusLocalizedIndividualsFake, raising=True) - # and: from mobility.parsers.admin_boundaries import get_french_regions_boundaries, get_french_cities_boundaries + # and: from mobility.spatial.admin_boundaries import get_french_regions_boundaries, get_french_cities_boundaries monkeypatch.setattr(population_module, "get_french_regions_boundaries", regions_boundaries_fake, raising=True) monkeypatch.setattr(population_module, "get_french_cities_boundaries", cities_boundaries_fake, raising=True) diff --git a/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py b/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py index 8a605b00..9957fd37 100644 --- a/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py +++ b/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py @@ -70,7 +70,7 @@ def get(self): }) return geopandas_module.GeoDataFrame(data_frame, geometry="geometry") - import mobility.parsers as parsers_module_local + import mobility.population as population_pkg population = population_module.Population( transport_zones=TransportZonesSwissOnly(), @@ -79,7 +79,7 @@ def get(self): ) transport_zones_geo_data_frame = population.inputs["transport_zones"].get() - legal_population_by_city = parsers_module_local.CityLegalPopulation().get() + legal_population_by_city = population_pkg.CityLegalPopulation().get() lau_to_transport_zone_coefficients = ( transport_zones_geo_data_frame[["transport_zone_id", "local_admin_unit_id", "weight"]] .rename(columns={"weight": "lau_to_tz_coeff"}) diff --git a/tests/back/unit/domain/set_params/conftest.py b/tests/back/unit/domain/set_params/conftest.py index 393debde..1fe91020 100644 --- a/tests/back/unit/domain/set_params/conftest.py +++ b/tests/back/unit/domain/set_params/conftest.py @@ -63,34 +63,34 @@ def _fake_files(_package_name): @pytest.fixture(autouse=True) def patch_rscript(monkeypatch): """ - Provide a fake RScript class at mobility.r_utils.r_script.RScript + Provide a fake RScriptRunner class at mobility.runtime.r_integration.r_script_runner.RScriptRunner that records the script path and args instead of running R. """ # Ensure the module tree exists if "mobility" not in sys.modules: sys.modules["mobility"] = types.ModuleType("mobility") - if "mobility.r_utils" not in sys.modules: - sys.modules["mobility.r_utils"] = types.ModuleType("mobility.r_utils") - if "mobility.r_utils.r_script" not in sys.modules: - sys.modules["mobility.r_utils.r_script"] = types.ModuleType("mobility.r_utils.r_script") + if "mobility.runtime.r_integration" not in sys.modules: + sys.modules["mobility.runtime.r_integration"] = types.ModuleType("mobility.runtime.r_integration") + if "mobility.runtime.r_integration.r_script_runner" not in sys.modules: + sys.modules["mobility.runtime.r_integration.r_script_runner"] = types.ModuleType("mobility.runtime.r_integration.r_script_runner") - r_script_mod = sys.modules["mobility.r_utils.r_script"] + r_script_mod = sys.modules["mobility.runtime.r_integration.r_script_runner"] - class _FakeRScript: + class _FakeRScriptRunner: last_script_path = None last_args = None call_count = 0 def __init__(self, script_path): - _FakeRScript.last_script_path = Path(script_path) + _FakeRScriptRunner.last_script_path = Path(script_path) def run(self, args): - _FakeRScript.last_args = list(args) - _FakeRScript.call_count += 1 + _FakeRScriptRunner.last_args = list(args) + _FakeRScriptRunner.call_count += 1 return 0 # pretend success - monkeypatch.setattr(r_script_mod, "RScript", _FakeRScript, raising=True) - return sys.modules["mobility.r_utils.r_script"].RScript # so tests can inspect .last_* + monkeypatch.setattr(r_script_mod, "RScriptRunner", _FakeRScriptRunner, raising=True) + return sys.modules["mobility.runtime.r_integration.r_script_runner"].RScriptRunner # so tests can inspect .last_* @pytest.fixture diff --git a/tests/back/unit/domain/set_params/test_025_set_env_variable_sets_and_skips.py b/tests/back/unit/domain/set_params/test_025_set_env_variable_sets_and_skips.py index f498ec95..46787098 100644 --- a/tests/back/unit/domain/set_params/test_025_set_env_variable_sets_and_skips.py +++ b/tests/back/unit/domain/set_params/test_025_set_env_variable_sets_and_skips.py @@ -1,5 +1,5 @@ import os -from mobility.set_params import set_env_variable +from mobility.config import set_env_variable def test_set_env_variable_sets_when_value_present(monkeypatch): set_env_variable("MOBILITY_CERT_FILE", "/tmp/cert.pem") diff --git a/tests/back/unit/domain/set_params/test_026_setup_package_data_folder_path_provided_and_default_yes.py b/tests/back/unit/domain/set_params/test_026_setup_package_data_folder_path_provided_and_default_yes.py index 16170d11..8862f1e2 100644 --- a/tests/back/unit/domain/set_params/test_026_setup_package_data_folder_path_provided_and_default_yes.py +++ b/tests/back/unit/domain/set_params/test_026_setup_package_data_folder_path_provided_and_default_yes.py @@ -1,6 +1,6 @@ import os from pathlib import Path -from mobility.set_params import setup_package_data_folder_path +from mobility.config import setup_package_data_folder_path def test_setup_package_data_folder_path_provided_creates_and_sets_env(tmp_path): provided = tmp_path / "pkgdata" @@ -11,7 +11,7 @@ def test_setup_package_data_folder_path_provided_creates_and_sets_env(tmp_path): def test_setup_package_data_folder_path_default_accepts(tmp_home, fake_input_yes): # No argument -> default to ~/.mobility/data under our tmp_home - from mobility.set_params import setup_package_data_folder_path + from mobility.config import setup_package_data_folder_path setup_package_data_folder_path(None) default_path = Path(tmp_home) / ".mobility" / "data" assert default_path.exists() diff --git a/tests/back/unit/domain/set_params/test_027_setup_project_data_folder_path_provided_and_default_yes.py b/tests/back/unit/domain/set_params/test_027_setup_project_data_folder_path_provided_and_default_yes.py index cba86bc1..7d186480 100644 --- a/tests/back/unit/domain/set_params/test_027_setup_project_data_folder_path_provided_and_default_yes.py +++ b/tests/back/unit/domain/set_params/test_027_setup_project_data_folder_path_provided_and_default_yes.py @@ -1,6 +1,6 @@ import os from pathlib import Path -from mobility.set_params import setup_package_data_folder_path, setup_project_data_folder_path +from mobility.config import setup_package_data_folder_path, setup_project_data_folder_path def test_setup_project_data_folder_provided_creates_and_sets_env(tmp_path): provided = tmp_path / "projdata" diff --git a/tests/back/unit/domain/set_params/test_028_install_and_set_params_end_to_end.py b/tests/back/unit/domain/set_params/test_028_install_and_set_params_end_to_end.py index cba86bc1..7d186480 100644 --- a/tests/back/unit/domain/set_params/test_028_install_and_set_params_end_to_end.py +++ b/tests/back/unit/domain/set_params/test_028_install_and_set_params_end_to_end.py @@ -1,6 +1,6 @@ import os from pathlib import Path -from mobility.set_params import setup_package_data_folder_path, setup_project_data_folder_path +from mobility.config import setup_package_data_folder_path, setup_project_data_folder_path def test_setup_project_data_folder_provided_creates_and_sets_env(tmp_path): provided = tmp_path / "projdata" diff --git a/tests/back/unit/domain/transport_zones/conftest.py b/tests/back/unit/domain/transport_zones/conftest.py index 94e52245..ecc5eb3a 100644 --- a/tests/back/unit/domain/transport_zones/conftest.py +++ b/tests/back/unit/domain/transport_zones/conftest.py @@ -37,13 +37,13 @@ def fake_inputs_hash(): # ----------------------------------------------------------- -# Patch the exact FileAsset used by mobility.transport_zones +# Patch the exact FileAsset used by mobility.spatial.transport_zones # ----------------------------------------------------------- @pytest.fixture(autouse=True) def patch_transportzones_fileasset_init(monkeypatch, project_dir, fake_inputs_hash): """ - Patch the *exact* FileAsset class used by mobility.transport_zones at import time. + Patch the *exact* FileAsset class used by mobility.spatial.transport_zones at import time. This avoids guessing module paths or MRO tricks and guarantees interception. Behavior: @@ -52,7 +52,7 @@ def patch_transportzones_fileasset_init(monkeypatch, project_dir, fake_inputs_ha - exposes inputs as attributes on self - rewrites cache_path to /- """ - import mobility.transport_zones as tz_module + import mobility.spatial.transport_zones as tz_module # Grab the class object that TransportZones actually extends FileAssetClass = tz_module.FileAsset @@ -239,11 +239,11 @@ def get(self): @pytest.fixture def dependency_fakes(monkeypatch, tmp_path): """ - Patch StudyArea, OSMData, and RScript to safe test doubles that: + Patch StudyArea, OSMData, and RScriptRunner to safe test doubles that: - record constructor calls/args - never touch network or external binaries - expose minimal interfaces used by the module. - Importantly: also patch the symbols *inside mobility.transport_zones* since that + Importantly: also patch the symbols *inside mobility.spatial.transport_zones* since that module imported the classes with `from ... import ...`. """ state = types.SimpleNamespace() @@ -314,8 +314,8 @@ def _OSMData_spy(study_area, object_type, key, geofabrik_extract_date, split_loc ) return instance - # --- Fake RScript --- - class _FakeRScript: + # --- Fake RScriptRunner --- + class _FakeRScriptRunner: def __init__(self, script_path): self.script_path = script_path state.rscript_init_path = script_path @@ -326,19 +326,19 @@ def run(self, args): state.rscript_runs.append({"args": list(args)}) def _RScript_spy(script_path): - return _FakeRScript(script_path) + return _FakeRScriptRunner(script_path) # Apply patches both to the origin modules and to the names imported - # into mobility.transport_zones. - import mobility.transport_zones as tz_module - monkeypatch.setattr("mobility.study_area.StudyArea", _StudyArea_spy, raising=True) - monkeypatch.setattr("mobility.parsers.osm.OSMData", _OSMData_spy, raising=True) - monkeypatch.setattr("mobility.r_utils.r_script.RScript", _RScript_spy, raising=True) + # into mobility.spatial.transport_zones. + import mobility.spatial.transport_zones as tz_module + monkeypatch.setattr("mobility.spatial.study_area.StudyArea", _StudyArea_spy, raising=True) + monkeypatch.setattr("mobility.spatial.osm.OSMData", _OSMData_spy, raising=True) + monkeypatch.setattr("mobility.runtime.r_integration.r_script_runner.RScriptRunner", _RScript_spy, raising=True) # Crucial: patch the symbols inside the transport_zones module too monkeypatch.setattr(tz_module, "StudyArea", _StudyArea_spy, raising=True) monkeypatch.setattr(tz_module, "OSMData", _OSMData_spy, raising=True) - monkeypatch.setattr(tz_module, "RScript", _RScript_spy, raising=True) + monkeypatch.setattr(tz_module, "RScriptRunner", _RScript_spy, raising=True) return state diff --git a/tests/back/unit/domain/transport_zones/test_041_init_builds_inputs_and_cache.py b/tests/back/unit/domain/transport_zones/test_041_init_builds_inputs_and_cache.py index 3cbf5c4a..ea593acc 100644 --- a/tests/back/unit/domain/transport_zones/test_041_init_builds_inputs_and_cache.py +++ b/tests/back/unit/domain/transport_zones/test_041_init_builds_inputs_and_cache.py @@ -1,6 +1,6 @@ import pathlib -from mobility.transport_zones import TransportZones +from mobility.spatial.transport_zones import TransportZones def test_init_builds_inputs_and_cache_path(project_dir, fake_inputs_hash, dependency_fakes): # Construct with explicit arguments diff --git a/tests/back/unit/domain/transport_zones/test_042_get_cached_asset_reads_file.py b/tests/back/unit/domain/transport_zones/test_042_get_cached_asset_reads_file.py index 85939bee..e6ca4ee3 100644 --- a/tests/back/unit/domain/transport_zones/test_042_get_cached_asset_reads_file.py +++ b/tests/back/unit/domain/transport_zones/test_042_get_cached_asset_reads_file.py @@ -1,7 +1,7 @@ import pathlib import geopandas as gpd -from mobility.transport_zones import TransportZones +from mobility.spatial.transport_zones import TransportZones def test_get_cached_asset_reads_expected_path(monkeypatch, project_dir, fake_inputs_hash, fake_transport_zones, dependency_fakes): transport_zones = TransportZones(local_admin_unit_id=["fr-09122", "fr-09121"]) diff --git a/tests/back/unit/domain/transport_zones/test_043_get_cached_asset_returns_in_memory_value_when_present.py b/tests/back/unit/domain/transport_zones/test_043_get_cached_asset_returns_in_memory_value_when_present.py index 96659934..75d0c066 100644 --- a/tests/back/unit/domain/transport_zones/test_043_get_cached_asset_returns_in_memory_value_when_present.py +++ b/tests/back/unit/domain/transport_zones/test_043_get_cached_asset_returns_in_memory_value_when_present.py @@ -1,7 +1,7 @@ import geopandas as gpd import pandas as pd -from mobility.transport_zones import TransportZones +from mobility.spatial.transport_zones import TransportZones def test_get_cached_asset_returns_existing_value_without_disk(monkeypatch, fake_transport_zones, dependency_fakes): transport_zones = TransportZones(local_admin_unit_id="fr-09122") diff --git a/tests/back/unit/domain/trips/conftest.py b/tests/back/unit/domain/trips/conftest.py index 554b95b8..9537e833 100644 --- a/tests/back/unit/domain/trips/conftest.py +++ b/tests/back/unit/domain/trips/conftest.py @@ -45,7 +45,7 @@ def patch_asset_init(monkeypatch, project_dir, fake_inputs_hash): Never call super().__init__ or do any I/O. Always set deterministic paths: /- - We also patch the FileAsset class that mobility.trips imported (aliases/re-exports), + We also patch the FileAsset class that mobility.trips.individual_year_trips imported (aliases/re-exports), and walk its MRO to catch unexpected base classes. """ from pathlib import Path as _Path @@ -99,11 +99,11 @@ def fake_asset_init(self, arg1, *args, **kwargs): fake_file_asset_init = make_fake_fileasset_init() fake_asset_init = make_fake_asset_init() - # Patch known modules + whatever Trips imported (handles aliases / re-exports) + # Patch known modules + whatever IndividualYearTrips imported. for module_name, class_name, replacement in [ - ("mobility.file_asset", "FileAsset", fake_file_asset_init), - ("mobility.asset", "Asset", fake_asset_init), - ("mobility.trips", "FileAsset", fake_file_asset_init), + ("mobility.runtime.assets.file_asset", "FileAsset", fake_file_asset_init), + ("mobility.runtime.assets.asset", "Asset", fake_asset_init), + ("mobility.trips.individual_year_trips", "FileAsset", fake_file_asset_init), ]: try: module = __import__(module_name, fromlist=[class_name]) @@ -302,7 +302,7 @@ def fake_write(self, path, *args, **kwargs): @pytest.fixture def fake_transport_zones(): """ - Minimal GeoDataFrames with the columns expected by Trips.get_population_trips(). + Minimal GeoDataFrames with the columns expected by IndividualYearTrips.get_population_trips(). """ transport_zones_geodataframe = gpd.GeoDataFrame( { @@ -345,7 +345,7 @@ def get(self): @pytest.fixture def fake_population_asset(fake_transport_zones): """ - Stand-in object for a population FileAsset with the exact attributes Trips.create_and_get_asset expects. + Stand-in object for a population FileAsset with the exact attributes IndividualYearTrips.create_and_get_asset expects. - .get() returns a mapping containing the path to individuals parquet (content provided by parquet stub). - .inputs contains {"transport_zones": } """ @@ -367,11 +367,11 @@ def get(self): @pytest.fixture(autouse=True) def patch_filter_database(monkeypatch): """ - Make mobility.safe_sample.filter_database robust for our test stubs: + Make mobility.trips.individual_year_trips.safe_sample.filter_database robust for our test stubs: - Accept filters via positional and/or keyword args without conflict - Work whether filters live in index levels or columns - If the filter would produce an empty dataframe, FALL BACK to the unfiltered rows - (keeps Trips flow alive and prevents 'No objects to concatenate') + (keeps IndividualYearTrips alive and prevents 'No objects to concatenate') """ import pandas as pd @@ -415,15 +415,15 @@ def stub_filter_database(input_dataframe, *positional_args, **keyword_args): return result_dataframe - # Patch both the original module and the alias imported inside mobility.trips + # Patch both the original module and the alias imported inside mobility.trips.individual_year_trips try: - import mobility.safe_sample as safe_sample_module + import mobility.trips.individual_year_trips.safe_sample as safe_sample_module monkeypatch.setattr(safe_sample_module, "filter_database", stub_filter_database, raising=True) except Exception: pass try: - import mobility.trips as trips_module + import mobility.trips.individual_year_trips as trips_module monkeypatch.setattr(trips_module, "filter_database", stub_filter_database, raising=True) except Exception: pass @@ -462,7 +462,7 @@ def repeat_to_required_length(input_dataframe, required_length): expanded_dataframe = pd.concat([input_dataframe] * repetitions, ignore_index=True) return expanded_dataframe.iloc[:required_length].reset_index(drop=True) - # --- Stub for mobility.sample_travels.sample_travels + # --- Stub for mobility.trips.individual_year_trips.sample_travels.sample_travels def stub_sample_travels( travels_dataframe, start_col="day_of_year", @@ -479,7 +479,7 @@ def stub_sample_travels( chosen_positions = np.arange(min(k, total_rows), dtype=int) return [chosen_positions.copy() for _ in range(int(num_samples))] - # --- Stub for mobility.safe_sample.safe_sample + # --- Stub for mobility.trips.individual_year_trips.safe_sample.safe_sample def stub_safe_sample( input_dataframe, n, @@ -513,24 +513,24 @@ def stub_safe_sample( return result_dataframe - # Patch both the original modules and the aliases imported in mobility.trips + # Patch both the original modules and the aliases imported in mobility.trips.individual_year_trips try: - import mobility.sample_travels as module_sample_travels + import mobility.trips.individual_year_trips.sample_travels as module_sample_travels monkeypatch.setattr(module_sample_travels, "sample_travels", stub_sample_travels, raising=True) except Exception: pass try: - import mobility.trips as trips_module + import mobility.trips.individual_year_trips as trips_module monkeypatch.setattr(trips_module, "sample_travels", stub_sample_travels, raising=True) except Exception: pass try: - import mobility.safe_sample as module_safe_sample + import mobility.trips.individual_year_trips.safe_sample as module_safe_sample monkeypatch.setattr(module_safe_sample, "safe_sample", stub_safe_sample, raising=True) except Exception: pass try: - import mobility.trips as trips_module_again + import mobility.trips.individual_year_trips as trips_module_again monkeypatch.setattr(trips_module_again, "safe_sample", stub_safe_sample, raising=True) except Exception: pass @@ -556,10 +556,10 @@ def stub_as_dataframe(self=None): } ) - # Patch source class and any alias imported in mobility.trips + # Patch source class and any alias imported in mobility.trips.individual_year_trips targets = [ - "mobility.transport_modes.default_gwp.DefaultGWP.as_dataframe", - "mobility.trips.DefaultGWP.as_dataframe", + "mobility.impacts.default_gwp.DefaultGWP.as_dataframe", + "mobility.trips.individual_year_trips.DefaultGWP.as_dataframe", ] for target in targets: try: @@ -575,13 +575,13 @@ def stub_as_dataframe(self=None): @pytest.fixture def patch_mobility_survey(monkeypatch): """ - Layout chosen to match how Trips + helpers slice: + Layout chosen to match how IndividualYearTrips + helpers slice: - short_trips: MultiIndex [country] (one-level MultiIndex) - days_trip: MultiIndex [country, csp] - travels: MultiIndex [country, csp, n_cars, city_category] - long_trips: MultiIndex [country, travel_id] - n_travels, p_immobility, p_car: MultiIndex [country, csp] - Also patches both the source modules and the mobility.trips aliases. + Also patches both the source modules and the mobility.trips.individual_year_trips aliases. """ import pandas as pd @@ -687,24 +687,24 @@ class StubEMPMobilitySurvey: def __init__(self, *args, **kwargs): pass - # Patch both the source modules and the mobility.trips aliases + # Patch both the source modules and the mobility.trips.individual_year_trips aliases monkeypatch.setattr( - "mobility.parsers.mobility_survey.MobilitySurveyAggregator", + "mobility.surveys.MobilitySurveyAggregator", StubMobilitySurveyAggregator, raising=True, ) monkeypatch.setattr( - "mobility.trips.MobilitySurveyAggregator", + "mobility.trips.individual_year_trips.MobilitySurveyAggregator", StubMobilitySurveyAggregator, raising=True, ) monkeypatch.setattr( - "mobility.parsers.mobility_survey.france.EMPMobilitySurvey", + "mobility.surveys.france.EMPMobilitySurvey", StubEMPMobilitySurvey, raising=True, ) monkeypatch.setattr( - "mobility.trips.EMPMobilitySurvey", + "mobility.trips.individual_year_trips.EMPMobilitySurvey", StubEMPMobilitySurvey, raising=True, ) @@ -722,13 +722,13 @@ def __init__(self, *args, **kwargs): # --------------------------------------------------------- -# Helper: seed a Trips instance attributes for direct calls +# Helper: seed an IndividualYearTrips instance for direct calls # --------------------------------------------------------- @pytest.fixture def seed_trips_with_minimal_databases(patch_mobility_survey): """ - Returns a function that seeds a Trips instance with minimal, consistent + Returns a function that seeds an IndividualYearTrips instance with minimal, consistent databases so get_individual_trips can be called directly. """ def _seed(trips_instance): diff --git a/tests/back/unit/domain/trips/test_036_init_builds_inputs_and_cache.py b/tests/back/unit/domain/trips/test_036_init_builds_inputs_and_cache.py index 804a2500..e63656e3 100644 --- a/tests/back/unit/domain/trips/test_036_init_builds_inputs_and_cache.py +++ b/tests/back/unit/domain/trips/test_036_init_builds_inputs_and_cache.py @@ -1,10 +1,10 @@ from pathlib import Path -from mobility.trips import Trips -from mobility.transport_modes.default_gwp import DefaultGWP +from mobility.trips.individual_year_trips import IndividualYearTrips +from mobility.impacts.default_gwp import DefaultGWP def test_init_builds_inputs_and_cache(project_dir, fake_population_asset, patch_mobility_survey, fake_inputs_hash): - trips_instance = Trips(population=fake_population_asset, gwp=DefaultGWP()) + trips_instance = IndividualYearTrips(population=fake_population_asset, gwp=DefaultGWP()) # Inputs are stored assert "population" in trips_instance.inputs diff --git a/tests/back/unit/domain/trips/test_037_get_cached_asset_reads_parquet.py b/tests/back/unit/domain/trips/test_037_get_cached_asset_reads_parquet.py index 1d4ccdf9..adbf3456 100644 --- a/tests/back/unit/domain/trips/test_037_get_cached_asset_reads_parquet.py +++ b/tests/back/unit/domain/trips/test_037_get_cached_asset_reads_parquet.py @@ -1,6 +1,6 @@ import pandas as pd from pathlib import Path -from mobility.trips import Trips +from mobility.trips.individual_year_trips import IndividualYearTrips def test_get_cached_asset_reads_parquet(project_dir, fake_population_asset, patch_mobility_survey, parquet_stubs, fake_inputs_hash): @@ -9,7 +9,7 @@ def test_get_cached_asset_reads_parquet(project_dir, fake_population_asset, patc ) parquet_stubs["install_read"](cached_trips_dataframe) - trips_instance = Trips(population=fake_population_asset) + trips_instance = IndividualYearTrips(population=fake_population_asset) result_dataframe = trips_instance.get_cached_asset() assert isinstance(result_dataframe, pd.DataFrame) diff --git a/tests/back/unit/domain/trips/test_038_create_and_get_asset_delegates_and_writes.py b/tests/back/unit/domain/trips/test_038_create_and_get_asset_delegates_and_writes.py index 8c85dcc1..4315d3ff 100644 --- a/tests/back/unit/domain/trips/test_038_create_and_get_asset_delegates_and_writes.py +++ b/tests/back/unit/domain/trips/test_038_create_and_get_asset_delegates_and_writes.py @@ -1,6 +1,6 @@ from pathlib import Path import pandas as pd -from mobility.trips import Trips +from mobility.trips.individual_year_trips import IndividualYearTrips def test_create_and_get_asset_delegates_and_writes( @@ -25,7 +25,7 @@ def test_create_and_get_asset_delegates_and_writes( parquet_stubs["install_read"](population_individuals_dataframe) parquet_stubs["install_write"]() - trips_instance = Trips(population=fake_population_asset) + trips_instance = IndividualYearTrips(population=fake_population_asset) result_trips_dataframe = trips_instance.create_and_get_asset() assert parquet_stubs["calls"]["write"], "to_parquet was not called" diff --git a/tests/back/unit/domain/trips/test_038_get_population_trips_happy_path.py b/tests/back/unit/domain/trips/test_038_get_population_trips_happy_path.py index b7fc812a..d9816f41 100644 --- a/tests/back/unit/domain/trips/test_038_get_population_trips_happy_path.py +++ b/tests/back/unit/domain/trips/test_038_get_population_trips_happy_path.py @@ -1,7 +1,7 @@ from pathlib import Path import pandas as pd -from mobility.trips import Trips -from mobility.transport_modes.default_gwp import DefaultGWP +from mobility.trips.individual_year_trips import IndividualYearTrips +from mobility.impacts.default_gwp import DefaultGWP def test_get_population_trips_happy_path( @@ -27,7 +27,7 @@ def __init__(self, transport_zones_asset): def get(self): return {"individuals": "unused.parquet"} - trips_instance = Trips(population=DummyPopulationAsset(fake_transport_zones["asset"]), gwp=DefaultGWP()) + trips_instance = IndividualYearTrips(population=DummyPopulationAsset(fake_transport_zones["asset"]), gwp=DefaultGWP()) mobility_survey_mapping = trips_instance.inputs["mobility_survey"].get() trips_instance.short_trips_db = mobility_survey_mapping["short_trips"] diff --git a/tests/back/unit/domain/trips/test_039_get_individual_trips_edge_cases.py b/tests/back/unit/domain/trips/test_039_get_individual_trips_edge_cases.py index d995800c..df8fdac1 100644 --- a/tests/back/unit/domain/trips/test_039_get_individual_trips_edge_cases.py +++ b/tests/back/unit/domain/trips/test_039_get_individual_trips_edge_cases.py @@ -1,6 +1,6 @@ import pandas as pd -from mobility.trips import Trips -from mobility.transport_modes.default_gwp import DefaultGWP +from mobility.trips.individual_year_trips import IndividualYearTrips +from mobility.impacts.default_gwp import DefaultGWP def test_get_individual_trips_edge_cases_zero_mobile_days( @@ -13,7 +13,7 @@ def __init__(self): def get(self): return {"individuals": "unused.parquet"} - trips_instance = Trips(population=DummyPopulationAsset(), gwp=DefaultGWP()) + trips_instance = IndividualYearTrips(population=DummyPopulationAsset(), gwp=DefaultGWP()) seed_trips_with_minimal_databases(trips_instance) trips_instance.p_immobility.loc[("FR", "1"), "immobility_weekday"] = 1.0 diff --git a/tests/back/unit/domain/trips/test_040_filter_population_is_applied.py b/tests/back/unit/domain/trips/test_040_filter_population_is_applied.py index 481e4bb8..3fd25421 100644 --- a/tests/back/unit/domain/trips/test_040_filter_population_is_applied.py +++ b/tests/back/unit/domain/trips/test_040_filter_population_is_applied.py @@ -1,8 +1,8 @@ import pandas as pd from pathlib import Path -from mobility.trips import Trips -from mobility.transport_modes.default_gwp import DefaultGWP +from mobility.trips.individual_year_trips import IndividualYearTrips +from mobility.impacts.default_gwp import DefaultGWP def test_filter_population_is_applied( @@ -15,7 +15,7 @@ def test_filter_population_is_applied( """ Ensure the optional filter_population callable is used inside create_and_get_asset. We feed a population of 2 individuals, filter it down to 1, and verify: - - Trips.create_and_get_asset() runs without I/O outside tmp_path + - IndividualYearTrips.create_and_get_asset() runs without I/O outside tmp_path - The cached parquet path has the hashed prefix - Only the filtered individual_id remains in the output """ @@ -38,7 +38,7 @@ def test_filter_population_is_applied( def filter_population_keep_first(input_population_dataframe: pd.DataFrame) -> pd.DataFrame: return input_population_dataframe[input_population_dataframe["individual_id"] == 1].copy() - trips_instance = Trips( + trips_instance = IndividualYearTrips( population=fake_population_asset, filter_population=filter_population_keep_first, gwp=DefaultGWP(), diff --git a/tests/back/unit/parsers/ademe_base_carbone/conftest.py b/tests/back/unit/impacts/ademe_base_carbone/conftest.py similarity index 86% rename from tests/back/unit/parsers/ademe_base_carbone/conftest.py rename to tests/back/unit/impacts/ademe_base_carbone/conftest.py index 4a378ce0..fb9326bc 100644 --- a/tests/back/unit/parsers/ademe_base_carbone/conftest.py +++ b/tests/back/unit/impacts/ademe_base_carbone/conftest.py @@ -40,8 +40,8 @@ def patch_asset_init( monkeypatch: pytest.MonkeyPatch, ): """ - Stub mobility.asset.Asset.__init__ so it does NOT call .get(). - Creates a minimal Asset class if mobility.asset is not importable to avoid ImportErrors. + Stub mobility.runtime.assets.asset.Asset.__init__ so it does NOT call .get(). + Creates a minimal Asset class if mobility.runtime.assets.asset is not importable to avoid ImportErrors. Sets: - self.inputs - self.inputs_hash @@ -55,13 +55,13 @@ def patch_asset_init( if "mobility" not in sys.modules: mobility_module = types.ModuleType("mobility") sys.modules["mobility"] = mobility_module - if "mobility.asset" not in sys.modules: - asset_module = types.ModuleType("mobility.asset") - sys.modules["mobility.asset"] = asset_module + if "mobility.runtime.assets.asset" not in sys.modules: + asset_module = types.ModuleType("mobility.runtime.assets.asset") + sys.modules["mobility.runtime.assets.asset"] = asset_module import importlib - asset_mod = importlib.import_module("mobility.asset") + asset_mod = importlib.import_module("mobility.runtime.assets.asset") class _PatchedAsset: def __init__(self, *args, **kwargs): @@ -313,48 +313,12 @@ def get(self): return _PopAsset() -@pytest.fixture -def patch_mobility_survey(monkeypatch: pytest.MonkeyPatch): - """ - Monkeypatch any survey parser class to return small DataFrames with expected columns. - Usage pattern (example): - from mobility.parsers.survey import SurveyParser - parser = SurveyParser(...) - parsed = parser.parse() - This fixture replaces SurveyParser with a stub whose parse() returns a dict of tiny DataFrames. - """ - # Ensure module path exists - if "mobility.parsers" not in sys.modules: - parent = types.ModuleType("mobility.parsers") - sys.modules["mobility.parsers"] = parent - - survey_mod = types.ModuleType("mobility.parsers.survey") - sys.modules["mobility.parsers.survey"] = survey_mod - - class _SurveyParserStub: - def __init__(self, *args, **kwargs): - self.args = args - self.kwargs = kwargs - - def parse(self) -> Dict[str, pd.DataFrame]: - return { - "households": pd.DataFrame({"household_id": [1]}), - "persons": pd.DataFrame({"person_id": [10], "household_id": [1]}), - "trips": pd.DataFrame( - {"person_id": [10], "trip_id": [100], "distance_km": [1.2], "mode": ["walk"]} - ), - } - - monkeypatch.setattr(survey_mod, "SurveyParser", _SurveyParserStub, raising=True) - return _SurveyParserStub - - -# ---------- Helpers to seed Trips-like instances for direct method tests ---------- +# ---------- Helpers to seed IndividualYearTrips-like instances for direct method tests ---------- @pytest.fixture def seed_trips_helpers(): """ - Provide helpers to seed attributes on a Trips instance for tests that call + Provide helpers to seed attributes on an IndividualYearTrips instance for tests that call algorithmic methods directly. """ def seed_minimal_trips(trips_instance: Any): diff --git a/tests/back/unit/parsers/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py b/tests/back/unit/impacts/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py similarity index 95% rename from tests/back/unit/parsers/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py rename to tests/back/unit/impacts/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py index 7d80b8ea..edf60e95 100644 --- a/tests/back/unit/parsers/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py +++ b/tests/back/unit/impacts/ademe_base_carbone/test_012_get_emissions_factor_builds_url_and_throttles.py @@ -1,6 +1,6 @@ from pathlib import Path import pytest -from mobility.parsers import ademe_base_carbone as mod +from mobility.impacts import ademe_base_carbone as mod def test_builds_expected_query_url_and_throttles(monkeypatch: pytest.MonkeyPatch): diff --git a/tests/back/unit/parsers/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py b/tests/back/unit/impacts/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py similarity index 93% rename from tests/back/unit/parsers/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py rename to tests/back/unit/impacts/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py index ef276754..fd3ca2b0 100644 --- a/tests/back/unit/parsers/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py +++ b/tests/back/unit/impacts/ademe_base_carbone/test_013_get_emissions_factor_uses_proxies_and_returns_float.py @@ -1,5 +1,5 @@ import pytest -from mobility.parsers import ademe_base_carbone as mod +from mobility.impacts import ademe_base_carbone as mod def test_uses_proxies_and_returns_float(monkeypatch: pytest.MonkeyPatch): diff --git a/tests/back/unit/parsers/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py b/tests/back/unit/impacts/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py similarity index 88% rename from tests/back/unit/parsers/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py rename to tests/back/unit/impacts/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py index 59ae800f..d42873dc 100644 --- a/tests/back/unit/parsers/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py +++ b/tests/back/unit/impacts/ademe_base_carbone/test_014_get_emissions_factor_empty_results_raises.py @@ -1,5 +1,5 @@ import pytest -from mobility.parsers import ademe_base_carbone as mod +from mobility.impacts import ademe_base_carbone as mod def test_empty_results_raises_index_error(monkeypatch: pytest.MonkeyPatch): diff --git a/tests/back/unit/parsers/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py b/tests/back/unit/impacts/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py similarity index 88% rename from tests/back/unit/parsers/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py rename to tests/back/unit/impacts/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py index 909702d3..ed7aacf6 100644 --- a/tests/back/unit/parsers/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py +++ b/tests/back/unit/impacts/ademe_base_carbone/test_015_get_emissions_factor_missing_key_raises.py @@ -1,5 +1,5 @@ import pytest -from mobility.parsers import ademe_base_carbone as mod +from mobility.impacts import ademe_base_carbone as mod def test_missing_result_key_raises_key_error(monkeypatch: pytest.MonkeyPatch): diff --git a/tests/back/unit/test_901_quickstart_drift_guard.py b/tests/back/unit/test_901_quickstart_drift_guard.py index ea523678..1b539b8c 100644 --- a/tests/back/unit/test_901_quickstart_drift_guard.py +++ b/tests/back/unit/test_901_quickstart_drift_guard.py @@ -5,8 +5,8 @@ 'mobility.TransportZones("fr-09122", radius=10.0)', "mobility.EMPMobilitySurvey()", "mobility.Population(", - "mobility.PopulationTrips(", - 'population_trips.get()["weekday_flows"].collect()', + "mobility.GroupDayTrips(", + 'population_trips.get()["weekday_plan_steps"].collect()', 'population_trips.weekday_run.evaluate("global_metrics")', ] From bd922a1827d681bd51191dad171505be76d7321c Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 10:11:22 +0200 Subject: [PATCH 03/24] fix tests --- docs/source/modes.rst | 2 +- docs/source/radiation_model.rst | 14 +++++--------- docs/source/set_params.rst | 2 +- docs/source/transport_zones.rst | 6 +++--- mobility/__init__.py | 4 +--- .../spatial/local_admin_units_categories.py | 4 ++++ mobility/spatial/study_area.py | 2 +- .../transport/costs/path/path_travel_costs.py | 18 ------------------ .../transport/modes/core/transport_mode.py | 17 ----------------- .../intermodal_transport_graph.py | 2 +- ...bon_computation_merges_modes_and_factors.py | 2 +- ...est_009_car_passenger_correction_applies.py | 2 +- ...est_010_edge_cases_unknown_mode_and_nans.py | 2 +- ...011_get_ademe_factors_filters_and_shapes.py | 2 +- 14 files changed, 21 insertions(+), 58 deletions(-) diff --git a/docs/source/modes.rst b/docs/source/modes.rst index 1138035d..04c84a96 100644 --- a/docs/source/modes.rst +++ b/docs/source/modes.rst @@ -141,5 +141,5 @@ Functions You must describe the transport modes that you want to model. Most usual modes are available, and you can use a combination of any mode with public transport. Available modes : walk, bicycle, car, carpool, public transport (+any mode before or after using public transport). - .. automodule:: mobility.transport_modes + .. automodule:: mobility.transport.modes :members: diff --git a/docs/source/radiation_model.rst b/docs/source/radiation_model.rst index 61963891..d88ca193 100644 --- a/docs/source/radiation_model.rst +++ b/docs/source/radiation_model.rst @@ -2,13 +2,9 @@ Radiation model ================ -With the implementation of the radiation model developed in -`Liu et Yan 2020 `_, -you can reproduce spatially the mobility flows linked to a purpose -(such as home-work trips). +The legacy radiation model module was removed from the package during the +refactor and is no longer part of the documented public API. - .. automodule:: mobility.radiation_model - :members: - -This radiation model could be used for any contiguous subset of French departments. -You can find an example of this model in . +Older examples may still reference it historically, but this page is kept only +to avoid broken documentation links while the replacement workflow is being +documented. diff --git a/docs/source/set_params.rst b/docs/source/set_params.rst index 07da120e..99abe6cc 100644 --- a/docs/source/set_params.rst +++ b/docs/source/set_params.rst @@ -4,5 +4,5 @@ Set parameters Use set_params to define the folders you want to work, to initiate the R libraries or to debug your code. - .. automodule:: mobility.set_params + .. automodule:: mobility.config :members: diff --git a/docs/source/transport_zones.rst b/docs/source/transport_zones.rst index 8cf82714..e1aa8df8 100644 --- a/docs/source/transport_zones.rst +++ b/docs/source/transport_zones.rst @@ -4,16 +4,16 @@ Transport zones Use TransportZones to define the area that will be covered by your model. - .. automodule:: mobility.transport_zones + .. automodule:: mobility.spatial.transport_zones :members: The TransportZones will call the StudyArea class to manage data in the area. - .. automodule:: mobility.study_area + .. automodule:: mobility.spatial.study_area :members: StudyArea will itself call the LocalAdminUnits class to grab data from the local admin units. - .. automodule:: mobility.parsers.local_admin_units + .. automodule:: mobility.spatial.local_admin_units :members: diff --git a/mobility/__init__.py b/mobility/__init__.py index b151d208..963f4852 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -1,7 +1,4 @@ from .config import set_params -from .runtime.io import patch_openpyxl - -patch_openpyxl() from .spatial.study_area import StudyArea from .spatial.transport_zones import TransportZones @@ -27,6 +24,7 @@ Study, Work, ) +from .impacts import carbon_computation from .trips.individual_year_trips import IndividualYearTrips from .trips.group_day_trips import GroupDayTrips diff --git a/mobility/spatial/local_admin_units_categories.py b/mobility/spatial/local_admin_units_categories.py index 26b53a2a..4d0a903d 100644 --- a/mobility/spatial/local_admin_units_categories.py +++ b/mobility/spatial/local_admin_units_categories.py @@ -7,6 +7,7 @@ from mobility.runtime.assets.file_asset import FileAsset from mobility.runtime.io.download_file import download_file +from mobility.runtime.io.patch_openpyxl import patch_openpyxl class LocalAdminUnitsCategories(FileAsset): @@ -48,6 +49,9 @@ def prepare_french_local_admin_units_categories(self): zip_ref.extractall(path.parent) path = pathlib.Path(os.environ["MOBILITY_PACKAGE_DATA_FOLDER"]) / "insee/UU2020_au_01-01-2023.xlsx" + + # This workbook contains malformed color values that require the openpyxl workaround. + patch_openpyxl() categories = pd.read_excel( path, diff --git a/mobility/spatial/study_area.py b/mobility/spatial/study_area.py index 169b77db..4a9fd64a 100644 --- a/mobility/spatial/study_area.py +++ b/mobility/spatial/study_area.py @@ -222,7 +222,7 @@ class StudyAreaParameters(BaseModel): float, Field( default=40.0, - ge=5.0, + ge=0.0, le=100.0, title="Study area radius", description="Radius in km around the selected local admin unit.", diff --git a/mobility/transport/costs/path/path_travel_costs.py b/mobility/transport/costs/path/path_travel_costs.py index f1731729..5445fffc 100644 --- a/mobility/transport/costs/path/path_travel_costs.py +++ b/mobility/transport/costs/path/path_travel_costs.py @@ -4,7 +4,6 @@ import pathlib import logging import shutil -import shortuuid import pandas as pd import geopandas as gpd @@ -222,20 +221,3 @@ def build_snapshot_asset(self, flow_asset) -> PathTravelCostsSnapshot: ) return snapshot - def clone(self): - - ptc = PathTravelCosts( - self.inputs["mode_name"], - self.inputs["transport_zones"], - self.inputs["routing_parameters"], - self.inputs["simplified_path_graph"].inputs["osm_capacity_parameters"], - self.inputs["contracted_path_graph"].handles_congestion, - ) - - ptc.cache_path = { - "freeflow": pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / (self.inputs_hash + "-travel_costs_free_flow_" + self.inputs["mode_name"] + ".parquet"), - "congested": pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / (self.inputs_hash + "-travel_costs_congested_" + self.inputs["mode_name"] + "_clone_" + shortuuid.uuid() + ".parquet") - } - - return ptc - diff --git a/mobility/transport/modes/core/transport_mode.py b/mobility/transport/modes/core/transport_mode.py index 9b530dd8..629e558b 100644 --- a/mobility/transport/modes/core/transport_mode.py +++ b/mobility/transport/modes/core/transport_mode.py @@ -73,23 +73,6 @@ def __init__( super().__init__(inputs) - def clone(self): - """Create a shallow clone of the mode with cloned travel costs.""" - params = self.inputs["parameters"] - return TransportMode( - name=params.name, - travel_costs=self.inputs["travel_costs"].clone(), - generalized_cost=self.inputs["generalized_cost"], - ghg_intensity=params.ghg_intensity, - congestion=params.congestion, - vehicle=params.vehicle, - multimodal=params.multimodal, - return_mode=params.return_mode, - survey_ids=params.survey_ids, - parameters=params.model_copy(), - parameters_cls=params.__class__, - ) - def build_congestion_flows(self, od_flows_by_mode): """Build congestion-relevant flows for this mode. diff --git a/mobility/transport/modes/public_transport/intermodal_transport_graph.py b/mobility/transport/modes/public_transport/intermodal_transport_graph.py index 2adfef67..bb262789 100644 --- a/mobility/transport/modes/public_transport/intermodal_transport_graph.py +++ b/mobility/transport/modes/public_transport/intermodal_transport_graph.py @@ -12,7 +12,7 @@ from mobility.transport.modes.core.transport_mode import TransportMode from mobility.transport.modes.core.modal_transfer import IntermodalTransfer from mobility.transport.modes.public_transport.public_transport_graph import PublicTransportGraph, PublicTransportRoutingParameters -from mobility.transport.graphs.core.path_graph import ContractedPathGraph +from mobility.transport.graphs.contracted.contracted_path_graph import ContractedPathGraph from mobility.spatial.osm import OSMData class IntermodalTransportGraph(FileAsset): diff --git a/tests/back/unit/domain/carbon_computation/test_008_carbon_computation_merges_modes_and_factors.py b/tests/back/unit/domain/carbon_computation/test_008_carbon_computation_merges_modes_and_factors.py index bf0ee6de..7a84b427 100644 --- a/tests/back/unit/domain/carbon_computation/test_008_carbon_computation_merges_modes_and_factors.py +++ b/tests/back/unit/domain/carbon_computation/test_008_carbon_computation_merges_modes_and_factors.py @@ -1,7 +1,7 @@ import numpy as np import pandas as pd -from mobility import carbon_computation as cc +from mobility.impacts import carbon_computation as cc def test_carbon_computation_merges_and_computes(monkeypatch): diff --git a/tests/back/unit/domain/carbon_computation/test_009_car_passenger_correction_applies.py b/tests/back/unit/domain/carbon_computation/test_009_car_passenger_correction_applies.py index f4a16b24..88ce81fc 100644 --- a/tests/back/unit/domain/carbon_computation/test_009_car_passenger_correction_applies.py +++ b/tests/back/unit/domain/carbon_computation/test_009_car_passenger_correction_applies.py @@ -1,7 +1,7 @@ import numpy as np import pandas as pd -from mobility import carbon_computation as cc +from mobility.impacts import carbon_computation as cc def test_car_passenger_correction(monkeypatch): diff --git a/tests/back/unit/domain/carbon_computation/test_010_edge_cases_unknown_mode_and_nans.py b/tests/back/unit/domain/carbon_computation/test_010_edge_cases_unknown_mode_and_nans.py index 649080cf..4a923e4e 100644 --- a/tests/back/unit/domain/carbon_computation/test_010_edge_cases_unknown_mode_and_nans.py +++ b/tests/back/unit/domain/carbon_computation/test_010_edge_cases_unknown_mode_and_nans.py @@ -1,7 +1,7 @@ import numpy as np import pandas as pd -from mobility import carbon_computation as cc +from mobility.impacts import carbon_computation as cc def test_unknown_mode_uses_custom_zero_and_noncar_nan_passengers(monkeypatch): diff --git a/tests/back/unit/domain/carbon_computation/test_011_get_ademe_factors_filters_and_shapes.py b/tests/back/unit/domain/carbon_computation/test_011_get_ademe_factors_filters_and_shapes.py index 8d29e04f..3480bece 100644 --- a/tests/back/unit/domain/carbon_computation/test_011_get_ademe_factors_filters_and_shapes.py +++ b/tests/back/unit/domain/carbon_computation/test_011_get_ademe_factors_filters_and_shapes.py @@ -1,7 +1,7 @@ from pathlib import Path import pandas as pd -from mobility import carbon_computation as cc +from mobility.impacts import carbon_computation as cc def test_get_ademe_factors_structure_and_tagging_even_if_empty(tmp_path): From 89596f2a46a99035b9d2850513656691918b632e Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 10:42:19 +0200 Subject: [PATCH 04/24] fix tests --- .../costs/path/prepare_dodgr_costs.R | 2 +- .../graphs/congested/load_path_graph.R | 6 ++--- .../graphs/contracted/contract_path_graph.R | 2 +- .../transport/graphs/core/get_path_pair.R | 2 +- .../graphs/modified/modify_path_graph.R | 2 +- .../graphs/simplified/prepare_path_graph.R | 2 +- .../detailed/compute_carpool_travel_costs.R | 2 +- .../carpool/detailed/prepare_carpool_graph.R | 2 +- ...intermodal_public_transport_travel_costs.R | 2 +- ...repare_intermodal_public_transport_graph.R | 2 +- .../prepare_public_transport_graph.R | 2 +- .../save_intermodal_public_transport_paths.R | 2 +- ..._001_travel_costs_aggregator_congestion.py | 13 ++++++---- tests/back/unit/domain/population/conftest.py | 12 ++++----- .../test_029_init_builds_inputs_and_cache.py | 2 +- ...test_030_get_cached_asset_reads_parquet.py | 2 +- ...eate_and_get_asset_delegates_and_writes.py | 2 +- ...test_032_alrgorithmic_method_happy_path.py | 2 +- .../test_033_algorithmic_method_edge_cases.py | 2 +- .../test_034_algorithmic_method_nan_branch.py | 2 +- ..._generates_deterministic_individual_ids.py | 2 +- tests/back/unit/domain/trips/conftest.py | 26 +++++++++---------- tests/conftest.py | 9 ++++++- 23 files changed, 55 insertions(+), 47 deletions(-) diff --git a/mobility/transport/costs/path/prepare_dodgr_costs.R b/mobility/transport/costs/path/prepare_dodgr_costs.R index f24b49e6..96cbd44e 100644 --- a/mobility/transport/costs/path/prepare_dodgr_costs.R +++ b/mobility/transport/costs/path/prepare_dodgr_costs.R @@ -35,7 +35,7 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/graphs/congested/load_path_graph.R b/mobility/transport/graphs/congested/load_path_graph.R index a5fce235..f7f78d11 100644 --- a/mobility/transport/graphs/congested/load_path_graph.R +++ b/mobility/transport/graphs/congested/load_path_graph.R @@ -29,9 +29,9 @@ congestion_flows_scaling_factor <- args[6] output_fp <- args[7] -source(file.path(package_fp, "transport", "graphs", "common", "cpprouting_io.R")) -source(file.path(package_fp, "transport", "graphs", "common", "tz_pairs_to_vertex_pairs.R")) -source(file.path(package_fp, "transport", "graphs", "common", "get_buildings_nearest_vertex_id.R")) +source(file.path(package_fp, "transport", "graphs", "core", "cpprouting_io.R")) +source(file.path(package_fp, "transport", "graphs", "core", "tz_pairs_to_vertex_pairs.R")) +source(file.path(package_fp, "transport", "graphs", "core", "get_buildings_nearest_vertex_id.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/graphs/contracted/contract_path_graph.R b/mobility/transport/graphs/contracted/contract_path_graph.R index dbe17f2e..1a745bb8 100644 --- a/mobility/transport/graphs/contracted/contract_path_graph.R +++ b/mobility/transport/graphs/contracted/contract_path_graph.R @@ -20,7 +20,7 @@ package_fp <- args[1] cppr_graph_fp <- args[2] output_fp <- args[3] -source(file.path(package_fp, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_fp, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/graphs/core/get_path_pair.R b/mobility/transport/graphs/core/get_path_pair.R index 5516c22f..cfcb6756 100644 --- a/mobility/transport/graphs/core/get_path_pair.R +++ b/mobility/transport/graphs/core/get_path_pair.R @@ -26,7 +26,7 @@ from <- args[3] to <- args[4] output_fp <- args[5] -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) from <- fromJSON(from) to <- fromJSON(to) diff --git a/mobility/transport/graphs/modified/modify_path_graph.R b/mobility/transport/graphs/modified/modify_path_graph.R index dd21c2b3..b98cc407 100644 --- a/mobility/transport/graphs/modified/modify_path_graph.R +++ b/mobility/transport/graphs/modified/modify_path_graph.R @@ -23,7 +23,7 @@ cppr_graph_fp <- args[2] speed_modifiers <- args[3] output_fp <- args[4] -source(file.path(package_fp, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_fp, "transport", "graphs", "core", "cpprouting_io.R")) source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_limited_speed_zones_modifier.R")) source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_border_crossing_speed_modifier.R")) source(file.path(package_fp, "transport", "graphs", "modified", "modifiers", "apply_road_lane_number_modifier.R")) diff --git a/mobility/transport/graphs/simplified/prepare_path_graph.R b/mobility/transport/graphs/simplified/prepare_path_graph.R index d29c4e51..5ad69cf3 100644 --- a/mobility/transport/graphs/simplified/prepare_path_graph.R +++ b/mobility/transport/graphs/simplified/prepare_path_graph.R @@ -43,7 +43,7 @@ osm_capacity_parameters <- cbind( rbindlist(osm_capacity_parameters) ) -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R b/mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R index 3b7d3fca..eabbe8af 100644 --- a/mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R +++ b/mobility/transport/modes/carpool/detailed/compute_carpool_travel_costs.R @@ -46,7 +46,7 @@ source(file.path(package_path, "transport", "graphs", "congested", "duplicate_cp source(file.path(package_path, "transport", "graphs", "congested", "initialize_travel_costs.R")) source(file.path(package_path, "transport", "graphs", "modified", "concatenate_graphs.R")) source(file.path(package_path, "transport", "graphs", "simplified", "create_graph_from_travel_costs.R")) -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R b/mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R index fae18212..4db675c8 100644 --- a/mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R +++ b/mobility/transport/modes/carpool/detailed/prepare_carpool_graph.R @@ -15,7 +15,7 @@ tz_file_path <- 'D:\\data\\mobility\\projects\\haut-doubs\\94c4efec9c89bdd5fae5a graph_fp <- "D:\\data\\mobility\\projects\\haut-doubs\\path_graph_car\\contracted\\f92c93e808a0af018f4858ddcc6bb1b5-done" modal_shift <- '{"max_travel_time": 0.33, "average_speed": 50.0, "shift_time": 10.0, "shortcuts_shift_time": null, "shortcuts_locations": null}' -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) transport_zones <- st_read(tz_file_path) diff --git a/mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R b/mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R index 75597d3f..317b5e04 100644 --- a/mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R +++ b/mobility/transport/modes/public_transport/compute_intermodal_public_transport_travel_costs.R @@ -42,7 +42,7 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R b/mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R index f83e483a..2c973d73 100644 --- a/mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R +++ b/mobility/transport/modes/public_transport/prepare_intermodal_public_transport_graph.R @@ -52,7 +52,7 @@ source(file.path(package_path, "transport", "graphs", "congested", "duplicate_cp source(file.path(package_path, "transport", "graphs", "congested", "initialize_travel_costs.R")) source(file.path(package_path, "transport", "graphs", "modified", "concatenate_graphs.R")) source(file.path(package_path, "transport", "graphs", "simplified", "create_graph_from_travel_costs.R")) -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/modes/public_transport/prepare_public_transport_graph.R b/mobility/transport/modes/public_transport/prepare_public_transport_graph.R index 0abc0e05..09ed3af1 100644 --- a/mobility/transport/modes/public_transport/prepare_public_transport_graph.R +++ b/mobility/transport/modes/public_transport/prepare_public_transport_graph.R @@ -21,7 +21,7 @@ gtfs_file_path <-args[3] parameters <- args[4] output_file_path <- args[5] -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R b/mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R index a4a88da2..89cc3776 100644 --- a/mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R +++ b/mobility/transport/modes/public_transport/save_intermodal_public_transport_paths.R @@ -42,7 +42,7 @@ buildings_sample_fp <- file.path( ) ) -source(file.path(package_path, "transport", "graphs", "common", "cpprouting_io.R")) +source(file.path(package_path, "transport", "graphs", "core", "cpprouting_io.R")) logger <- logger(appenders = console_appender()) diff --git a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py index 006f51e2..1ec853e3 100644 --- a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py +++ b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py @@ -31,11 +31,13 @@ def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): {"from": [1], "to": [2], "mode": ["car"], "flow_volume": [10.0]} ) + congestion_state = object() + # Mock the expensive side effects and the final cost lookup: this test is a # regression guard for "did we trigger congestion recomputation at all?". - with patch.object(aggregator, "recompute_congested_costs") as recompute_mock: + with patch.object(aggregator, "build_congestion_state", return_value=congestion_state) as build_mock: with patch.object(aggregator, "get", return_value="costs") as get_mock: - result = aggregator.get_costs_for_next_iteration( + result_costs, result_congestion_state = aggregator.get_costs_for_next_iteration( iteration=1, cost_update_interval=1, od_flows_by_mode=od_flows_by_mode, @@ -45,14 +47,15 @@ def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): # If congestion is enabled and the update interval matches, the aggregator # must rebuild congested costs before returning the next iteration cost view. - recompute_mock.assert_called_once_with( + build_mock.assert_called_once_with( od_flows_by_mode, run_key="run-key", is_weekday=True, iteration=1, ) - get_mock.assert_called_once_with(congestion=True) - assert result == "costs" + get_mock.assert_called_once_with(congestion=True, congestion_state=congestion_state) + assert result_costs == "costs" + assert result_congestion_state is congestion_state def test_vehicle_od_flow_snapshot_hash_differs_between_weekday_and_weekend(): diff --git a/tests/back/unit/domain/population/conftest.py b/tests/back/unit/domain/population/conftest.py index 8d0bcb7d..43a16610 100644 --- a/tests/back/unit/domain/population/conftest.py +++ b/tests/back/unit/domain/population/conftest.py @@ -307,12 +307,12 @@ def fake_sjoin(left_geo_data_frame, right_geo_data_frame, predicate=None, how="i @pytest.fixture(autouse=True) def patch_mobility_parsers(monkeypatch): """ - Patch population loaders to provide consistent tiny datasets AND also patch the already-imported - names inside mobility.population (because it uses `from ... import ...`). + Patch population loaders to provide consistent tiny datasets and patch the + already-imported names inside mobility.population.population. """ import mobility.population as population_pkg_local import mobility.spatial.admin_boundaries as admin_boundaries_module - population_module = sys.modules.get("mobility.population") + population_module = sys.modules.get("mobility.population.population") class CityLegalPopulationFake: def get(self): @@ -353,12 +353,10 @@ def cities_boundaries_fake(): monkeypatch.setattr(admin_boundaries_module, "get_french_regions_boundaries", regions_boundaries_fake, raising=True) monkeypatch.setattr(admin_boundaries_module, "get_french_cities_boundaries", cities_boundaries_fake, raising=True) - # Also patch the already-imported names inside mobility.population (if loaded) + # Also patch the already-imported names inside mobility.population.population (if loaded) if population_module is not None: - # population.py did: from mobility.population import CityLegalPopulation, CensusLocalizedIndividuals monkeypatch.setattr(population_module, "CityLegalPopulation", CityLegalPopulationFake, raising=True) monkeypatch.setattr(population_module, "CensusLocalizedIndividuals", CensusLocalizedIndividualsFake, raising=True) - # and: from mobility.spatial.admin_boundaries import get_french_regions_boundaries, get_french_cities_boundaries monkeypatch.setattr(population_module, "get_french_regions_boundaries", regions_boundaries_fake, raising=True) monkeypatch.setattr(population_module, "get_french_cities_boundaries", cities_boundaries_fake, raising=True) @@ -370,7 +368,7 @@ def cities_boundaries_fake(): @pytest.fixture(scope="session", autouse=True) def _import_population_module_once(): # Just import; do NOT reload (avoids 'spec not found' under installed wheels). - import mobility.population # noqa: F401 + import mobility.population.population # noqa: F401 # -------------------------------------------------------------------------------------- diff --git a/tests/back/unit/domain/population/test_029_init_builds_inputs_and_cache.py b/tests/back/unit/domain/population/test_029_init_builds_inputs_and_cache.py index 0c7a522b..bc7277fe 100644 --- a/tests/back/unit/domain/population/test_029_init_builds_inputs_and_cache.py +++ b/tests/back/unit/domain/population/test_029_init_builds_inputs_and_cache.py @@ -1,7 +1,7 @@ # tests/unit/mobility/test_001_init_builds_inputs_and_cache.py from pathlib import Path -import mobility.population as population_module +import mobility.population.population as population_module def test_init_sets_inputs_and_hashed_cache_paths(project_dir, fake_inputs_hash, fake_transport_zones): diff --git a/tests/back/unit/domain/population/test_030_get_cached_asset_reads_parquet.py b/tests/back/unit/domain/population/test_030_get_cached_asset_reads_parquet.py index 59682d93..9f219b7e 100644 --- a/tests/back/unit/domain/population/test_030_get_cached_asset_reads_parquet.py +++ b/tests/back/unit/domain/population/test_030_get_cached_asset_reads_parquet.py @@ -1,6 +1,6 @@ from pathlib import Path -import mobility.population as population_module +import mobility.population.population as population_module def test_get_cached_asset_returns_expected_cache_paths(fake_transport_zones): diff --git a/tests/back/unit/domain/population/test_031_create_and_get_asset_delegates_and_writes.py b/tests/back/unit/domain/population/test_031_create_and_get_asset_delegates_and_writes.py index 0fc0cdad..9409fd5e 100644 --- a/tests/back/unit/domain/population/test_031_create_and_get_asset_delegates_and_writes.py +++ b/tests/back/unit/domain/population/test_031_create_and_get_asset_delegates_and_writes.py @@ -1,6 +1,6 @@ from pathlib import Path -import mobility.population as population_module +import mobility.population.population as population_module def test_create_and_get_asset_french_path_writes_parquet_and_uses_hash( diff --git a/tests/back/unit/domain/population/test_032_alrgorithmic_method_happy_path.py b/tests/back/unit/domain/population/test_032_alrgorithmic_method_happy_path.py index 1b3bba8d..8789fed4 100644 --- a/tests/back/unit/domain/population/test_032_alrgorithmic_method_happy_path.py +++ b/tests/back/unit/domain/population/test_032_alrgorithmic_method_happy_path.py @@ -1,6 +1,6 @@ import pandas as pd -import mobility.population as population_module +import mobility.population.population as population_module def test_get_sample_sizes_happy_path(fake_transport_zones): diff --git a/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py b/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py index 9957fd37..2afad435 100644 --- a/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py +++ b/tests/back/unit/domain/population/test_033_algorithmic_method_edge_cases.py @@ -1,7 +1,7 @@ import pandas as pd import pytest -import mobility.population as population_module +import mobility.population.population as population_module def test_get_swiss_pop_groups_raises_without_census(): diff --git a/tests/back/unit/domain/population/test_034_algorithmic_method_nan_branch.py b/tests/back/unit/domain/population/test_034_algorithmic_method_nan_branch.py index 7a19a9ca..3fc4cdcf 100644 --- a/tests/back/unit/domain/population/test_034_algorithmic_method_nan_branch.py +++ b/tests/back/unit/domain/population/test_034_algorithmic_method_nan_branch.py @@ -1,6 +1,6 @@ import pandas as pandas -import mobility.population as population_module +import mobility.population.population as population_module def test_get_sample_sizes_handles_missing_legal_population_row(): diff --git a/tests/back/unit/domain/population/test_035_create_generates_deterministic_individual_ids.py b/tests/back/unit/domain/population/test_035_create_generates_deterministic_individual_ids.py index a67e2ac5..e4960e10 100644 --- a/tests/back/unit/domain/population/test_035_create_generates_deterministic_individual_ids.py +++ b/tests/back/unit/domain/population/test_035_create_generates_deterministic_individual_ids.py @@ -31,7 +31,7 @@ def capturing_to_parquet(self, path, *args, **kwargs): monkeypatch.setattr(pandas_module.DataFrame, "to_parquet", capturing_to_parquet, raising=True) - import mobility.population as population_module + import mobility.population.population as population_module population = population_module.Population( transport_zones=fake_transport_zones, sample_size=5, # any small positive sample size diff --git a/tests/back/unit/domain/trips/conftest.py b/tests/back/unit/domain/trips/conftest.py index 9537e833..ddbc4a9e 100644 --- a/tests/back/unit/domain/trips/conftest.py +++ b/tests/back/unit/domain/trips/conftest.py @@ -45,7 +45,7 @@ def patch_asset_init(monkeypatch, project_dir, fake_inputs_hash): Never call super().__init__ or do any I/O. Always set deterministic paths: /- - We also patch the FileAsset class that mobility.trips.individual_year_trips imported (aliases/re-exports), + We also patch the FileAsset class that IndividualYearTrips imported, and walk its MRO to catch unexpected base classes. """ from pathlib import Path as _Path @@ -103,7 +103,7 @@ def fake_asset_init(self, arg1, *args, **kwargs): for module_name, class_name, replacement in [ ("mobility.runtime.assets.file_asset", "FileAsset", fake_file_asset_init), ("mobility.runtime.assets.asset", "Asset", fake_asset_init), - ("mobility.trips.individual_year_trips", "FileAsset", fake_file_asset_init), + ("mobility.trips.individual_year_trips.individual_year_trips", "FileAsset", fake_file_asset_init), ]: try: module = __import__(module_name, fromlist=[class_name]) @@ -415,7 +415,7 @@ def stub_filter_database(input_dataframe, *positional_args, **keyword_args): return result_dataframe - # Patch both the original module and the alias imported inside mobility.trips.individual_year_trips + # Patch both the original module and the alias imported inside the implementation module try: import mobility.trips.individual_year_trips.safe_sample as safe_sample_module monkeypatch.setattr(safe_sample_module, "filter_database", stub_filter_database, raising=True) @@ -423,7 +423,7 @@ def stub_filter_database(input_dataframe, *positional_args, **keyword_args): pass try: - import mobility.trips.individual_year_trips as trips_module + import mobility.trips.individual_year_trips.individual_year_trips as trips_module monkeypatch.setattr(trips_module, "filter_database", stub_filter_database, raising=True) except Exception: pass @@ -513,14 +513,14 @@ def stub_safe_sample( return result_dataframe - # Patch both the original modules and the aliases imported in mobility.trips.individual_year_trips + # Patch both the original modules and the aliases imported in the implementation module try: import mobility.trips.individual_year_trips.sample_travels as module_sample_travels monkeypatch.setattr(module_sample_travels, "sample_travels", stub_sample_travels, raising=True) except Exception: pass try: - import mobility.trips.individual_year_trips as trips_module + import mobility.trips.individual_year_trips.individual_year_trips as trips_module monkeypatch.setattr(trips_module, "sample_travels", stub_sample_travels, raising=True) except Exception: pass @@ -530,7 +530,7 @@ def stub_safe_sample( except Exception: pass try: - import mobility.trips.individual_year_trips as trips_module_again + import mobility.trips.individual_year_trips.individual_year_trips as trips_module_again monkeypatch.setattr(trips_module_again, "safe_sample", stub_safe_sample, raising=True) except Exception: pass @@ -556,10 +556,10 @@ def stub_as_dataframe(self=None): } ) - # Patch source class and any alias imported in mobility.trips.individual_year_trips + # Patch source class and the alias imported in the implementation module targets = [ "mobility.impacts.default_gwp.DefaultGWP.as_dataframe", - "mobility.trips.individual_year_trips.DefaultGWP.as_dataframe", + "mobility.trips.individual_year_trips.individual_year_trips.DefaultGWP.as_dataframe", ] for target in targets: try: @@ -581,7 +581,7 @@ def patch_mobility_survey(monkeypatch): - travels: MultiIndex [country, csp, n_cars, city_category] - long_trips: MultiIndex [country, travel_id] - n_travels, p_immobility, p_car: MultiIndex [country, csp] - Also patches both the source modules and the mobility.trips.individual_year_trips aliases. + Also patches both the source modules and the implementation-module aliases. """ import pandas as pd @@ -687,14 +687,14 @@ class StubEMPMobilitySurvey: def __init__(self, *args, **kwargs): pass - # Patch both the source modules and the mobility.trips.individual_year_trips aliases + # Patch both the source modules and the implementation-module aliases monkeypatch.setattr( "mobility.surveys.MobilitySurveyAggregator", StubMobilitySurveyAggregator, raising=True, ) monkeypatch.setattr( - "mobility.trips.individual_year_trips.MobilitySurveyAggregator", + "mobility.trips.individual_year_trips.individual_year_trips.MobilitySurveyAggregator", StubMobilitySurveyAggregator, raising=True, ) @@ -704,7 +704,7 @@ def __init__(self, *args, **kwargs): raising=True, ) monkeypatch.setattr( - "mobility.trips.individual_year_trips.EMPMobilitySurvey", + "mobility.trips.individual_year_trips.individual_year_trips.EMPMobilitySurvey", StubEMPMobilitySurvey, raising=True, ) diff --git a/tests/conftest.py b/tests/conftest.py index 0deca79b..45d39e9b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -11,6 +11,7 @@ def pytest_addoption(parser): parser.addoption("--clear_inputs", action="store_true", default=False) parser.addoption("--clear_results", action="store_true", default=False) parser.addoption("--use-truststore", action="store_true", default=False) + parser.addoption("--debug-r", action="store_true", default=False) @pytest.fixture(scope="session") def clear_inputs(request): @@ -28,6 +29,10 @@ def local(request): def use_truststore(request): return request.config.getoption("--use-truststore") +@pytest.fixture(scope="session") +def debug_r(request): + return request.config.getoption("--debug-r") + def _repo_root() -> pathlib.Path: # .../tests/conftest.py -> repo root return pathlib.Path(__file__).resolve().parents[1] @@ -35,7 +40,7 @@ def _repo_root() -> pathlib.Path: def _load_dotenv_from_repo_root() -> None: dotenv.load_dotenv(_repo_root() / ".env") -def do_mobility_setup(local, clear_inputs, clear_results): +def do_mobility_setup(local, clear_inputs, clear_results, debug_r): if local: _load_dotenv_from_repo_root() @@ -65,6 +70,7 @@ def do_mobility_setup(local, clear_inputs, clear_results): mobility.set_params( package_data_folder_path=package_data_folder_path, project_data_folder_path=project_data_folder_path, + debug=debug_r, **extra_params, ) @@ -76,6 +82,7 @@ def pytest_configure(config): config.getoption("--local"), config.getoption("--clear_inputs"), config.getoption("--clear_results"), + config.getoption("--debug-r"), ) if config.getoption("--use-truststore"): From 519e739d210661048c9f7d30e2ca0b7faa5a65ee Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 14:59:20 +0200 Subject: [PATCH 05/24] add tests to increase coverage --- ...st_008_group_day_trips_can_be_computed.py} | 2 +- ...roup_day_trips_congestion_changes_costs.py | 124 ++++++++++++++ ...group_day_trips_results_can_be_computed.py | 104 +++++++++++ ...gment_day_plans_results_can_be_computed.py | 162 ------------------ ...oup_day_trips_results_are_reproducible.py} | 4 +- .../test_001_restore_saved_state.py | 137 +++++++++++++++ ...test_002_mode_sequences_parallel_search.py | 122 +++++++++++++ 7 files changed, 490 insertions(+), 165 deletions(-) rename tests/back/integration/{test_008_population_segment_day_plans_can_be_computed.py => test_008_group_day_trips_can_be_computed.py} (98%) create mode 100644 tests/back/integration/test_008b_group_day_trips_congestion_changes_costs.py create mode 100644 tests/back/integration/test_009_group_day_trips_results_can_be_computed.py delete mode 100644 tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py rename tests/back/integration/{test_010_population_segment_day_plans_results_are_reproducible.py => test_010_group_day_trips_results_are_reproducible.py} (90%) create mode 100644 tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py create mode 100644 tests/back/unit/domain/group_day_trips/test_002_mode_sequences_parallel_search.py diff --git a/tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py b/tests/back/integration/test_008_group_day_trips_can_be_computed.py similarity index 98% rename from tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py rename to tests/back/integration/test_008_group_day_trips_can_be_computed.py index c58129bd..7c42e79f 100644 --- a/tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py +++ b/tests/back/integration/test_008_group_day_trips_can_be_computed.py @@ -125,7 +125,7 @@ def _to_pandas(val): ], scope="session", ) -def test_008_population_segment_day_plans_can_be_computed(test_data, safe_json): +def test_008_group_day_trips_can_be_computed(test_data, safe_json): transport_zones = mobility.TransportZones( local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], diff --git a/tests/back/integration/test_008b_group_day_trips_congestion_changes_costs.py b/tests/back/integration/test_008b_group_day_trips_congestion_changes_costs.py new file mode 100644 index 00000000..1d028fc8 --- /dev/null +++ b/tests/back/integration/test_008b_group_day_trips_congestion_changes_costs.py @@ -0,0 +1,124 @@ +import pytest +import polars as pl + +import mobility +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import Parameters, GroupDayTrips +from mobility.surveys.france import EMPMobilitySurvey + + +@pytest.mark.dependency( + depends=[ + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed", + ], + scope="session", +) +def test_008b_group_day_trips_congestion_changes_costs(test_data): + transport_zones = mobility.TransportZones( + local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], + radius=test_data["transport_zones_radius"], + ) + + emp = EMPMobilitySurvey() + pop = mobility.Population( + transport_zones, + sample_size=test_data["population_sample_size"], + ) + + baseline_car_mode = mobility.Car(transport_zones) + baseline_walk_mode = mobility.Walk(transport_zones) + baseline_bicycle_mode = mobility.Bicycle(transport_zones) + baseline_mode_registry = mobility.ModeRegistry( + [baseline_car_mode, baseline_walk_mode, baseline_bicycle_mode] + ) + baseline_public_transport_mode = mobility.PublicTransport( + transport_zones, + mode_registry=baseline_mode_registry, + ) + + baseline = GroupDayTrips( + population=pop, + modes=[ + baseline_car_mode, + baseline_walk_mode, + baseline_bicycle_mode, + baseline_public_transport_mode, + ], + activities=[Home(), Work(), Other(population=pop)], + surveys=[emp], + parameters=Parameters( + n_iterations=1, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=6, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + simulate_weekend=False, + ), + ) + + congested_car_mode = mobility.Car( + transport_zones, + congestion=True, + congestion_flows_scaling_factor=1.0, + ) + congested_walk_mode = mobility.Walk(transport_zones) + congested_bicycle_mode = mobility.Bicycle(transport_zones) + congested_mode_registry = mobility.ModeRegistry( + [congested_car_mode, congested_walk_mode, congested_bicycle_mode] + ) + congested_public_transport_mode = mobility.PublicTransport( + transport_zones, + mode_registry=congested_mode_registry, + ) + + congested = GroupDayTrips( + population=pop, + modes=[ + congested_car_mode, + congested_walk_mode, + congested_bicycle_mode, + congested_public_transport_mode, + ], + activities=[Home(), Work(), Other(population=pop)], + surveys=[emp], + parameters=Parameters( + n_iterations=2, + n_iter_per_cost_update=1, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=6, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + simulate_weekend=False, + seed=0, + ), + ) + + baseline_result = baseline.get() + congested_result = congested.get() + + baseline_plan_steps = baseline_result["weekday_plan_steps"].collect() + congested_plan_steps = congested_result["weekday_plan_steps"].collect() + baseline_costs = baseline_result["weekday_costs"].collect() + congested_costs = congested_result["weekday_costs"].collect() + + assert baseline_plan_steps.height > 0 + assert congested_plan_steps.height > 0 + assert baseline_costs.height > 0 + assert congested_costs.height > 0 + + joined_costs = baseline_costs.join( + congested_costs.select(["from", "to", "mode", "cost"]).rename({"cost": "cost_congested"}), + on=["from", "to", "mode"], + how="inner", + ) + + assert joined_costs.height > 0 + assert ( + joined_costs + .filter((pl.col("cost") - pl.col("cost_congested")).abs() > 1e-9) + .height + > 0 + ) diff --git a/tests/back/integration/test_009_group_day_trips_results_can_be_computed.py b/tests/back/integration/test_009_group_day_trips_results_can_be_computed.py new file mode 100644 index 00000000..46f480cc --- /dev/null +++ b/tests/back/integration/test_009_group_day_trips_results_can_be_computed.py @@ -0,0 +1,104 @@ +import pytest + +import mobility +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import Parameters, GroupDayTrips +from mobility.surveys.france import EMPMobilitySurvey + + +@pytest.mark.dependency( + depends=[ + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed" + ], + scope="session", +) +def test_009_group_day_trips_results_can_be_computed(test_data): + transport_zones = mobility.TransportZones( + local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], + radius=test_data["transport_zones_radius"], + ) + emp = EMPMobilitySurvey() + + pop = mobility.Population( + transport_zones, + sample_size=test_data["population_sample_size"], + ) + + pop_trips = GroupDayTrips( + population=pop, + modes=[mobility.Car(transport_zones)], + activities=[Home(), Work(), Other(population=pop)], + surveys=[emp], + parameters=Parameters( + n_iterations=1, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=3, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + seed=0 + ), + ) + + # Evaluate various metrics + global_metrics = pop_trips.weekday_run.evaluate("global_metrics") + weekday_metrics_by_mode = pop_trips.weekday_run.evaluate( + "metrics_by_variable", + variable="mode", + normalize=True, + plot=False, + ) + weekday_metrics_by_activity = pop_trips.weekday_run.evaluate( + "metrics_by_variable", + variable="activity", + normalize=False, + plot=False, + ) + weekday_metrics_by_time_bin = pop_trips.weekday_run.evaluate( + "metrics_by_variable", + variable="time_bin", + plot=False, + ) + weekday_metrics_by_distance_bin = pop_trips.weekday_run.evaluate( + "metrics_by_variable", + variable="distance_bin", + plot=False, + ) + weekday_immobility = pop_trips.weekday_run.evaluate("immobility", plot=False) + weekday_opportunity_occupation = pop_trips.weekday_run.evaluate("opportunity_occupation") + weekday_state_waterfall, weekday_state_waterfall_summary = pop_trips.weekday_run.evaluate( + "state_waterfall", + quantity="distance", + plot=False, + top_n=3, + ) + weekday_trip_count_by_demand_group = pop_trips.weekday_run.evaluate("trip_count_by_demand_group") + weekday_distance_per_person = pop_trips.weekday_run.evaluate("distance_per_person") + weekday_ghg_per_person = pop_trips.weekday_run.evaluate("ghg_per_person") + weekday_time_per_person = pop_trips.weekday_run.evaluate("time_per_person") + weekday_cost_per_person = pop_trips.weekday_run.evaluate("cost_per_person") + weekday_distance_compare = pop_trips.weekday_run.results().distance_per_person(compare_with=pop_trips) + + assert global_metrics.height > 0 + assert weekday_metrics_by_mode.height > 0 + assert weekday_metrics_by_activity.height > 0 + assert weekday_metrics_by_time_bin.height > 0 + assert weekday_metrics_by_distance_bin.height > 0 + assert weekday_immobility.height > 0 + assert weekday_opportunity_occupation.height > 0 + assert weekday_state_waterfall.height > 0 + assert weekday_state_waterfall_summary.height > 0 + assert weekday_trip_count_by_demand_group.height > 0 + assert weekday_distance_per_person.height > 0 + assert weekday_ghg_per_person.height > 0 + assert weekday_time_per_person.height > 0 + assert weekday_cost_per_person.height > 0 + assert weekday_distance_compare.height > 0 + + assert {"variable", "mode", "value", "value_ref", "delta", "delta_relative"}.issubset(set(weekday_metrics_by_mode.columns)) + assert {"variable", "activity", "value", "value_ref", "delta", "delta_relative"}.issubset(set(weekday_metrics_by_activity.columns)) + assert {"variable", "time_bin", "value", "value_ref", "delta", "delta_relative"}.issubset(set(weekday_metrics_by_time_bin.columns)) + assert {"variable", "distance_bin", "value", "value_ref", "delta", "delta_relative"}.issubset(set(weekday_metrics_by_distance_bin.columns)) + assert {"country", "csp", "p_immobility", "p_immobility_ref"}.issubset(set(weekday_immobility.columns)) + assert "delta" in weekday_distance_compare.columns diff --git a/tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py b/tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py deleted file mode 100644 index acd55fd8..00000000 --- a/tests/back/integration/test_009_population_segment_day_plans_results_can_be_computed.py +++ /dev/null @@ -1,162 +0,0 @@ -import enum -import json -import os -import pandas as pd -import pytest - -import mobility -from mobility.activities import Home, Other, Work -from mobility.trips.group_day_trips import Parameters, GroupDayTrips -from mobility.surveys.france import EMPMobilitySurvey - - -@pytest.fixture -def safe_json(monkeypatch): - """Make json.dump/json.dumps (and orjson.dumps if present) resilient - to non-serializable objects during this test.""" - def _fallback(o): - if isinstance(o, enum.Enum): - return getattr(o, "value", o.name) - for attr in ("model_dump", "dict"): - m = getattr(o, attr, None) - if callable(m): - try: - return m() - except Exception: - pass - return getattr(o, "__dict__", str(o)) - - orig_dump = json.dump - orig_dumps = json.dumps - - def safe_dump(obj, fp, *args, **kwargs): - kwargs.setdefault("default", _fallback) - return orig_dump(obj, fp, *args, **kwargs) - - def safe_dumps(obj, *args, **kwargs): - kwargs.setdefault("default", _fallback) - return orig_dumps(obj, *args, **kwargs) - - monkeypatch.setattr(json, "dump", safe_dump, raising=True) - monkeypatch.setattr(json, "dumps", safe_dumps, raising=True) - - try: - import orjson # type: ignore - _orig_orjson_dumps = orjson.dumps - - def safe_orjson_dumps(obj, *args, **kwargs): - try: - return _orig_orjson_dumps(obj, *args, **kwargs) - except TypeError: - txt = json.dumps(obj, default=_fallback) - import json as _json - return _orig_orjson_dumps(_json.loads(txt), *args, **kwargs) - - monkeypatch.setattr(orjson, "dumps", safe_orjson_dumps, raising=False) - except Exception: - pass - - -def _to_pandas(val): - """Convert various table-like results to a pandas DataFrame.""" - # pandas - if hasattr(val, "shape") and hasattr(val, "columns"): - return val - - # polars - try: - import polars as pl # type: ignore - if isinstance(val, pl.LazyFrame): - return val.collect().to_pandas() - if isinstance(val, pl.DataFrame): - return val.to_pandas() - except Exception: - pass - - # pyspark - try: - from pyspark.sql import DataFrame as SparkDF # type: ignore - if isinstance(val, SparkDF): - return val.toPandas() - except Exception: - pass - - # mapping with a meaningful key - if isinstance(val, dict): - for k in ("data", "df", "path", "output", "result"): - if k in val: - return _to_pandas(val[k]) - - # lazy/collector - if hasattr(val, "collect") and callable(getattr(val, "collect")): - try: - return _to_pandas(val.collect()) - except Exception: - pass - - # path-like -> parquet - if isinstance(val, (str, os.PathLike)): - return pd.read_parquet(val) - - # last attempt - try: - return pd.read_parquet(str(val)) - except Exception: - raise AssertionError(f"Expected DataFrame/collectable/path-like, got {type(val)}") - - -@pytest.mark.dependency( - depends=[ - "tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py::test_008_population_segment_day_plans_can_be_computed" - ], - scope="session", -) -def test_009_population_segment_day_plans_results_can_be_computed(test_data, safe_json): - transport_zones = mobility.TransportZones( - local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], - radius=test_data["transport_zones_radius"], - ) - emp = EMPMobilitySurvey() - - pop = mobility.Population( - transport_zones, - sample_size=test_data["population_sample_size"], - ) - - pop_trips = GroupDayTrips( - population=pop, - modes=[mobility.Car(transport_zones)], - activities=[Home(), Work(), Other(population=pop)], - surveys=[emp], - parameters=Parameters( - n_iterations=1, - n_iter_per_cost_update=0, - alpha=0.01, - dest_prob_cutoff=0.9, - k_mode_sequences=3, - cost_uncertainty_sd=1.0, - mode_sequence_search_parallel=False, - seed=0 - ), - ) - - # Evaluate various metrics - global_metrics = pop_trips.weekday_run.evaluate("global_metrics") - weekday_opportunity_occupation = pop_trips.weekday_run.evaluate("opportunity_occupation") - weekday_trip_count_by_demand_group = pop_trips.weekday_run.evaluate("trip_count_by_demand_group") - weekday_distance_per_person = pop_trips.weekday_run.evaluate("distance_per_person") - weekday_time_per_person = pop_trips.weekday_run.evaluate("time_per_person") - - # Normalize results to pandas DataFrames - gm_df = _to_pandas(global_metrics) - opportunity_df = _to_pandas(weekday_opportunity_occupation) - trips_df = _to_pandas(weekday_trip_count_by_demand_group) - dist_df = _to_pandas(weekday_distance_per_person) - time_df = _to_pandas(weekday_time_per_person) - - # Assertions - assert gm_df.shape[0] > 0 - assert opportunity_df.shape[0] > 0 - assert trips_df.shape[0] > 0 - assert dist_df.shape[0] > 0 - assert time_df.shape[0] > 0 diff --git a/tests/back/integration/test_010_population_segment_day_plans_results_are_reproducible.py b/tests/back/integration/test_010_group_day_trips_results_are_reproducible.py similarity index 90% rename from tests/back/integration/test_010_population_segment_day_plans_results_are_reproducible.py rename to tests/back/integration/test_010_group_day_trips_results_are_reproducible.py index 6c5adcf8..34079489 100644 --- a/tests/back/integration/test_010_population_segment_day_plans_results_are_reproducible.py +++ b/tests/back/integration/test_010_group_day_trips_results_are_reproducible.py @@ -8,11 +8,11 @@ @pytest.mark.dependency( depends=[ - "tests/back/integration/test_008_population_segment_day_plans_can_be_computed.py::test_008_population_segment_day_plans_can_be_computed" + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed" ], scope="session", ) -def test_010_population_segment_day_plans_results_are_reproducible(test_data): +def test_010_group_day_trips_results_are_reproducible(test_data): transport_zones = mobility.TransportZones( local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], diff --git a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py new file mode 100644 index 00000000..006643d4 --- /dev/null +++ b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py @@ -0,0 +1,137 @@ +import random +from types import SimpleNamespace + +import polars as pl +import pytest + +from mobility.trips.group_day_trips.core.parameters import Parameters +from mobility.trips.group_day_trips.core.run import Run, RunState + + +class FakeIterations: + def __init__(self, saved_state): + self._saved_state = saved_state + self.requested_iterations = [] + self.discarded_iteration = None + + def iteration(self, iteration): + self.requested_iterations.append(iteration) + if isinstance(self._saved_state, Exception): + return SimpleNamespace(load_state=lambda: (_ for _ in ()).throw(self._saved_state)) + return SimpleNamespace(load_state=lambda: self._saved_state) + + def discard_future_iterations(self, *, iteration): + self.discarded_iteration = iteration + + +class FakeCostsAggregator: + def __init__(self, congestion_state): + self._congestion_state = congestion_state + self.load_calls = [] + self.get_calls = [] + + def load_congestion_state(self, **kwargs): + self.load_calls.append(kwargs) + return self._congestion_state + + def get(self, **kwargs): + self.get_calls.append(kwargs) + return pl.DataFrame({"cost": [1.5]}) + + +def make_run(*, congestion_state): + run = object.__new__(Run) + run.inputs_hash = "run-hash" + run.is_weekday = True + run.parameters = Parameters(n_iter_per_cost_update=3) + run.costs_aggregator = FakeCostsAggregator(congestion_state=congestion_state) + run.rng = random.Random(123) + return run + + +def make_state(): + return RunState( + chains_by_activity=pl.DataFrame(), + chains=pl.DataFrame(), + demand_groups=pl.DataFrame(), + activity_dur=pl.DataFrame(), + home_night_dur=pl.DataFrame(), + stay_home_plan=pl.DataFrame(), + opportunities=pl.DataFrame(), + current_plans=pl.DataFrame({"plan_id": [0]}), + remaining_opportunities=pl.DataFrame({"opportunity_id": [0]}), + costs=pl.DataFrame({"cost": [0.0]}), + congestion_state=None, + start_iteration=1, + ) + + +def test_restore_saved_state_happy_path_restores_mutable_state(): + saved_rng = random.Random(999) + saved_state = SimpleNamespace( + current_plans=pl.DataFrame({"plan_id": [11, 12]}), + remaining_opportunities=pl.DataFrame({"opportunity_id": [21, 22]}), + rng_state=saved_rng.getstate(), + ) + iterations = FakeIterations(saved_state=saved_state) + run = make_run(congestion_state="congestion-state") + state = make_state() + + run._restore_saved_state( + iterations=iterations, + state=state, + resume_from_iteration=2, + ) + + assert iterations.requested_iterations == [2] + assert iterations.discarded_iteration == 2 + assert state.current_plans.equals(saved_state.current_plans) + assert state.remaining_opportunities.equals(saved_state.remaining_opportunities) + assert state.congestion_state == "congestion-state" + assert state.start_iteration == 3 + assert state.costs.equals(pl.DataFrame({"cost": [1.5]})) + assert run.costs_aggregator.load_calls == [ + { + "run_key": "run-hash", + "is_weekday": True, + "last_completed_iteration": 2, + "cost_update_interval": 3, + } + ] + assert run.costs_aggregator.get_calls == [ + { + "congestion": True, + "congestion_state": "congestion-state", + } + ] + + +def test_restore_saved_state_wraps_load_state_errors(): + iterations = FakeIterations(saved_state=ValueError("broken state")) + run = make_run(congestion_state=None) + state = make_state() + + with pytest.raises(RuntimeError, match="Failed to load saved GroupDayTrips iteration state"): + run._restore_saved_state( + iterations=iterations, + state=state, + resume_from_iteration=2, + ) + + +def test_restore_saved_state_wraps_rng_restore_errors(): + saved_state = SimpleNamespace( + current_plans=pl.DataFrame({"plan_id": [11]}), + remaining_opportunities=pl.DataFrame({"opportunity_id": [21]}), + rng_state=object(), + ) + iterations = FakeIterations(saved_state=saved_state) + run = make_run(congestion_state=None) + state = make_state() + + with pytest.raises(RuntimeError, match="Failed to restore RNG state"): + run._restore_saved_state( + iterations=iterations, + state=state, + resume_from_iteration=2, + ) diff --git a/tests/back/unit/domain/group_day_trips/test_002_mode_sequences_parallel_search.py b/tests/back/unit/domain/group_day_trips/test_002_mode_sequences_parallel_search.py new file mode 100644 index 00000000..73680446 --- /dev/null +++ b/tests/back/unit/domain/group_day_trips/test_002_mode_sequences_parallel_search.py @@ -0,0 +1,122 @@ +import json +import pathlib +import pickle + +import polars as pl + +from mobility.trips.group_day_trips.plans.mode_sequences import ModeSequences + + +class _DummyLive: + def __init__(self, *args, **kwargs): + self.args = args + self.kwargs = kwargs + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc, tb): + return False + + +class _DummyProcess: + def __init__(self, command): + self.command = command + self.wait_called = False + + def wait(self): + self.wait_called = True + return 0 + + +def test_run_parallel_search_serializes_inputs_and_invokes_worker(monkeypatch, tmp_path): + mode_sequences = object.__new__(ModeSequences) + mode_sequences.parameters = type("Params", (), {"k_mode_sequences": 7})() + + unique_location_chains = pl.DataFrame( + { + "dest_seq_id": [1], + "locations": [[101, 202, 303]], + } + ) + costs = { + (101, 202, 0): 1200, + (202, 303, 1): 900, + } + leg_modes = { + (101, 202): [0, 1], + (202, 303): [1], + } + modes = { + "car": {"is_return_mode": False}, + "walk": {"is_return_mode": False}, + } + tmp_results_path = tmp_path / "tmp_results" + tmp_results_path.mkdir() + + popen_calls = [] + created_processes = [] + + def fake_popen(command): + process = _DummyProcess(command) + popen_calls.append(command) + created_processes.append(process) + return process + + monkeypatch.setattr( + "mobility.trips.group_day_trips.plans.mode_sequences.Live", + _DummyLive, + raising=True, + ) + monkeypatch.setattr( + "mobility.trips.group_day_trips.plans.mode_sequences.subprocess.Popen", + fake_popen, + raising=True, + ) + + mode_sequences._run_parallel_search( + parent_folder_path=tmp_path, + unique_location_chains=unique_location_chains, + costs=costs, + leg_modes=leg_modes, + modes=modes, + tmp_path=tmp_results_path, + ) + + costs_path = tmp_path / "tmp-costs.pkl" + leg_modes_path = tmp_path / "tmp-leg-modes.pkl" + modes_path = tmp_path / "modes-props.json" + location_chains_path = tmp_path / "tmp-location-chains.parquet" + + assert costs_path.exists() + assert leg_modes_path.exists() + assert modes_path.exists() + assert location_chains_path.exists() + + with open(costs_path, "rb") as file: + assert pickle.load(file) == costs + with open(leg_modes_path, "rb") as file: + assert pickle.load(file) == leg_modes + with open(modes_path, encoding="utf-8") as file: + assert json.load(file) == modes + assert pl.read_parquet(location_chains_path).equals(unique_location_chains) + + assert len(popen_calls) == 1 + command = popen_calls[0] + assert command[0:2] == ["python", "-u"] + assert pathlib.Path(command[2]).name == "compute_subtour_mode_probabilities.py" + assert command[3:] == [ + "--k_sequences", + "7", + "--location_chains_path", + str(location_chains_path), + "--costs_path", + str(costs_path), + "--leg_modes_path", + str(leg_modes_path), + "--modes_path", + str(modes_path), + "--tmp_path", + str(tmp_results_path), + ] + assert created_processes[0].wait_called is True From 5c0d072a51b1ed87da9102eda92b0031d494e1a2 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 15:18:49 +0200 Subject: [PATCH 06/24] change from data.cquest.org to cartes.gouv.fr to avoid errors when data.cquest.org is down --- mobility/spatial/admin_boundaries.py | 2 +- mobility/spatial/local_admin_units.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mobility/spatial/admin_boundaries.py b/mobility/spatial/admin_boundaries.py index ccabe9bc..8f51a3b6 100644 --- a/mobility/spatial/admin_boundaries.py +++ b/mobility/spatial/admin_boundaries.py @@ -12,7 +12,7 @@ def prepare_french_admin_boundaries(): logging.info("Preparing french city limits...") - url = "https://data.cquest.org/ign/adminexpress/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03.7z" + url = "https://data.geopf.fr/telechargement/download/ADMIN-EXPRESS-COG-CARTO/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2024-02-22/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2024-02-22.7z" path = pathlib.Path(os.environ["MOBILITY_PACKAGE_DATA_FOLDER"]) / "ign/admin-express/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03.7z" download_file(url, path) diff --git a/mobility/spatial/local_admin_units.py b/mobility/spatial/local_admin_units.py index c3d02bdb..2f550b90 100644 --- a/mobility/spatial/local_admin_units.py +++ b/mobility/spatial/local_admin_units.py @@ -16,7 +16,7 @@ class LocalAdminUnits(FileAsset): Use .get() method to get its content (under Parquet format). - In France, uses adminexpress base from IGN, stored on cquest.org. For Paris, Lyon and Marseille, each 'arrondissement' is considered a distinct admin unit. + In France, uses adminexpress base from IGN, stored on cartes.gouv.fr. For Paris, Lyon and Marseille, each 'arrondissement' is considered a distinct admin unit. In Switzerland, uses swisstopo data stored on geo.admin.ch @@ -64,7 +64,7 @@ def prepare_french_local_admin_units(self): logging.info("Preparing french city limits...") - url = "https://data.cquest.org/ign/adminexpress/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03.7z" + url = "https://data.geopf.fr/telechargement/download/ADMIN-EXPRESS-COG-CARTO/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2024-02-22/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2024-02-22.7z" path = pathlib.Path(os.environ["MOBILITY_PACKAGE_DATA_FOLDER"]) / "ign/admin-express/ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03.7z" download_file(url, path) From 94d223eaa624b5ea9ce6754790d581fcd0bd21fe Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 16:06:09 +0200 Subject: [PATCH 07/24] fix admin express folder structure --- mobility/spatial/admin_boundaries.py | 2 +- mobility/spatial/local_admin_units.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mobility/spatial/admin_boundaries.py b/mobility/spatial/admin_boundaries.py index 8f51a3b6..2a212168 100644 --- a/mobility/spatial/admin_boundaries.py +++ b/mobility/spatial/admin_boundaries.py @@ -21,7 +21,7 @@ def prepare_french_admin_boundaries(): # Convert to geoparquet path = path.parent / "ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03" / \ - "ADMIN-EXPRESS-COG-CARTO" / "1_DONNEES_LIVRAISON_2023-05-03" / "ADECOGC_3-2_SHP_LAMB93_FXX" + "ADMIN-EXPRESS-COG-CARTO" / "1_DONNEES_LIVRAISON_2024-03-00169" / "ADECOGC_3-2_SHP_LAMB93_FXX" for shp_file in ["ARRONDISSEMENT_MUNICIPAL.shp", "COMMUNE.shp", "EPCI.shp", "REGION.shp"]: diff --git a/mobility/spatial/local_admin_units.py b/mobility/spatial/local_admin_units.py index 2f550b90..9700ed83 100644 --- a/mobility/spatial/local_admin_units.py +++ b/mobility/spatial/local_admin_units.py @@ -73,7 +73,7 @@ def prepare_french_local_admin_units(self): # Convert to geoparquet path = path.parent / "ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03" / \ - "ADMIN-EXPRESS-COG-CARTO" / "1_DONNEES_LIVRAISON_2023-05-03" / "ADECOGC_3-2_SHP_LAMB93_FXX" + "ADMIN-EXPRESS-COG-CARTO" / "1_DONNEES_LIVRAISON_2024-03-00169" / "ADECOGC_3-2_SHP_LAMB93_FXX" # Replace Paris / Lyon / Marseille cities with their constituting arrondissements arrond = gpd.read_file(path / "ARRONDISSEMENT_MUNICIPAL.shp") From 29498b530797ceadb366fb434028f40a092a659f Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 16:31:46 +0200 Subject: [PATCH 08/24] fix conflict --- mobility/spatial/local_admin_units.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/mobility/spatial/local_admin_units.py b/mobility/spatial/local_admin_units.py index f411927c..b2c8b0c0 100644 --- a/mobility/spatial/local_admin_units.py +++ b/mobility/spatial/local_admin_units.py @@ -16,11 +16,7 @@ class LocalAdminUnits(FileAsset): Use .get() method to get its content (under Parquet format). -<<<<<<<< HEAD:mobility/spatial/local_admin_units.py - In France, uses adminexpress base from IGN, stored on cartes.gouv.fr. For Paris, Lyon and Marseille, each 'arrondissement' is considered a distinct admin unit. -======== In France, uses adminexpress base from IGN, stored on https://cartes.gouv.fr/. For Paris, Lyon and Marseille, each 'arrondissement' is considered a distinct admin unit. ->>>>>>>> origin/main:mobility/parsers/local_admin_units.py In Switzerland, uses swisstopo data stored on geo.admin.ch @@ -76,10 +72,6 @@ def prepare_french_local_admin_units(self): z.extractall(path.parent) # Convert to geoparquet -<<<<<<<< HEAD:mobility/spatial/local_admin_units.py - path = path.parent / "ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2023-05-03" / \ - "ADMIN-EXPRESS-COG-CARTO" / "1_DONNEES_LIVRAISON_2024-03-00169" / "ADECOGC_3-2_SHP_LAMB93_FXX" -======== path = ( path.parent / "ADMIN-EXPRESS-COG-CARTO_3-2__SHP_LAMB93_FXX_2024-02-22" @@ -87,7 +79,6 @@ def prepare_french_local_admin_units(self): / "1_DONNEES_LIVRAISON_2024-03-00169" / "ADECOGC_3-2_SHP_LAMB93_FXX-ED2024-02-22" ) ->>>>>>>> origin/main:mobility/parsers/local_admin_units.py # Replace Paris / Lyon / Marseille cities with their constituting arrondissements arrond = gpd.read_file(path / "ARRONDISSEMENT_MUNICIPAL.shp") From 166baead1990a47c720f01934b7868de64641768 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 17:21:21 +0200 Subject: [PATCH 09/24] remove type checking that hid a CongestionState import --- mobility/transport/costs/path/path_generalized_cost.py | 6 +----- mobility/transport/costs/path/path_travel_costs.py | 9 +++------ mobility/transport/costs/transport_costs_aggregator.py | 6 ++---- .../detailed/detailed_carpool_generalized_cost.py | 7 ++----- .../carpool/detailed/detailed_carpool_travel_costs.py | 9 +++------ .../public_transport_generalized_cost.py | 6 +----- mobility/trips/group_day_trips/iterations/iterations.py | 5 +---- 7 files changed, 13 insertions(+), 35 deletions(-) diff --git a/mobility/transport/costs/path/path_generalized_cost.py b/mobility/transport/costs/path/path_generalized_cost.py index 2376b3f5..519a7849 100644 --- a/mobility/transport/costs/path/path_generalized_cost.py +++ b/mobility/transport/costs/path/path_generalized_cost.py @@ -1,13 +1,9 @@ from __future__ import annotations import pandas as pd -from typing import TYPE_CHECKING from mobility.runtime.assets.in_memory_asset import InMemoryAsset -if TYPE_CHECKING: - from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState - class PathGeneralizedCost(InMemoryAsset): def __init__(self, travel_costs, parameters, mode_name): @@ -24,7 +20,7 @@ def get( metrics=["cost"], congestion: bool = False, detail_distances: bool = False, - congestion_state: CongestionState | None = None, + congestion_state: "CongestionState | None" = None, ) -> pd.DataFrame: metrics = list(metrics) diff --git a/mobility/transport/costs/path/path_travel_costs.py b/mobility/transport/costs/path/path_travel_costs.py index 5445fffc..42fec687 100644 --- a/mobility/transport/costs/path/path_travel_costs.py +++ b/mobility/transport/costs/path/path_travel_costs.py @@ -19,10 +19,7 @@ from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot from mobility.transport.costs.path.path_travel_costs_snapshot import PathTravelCostsSnapshot -from typing import TYPE_CHECKING, List - -if TYPE_CHECKING: - from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState +from typing import List class PathTravelCosts(FileAsset): """ @@ -88,7 +85,7 @@ def __init__( super().__init__(inputs, cache_path) - def get(self, congestion: bool = False, congestion_state: CongestionState | None = None) -> pd.DataFrame: + def get(self, congestion: bool = False, congestion_state: "CongestionState | None" = None) -> pd.DataFrame: requested_congestion = congestion and congestion_state is None self.update_ancestors_if_needed() @@ -198,7 +195,7 @@ def get_congested_graph_path(self, flow_asset=None) -> pathlib.Path: return self.build_snapshot_asset(flow_asset).inputs["contracted_graph"].inputs["congested_graph"].get() return self.inputs["congested_path_graph"].get() - def get_snapshot_asset(self, congestion_state: CongestionState) -> PathTravelCostsSnapshot | None: + def get_snapshot_asset(self, congestion_state: "CongestionState") -> PathTravelCostsSnapshot | None: flow_asset = congestion_state.for_mode(self.inputs["mode_name"]) if flow_asset is None: return None diff --git a/mobility/transport/costs/transport_costs_aggregator.py b/mobility/transport/costs/transport_costs_aggregator.py index 4457d991..23727452 100644 --- a/mobility/transport/costs/transport_costs_aggregator.py +++ b/mobility/transport/costs/transport_costs_aggregator.py @@ -3,13 +3,11 @@ import polars as pl import logging -from typing import TYPE_CHECKING, List +from typing import List from mobility.runtime.assets.in_memory_asset import InMemoryAsset from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset - -if TYPE_CHECKING: - from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class TransportCostsAggregator(InMemoryAsset): diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py index 00e79507..467e308e 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py @@ -2,15 +2,12 @@ import pandas as pd import numpy as np -from typing import TYPE_CHECKING, Annotated +from typing import Annotated from pydantic import BaseModel, ConfigDict, Field from mobility.runtime.assets.in_memory_asset import InMemoryAsset from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters -if TYPE_CHECKING: - from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState - class DetailedCarpoolGeneralizedCost(InMemoryAsset): def __init__(self, travel_costs, parameters): @@ -26,7 +23,7 @@ def get( metrics=["cost"], congestion: bool = False, detail_distances: bool = False, - congestion_state: CongestionState | None = None, + congestion_state: "CongestionState | None" = None, ) -> pd.DataFrame: metrics = list(metrics) diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py index 36b179bb..f0ae7066 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py @@ -6,7 +6,7 @@ import json import pandas as pd import shutil -from typing import TYPE_CHECKING, Annotated +from typing import Annotated from importlib import resources from pydantic import BaseModel, ConfigDict, Field @@ -19,9 +19,6 @@ DetailedCarpoolTravelCostsSnapshot, ) -if TYPE_CHECKING: - from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState - class DetailedCarpoolTravelCosts(FileAsset): def __init__( @@ -45,7 +42,7 @@ def __init__( super().__init__(inputs, cache_path) - def get(self, congestion: bool = False, congestion_state: CongestionState | None = None) -> pd.DataFrame: + def get(self, congestion: bool = False, congestion_state: "CongestionState | None" = None) -> pd.DataFrame: requested_congestion = congestion and congestion_state is None self.update_ancestors_if_needed() @@ -130,7 +127,7 @@ def compute_travel_costs( def get_snapshot_asset( self, - congestion_state: CongestionState, + congestion_state: "CongestionState", ) -> DetailedCarpoolTravelCostsSnapshot | None: flow_asset = congestion_state.for_mode("carpool") if flow_asset is None: diff --git a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py index cc844f2c..f1dac0f3 100644 --- a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py +++ b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py @@ -1,13 +1,9 @@ from __future__ import annotations import pandas as pd -from typing import TYPE_CHECKING from mobility.runtime.assets.in_memory_asset import InMemoryAsset -if TYPE_CHECKING: - from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState - class PublicTransportGeneralizedCost(InMemoryAsset): def __init__( @@ -37,7 +33,7 @@ def get( metrics=["cost"], congestion: bool = True, detail_distances: bool = False, - congestion_state: CongestionState | None = None, + congestion_state: "CongestionState | None" = None, ) -> pd.DataFrame: first_leg_mode_name = self.inputs["first_leg_mode_name"] diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py index b0956fff..56a782e0 100644 --- a/mobility/trips/group_day_trips/iterations/iterations.py +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -3,7 +3,7 @@ import shutil import logging from dataclasses import dataclass -from typing import TYPE_CHECKING, Any +from typing import Any import polars as pl @@ -17,9 +17,6 @@ TransitionEventsAsset, ) -if TYPE_CHECKING: - from ..core.run import RunState - @dataclass(frozen=True) class IterationState: From 221fad74e4d66e63bc0f14ebdbd8f62d05c31ab2 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 17:31:50 +0200 Subject: [PATCH 10/24] explicit CongestionState imports + put RunState in a separate file to avoid circular imports --- .../costs/path/path_generalized_cost.py | 3 ++- .../transport/costs/path/path_travel_costs.py | 5 +++-- .../detailed_carpool_generalized_cost.py | 3 ++- .../detailed/detailed_carpool_travel_costs.py | 5 +++-- .../public_transport_generalized_cost.py | 3 ++- .../trips/group_day_trips/core/__init__.py | 3 ++- mobility/trips/group_day_trips/core/run.py | 20 +---------------- .../trips/group_day_trips/core/run_state.py | 22 +++++++++++++++++++ .../group_day_trips/iterations/iterations.py | 3 ++- 9 files changed, 39 insertions(+), 28 deletions(-) create mode 100644 mobility/trips/group_day_trips/core/run_state.py diff --git a/mobility/transport/costs/path/path_generalized_cost.py b/mobility/transport/costs/path/path_generalized_cost.py index 519a7849..f5a4a025 100644 --- a/mobility/transport/costs/path/path_generalized_cost.py +++ b/mobility/transport/costs/path/path_generalized_cost.py @@ -3,6 +3,7 @@ import pandas as pd from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class PathGeneralizedCost(InMemoryAsset): @@ -20,7 +21,7 @@ def get( metrics=["cost"], congestion: bool = False, detail_distances: bool = False, - congestion_state: "CongestionState | None" = None, + congestion_state: CongestionState | None = None, ) -> pd.DataFrame: metrics = list(metrics) diff --git a/mobility/transport/costs/path/path_travel_costs.py b/mobility/transport/costs/path/path_travel_costs.py index 42fec687..7dd82902 100644 --- a/mobility/transport/costs/path/path_travel_costs.py +++ b/mobility/transport/costs/path/path_travel_costs.py @@ -18,6 +18,7 @@ from mobility.transport.graphs.congested.congested_path_graph_snapshot import CongestedPathGraphSnapshot from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot from mobility.transport.costs.path.path_travel_costs_snapshot import PathTravelCostsSnapshot +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState from typing import List @@ -85,7 +86,7 @@ def __init__( super().__init__(inputs, cache_path) - def get(self, congestion: bool = False, congestion_state: "CongestionState | None" = None) -> pd.DataFrame: + def get(self, congestion: bool = False, congestion_state: CongestionState | None = None) -> pd.DataFrame: requested_congestion = congestion and congestion_state is None self.update_ancestors_if_needed() @@ -195,7 +196,7 @@ def get_congested_graph_path(self, flow_asset=None) -> pathlib.Path: return self.build_snapshot_asset(flow_asset).inputs["contracted_graph"].inputs["congested_graph"].get() return self.inputs["congested_path_graph"].get() - def get_snapshot_asset(self, congestion_state: "CongestionState") -> PathTravelCostsSnapshot | None: + def get_snapshot_asset(self, congestion_state: CongestionState) -> PathTravelCostsSnapshot | None: flow_asset = congestion_state.for_mode(self.inputs["mode_name"]) if flow_asset is None: return None diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py index 467e308e..d63dba15 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py @@ -7,6 +7,7 @@ from mobility.runtime.assets.in_memory_asset import InMemoryAsset from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class DetailedCarpoolGeneralizedCost(InMemoryAsset): @@ -23,7 +24,7 @@ def get( metrics=["cost"], congestion: bool = False, detail_distances: bool = False, - congestion_state: "CongestionState | None" = None, + congestion_state: CongestionState | None = None, ) -> pd.DataFrame: metrics = list(metrics) diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py index f0ae7066..25bee74d 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py @@ -18,6 +18,7 @@ from mobility.transport.modes.carpool.detailed.detailed_carpool_travel_costs_snapshot import ( DetailedCarpoolTravelCostsSnapshot, ) +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class DetailedCarpoolTravelCosts(FileAsset): @@ -42,7 +43,7 @@ def __init__( super().__init__(inputs, cache_path) - def get(self, congestion: bool = False, congestion_state: "CongestionState | None" = None) -> pd.DataFrame: + def get(self, congestion: bool = False, congestion_state: CongestionState | None = None) -> pd.DataFrame: requested_congestion = congestion and congestion_state is None self.update_ancestors_if_needed() @@ -127,7 +128,7 @@ def compute_travel_costs( def get_snapshot_asset( self, - congestion_state: "CongestionState", + congestion_state: CongestionState, ) -> DetailedCarpoolTravelCostsSnapshot | None: flow_asset = congestion_state.for_mode("carpool") if flow_asset is None: diff --git a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py index f1dac0f3..956a814d 100644 --- a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py +++ b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py @@ -3,6 +3,7 @@ import pandas as pd from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class PublicTransportGeneralizedCost(InMemoryAsset): @@ -33,7 +34,7 @@ def get( metrics=["cost"], congestion: bool = True, detail_distances: bool = False, - congestion_state: "CongestionState | None" = None, + congestion_state: CongestionState | None = None, ) -> pd.DataFrame: first_leg_mode_name = self.inputs["first_leg_mode_name"] diff --git a/mobility/trips/group_day_trips/core/__init__.py b/mobility/trips/group_day_trips/core/__init__.py index 6a1f4838..1509e751 100644 --- a/mobility/trips/group_day_trips/core/__init__.py +++ b/mobility/trips/group_day_trips/core/__init__.py @@ -1,7 +1,8 @@ from .parameters import Parameters from .group_day_trips import GroupDayTrips from .results import RunResults -from .run import Run, RunState +from .run import Run +from .run_state import RunState __all__ = [ "GroupDayTrips", diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 84e3be85..53660c3f 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -2,16 +2,15 @@ import os import pathlib import random -from dataclasses import dataclass from typing import List import polars as pl -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState from ..iterations import Iteration, Iterations from ..plans import DestinationSequences, ModeSequences, PlanInitializer, PlanUpdater from .parameters import Parameters from .results import RunResults +from .run_state import RunState from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator from mobility.runtime.assets.file_asset import FileAsset from mobility.activities import Activity @@ -20,23 +19,6 @@ from mobility.transport.modes.core.transport_mode import TransportMode -@dataclass -class RunState: - chains_by_activity: pl.DataFrame - chains: pl.DataFrame - demand_groups: pl.DataFrame - activity_dur: pl.DataFrame - home_night_dur: pl.DataFrame - stay_home_plan: pl.DataFrame - opportunities: pl.DataFrame - current_plans: pl.DataFrame - remaining_opportunities: pl.DataFrame - costs: pl.DataFrame - congestion_state: CongestionState | None - start_iteration: int - current_plan_steps: pl.DataFrame | None = None - - class Run(FileAsset): """Single day-type GroupDayTrips asset.""" diff --git a/mobility/trips/group_day_trips/core/run_state.py b/mobility/trips/group_day_trips/core/run_state.py new file mode 100644 index 00000000..4d040e98 --- /dev/null +++ b/mobility/trips/group_day_trips/core/run_state.py @@ -0,0 +1,22 @@ +from dataclasses import dataclass + +import polars as pl + +from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState + + +@dataclass +class RunState: + chains_by_activity: pl.DataFrame + chains: pl.DataFrame + demand_groups: pl.DataFrame + activity_dur: pl.DataFrame + home_night_dur: pl.DataFrame + stay_home_plan: pl.DataFrame + opportunities: pl.DataFrame + current_plans: pl.DataFrame + remaining_opportunities: pl.DataFrame + costs: pl.DataFrame + congestion_state: CongestionState | None + start_iteration: int + current_plan_steps: pl.DataFrame | None = None diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py index 56a782e0..68eb99f6 100644 --- a/mobility/trips/group_day_trips/iterations/iterations.py +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -7,6 +7,7 @@ import polars as pl +from ..core.run_state import RunState from ..plans.destination_sequences import DestinationSequences from ..plans.mode_sequences import ModeSequences from .iteration_assets import ( @@ -113,7 +114,7 @@ def load_state(self) -> IterationState: ) - def save_state(self, state: "RunState", rng_state: object) -> None: + def save_state(self, state: RunState, rng_state: object) -> None: """Persist the run state for this completed iteration.""" iteration_state_folder = self.iterations.folder_paths["iteration-state"] try: From 45400aa9051e92f73c613731e5441cf96da214bf Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 17:37:51 +0200 Subject: [PATCH 11/24] move CongestionState to the transport/costs/ folder to avoid circular imports --- mobility/transport/costs/congestion_state.py | 23 ++++++++++++++++++ .../costs/path/path_generalized_cost.py | 2 +- .../transport/costs/path/path_travel_costs.py | 2 +- .../costs/transport_costs_aggregator.py | 2 +- .../detailed_carpool_generalized_cost.py | 2 +- .../detailed/detailed_carpool_travel_costs.py | 2 +- .../public_transport_generalized_cost.py | 2 +- mobility/trips/group_day_trips/core/run.py | 1 + .../trips/group_day_trips/core/run_state.py | 2 +- .../transitions/congestion_state.py | 24 +------------------ 10 files changed, 32 insertions(+), 30 deletions(-) create mode 100644 mobility/transport/costs/congestion_state.py diff --git a/mobility/transport/costs/congestion_state.py b/mobility/transport/costs/congestion_state.py new file mode 100644 index 00000000..04f26f64 --- /dev/null +++ b/mobility/transport/costs/congestion_state.py @@ -0,0 +1,23 @@ +from dataclasses import dataclass + +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset + + +@dataclass(frozen=True) +class CongestionState: + """Explicit run-owned congestion state for one iteration. + + This stores the persisted OD-flow assets that define the current congestion + view for each congestion-enabled mode. Travel-cost readers can derive the + appropriate snapshot artifacts directly from these assets without keeping + hidden mutable pointers. + """ + + run_key: str + is_weekday: bool + iteration: int + flow_assets_by_mode: dict[str, VehicleODFlowsAsset] + + def for_mode(self, mode_name: str) -> VehicleODFlowsAsset | None: + """Return the persisted flow asset backing the given mode.""" + return self.flow_assets_by_mode.get(str(mode_name)) diff --git a/mobility/transport/costs/path/path_generalized_cost.py b/mobility/transport/costs/path/path_generalized_cost.py index f5a4a025..d81d6391 100644 --- a/mobility/transport/costs/path/path_generalized_cost.py +++ b/mobility/transport/costs/path/path_generalized_cost.py @@ -3,7 +3,7 @@ import pandas as pd from mobility.runtime.assets.in_memory_asset import InMemoryAsset -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState +from mobility.transport.costs.congestion_state import CongestionState class PathGeneralizedCost(InMemoryAsset): diff --git a/mobility/transport/costs/path/path_travel_costs.py b/mobility/transport/costs/path/path_travel_costs.py index 7dd82902..d066e359 100644 --- a/mobility/transport/costs/path/path_travel_costs.py +++ b/mobility/transport/costs/path/path_travel_costs.py @@ -17,8 +17,8 @@ from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier from mobility.transport.graphs.congested.congested_path_graph_snapshot import CongestedPathGraphSnapshot from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot +from mobility.transport.costs.congestion_state import CongestionState from mobility.transport.costs.path.path_travel_costs_snapshot import PathTravelCostsSnapshot -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState from typing import List diff --git a/mobility/transport/costs/transport_costs_aggregator.py b/mobility/transport/costs/transport_costs_aggregator.py index 23727452..5ed17019 100644 --- a/mobility/transport/costs/transport_costs_aggregator.py +++ b/mobility/transport/costs/transport_costs_aggregator.py @@ -6,8 +6,8 @@ from typing import List from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.transport.costs.congestion_state import CongestionState from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class TransportCostsAggregator(InMemoryAsset): diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py index d63dba15..4f66cc98 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_generalized_cost.py @@ -6,8 +6,8 @@ from pydantic import BaseModel, ConfigDict, Field from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.transport.costs.congestion_state import CongestionState from mobility.transport.costs.parameters.cost_of_time_parameters import CostOfTimeParameters -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class DetailedCarpoolGeneralizedCost(InMemoryAsset): diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py index 25bee74d..5e985685 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py @@ -13,12 +13,12 @@ from mobility.runtime.assets.file_asset import FileAsset from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.costs.congestion_state import CongestionState from mobility.transport.modes.core.modal_transfer import IntermodalTransfer from mobility.transport.costs.path.path_travel_costs import PathTravelCosts from mobility.transport.modes.carpool.detailed.detailed_carpool_travel_costs_snapshot import ( DetailedCarpoolTravelCostsSnapshot, ) -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState class DetailedCarpoolTravelCosts(FileAsset): diff --git a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py index 956a814d..a99ae115 100644 --- a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py +++ b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py @@ -3,7 +3,7 @@ import pandas as pd from mobility.runtime.assets.in_memory_asset import InMemoryAsset -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState +from mobility.transport.costs.congestion_state import CongestionState class PublicTransportGeneralizedCost(InMemoryAsset): diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 53660c3f..71bf07f2 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -6,6 +6,7 @@ import polars as pl +from mobility.transport.costs.congestion_state import CongestionState from ..iterations import Iteration, Iterations from ..plans import DestinationSequences, ModeSequences, PlanInitializer, PlanUpdater from .parameters import Parameters diff --git a/mobility/trips/group_day_trips/core/run_state.py b/mobility/trips/group_day_trips/core/run_state.py index 4d040e98..770445d3 100644 --- a/mobility/trips/group_day_trips/core/run_state.py +++ b/mobility/trips/group_day_trips/core/run_state.py @@ -2,7 +2,7 @@ import polars as pl -from mobility.trips.group_day_trips.transitions.congestion_state import CongestionState +from mobility.transport.costs.congestion_state import CongestionState @dataclass diff --git a/mobility/trips/group_day_trips/transitions/congestion_state.py b/mobility/trips/group_day_trips/transitions/congestion_state.py index 04f26f64..812755c1 100644 --- a/mobility/trips/group_day_trips/transitions/congestion_state.py +++ b/mobility/trips/group_day_trips/transitions/congestion_state.py @@ -1,23 +1 @@ -from dataclasses import dataclass - -from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset - - -@dataclass(frozen=True) -class CongestionState: - """Explicit run-owned congestion state for one iteration. - - This stores the persisted OD-flow assets that define the current congestion - view for each congestion-enabled mode. Travel-cost readers can derive the - appropriate snapshot artifacts directly from these assets without keeping - hidden mutable pointers. - """ - - run_key: str - is_weekday: bool - iteration: int - flow_assets_by_mode: dict[str, VehicleODFlowsAsset] - - def for_mode(self, mode_name: str) -> VehicleODFlowsAsset | None: - """Return the persisted flow asset backing the given mode.""" - return self.flow_assets_by_mode.get(str(mode_name)) +from mobility.transport.costs.congestion_state import CongestionState From 26a0d51ed6b245baea60409236a8f7cc459d215d Mon Sep 17 00:00:00 2001 From: FlxPo Date: Tue, 17 Mar 2026 08:57:56 +0100 Subject: [PATCH 12/24] add time varying parameters --- mobility/__init__.py | 1 + mobility/activities/activity.py | 43 +- mobility/activities/home.py | 9 +- mobility/activities/leisure/leisure.py | 6 +- mobility/activities/other.py | 10 +- mobility/activities/shopping/shop.py | 6 +- mobility/activities/studies/study.py | 6 +- mobility/activities/work/work.py | 10 +- mobility/simulation_profile.py | 130 +++ mobility/trips/group_day_trips/core/run.py | 10 +- .../plans/destination_sequences.py | 19 +- .../group_day_trips/plans/plan_initializer.py | 442 ++++------ .../group_day_trips/plans/plan_updater.py | 828 +++++++----------- mobility/validation_types.py | 6 + 14 files changed, 695 insertions(+), 831 deletions(-) create mode 100644 mobility/simulation_profile.py create mode 100644 mobility/validation_types.py diff --git a/mobility/__init__.py b/mobility/__init__.py index 963f4852..4258b85a 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -46,6 +46,7 @@ PublicTransportRoutingParameters, ) from .transport.modes.core import IntermodalTransfer, ModeRegistry +from .simulation_profile import ParameterProfile, SimulationStep from .transport.graphs.modified.modifiers import ( BorderCrossingSpeedModifier, diff --git a/mobility/activities/activity.py b/mobility/activities/activity.py index 0c05142a..5d7b14cf 100644 --- a/mobility/activities/activity.py +++ b/mobility/activities/activity.py @@ -7,6 +7,8 @@ from mobility.runtime.assets.in_memory_asset import InMemoryAsset from pydantic import BaseModel, ConfigDict, Field +from mobility.simulation_profile import ParameterProfile, SimulationStep, resolve_model_for_step +from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat class Activity(InMemoryAsset): @@ -62,17 +64,33 @@ def __init__( super().__init__(inputs) - def get_utilities(self, transport_zones): + def get_parameters_at_step(self, step: SimulationStep) -> "MotiveParameters": + """Returns the motive parameters in effect at a simulation step. + + Args: + step: Simulation step used to evaluate step-varying parameter + profiles. + + Returns: + MotiveParameters: Parameter model with all step-varying fields + resolved to scalar values for ``step``. + """ + return resolve_model_for_step(self.inputs["parameters"], step) + + + def get_utilities(self, transport_zones, parameters: "MotiveParameters" | None = None): + + parameters = parameters or self.inputs["parameters"] if self.utilities is not None: utilities = self.utilities - elif self.inputs["parameters"].country_utilities is not None: + elif parameters.country_utilities is not None: transport_zones = transport_zones.get().drop("geometry", axis=1) transport_zones["country"] = transport_zones["local_admin_unit_id"].str[0:2] - transport_zones["utility"] = transport_zones["country"].map(self.inputs["parameters"].country_utilities) + transport_zones["utility"] = transport_zones["country"].map(parameters.country_utilities) utilities = pl.from_pandas( transport_zones[["transport_zone_id", "utility"]] @@ -109,40 +127,36 @@ class ActivityParameters(BaseModel): model_config = ConfigDict(extra="forbid") value_of_time: Annotated[ - float, + NonNegativeFloat | ParameterProfile, Field( default=10.0, - ge=0.0, title="Value of time", description="Utility weight for time spent traveling or on activities.", ), ] saturation_fun_ref_level: Annotated[ - float, + NonNegativeFloat, Field( default=1.5, - ge=0.0, title="Saturation reference level", description="Reference level used by the sink saturation utility function.", ), ] saturation_fun_beta: Annotated[ - float, + NonNegativeFloat, Field( default=4.0, - ge=0.0, title="Saturation beta", description="Shape parameter of the sink saturation utility function.", ), ] value_of_time_v2: Annotated[ - float | None, + NonNegativeFloat | ParameterProfile | None, Field( default=None, - ge=0.0, title="Alternative value of time", description="Optional alternative value of time for second utility formulation.", ), @@ -158,11 +172,9 @@ class ActivityParameters(BaseModel): ] radiation_lambda: Annotated[ - float | None, + UnitIntervalFloat | None, Field( default=None, - ge=0.0, - le=1.0, title="Radiation model lambda", description="Radiation-model parameter controlling destination choice dispersion.", ), @@ -178,10 +190,9 @@ class ActivityParameters(BaseModel): ] sink_saturation_coeff: Annotated[ - float, + NonNegativeFloat, Field( default=1.0, - ge=0.0, title="Sink saturation coefficient", description="Coefficient scaling sink saturation in activity utility.", ), diff --git a/mobility/activities/home.py b/mobility/activities/home.py index fa20a21b..4d54cc74 100644 --- a/mobility/activities/home.py +++ b/mobility/activities/home.py @@ -3,6 +3,7 @@ from typing import Annotated, List from pydantic import Field +from mobility.simulation_profile import ParameterProfile from mobility.activities.activity import Activity, ActivityParameters @@ -48,13 +49,13 @@ class HomeParameters(ActivityParameters): """Parameters specific to the home activity.""" value_of_time: Annotated[ - float, - Field(default=10.0, ge=0.0), + float | ParameterProfile, + Field(default=10.0), ] value_of_time_stay_home: Annotated[ - float, - Field(default=0.0, ge=0.0), + float | ParameterProfile, + Field(default=0.0), ] saturation_fun_ref_level: Annotated[ diff --git a/mobility/activities/leisure/leisure.py b/mobility/activities/leisure/leisure.py index 80d91a5c..ee31c56c 100644 --- a/mobility/activities/leisure/leisure.py +++ b/mobility/activities/leisure/leisure.py @@ -12,6 +12,8 @@ from pydantic import Field from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.leisure.leisure_facilities_distribution import LeisureFacilitiesDistribution +from mobility.simulation_profile import ParameterProfile +from mobility.validation_types import UnitIntervalFloat class Leisure(Activity): @@ -155,11 +157,11 @@ def plot_opportunities_map( class LeisureParameters(ActivityParameters): """Parameters specific to the leisure activity.""" - value_of_time: Annotated[float, Field(default=10.0, ge=0.0)] + value_of_time: Annotated[float | ParameterProfile, Field(default=10.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[ list[str], Field(default_factory=lambda: ["7.71", "7.72", "7.73", "7.74", "7.75", "7.76", "7.77", "7.78"]), ] - radiation_lambda: Annotated[float, Field(default=0.99986, ge=0.0, le=1.0)] + radiation_lambda: Annotated[UnitIntervalFloat, Field(default=0.99986)] diff --git a/mobility/activities/other.py b/mobility/activities/other.py index d57dfec6..999747f7 100644 --- a/mobility/activities/other.py +++ b/mobility/activities/other.py @@ -8,6 +8,8 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.population import Population +from mobility.simulation_profile import ParameterProfile +from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat class Other(Activity): @@ -79,8 +81,8 @@ class OtherParameters(ActivityParameters): """Parameters specific to the other activity.""" value_of_time: Annotated[ - float, - Field(default=10.0, ge=0.0), + float | ParameterProfile, + Field(default=10.0), ] saturation_fun_ref_level: Annotated[ @@ -94,6 +96,6 @@ class OtherParameters(ActivityParameters): ] radiation_lambda: Annotated[ - float, - Field(default=0.99986, ge=0.0, le=1.0), + UnitIntervalFloat, + Field(default=0.99986), ] diff --git a/mobility/activities/shopping/shop.py b/mobility/activities/shopping/shop.py index 246bc9ed..1f825c4c 100644 --- a/mobility/activities/shopping/shop.py +++ b/mobility/activities/shopping/shop.py @@ -9,6 +9,8 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.shopping.shops_turnover_distribution import ShopsTurnoverDistribution +from mobility.simulation_profile import ParameterProfile +from mobility.validation_types import UnitIntervalFloat class Shop(Activity): @@ -80,8 +82,8 @@ def get_opportunities(self, transport_zones): class ShopParameters(ActivityParameters): """Parameters specific to the shopping activity.""" - value_of_time: Annotated[float, Field(default=10.0, ge=0.0)] + value_of_time: Annotated[float | ParameterProfile, Field(default=10.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[list[str], Field(default_factory=lambda: ["2.20", "2.21"])] - radiation_lambda: Annotated[float, Field(default=0.99986, ge=0.0, le=1.0)] + radiation_lambda: Annotated[UnitIntervalFloat, Field(default=0.99986)] diff --git a/mobility/activities/studies/study.py b/mobility/activities/studies/study.py index 27e43c51..e2f98fc5 100644 --- a/mobility/activities/studies/study.py +++ b/mobility/activities/studies/study.py @@ -11,6 +11,8 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.studies.schools_capacity_distribution import SchoolsCapacityDistribution +from mobility.simulation_profile import ParameterProfile +from mobility.validation_types import UnitIntervalFloat class Study(Activity): @@ -158,8 +160,8 @@ def plot_opportunities_map( class StudyParameters(ActivityParameters): """Parameters specific to the studies activity.""" - value_of_time: Annotated[float, Field(default=10.0, ge=0.0)] + value_of_time: Annotated[float | ParameterProfile, Field(default=10.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[list[str], Field(default_factory=lambda: ["1.11"])] - radiation_lambda: Annotated[float, Field(default=0.99986, ge=0.0, le=1.0)] + radiation_lambda: Annotated[UnitIntervalFloat, Field(default=0.99986)] diff --git a/mobility/activities/work/work.py b/mobility/activities/work/work.py index 6551266a..7627ca37 100644 --- a/mobility/activities/work/work.py +++ b/mobility/activities/work/work.py @@ -9,6 +9,8 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.work.jobs_active_population_distribution import JobsActivePopulationDistribution +from mobility.simulation_profile import ParameterProfile +from mobility.validation_types import UnitIntervalFloat class Work(Activity): @@ -87,8 +89,8 @@ class WorkParameters(ActivityParameters): """Parameters specific to the work activity.""" value_of_time: Annotated[ - float, - Field(default=10.0, ge=0.0), + float | ParameterProfile, + Field(default=10.0), ] saturation_fun_ref_level: Annotated[ @@ -107,8 +109,8 @@ class WorkParameters(ActivityParameters): ] radiation_lambda: Annotated[ - float, - Field(default=0.99986, ge=0.0, le=1.0), + UnitIntervalFloat, + Field(default=0.99986), ] country_utilities: Annotated[ diff --git a/mobility/simulation_profile.py b/mobility/simulation_profile.py new file mode 100644 index 00000000..1f4eed89 --- /dev/null +++ b/mobility/simulation_profile.py @@ -0,0 +1,130 @@ +from __future__ import annotations + +from typing import Any, Literal, TypeVar + +import numpy as np +from pydantic import BaseModel, ConfigDict, Field, model_validator + +T = TypeVar("T", bound=BaseModel) + + +class SimulationStep(BaseModel): + """Identifies one simulation step. + + Attributes: + iteration: One-based simulation iteration index. + """ + + model_config = ConfigDict(extra="forbid") + + iteration: int = Field(ge=1) + + +class ParameterProfile(BaseModel): + """Defines a parameter value profile over simulation iterations. + + The profile is specified by control points keyed by iteration index. + Values can be evaluated with step-wise or linear interpolation. + + Attributes: + mode: Evaluation mode used between control points. + points: Mapping from iteration index to parameter value. + """ + + model_config = ConfigDict(extra="forbid") + + mode: Literal["step", "linear"] = "step" + points: dict[int, float] + + @model_validator(mode="after") + def validate_points(self) -> "ParameterProfile": + """Validates control points after model initialization. + + Returns: + ParameterProfile: The validated profile instance. + + Raises: + ValueError: If no control point is provided or if an iteration + index is lower than 1. + """ + if not self.points: + raise ValueError("ParameterProfile.points must not be empty.") + + invalid_steps = [step for step in self.points if step < 1] + if invalid_steps: + raise ValueError("ParameterProfile.points keys must be >= 1.") + + return self + + def at(self, step: SimulationStep) -> float: + """Evaluates the profile at a simulation step. + + Args: + step: Simulation step at which to evaluate the profile. + + Returns: + float: Parameter value at the requested step. + """ + sorted_points = sorted(self.points.items()) + iterations = np.array([iteration for iteration, _ in sorted_points], dtype=float) + values = np.array([value for _, value in sorted_points], dtype=float) + + if self.mode == "step": + idx = np.searchsorted(iterations, step.iteration, side="right") - 1 + idx = max(idx, 0) + return float(values[idx]) + + return float(np.interp(step.iteration, iterations, values)) + +def resolve_value_for_step(value: Any, step: SimulationStep) -> Any: + """Resolves one value for a simulation step. + + Supported inputs are: + - ``ParameterProfile`` instances, which are evaluated at ``step`` + - pydantic models, which are resolved field by field + - ``dict``/``list``/``tuple`` containers, which are resolved recursively + - plain leaf values, which are returned unchanged + + Args: + value: Value to resolve. + step: Simulation step used for evaluation. + + Returns: + Any: Resolved value for the requested step. + """ + + if isinstance(value, ParameterProfile): + return value.at(step) + + if isinstance(value, BaseModel): + return resolve_model_for_step(value, step) + + if isinstance(value, dict): + return {key: resolve_value_for_step(item, step) for key, item in value.items()} + + if isinstance(value, list): + return [resolve_value_for_step(item, step) for item in value] + + if isinstance(value, tuple): + return tuple(resolve_value_for_step(item, step) for item in value) + + return value + + +def resolve_model_for_step(model: T, step: SimulationStep) -> T: + """Resolves step-varying fields of a pydantic model. + + Args: + model: Pydantic model whose fields may contain step-varying values. + step: Simulation step used for evaluation. + + Returns: + T: New validated model instance with step-varying fields replaced by + their scalar values at ``step``. + """ + + resolved_data = { + field_name: resolve_value_for_step(getattr(model, field_name), step) + for field_name in model.__class__.model_fields + } + return model.__class__.model_validate(resolved_data) diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 71bf07f2..23d2f404 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -17,6 +17,7 @@ from mobility.activities import Activity from mobility.surveys import MobilitySurvey from mobility.population import Population +from mobility.simulation_profile import SimulationStep from mobility.transport.modes.core.transport_mode import TransportMode @@ -146,10 +147,13 @@ def _build_state( chains_by_activity, demand_groups, ) + step = SimulationStep(iteration=1) + home_activity = [activity for activity in self.activities if activity.name == "home"][0] stay_home_plan, current_plans = self.initializer.get_stay_home_state( demand_groups, home_night_dur, - self.activities, + home_activity, + step, self.parameters.min_activity_time_constant, ) opportunities = self.initializer.get_opportunities( @@ -310,6 +314,7 @@ def _update_iteration_state( mode_sequences: ModeSequences, ) -> pl.DataFrame: """Advance the simulation state by one iteration and return transition events.""" + step = SimulationStep(iteration=iteration.iteration) state.current_plans, state.current_plan_steps, transition_events = self.updater.get_new_plans( state.current_plans, state.current_plan_steps, @@ -319,7 +324,7 @@ def _update_iteration_state( state.congestion_state, state.remaining_opportunities, state.activity_dur, - iteration.iteration, + step, destination_sequences, mode_sequences, state.home_night_dur, @@ -341,6 +346,7 @@ def _update_iteration_state( state.current_plan_steps, state.opportunities, self.activities, + step, ) return transition_events diff --git a/mobility/trips/group_day_trips/plans/destination_sequences.py b/mobility/trips/group_day_trips/plans/destination_sequences.py index f1db0c0e..013e0840 100644 --- a/mobility/trips/group_day_trips/plans/destination_sequences.py +++ b/mobility/trips/group_day_trips/plans/destination_sequences.py @@ -7,6 +7,7 @@ from .sequence_index import add_index from mobility.runtime.assets.file_asset import FileAsset +from mobility.simulation_profile import SimulationStep class DestinationSequences(FileAsset): @@ -74,8 +75,10 @@ def create_and_get_asset(self) -> pl.DataFrame: if self.seed is None: raise ValueError("Cannot build destination sequences without a seed.") + step = SimulationStep(iteration=self.iteration) utilities = self._get_utilities( self.activities, + step, self.transport_zones, self.remaining_opportunities, self.costs, @@ -84,6 +87,7 @@ def create_and_get_asset(self) -> pl.DataFrame: destination_probability = self._get_destination_probability( utilities, self.activities, + step, self.parameters.dest_prob_cutoff, ) chains = ( @@ -132,13 +136,23 @@ def create_and_get_asset(self) -> pl.DataFrame: def _get_utilities( self, activities: list[Any], + step: SimulationStep, transport_zones: Any, opportunities: pl.DataFrame, costs: pl.DataFrame, cost_uncertainty_sd: float, ) -> tuple[pl.LazyFrame, pl.LazyFrame]: """Assemble destination utilities with cost uncertainty.""" - utilities = [(activity.name, activity.get_utilities(transport_zones)) for activity in activities] + utilities = [ + ( + activity.name, + activity.get_utilities( + transport_zones, + parameters=activity.get_parameters_at_step(step), + ), + ) + for activity in activities + ] utilities = [utility for utility in utilities if utility[1] is not None] utilities = [utility[1].with_columns(activity=pl.lit(utility[0])) for utility in utilities] @@ -199,6 +213,7 @@ def _get_destination_probability( self, utilities: tuple[pl.LazyFrame, pl.LazyFrame], activities: list[Any], + step: SimulationStep, destination_probability_cutoff: float, ) -> pl.DataFrame: """Compute destination probabilities from utilities.""" @@ -208,7 +223,7 @@ def _get_destination_probability( costs_by_bin = utilities[0] cost_bin_to_destination = utilities[1] activities_lambda = { - activity.name: activity.inputs["parameters"].radiation_lambda for activity in activities + activity.name: activity.get_parameters_at_step(step).radiation_lambda for activity in activities } return ( costs_by_bin diff --git a/mobility/trips/group_day_trips/plans/plan_initializer.py b/mobility/trips/group_day_trips/plans/plan_initializer.py index 7bf680c4..38e82276 100644 --- a/mobility/trips/group_day_trips/plans/plan_initializer.py +++ b/mobility/trips/group_day_trips/plans/plan_initializer.py @@ -2,417 +2,293 @@ import polars as pl +from mobility.activities.activity import Activity +from mobility.simulation_profile import SimulationStep + class PlanInitializer: """Builds initial chain demand, averages, and opportunities for the model. - + Provides helpers to (1) aggregate population groups and attach survey chain probabilities, (2) compute mean activity durations, (3) create the stay-home baseline plan, (4) derive destination opportunities, and (5) fetch current OD costs. """ - + def get_chains(self, population, surveys, activities, modes, is_weekday): - """Aggregate demand groups and attach survey chain probabilities. - - Produces per-group trip chains with durations and anchor flags by - joining population groups (zone/city category/CSP/cars) with survey - chain probabilities, filtering by weekday/weekend, and indexing - activity sequences. - - Args: - population: Population container providing transport zones and groups. - surveys: Iterable of survey objects exposing `get_chains_probability`. - activities: Iterable of activities; used to mark anchors. - modes: - is_weekday (bool): Select weekday (True) or weekend (False) chains. - - Returns: - tuple[pl.DataFrame, pl.DataFrame]: - - chains: Columns include - ["demand_group_id","activity_seq_id","seq_step_index","activity", - "n_persons","duration","is_anchor"]. - - demand_groups: Aggregated groups with - ["demand_group_id","home_zone_id","csp","n_cars","n_persons"]. - """ - - # Map local admin units to urban unit categories (C, B, I, R) to be able - # to get population counts by urban unit category - lau_to_city_cat = ( + """Aggregate demand groups and attach survey chain probabilities.""" + + lau_to_city_cat = ( pl.from_pandas( population.transport_zones.study_area.get() - .drop("geometry", axis=1) - [["local_admin_unit_id", "urban_unit_category"]] + .drop("geometry", axis=1)[["local_admin_unit_id", "urban_unit_category"]] .rename({"urban_unit_category": "city_category"}, axis=1) - ) - .with_columns( - country=pl.col("local_admin_unit_id").str.slice(0, 2) - ) + ).with_columns(country=pl.col("local_admin_unit_id").str.slice(0, 2)) ) - + countries = lau_to_city_cat["country"].unique().to_list() - # Aggregate population groups by transport zone, city category, socio pro - # category and number of cars in the household demand_groups = ( - pl.scan_parquet(population.get()["population_groups"]) - .rename({ - "socio_pro_category": "csp", - "transport_zone_id": "home_zone_id", - "weight": "n_persons" - }) - .with_columns( - home_zone_id=pl.col("home_zone_id").cast(pl.Int32) + .rename( + { + "socio_pro_category": "csp", + "transport_zone_id": "home_zone_id", + "weight": "n_persons", + } ) + .with_columns(home_zone_id=pl.col("home_zone_id").cast(pl.Int32)) .join(lau_to_city_cat.lazy(), on=["local_admin_unit_id"]) .group_by(["country", "home_zone_id", "city_category", "csp", "n_cars"]) .agg(pl.col("n_persons").sum()) - .collect(engine="streaming") - ) - - # Get the chain probabilities from the mobility surveys - surveys = [ - s for s in surveys - if s.inputs["parameters"].country in countries - ] - + + surveys = [s for s in surveys if s.inputs["parameters"].country in countries] + p_chain = ( pl.concat( [ - ( - survey - .get_chains_probability(activities, modes) - .with_columns( - country=pl.lit(survey.inputs["parameters"].country) - ) + survey.get_chains_probability(activities, modes).with_columns( + country=pl.lit(survey.inputs["parameters"].country) ) for survey in surveys ] + ).rename( + { + "motive": "activity", + "motive_seq": "activity_seq", + } ) - .rename({ - "motive": "activity", - "motive_seq": "activity_seq", - }) ) - - # Cast string columns to enums for better perf + def get_col_values(df1, df2, col): s = pl.concat([df1.select(col), df2.select(col)]).to_series() return s.unique().sort().to_list() - + city_category_values = get_col_values(demand_groups, p_chain, "city_category") csp_values = get_col_values(demand_groups, p_chain, "csp") n_cars_values = get_col_values(demand_groups, p_chain, "n_cars") activity_values = p_chain["activity"].unique().sort().to_list() mode_values = p_chain["mode"].unique().sort().to_list() - - p_chain = ( - p_chain - .with_columns( - country=pl.col("country").cast(pl.Enum(countries)), - city_category=pl.col("city_category").cast(pl.Enum(city_category_values)), - csp=pl.col("csp").cast(pl.Enum(csp_values)), - n_cars=pl.col("n_cars").cast(pl.Enum(n_cars_values)), - activity=pl.col("activity").cast(pl.Enum(activity_values)), - mode=pl.col("mode").cast(pl.Enum(mode_values)), - ) + + p_chain = p_chain.with_columns( + country=pl.col("country").cast(pl.Enum(countries)), + city_category=pl.col("city_category").cast(pl.Enum(city_category_values)), + csp=pl.col("csp").cast(pl.Enum(csp_values)), + n_cars=pl.col("n_cars").cast(pl.Enum(n_cars_values)), + activity=pl.col("activity").cast(pl.Enum(activity_values)), + mode=pl.col("mode").cast(pl.Enum(mode_values)), ) - - # Create demand groups - # !!! Sorting before creating ids is VERY important for reproducibility + demand_groups = ( - demand_groups - .with_columns( + demand_groups.with_columns( country=pl.col("country").cast(pl.Enum(countries)), city_category=pl.col("city_category").cast(pl.Enum(city_category_values)), csp=pl.col("csp").cast(pl.Enum(csp_values)), - n_cars=pl.col("n_cars").cast(pl.Enum(n_cars_values)) + n_cars=pl.col("n_cars").cast(pl.Enum(n_cars_values)), ) .sort(["home_zone_id", "country", "city_category", "csp", "n_cars"]) .with_row_index("demand_group_id") ) - - # Create an index for activity sequences to avoid moving giant strings around - # !!! Sorting before creating ids is VERY important for reproducibility - activity_seqs = ( - p_chain - .select(["activity_seq", "seq_step_index", "activity"]) - .unique() - ) - + + activity_seqs = p_chain.select(["activity_seq", "seq_step_index", "activity"]).unique() + activity_seq_index = ( activity_seqs.select("activity_seq") .unique() .sort("activity_seq") .with_row_index("activity_seq_id") ) - - activity_seqs = ( - activity_seqs - .join(activity_seq_index, on="activity_seq") - ) - - + + activity_seqs = activity_seqs.join(activity_seq_index, on="activity_seq") + p_chain = ( - p_chain - .join( + p_chain.join( activity_seqs.select(["activity_seq", "activity_seq_id", "seq_step_index"]), - on=["activity_seq", "seq_step_index"] - ) - .drop("activity_seq") + on=["activity_seq", "seq_step_index"], + ).drop("activity_seq") ) - - # Compute the amount of demand (= duration) per demand group and activity sequence - anchors = {m.name: m.is_anchor for m in activities} - - chains = ( - demand_groups - .join(p_chain, on=["country", "city_category", "csp", "n_cars"]) + anchors = {activity.name: activity.is_anchor for activity in activities} + + chains = ( + demand_groups.join(p_chain, on=["country", "city_category", "csp", "n_cars"]) .filter(pl.col("is_weekday") == is_weekday) .drop("is_weekday") - .with_columns( - n_persons=pl.col("n_persons")*pl.col("p_seq") - ) + .with_columns(n_persons=pl.col("n_persons") * pl.col("p_seq")) .with_columns( duration_per_pers=( - ( - pl.col("duration_morning") - + pl.col("duration_midday") - + pl.col("duration_evening") - ) + pl.col("duration_morning") + pl.col("duration_midday") + pl.col("duration_evening") ) ) - - ) - + chains_by_activity = ( - - chains - - .group_by(["demand_group_id", "activity_seq_id", "seq_step_index", "activity"]) + chains.group_by(["demand_group_id", "activity_seq_id", "seq_step_index", "activity"]) .agg( n_persons=pl.col("n_persons").sum(), - duration=(pl.col("n_persons")*pl.col("duration_per_pers")).sum() + duration=(pl.col("n_persons") * pl.col("duration_per_pers")).sum(), ) - - .sort(["demand_group_id", "activity_seq_id", "seq_step_index"]) - .with_columns( - is_anchor=pl.col("activity").cast(pl.Utf8).replace_strict(anchors) - ) - - ) - - # Drop unecessary columns from demand groups - demand_groups = ( - demand_groups - .drop(["country", "city_category"]) + .sort(["demand_group_id", "activity_seq_id", "seq_step_index"]) + .with_columns(is_anchor=pl.col("activity").cast(pl.Utf8).replace_strict(anchors)) ) + demand_groups = demand_groups.drop(["country", "city_category"]) + return chains_by_activity, chains, demand_groups - - + def get_mean_activity_durations(self, chains, demand_groups): - - """Compute mean per-person durations for activities and home-night. - - Uses chain step durations weighted by group sizes to estimate: - - mean activity duration per (CSP, activity) excluding final steps, and - - mean residual home-night duration per CSP. - Enforces a small positive floor (~2 min) for numerical stability. - - Args: - chains (pl.DataFrame): Output from `get_chains`. - demand_groups (pl.DataFrame): Group metadata with CSP and sizes. - - Returns: - tuple[pl.DataFrame, pl.DataFrame]: - - mean_activity_durations: ["csp","activity","mean_duration_per_pers"]. - - mean_home_night_durations: ["csp","mean_home_night_per_pers"]. - """ - - two_minutes = 120.0/3600.0 - - chains = ( - chains - .join(demand_groups.select(["demand_group_id", "csp"]), on="demand_group_id") - .with_columns(duration_per_pers=pl.col("duration")/pl.col("n_persons")) + """Compute mean per-person durations for activities and home-night.""" + + two_minutes = 120.0 / 3600.0 + + chains = ( + chains.join(demand_groups.select(["demand_group_id", "csp"]), on="demand_group_id") + .with_columns(duration_per_pers=pl.col("duration") / pl.col("n_persons")) ) - + mean_activity_durations = ( - chains - .filter(pl.col("seq_step_index") != pl.col("seq_step_index").max().over(["demand_group_id", "activity_seq_id"])) + chains.filter( + pl.col("seq_step_index") + != pl.col("seq_step_index").max().over(["demand_group_id", "activity_seq_id"]) + ) .group_by(["csp", "activity"]) .agg( - mean_duration_per_pers=pl.max_horizontal([ - (pl.col("duration_per_pers")*pl.col("n_persons")).sum()/pl.col("n_persons").sum(), - pl.lit(two_minutes) - ]) + mean_duration_per_pers=pl.max_horizontal( + [ + (pl.col("duration_per_pers") * pl.col("n_persons")).sum() + / pl.col("n_persons").sum(), + pl.lit(two_minutes), + ] + ) ) ) - + mean_home_night_durations = ( - chains - .group_by(["demand_group_id", "csp", "activity_seq_id"]) + chains.group_by(["demand_group_id", "csp", "activity_seq_id"]) .agg( n_persons=pl.col("n_persons").first(), - home_night_per_pers=24.0 - pl.col("duration_per_pers").sum() + home_night_per_pers=24.0 - pl.col("duration_per_pers").sum(), ) .group_by("csp") .agg( - mean_home_night_per_pers=pl.max_horizontal([ - (pl.col("home_night_per_pers")*pl.col("n_persons")).sum()/pl.col("n_persons").sum(), - pl.lit(two_minutes) - ]) + mean_home_night_per_pers=pl.max_horizontal( + [ + (pl.col("home_night_per_pers") * pl.col("n_persons")).sum() + / pl.col("n_persons").sum(), + pl.lit(two_minutes), + ] + ) ) ) - + return mean_activity_durations, mean_home_night_durations - - + def get_stay_home_state( - self, - demand_groups, - home_night_dur, - activities, - min_activity_time_constant: float, - ): - - """Create the baseline 'stay home all day' state. - - Builds an initial state (iteration 0) per demand group with utility - derived from mean home-night duration and the configured coefficient. - - Args: - demand_groups (pl.DataFrame): ["demand_group_id","csp","n_persons"]. - home_night_dur (pl.DataFrame): ["csp","mean_home_night_per_pers"]. - min_activity_time_constant (float): Log-utility floor parameter - used consistently with state utility computation. - - Returns: - tuple[pl.DataFrame, pl.DataFrame]: - - stay_home_state: Columns - ["demand_group_id","iteration","activity_seq_id","mode_seq_id", - "dest_seq_id","utility","n_persons"] with zeros for seq IDs. - - current_states: A clone of `stay_home_state` for iteration start. - """ - - home_activity = [m for m in activities if m.name == "home"][0] - + self, + demand_groups, + home_night_dur, + home_activity: Activity, + step: SimulationStep, + min_activity_time_constant: float, + ): + """Create the baseline 'stay home all day' state.""" + + value_of_time_stay_home = home_activity.get_parameters_at_step(step).value_of_time_stay_home + stay_home_state = ( - demand_groups.select(["demand_group_id", "csp", "n_persons"]) .with_columns( iteration=pl.lit(0, pl.UInt32()), activity_seq_id=pl.lit(0, pl.UInt32()), mode_seq_id=pl.lit(0, pl.UInt32()), - dest_seq_id=pl.lit(0, pl.UInt32()) + dest_seq_id=pl.lit(0, pl.UInt32()), ) .join(home_night_dur, on="csp") .with_columns( - utility=( - home_activity.inputs["parameters"].value_of_time_stay_home + utility=( + value_of_time_stay_home * pl.col("mean_home_night_per_pers") - * (pl.col("mean_home_night_per_pers")/pl.col("mean_home_night_per_pers")/math.exp(-min_activity_time_constant)).log().clip(0.0) + * ( + pl.col("mean_home_night_per_pers") + / pl.col("mean_home_night_per_pers") + / math.exp(-min_activity_time_constant) + ) + .log() + .clip(0.0) ) ) - - .select(["demand_group_id", "iteration", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) + .select( + [ + "demand_group_id", + "csp", + "mean_home_night_per_pers", + "iteration", + "activity_seq_id", + "mode_seq_id", + "dest_seq_id", + "utility", + "n_persons", + ] + ) ) - - current_states = ( - stay_home_state - .select(["demand_group_id", "iteration", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"]) - .clone() + + current_states = ( + stay_home_state.select( + ["demand_group_id", "iteration", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility", "n_persons"] + ).clone() ) - + return stay_home_state, current_states - def get_opportunities(self, chains, activities, transport_zones): - - """Compute destination opportunities per activity and zone. - - Scales available opportunities by demand per activity and a - activity-specific saturation coefficient to derive per-destination - capacity and initial availability. - - Args: - chains (pl.DataFrame): Chains with total duration per activity. - activities: Iterable of activities exposing `get_opportunities(...)` and - `sink_saturation_coeff`. - transport_zones: Zone container passed to activities. - - Returns: - pl.DataFrame: ["to","activity","opportunity_capacity","k_saturation_utility"]. - """ - - demand = ( - chains - .filter(pl.col("activity_seq_id") != 0) - .group_by(["activity"]) - .agg(pl.col("duration").sum()) + """Compute destination opportunities per activity and zone.""" + + demand = ( + chains.filter(pl.col("activity_seq_id") != 0).group_by(["activity"]).agg(pl.col("duration").sum()) ) - + activity_names = chains.schema["activity"].categories - + opportunities = ( - pl.concat( [ - ( - activity - .get_opportunities(transport_zones) - .with_columns( - activity=pl.lit(activity.name), - sink_saturation_coeff=pl.lit(activity.inputs["parameters"].sink_saturation_coeff) - ) + activity.get_opportunities(transport_zones).with_columns( + activity=pl.lit(activity.name), + sink_saturation_coeff=pl.lit(activity.inputs["parameters"].sink_saturation_coeff), ) - for activity in activities if activity.has_opportunities is True + for activity in activities + if activity.has_opportunities is True ] ) - .filter(pl.col("n_opp") > 0.0) - .with_columns( activity=pl.col("activity").cast(pl.Enum(activity_names)), - to=pl.col("to").cast(pl.Int32) + to=pl.col("to").cast(pl.Int32), ) .join(demand, on="activity") .with_columns( - opportunity_capacity=( - pl.col("n_opp")/pl.col("n_opp").sum().over("activity") - * pl.col("duration")*pl.col("sink_saturation_coeff") + opportunity_capacity=( + pl.col("n_opp") / pl.col("n_opp").sum().over("activity") + * pl.col("duration") + * pl.col("sink_saturation_coeff") ), - k_saturation_utility=pl.lit(1.0, dtype=pl.Float64()) + k_saturation_utility=pl.lit(1.0, dtype=pl.Float64()), ) .select(["to", "activity", "opportunity_capacity", "k_saturation_utility"]) ) return opportunities - - + def get_current_costs(self, costs, congestion): - """Fetch current OD costs and cast endpoint IDs. - - Args: - costs: TransportCostsAggregator-like provider with `.get(congestion=...)`. - congestion (bool): Whether to use congested costs. - - Returns: - pl.DataFrame: At least ["from","to","cost"], with Int32 endpoints. - """ - - current_costs = ( - costs.get(congestion=congestion) - .with_columns([ + """Fetch current OD costs and cast endpoint IDs.""" + + current_costs = costs.get(congestion=congestion).with_columns( + [ pl.col("from").cast(pl.Int32()), - pl.col("to").cast(pl.Int32()) - ]) + pl.col("to").cast(pl.Int32()), + ] ) return current_costs diff --git a/mobility/trips/group_day_trips/plans/plan_updater.py b/mobility/trips/group_day_trips/plans/plan_updater.py index 291dbf80..483bb4a9 100644 --- a/mobility/trips/group_day_trips/plans/plan_updater.py +++ b/mobility/trips/group_day_trips/plans/plan_updater.py @@ -7,60 +7,31 @@ from .destination_sequences import DestinationSequences from .mode_sequences import ModeSequences from ..transitions.transition_schema import TRANSITION_EVENT_COLUMNS +from mobility.simulation_profile import SimulationStep class PlanUpdater: - """Updates population plan distributions over activity/destination/mode sequences. - - Builds candidate states, scores utilities (including home-night term), - computes transition probabilities, applies transitions, and returns the - updated aggregate states plus their per-step expansion. - """ - + """Updates population plan distributions over activity/destination/mode sequences.""" + def get_new_plans( - self, - current_plans: pl.DataFrame, - current_plan_steps: pl.DataFrame | None, - demand_groups: pl.DataFrame, - chains: pl.DataFrame, - costs_aggregator: Any, - congestion_state: Any, - remaining_opportunities: pl.DataFrame, - activity_dur: pl.DataFrame, - iteration: int, - destination_sequences: DestinationSequences, - mode_sequences: ModeSequences, - home_night_dur: pl.DataFrame, - stay_home_plan: pl.DataFrame, - parameters: Any, - activities: list[Any] - ) -> tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame]: - """Advance one iteration of plan updates. - - Orchestrates: candidate step generation → state utilities → - transition probabilities → transitioned states → per-step expansion. - - Args: - current_plans (pl.DataFrame): Current aggregate plans with columns - ["demand_group_id","activity_seq_id","dest_seq_id","mode_seq_id", - "utility","n_persons"]. - demand_groups (pl.DataFrame): Demand groups (e.g., csp, counts). - chains (pl.DataFrame): Chain templates with durations per step. - costs_aggregator (TransportCostsAggregator): Provides mode/OD costs. - remaining_opportunities (pl.DataFrame): Opportunity state per (activity,to) - with capacity and saturation utility penalty. - activity_dur (pl.DataFrame): Mean activity durations by (csp,activity). - iteration (int): Current iteration (1-based). - destination_sequences (DestinationSequences): Persisted destination sequences for the iteration. - mode_sequences (ModeSequences): Persisted mode sequences for the iteration. - home_night_dur (pl.DataFrame): Mean remaining home-night duration by csp. - stay_home_plan (pl.DataFrame): Baseline “stay-home” plan rows. - parameters (Parameters): Coefficients and tunables. - - Returns: - tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame]: - Updated current plans, expanded per-step plans, and transition events. - """ + self, + current_plans: pl.DataFrame, + current_plan_steps: pl.DataFrame | None, + demand_groups: pl.DataFrame, + chains: pl.DataFrame, + costs_aggregator: Any, + congestion_state: Any, + remaining_opportunities: pl.DataFrame, + activity_dur: pl.DataFrame, + step: SimulationStep, + destination_sequences: DestinationSequences, + mode_sequences: ModeSequences, + home_night_dur: pl.DataFrame, + stay_home_plan: pl.DataFrame, + parameters: Any, + activities: list[Any], + ) -> tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame]: + """Advance one iteration of plan updates.""" possible_plan_steps = self.get_possible_plan_steps( current_plans, @@ -71,7 +42,7 @@ def get_new_plans( congestion_state, remaining_opportunities, activity_dur, - iteration, + step, activities, parameters.min_activity_time_constant, destination_sequences, @@ -80,21 +51,25 @@ def get_new_plans( self._assert_current_plans_covered_by_possible_plan_steps( current_plans, possible_plan_steps, - iteration + step.iteration, ) - - home_activity = [m for m in activities if m.name == "home"][0] - + + home_activity = [activity for activity in activities if activity.name == "home"][0] + possible_plan_utility = self.get_possible_plan_utility( possible_plan_steps, home_night_dur, - home_activity.inputs["parameters"].value_of_time_stay_home, + home_activity.get_parameters_at_step(step).value_of_time_stay_home, stay_home_plan, - parameters.min_activity_time_constant + parameters.min_activity_time_constant, ) transition_prob = self.get_transition_probabilities(current_plans, possible_plan_utility) - current_plans, transition_events = self.apply_transitions(current_plans, transition_prob, iteration) + current_plans, transition_events = self.apply_transitions( + current_plans, + transition_prob, + step.iteration, + ) transition_events = self.add_transition_plan_details(transition_events, possible_plan_steps) current_plan_steps = self.get_current_plan_steps(current_plans, possible_plan_steps) @@ -104,22 +79,12 @@ def get_new_plans( return current_plans, current_plan_steps, transition_events def _assert_current_plans_covered_by_possible_plan_steps( - self, - current_plans: pl.DataFrame, - possible_plan_steps: pl.LazyFrame, - iteration: int - ) -> None: - """Fail when non-stay-home current plans have no step details. - - Args: - current_plans (pl.DataFrame): Current aggregate plans. - possible_plan_steps (pl.LazyFrame): Candidate plan-step rows. - iteration (int): Current model iteration. - - Raises: - ValueError: If any non-stay-home current-plan key is absent from - `possible_plan_steps`. - """ + self, + current_plans: pl.DataFrame, + possible_plan_steps: pl.LazyFrame, + iteration: int, + ) -> None: + """Fail when non-stay-home current plans have no step details.""" plan_keys = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] missing_current = ( @@ -142,82 +107,52 @@ def _assert_current_plans_covered_by_possible_plan_steps( f"at iteration={iteration}. Missing={missing_current.height}. " f"Sample keys={sample}" ) - + def get_possible_plan_steps( - self, - current_plans, - current_plan_steps, - demand_groups, - chains, - costs_aggregator, - congestion_state, - opportunities, - activity_dur, - iteration, - activities, - min_activity_time_constant, - destination_sequences: DestinationSequences, - mode_sequences: ModeSequences, - ): - """Enumerate candidate plan steps and compute per-step utilities. - - Joins latest spatialized chains and mode sequences, merges costs and - mean activity durations, filters out saturated destinations, and - computes per-step utility = activity utility − travel cost. - - Args: - current_plans (pl.DataFrame): Current aggregate plans (used for scoping). - demand_groups (pl.DataFrame): Demand groups with csp and sizes. - chains (pl.DataFrame): Chain steps with durations per person. - costs_aggregator (TransportCostsAggregator): Per-mode OD costs. - opportunities (pl.DataFrame): Opportunity state per (activity,to). - activity_dur (pl.DataFrame): Mean durations per (csp,activity). - iteration (int): Current iteration to pick latest artifacts. - activity_utility_coeff (float): Coefficient for activity utility. - destination_sequences (DestinationSequences): Persisted destination sequences for the iteration. - mode_sequences (ModeSequences): Persisted mode sequences for the iteration. - - Returns: - pl.DataFrame: Candidate per-step rows with columns including - ["demand_group_id","csp","activity_seq_id","dest_seq_id","mode_seq_id", - "seq_step_index","activity","from","to","mode", - "duration_per_pers","utility"]. - """ - - - cost_by_od_and_modes = ( - costs_aggregator.get_costs_by_od_and_mode( - ["cost", "distance", "time"], - congestion=(congestion_state is not None), - detail_distances=False, - congestion_state=congestion_state, - ) + self, + current_plans, + current_plan_steps, + demand_groups, + chains, + costs_aggregator, + congestion_state, + opportunities, + activity_dur, + step: SimulationStep, + activities, + min_activity_time_constant, + destination_sequences: DestinationSequences, + mode_sequences: ModeSequences, + ): + """Enumerate candidate plan steps and compute per-step utilities.""" + + cost_by_od_and_modes = costs_aggregator.get_costs_by_od_and_mode( + ["cost", "distance", "time"], + congestion=(congestion_state is not None), + detail_distances=False, + congestion_state=congestion_state, + ) + + chains_w_home = ( + chains.join(demand_groups.select(["demand_group_id", "csp"]), on="demand_group_id") + .with_columns(duration_per_pers=pl.col("duration") / pl.col("n_persons")) ) - - chains_w_home = ( - chains - .join(demand_groups.select(["demand_group_id", "csp"]), on="demand_group_id") - .with_columns(duration_per_pers=pl.col("duration")/pl.col("n_persons")) - ) - - # Keep only the last occurrence of any activity - destination sequence - # (the sampler might generate the same sequence twice) - spat_chains = ( - destination_sequences.get_cached_asset().lazy() - ) - - # Keep only the last occurrence of any activity - destination - mode sequence - # (the sampler might generate the same sequence twice) - modes = ( - mode_sequences.get_cached_asset().lazy() - ) - - # Get the activities values of time - value_of_time = ( + + spat_chains = destination_sequences.get_cached_asset().lazy() + modes = mode_sequences.get_cached_asset().lazy() + + activity_parameters_at_step = { + activity.name: activity.get_parameters_at_step(step) + for activity in activities + } + + value_of_time = ( pl.from_dicts( - [{"activity": m.name, "value_of_time": m.inputs["parameters"].value_of_time} for m in activities] - ) - .with_columns( + [ + {"activity": activity_name, "value_of_time": activity_parameters.value_of_time} + for activity_name, activity_parameters in activity_parameters_at_step.items() + ] + ).with_columns( activity=pl.col("activity").cast(pl.Enum(activity_dur["activity"].dtype.categories)) ) ) @@ -245,45 +180,56 @@ def get_possible_plan_steps( "min_activity_time", "utility", ] - + possible_plan_steps = ( - - modes - .join(spat_chains, on=["demand_group_id", "activity_seq_id", "dest_seq_id", "seq_step_index"]) + modes.join(spat_chains, on=["demand_group_id", "activity_seq_id", "dest_seq_id", "seq_step_index"]) .join(chains_w_home.lazy(), on=["demand_group_id", "activity_seq_id", "seq_step_index"]) .join(cost_by_od_and_modes.lazy(), on=["from", "to", "mode"]) .join(activity_dur.lazy(), on=["csp", "activity"]) .join(value_of_time.lazy(), on="activity") - .join(opportunities.select(["to", "activity", "k_saturation_utility"]).lazy(), on=["to", "activity"], how="left") - + .join( + opportunities.select(["to", "activity", "k_saturation_utility"]).lazy(), + on=["to", "activity"], + how="left", + ) .with_columns( k_saturation_utility=pl.col("k_saturation_utility").fill_null(1.0), - min_activity_time=pl.col("mean_duration_per_pers")*math.exp(-min_activity_time_constant) + min_activity_time=pl.col("mean_duration_per_pers") * math.exp(-min_activity_time_constant), ) - .with_columns( - utility=( - pl.col("k_saturation_utility")*pl.col("value_of_time")*pl.col("mean_duration_per_pers")*(pl.col("duration_per_pers")/pl.col("min_activity_time")).log().clip(0.0) + utility=( + pl.col("k_saturation_utility") + * pl.col("value_of_time") + * pl.col("mean_duration_per_pers") + * (pl.col("duration_per_pers") / pl.col("min_activity_time")).log().clip(0.0) - pl.col("cost") ) ) .with_columns(iteration=pl.col("iteration")) .select(possible_plan_step_columns) - ) if current_plan_steps is not None: zero_mass_steps = ( current_plan_steps.lazy() .filter(pl.col("n_persons") <= 0.0) - .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id", "seq_step_index", "n_persons"]) + .select( + [ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "mode_seq_id", + "seq_step_index", + "n_persons", + ] + ) .collect(engine="streaming") ) if zero_mass_steps.height > 0: sample = zero_mass_steps.head(5).to_dicts() raise ValueError( "Found carried-forward current_plan_steps with non-positive n_persons while " - f"building possible_plan_steps at iteration={iteration}. " + f"building possible_plan_steps at iteration={step.iteration}. " f"Invalid rows={zero_mass_steps.height}. Sample={sample}" ) @@ -291,7 +237,7 @@ def get_possible_plan_steps( current_plan_steps.lazy() .with_columns( duration_per_pers=pl.col("duration") / pl.col("n_persons"), - iteration=pl.lit(iteration).cast(pl.UInt32), + iteration=pl.lit(step.iteration).cast(pl.UInt32), anchor_to=pl.col("to"), ) .join(demand_groups.select(["demand_group_id", "csp"]).lazy(), on="demand_group_id") @@ -332,223 +278,147 @@ def get_possible_plan_steps( keep="first", ) ) - + return possible_plan_steps - def get_possible_plan_utility( - self, - possible_plan_steps, - home_night_dur, - value_of_time_stay_home, - stay_home_plan, - min_activity_time_constant - ): - """Aggregate per-step utilities to plan-level utilities (incl. home-night). - - Sums step utilities per state, adds home-night utility, prunes dominated - states, and appends the explicit stay-home baseline. - - Args: - possible_plan_steps (pl.DataFrame): Candidate step rows with per-step utility. - home_night_dur (pl.DataFrame): Mean home-night duration by csp. - stay_home_utility_coeff (float): Coefficient for home-night utility. - stay_home_plan (pl.DataFrame): Baseline plan rows to append. - - Returns: - pl.DataFrame: Plan-level utilities with - ["demand_group_id","activity_seq_id","mode_seq_id","dest_seq_id","utility"]. - """ - + self, + possible_plan_steps, + home_night_dur, + value_of_time_stay_home, + stay_home_plan, + min_activity_time_constant, + ): + """Aggregate per-step utilities to plan-level utilities.""" + possible_plan_utility = ( - - possible_plan_steps - .group_by(["demand_group_id", "csp", "activity_seq_id", "dest_seq_id", "mode_seq_id"]) + possible_plan_steps.group_by( + ["demand_group_id", "csp", "activity_seq_id", "dest_seq_id", "mode_seq_id"] + ) .agg( utility=pl.col("utility").sum(), - home_night_per_pers=24.0 - pl.col("duration_per_pers").sum() + home_night_per_pers=24.0 - pl.col("duration_per_pers").sum(), ) - .join(home_night_dur.lazy(), on="csp") .with_columns( - min_activity_time=pl.col("mean_home_night_per_pers")*math.exp(-min_activity_time_constant) + min_activity_time=pl.col("mean_home_night_per_pers") * math.exp(-min_activity_time_constant) ) .with_columns( - utility_stay_home=( - value_of_time_stay_home*pl.col("mean_home_night_per_pers") - * (pl.col("home_night_per_pers")/pl.col("min_activity_time")).log().clip(0.0) + utility_stay_home=( + value_of_time_stay_home + * pl.col("mean_home_night_per_pers") + * (pl.col("home_night_per_pers") / pl.col("min_activity_time")).log().clip(0.0) ) ) - - .with_columns( - utility=pl.col("utility") + pl.col("utility_stay_home") - ) - - # Prune states that are below a certain distance from the best state - # (because they will have very low probabilities to be selected) - .filter( - (pl.col("utility") > pl.col("utility").max().over(["demand_group_id"]) - 5.0) - ) - + .with_columns(utility=pl.col("utility") + pl.col("utility_stay_home")) + .filter(pl.col("utility") > pl.col("utility").max().over(["demand_group_id"]) - 5.0) .select(["demand_group_id", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility"]) ) - - possible_plan_utility = ( - - pl.concat([ + + possible_plan_utility = pl.concat( + [ possible_plan_utility, - ( - stay_home_plan.lazy() - .select(["demand_group_id", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility"]) + stay_home_plan.lazy() + .with_columns( + min_activity_time=pl.col("mean_home_night_per_pers") * math.exp(-min_activity_time_constant) ) - ]) - + .with_columns( + utility=( + value_of_time_stay_home + * pl.col("mean_home_night_per_pers") + * (pl.col("mean_home_night_per_pers") / pl.col("min_activity_time")).log().clip(0.0) + ) + ) + .select(["demand_group_id", "activity_seq_id", "mode_seq_id", "dest_seq_id", "utility"]), + ] ) - + return possible_plan_utility - - - + def get_transition_probabilities( - self, - current_plans: pl.DataFrame, - possible_plan_utility: pl.LazyFrame, - transition_cost: float = 0.0 - ) -> pl.DataFrame: - """Compute transition probabilities from current to candidate plans. - - Uses softmax over Δutility (with stabilization and pruning) within each - demand group and current state key. - - Args: - current_plans (pl.DataFrame): Current plans with utilities. - possible_plan_utility (pl.DataFrame): Candidate plans with utilities. - - Returns: - pl.DataFrame: Transitions with - ["demand_group_id","activity_seq_id","dest_seq_id","mode_seq_id", - "activity_seq_id_trans","dest_seq_id_trans","mode_seq_id_trans", - "utility_trans","p_transition"]. - """ - + self, + current_plans: pl.DataFrame, + possible_plan_utility: pl.LazyFrame, + transition_cost: float = 0.0, + ) -> pl.DataFrame: + """Compute transition probabilities from current to candidate plans.""" + plan_cols = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] - - transition_probabilities = ( + transition_probabilities = ( current_plans.lazy() .select(plan_cols + ["utility"]) .rename({"utility": "utility_prev_from"}) - - # Join the updated utility of the current plans .join(possible_plan_utility, on=plan_cols) - - # Join the possible plans when they can improve the utility compared to the current plans - # (join also the current plan so it is included in the probability calculation) .join_where( possible_plan_utility, ( - (pl.col("demand_group_id") == pl.col("demand_group_id_trans")) & - ( - (pl.col("utility_trans") > pl.col("utility") - 5.0) | - ( - (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) & - (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) & - (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) + (pl.col("demand_group_id") == pl.col("demand_group_id_trans")) + & ( + (pl.col("utility_trans") > pl.col("utility") - 5.0) + | ( + (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) + & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) + & (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) ) ) ), - suffix="_trans" + suffix="_trans", ) - .drop("demand_group_id_trans") - - # Add a transition cost .with_columns( - utility_trans=( - pl.when( - ( - (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) & - (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) & - (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) - ) - ).then( - pl.col("utility_trans") + transition_cost - ).otherwise( - pl.col("utility_trans") - ) + utility_trans=pl.when( + (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) + & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) + & (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) ) + .then(pl.col("utility_trans") + transition_cost) + .otherwise(pl.col("utility_trans")) ) - .with_columns(delta_utility=pl.col("utility_trans") - pl.col("utility_trans").max().over(plan_cols)) - - .filter( - (pl.col("delta_utility") > -5.0) - ) - + .filter(pl.col("delta_utility") > -5.0) .with_columns( - p_transition=pl.col("delta_utility").exp()/pl.col("delta_utility").exp().sum().over(plan_cols) + p_transition=pl.col("delta_utility").exp() / pl.col("delta_utility").exp().sum().over(plan_cols) ) - - # Keep only the first 99% of the distribution .sort("p_transition", descending=True) .with_columns( p_transition_cum=pl.col("p_transition").cum_sum().over(plan_cols), - p_count=pl.col("p_transition").cum_count().over(plan_cols) + p_count=pl.col("p_transition").cum_count().over(plan_cols), ) .filter((pl.col("p_transition_cum") < 0.99) | (pl.col("p_count") == 1)) - .with_columns( - p_transition=( - pl.col("p_transition") - / - pl.col("p_transition").sum() - .over(plan_cols)) - ) - - .select([ - "demand_group_id", - "activity_seq_id", "dest_seq_id", "mode_seq_id", - "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans", - "utility_prev_from", - pl.col("utility").alias("utility_from_updated"), - "utility_trans", - "p_transition" - ]) - + .with_columns(p_transition=pl.col("p_transition") / pl.col("p_transition").sum().over(plan_cols)) + .select( + [ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "mode_seq_id", + "activity_seq_id_trans", + "dest_seq_id_trans", + "mode_seq_id_trans", + "utility_prev_from", + pl.col("utility").alias("utility_from_updated"), + "utility_trans", + "p_transition", + ] + ) .collect(engine="streaming") - ) - + return transition_probabilities - - + def apply_transitions( - self, - current_plans: pl.DataFrame, - transition_probabilities: pl.DataFrame, - iteration: int - ) -> tuple[pl.DataFrame, pl.DataFrame]: - """Apply transition probabilities and emit transition events. - - Left-joins transitions onto current plans, defaults to self-transition - when absent, redistributes `n_persons` by `p_transition`, and aggregates - by the new state keys. - - Args: - current_plans (pl.DataFrame): Current plans with ["n_persons","utility"]. - transition_probabilities (pl.DataFrame): Probabilities produced by - `get_transition_probabilities`. - - Returns: - tuple[pl.DataFrame, pl.DataFrame]: - - Updated `current_plans`, aggregated by destination plan keys. - - `transition_events` with one row per realized transition split. - """ - + self, + current_plans: pl.DataFrame, + transition_probabilities: pl.DataFrame, + iteration: int, + ) -> tuple[pl.DataFrame, pl.DataFrame]: + """Apply transition probabilities and emit transition events.""" + plan_cols = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] - + transitions = ( - current_plans - .join(transition_probabilities, on=plan_cols, how="left") + current_plans.join(transition_probabilities, on=plan_cols, how="left") .with_columns( p_transition=pl.col("p_transition").fill_null(1.0), utility_from_updated=pl.col("utility_from_updated").fill_null(pl.col("utility")), @@ -558,15 +428,11 @@ def apply_transitions( dest_seq_id_trans=pl.coalesce([pl.col("dest_seq_id_trans"), pl.col("dest_seq_id")]), mode_seq_id_trans=pl.coalesce([pl.col("mode_seq_id_trans"), pl.col("mode_seq_id")]), ) - .with_columns( - n_persons_moved=pl.col("n_persons") * pl.col("p_transition") - ) + .with_columns(n_persons_moved=pl.col("n_persons") * pl.col("p_transition")) ) - # Previous-iteration utility for destination state if it existed already. prev_to_lookup = ( - current_plans - .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id", "utility"]) + current_plans.select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id", "utility"]) .rename( { "activity_seq_id": "activity_seq_id_trans", @@ -584,10 +450,9 @@ def apply_transitions( ) transition_events = ( - transitions - .with_columns( + transitions.with_columns( iteration=pl.lit(iteration).cast(pl.UInt32), - utility_from=pl.col("utility_from_updated"), # updated utility used by MNL for from-state + utility_from=pl.col("utility_from_updated"), utility_to=pl.col("utility_trans"), utility_prev_from=pl.col("utility_prev_from"), utility_prev_to=pl.col("utility_prev_to"), @@ -596,8 +461,7 @@ def apply_transitions( & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) & (pl.col("mode_seq_id") == pl.col("mode_seq_id_trans")) ), - ) - .select( + ).select( [ "iteration", "demand_group_id", @@ -618,12 +482,13 @@ def apply_transitions( ) new_states = ( - transitions - .group_by(["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]) + transitions.group_by( + ["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"] + ) .agg( n_persons=pl.col("n_persons_moved").sum(), - utility=pl.col("utility_trans").first() - ) + utility=pl.col("utility_trans").first(), + ) .rename( { "activity_seq_id_trans": "activity_seq_id", @@ -632,37 +497,19 @@ def apply_transitions( } ) ) - + return new_states, transition_events def add_transition_plan_details( - self, - transition_events: pl.DataFrame, - possible_plan_steps: pl.LazyFrame - ) -> pl.DataFrame: - """Attach full from/to plan details to transition events. - - This makes transition logs self-contained for diagnostics, so plotting - code does not need to recover sequence details from final-state tables. - - Args: - transition_events (pl.DataFrame): Transition rows produced by - `apply_transitions`. - possible_plan_steps (pl.LazyFrame): Candidate plan-step rows used - to compute plan-level details. - - Returns: - pl.DataFrame: Transition events enriched with from/to state details. - - Raises: - ValueError: If non-stay-home transition from/to keys are missing from - the plan-details lookup. - """ + self, + transition_events: pl.DataFrame, + possible_plan_steps: pl.LazyFrame, + ) -> pl.DataFrame: + """Attach full from/to plan details to transition events.""" plan_keys = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] plan_details = ( - possible_plan_steps - .with_columns( + possible_plan_steps.with_columns( step_desc=pl.format( "#{} | to: {} | activity: {} | mode: {} | dist_km: {} | time_h: {}", pl.col("seq_step_index"), @@ -707,17 +554,17 @@ def add_transition_plan_details( ) missing_from_keys = ( - transition_events - .filter(pl.col("mode_seq_id") != 0) + transition_events.filter(pl.col("mode_seq_id") != 0) .select(plan_keys) .join(from_details.select(plan_keys), on=plan_keys, how="anti") ) missing_to_keys = ( - transition_events - .filter(pl.col("mode_seq_id_trans") != 0) + transition_events.filter(pl.col("mode_seq_id_trans") != 0) .select(["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]) .join( - to_details.select(["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"]), + to_details.select( + ["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"] + ), on=["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], how="anti", ) @@ -732,9 +579,7 @@ def add_transition_plan_details( ) events_with_details = ( - transition_events - .join(from_details, on=plan_keys, how="left") - .join( + transition_events.join(from_details, on=plan_keys, how="left").join( to_details, on=["demand_group_id", "activity_seq_id_trans", "dest_seq_id_trans", "mode_seq_id_trans"], how="left", @@ -742,8 +587,7 @@ def add_transition_plan_details( ) missing_from = ( - events_with_details - .filter( + events_with_details.filter( (pl.col("mode_seq_id") != 0) & ( pl.col("trip_count_from").is_null() @@ -752,12 +596,10 @@ def add_transition_plan_details( | pl.col("distance_from").is_null() | pl.col("steps_from").is_null() ) - ) - .height + ).height ) missing_to = ( - events_with_details - .filter( + events_with_details.filter( (pl.col("mode_seq_id_trans") != 0) & ( pl.col("trip_count_to").is_null() @@ -766,8 +608,7 @@ def add_transition_plan_details( | pl.col("distance_to").is_null() | pl.col("steps_to").is_null() ) - ) - .height + ).height ) if missing_from > 0 or missing_to > 0: raise ValueError( @@ -777,64 +618,78 @@ def add_transition_plan_details( ) return ( - events_with_details - .with_columns( - trip_count_from=pl.when(pl.col("mode_seq_id") == 0).then(0.0).otherwise(pl.col("trip_count_from")).fill_null(0.0), - activity_time_from=pl.when(pl.col("mode_seq_id") == 0).then(24.0).otherwise(pl.col("activity_time_from")).fill_null(0.0), - travel_time_from=pl.when(pl.col("mode_seq_id") == 0).then(0.0).otherwise(pl.col("travel_time_from")).fill_null(0.0), - distance_from=pl.when(pl.col("mode_seq_id") == 0).then(0.0).otherwise(pl.col("distance_from")).fill_null(0.0), - steps_from=pl.when(pl.col("mode_seq_id") == 0).then(pl.lit("none")).otherwise(pl.col("steps_from")), - trip_count_to=pl.when(pl.col("mode_seq_id_trans") == 0).then(0.0).otherwise(pl.col("trip_count_to")).fill_null(0.0), - activity_time_to=pl.when(pl.col("mode_seq_id_trans") == 0).then(24.0).otherwise(pl.col("activity_time_to")).fill_null(0.0), - travel_time_to=pl.when(pl.col("mode_seq_id_trans") == 0).then(0.0).otherwise(pl.col("travel_time_to")).fill_null(0.0), - distance_to=pl.when(pl.col("mode_seq_id_trans") == 0).then(0.0).otherwise(pl.col("distance_to")).fill_null(0.0), - steps_to=pl.when(pl.col("mode_seq_id_trans") == 0).then(pl.lit("none")).otherwise(pl.col("steps_to")), - ) - .select(TRANSITION_EVENT_COLUMNS) + events_with_details.with_columns( + trip_count_from=pl.when(pl.col("mode_seq_id") == 0) + .then(0.0) + .otherwise(pl.col("trip_count_from")) + .fill_null(0.0), + activity_time_from=pl.when(pl.col("mode_seq_id") == 0) + .then(24.0) + .otherwise(pl.col("activity_time_from")) + .fill_null(0.0), + travel_time_from=pl.when(pl.col("mode_seq_id") == 0) + .then(0.0) + .otherwise(pl.col("travel_time_from")) + .fill_null(0.0), + distance_from=pl.when(pl.col("mode_seq_id") == 0) + .then(0.0) + .otherwise(pl.col("distance_from")) + .fill_null(0.0), + steps_from=pl.when(pl.col("mode_seq_id") == 0) + .then(pl.lit("none")) + .otherwise(pl.col("steps_from")), + trip_count_to=pl.when(pl.col("mode_seq_id_trans") == 0) + .then(0.0) + .otherwise(pl.col("trip_count_to")) + .fill_null(0.0), + activity_time_to=pl.when(pl.col("mode_seq_id_trans") == 0) + .then(24.0) + .otherwise(pl.col("activity_time_to")) + .fill_null(0.0), + travel_time_to=pl.when(pl.col("mode_seq_id_trans") == 0) + .then(0.0) + .otherwise(pl.col("travel_time_to")) + .fill_null(0.0), + distance_to=pl.when(pl.col("mode_seq_id_trans") == 0) + .then(0.0) + .otherwise(pl.col("distance_to")) + .fill_null(0.0), + steps_to=pl.when(pl.col("mode_seq_id_trans") == 0) + .then(pl.lit("none")) + .otherwise(pl.col("steps_to")), + ).select(TRANSITION_EVENT_COLUMNS) ) - - + def get_current_plan_steps(self, current_plans, possible_plan_steps): - """Expand aggregate plans to per-step rows. - - Joins selected states back to their step sequences and converts - per-person durations to aggregate durations. - - Args: - current_plans (pl.DataFrame): Updated aggregate plans. - possible_plan_steps (pl.DataFrame): Candidate steps universe. - - Returns: - pl.DataFrame: Per-step plan steps with columns including - ["demand_group_id","activity_seq_id","dest_seq_id","mode_seq_id", - "seq_step_index","activity","from","to","mode","n_persons","duration"]. - """ - + """Expand aggregate plans to per-step rows.""" + current_plan_steps = ( current_plans.lazy() .join( - possible_plan_steps.select([ - "demand_group_id", "activity_seq_id", "dest_seq_id", - "mode_seq_id", "seq_step_index", "activity", - "from", "to", "mode", "duration_per_pers" - ]), + possible_plan_steps.select( + [ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "mode_seq_id", + "seq_step_index", + "activity", + "from", + "to", + "mode", + "duration_per_pers", + ] + ), on=["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"], - how="left" - ) - .with_columns( - duration=pl.col("duration_per_pers").fill_null(24.0)*pl.col("n_persons") + how="left", ) + .with_columns(duration=pl.col("duration_per_pers").fill_null(24.0) * pl.col("n_persons")) .drop("duration_per_pers") - .collect(engine="streaming") - ) - + return current_plan_steps - - - - + def get_new_costs( self, costs, @@ -846,38 +701,15 @@ def get_new_costs( run_key=None, is_weekday=None, ): - """Return the OD costs to use after the current iteration. - - This method aggregates step-level plan steps by OD and mode, then delegates - the congestion update decision to ``costs_aggregator``. When congestion - updates are disabled, it returns the input ``costs`` unchanged. - - Args: - costs (pl.DataFrame): Current OD costs. - iteration (int): Current iteration, using 1-based indexing. - n_iter_per_cost_update (int): Number of iterations between cost - updates. Zero disables congestion updates. - current_plan_steps (pl.DataFrame): Step-level plan steps by mode. - costs_aggregator (TransportCostsAggregator): Aggregator responsible for - updating and returning the current cost view. - run_key (str | None): Optional run identifier used to isolate - per-run congestion snapshots. - - Returns: - tuple[pl.DataFrame, Any]: The OD costs to use after the current - iteration, and the explicit congestion state that produced them. - """ - + """Return the OD costs to use after the current iteration.""" + if n_iter_per_cost_update <= 0: return costs, congestion_state od_flows_by_mode = ( - current_plan_steps - .filter(pl.col("activity_seq_id") != 0) + current_plan_steps.filter(pl.col("activity_seq_id") != 0) .group_by(["from", "to", "mode"]) - .agg( - flow_volume=pl.col("n_persons").sum() - ) + .agg(flow_volume=pl.col("n_persons").sum()) ) return costs_aggregator.get_costs_for_next_iteration( @@ -888,74 +720,50 @@ def get_new_costs( run_key=run_key, is_weekday=is_weekday, ) - - + def get_new_opportunities( - self, - current_plan_steps, - opportunities, - activities - ): - """Recompute remaining opportunities per (activity, destination). - - Subtracts assigned durations from capacities, computes availability and a - saturation utility factor. - - Args: - current_plan_steps (pl.DataFrame): Step-level assigned durations. - opportunities (pl.DataFrame): Initial capacities per (activity,to). - - Returns: - pl.DataFrame: Updated opportunities with - ["activity","to","opportunity_capacity","k_saturation_utility"]. - """ - + self, + current_plan_steps, + opportunities, + activities, + step: SimulationStep, + ): + """Recompute remaining opportunities per (activity, destination).""" + logging.info("Computing remaining opportunities at destinations...") - - saturation_fun_parameters = ( + + activity_parameters_at_step = { + activity.name: activity.get_parameters_at_step(step) + for activity in activities + } + + saturation_fun_parameters = ( pl.from_dicts( [ { - "activity": m.name, - "beta": m.inputs["parameters"].saturation_fun_beta, - "ref_level": m.inputs["parameters"].saturation_fun_ref_level + "activity": activity_name, + "beta": activity_parameters.saturation_fun_beta, + "ref_level": activity_parameters.saturation_fun_ref_level, } - for m in activities + for activity_name, activity_parameters in activity_parameters_at_step.items() ] - ) - .with_columns( - activity=pl.col("activity").cast(pl.Enum(opportunities["activity"].dtype.categories)) - ) + ).with_columns(activity=pl.col("activity").cast(pl.Enum(opportunities["activity"].dtype.categories))) ) - # Compute the remaining number of opportunities by activity and destination - # once assigned flows are accounted for remaining_opportunities = ( - - current_plan_steps - .filter( - (pl.col("activity_seq_id") != 0) & - (pl.col("activity") != "home") - ) + current_plan_steps.filter((pl.col("activity_seq_id") != 0) & (pl.col("activity") != "home")) .group_by(["to", "activity"]) - .agg( - opportunity_occupation=pl.col("duration").sum() - ) - + .agg(opportunity_occupation=pl.col("duration").sum()) .join(opportunities, on=["to", "activity"], how="full", coalesce=True) .join(saturation_fun_parameters, on="activity") - - .with_columns( - opportunity_occupation=pl.col("opportunity_occupation").fill_null(0.0) - ) - .with_columns( - k=pl.col("opportunity_occupation")/pl.col("opportunity_capacity") - ) + .with_columns(opportunity_occupation=pl.col("opportunity_occupation").fill_null(0.0)) + .with_columns(k=pl.col("opportunity_occupation") / pl.col("opportunity_capacity")) .with_columns( - k_saturation_utility=(1.0 - pl.col("k").pow(pl.col("beta"))/(pl.col("ref_level").pow(pl.col("beta")))).clip(0.0) + k_saturation_utility=( + 1.0 - pl.col("k").pow(pl.col("beta")) / (pl.col("ref_level").pow(pl.col("beta"))) + ).clip(0.0) ) .select(["activity", "to", "opportunity_capacity", "k_saturation_utility"]) - ) - + return remaining_opportunities diff --git a/mobility/validation_types.py b/mobility/validation_types.py new file mode 100644 index 00000000..f912a9cf --- /dev/null +++ b/mobility/validation_types.py @@ -0,0 +1,6 @@ +from typing import Annotated + +from pydantic import Field + +NonNegativeFloat = Annotated[float, Field(ge=0.0)] +UnitIntervalFloat = Annotated[float, Field(ge=0.0, le=1.0)] From 26a9006ade7561c9e4fb39c6fd4d5335638c2376 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 22:07:17 +0200 Subject: [PATCH 13/24] rebase from refactor branch + resolve parameters globally at each time step --- mobility/__init__.py | 2 +- mobility/activities/activity.py | 24 +++++++--- mobility/activities/home.py | 2 +- mobility/activities/leisure/leisure.py | 2 +- mobility/activities/other.py | 2 +- mobility/activities/shopping/shop.py | 2 +- mobility/activities/studies/study.py | 2 +- mobility/activities/work/work.py | 2 +- .../parameter_profiles.py} | 47 ++----------------- mobility/trips/group_day_trips/core/run.py | 19 ++++---- .../group_day_trips/iterations/iterations.py | 2 + .../plans/destination_sequences.py | 23 +++++---- .../group_day_trips/plans/plan_initializer.py | 8 ++-- .../group_day_trips/plans/plan_updater.py | 42 ++++++----------- 14 files changed, 75 insertions(+), 104 deletions(-) rename mobility/{simulation_profile.py => runtime/parameter_profiles.py} (66%) diff --git a/mobility/__init__.py b/mobility/__init__.py index 4258b85a..5d309fb6 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -46,7 +46,7 @@ PublicTransportRoutingParameters, ) from .transport.modes.core import IntermodalTransfer, ModeRegistry -from .simulation_profile import ParameterProfile, SimulationStep +from .runtime.parameter_profiles import ParameterProfile, SimulationStep from .transport.graphs.modified.modifiers import ( BorderCrossingSpeedModifier, diff --git a/mobility/activities/activity.py b/mobility/activities/activity.py index 5d7b14cf..720e3568 100644 --- a/mobility/activities/activity.py +++ b/mobility/activities/activity.py @@ -7,7 +7,7 @@ from mobility.runtime.assets.in_memory_asset import InMemoryAsset from pydantic import BaseModel, ConfigDict, Field -from mobility.simulation_profile import ParameterProfile, SimulationStep, resolve_model_for_step +from mobility.runtime.parameter_profiles import ParameterProfile, SimulationStep, resolve_model_for_step from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat @@ -64,21 +64,21 @@ def __init__( super().__init__(inputs) - def get_parameters_at_step(self, step: SimulationStep) -> "MotiveParameters": - """Returns the motive parameters in effect at a simulation step. + def get_parameters_at_step(self, step: SimulationStep) -> "ActivityParameters": + """Returns the activity parameters in effect at a simulation step. Args: step: Simulation step used to evaluate step-varying parameter profiles. Returns: - MotiveParameters: Parameter model with all step-varying fields - resolved to scalar values for ``step``. + ActivityParameters: Parameter model with all step-varying fields + resolved to scalar values for ``step``. """ return resolve_model_for_step(self.inputs["parameters"], step) - def get_utilities(self, transport_zones, parameters: "MotiveParameters" | None = None): + def get_utilities(self, transport_zones, parameters: "ActivityParameters" | None = None): parameters = parameters or self.inputs["parameters"] @@ -197,3 +197,15 @@ class ActivityParameters(BaseModel): description="Coefficient scaling sink saturation in activity utility.", ), ] + + +def resolve_activity_parameters( + activities: list[Activity], + step: SimulationStep, +) -> dict[str, ActivityParameters]: + """Resolve all activity parameter models for one simulation step.""" + + return { + activity.name: activity.get_parameters_at_step(step) + for activity in activities + } diff --git a/mobility/activities/home.py b/mobility/activities/home.py index 4d54cc74..fc35cfdd 100644 --- a/mobility/activities/home.py +++ b/mobility/activities/home.py @@ -3,7 +3,7 @@ from typing import Annotated, List from pydantic import Field -from mobility.simulation_profile import ParameterProfile +from mobility.runtime.parameter_profiles import ParameterProfile from mobility.activities.activity import Activity, ActivityParameters diff --git a/mobility/activities/leisure/leisure.py b/mobility/activities/leisure/leisure.py index ee31c56c..c8801dee 100644 --- a/mobility/activities/leisure/leisure.py +++ b/mobility/activities/leisure/leisure.py @@ -12,7 +12,7 @@ from pydantic import Field from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.leisure.leisure_facilities_distribution import LeisureFacilitiesDistribution -from mobility.simulation_profile import ParameterProfile +from mobility.runtime.parameter_profiles import ParameterProfile from mobility.validation_types import UnitIntervalFloat diff --git a/mobility/activities/other.py b/mobility/activities/other.py index 999747f7..e757113d 100644 --- a/mobility/activities/other.py +++ b/mobility/activities/other.py @@ -8,7 +8,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.population import Population -from mobility.simulation_profile import ParameterProfile +from mobility.runtime.parameter_profiles import ParameterProfile from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat diff --git a/mobility/activities/shopping/shop.py b/mobility/activities/shopping/shop.py index 1f825c4c..1015f084 100644 --- a/mobility/activities/shopping/shop.py +++ b/mobility/activities/shopping/shop.py @@ -9,7 +9,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.shopping.shops_turnover_distribution import ShopsTurnoverDistribution -from mobility.simulation_profile import ParameterProfile +from mobility.runtime.parameter_profiles import ParameterProfile from mobility.validation_types import UnitIntervalFloat diff --git a/mobility/activities/studies/study.py b/mobility/activities/studies/study.py index e2f98fc5..42280503 100644 --- a/mobility/activities/studies/study.py +++ b/mobility/activities/studies/study.py @@ -11,7 +11,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.studies.schools_capacity_distribution import SchoolsCapacityDistribution -from mobility.simulation_profile import ParameterProfile +from mobility.runtime.parameter_profiles import ParameterProfile from mobility.validation_types import UnitIntervalFloat diff --git a/mobility/activities/work/work.py b/mobility/activities/work/work.py index 7627ca37..a064cb54 100644 --- a/mobility/activities/work/work.py +++ b/mobility/activities/work/work.py @@ -9,7 +9,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.work.jobs_active_population_distribution import JobsActivePopulationDistribution -from mobility.simulation_profile import ParameterProfile +from mobility.runtime.parameter_profiles import ParameterProfile from mobility.validation_types import UnitIntervalFloat diff --git a/mobility/simulation_profile.py b/mobility/runtime/parameter_profiles.py similarity index 66% rename from mobility/simulation_profile.py rename to mobility/runtime/parameter_profiles.py index 1f4eed89..1b5f4ed1 100644 --- a/mobility/simulation_profile.py +++ b/mobility/runtime/parameter_profiles.py @@ -38,15 +38,7 @@ class ParameterProfile(BaseModel): @model_validator(mode="after") def validate_points(self) -> "ParameterProfile": - """Validates control points after model initialization. - - Returns: - ParameterProfile: The validated profile instance. - - Raises: - ValueError: If no control point is provided or if an iteration - index is lower than 1. - """ + """Validates control points after model initialization.""" if not self.points: raise ValueError("ParameterProfile.points must not be empty.") @@ -57,14 +49,7 @@ def validate_points(self) -> "ParameterProfile": return self def at(self, step: SimulationStep) -> float: - """Evaluates the profile at a simulation step. - - Args: - step: Simulation step at which to evaluate the profile. - - Returns: - float: Parameter value at the requested step. - """ + """Evaluates the profile at a simulation step.""" sorted_points = sorted(self.points.items()) iterations = np.array([iteration for iteration, _ in sorted_points], dtype=float) values = np.array([value for _, value in sorted_points], dtype=float) @@ -76,22 +61,9 @@ def at(self, step: SimulationStep) -> float: return float(np.interp(step.iteration, iterations, values)) -def resolve_value_for_step(value: Any, step: SimulationStep) -> Any: - """Resolves one value for a simulation step. - - Supported inputs are: - - ``ParameterProfile`` instances, which are evaluated at ``step`` - - pydantic models, which are resolved field by field - - ``dict``/``list``/``tuple`` containers, which are resolved recursively - - plain leaf values, which are returned unchanged - Args: - value: Value to resolve. - step: Simulation step used for evaluation. - - Returns: - Any: Resolved value for the requested step. - """ +def resolve_value_for_step(value: Any, step: SimulationStep) -> Any: + """Resolve one value for a simulation step.""" if isinstance(value, ParameterProfile): return value.at(step) @@ -112,16 +84,7 @@ def resolve_value_for_step(value: Any, step: SimulationStep) -> Any: def resolve_model_for_step(model: T, step: SimulationStep) -> T: - """Resolves step-varying fields of a pydantic model. - - Args: - model: Pydantic model whose fields may contain step-varying values. - step: Simulation step used for evaluation. - - Returns: - T: New validated model instance with step-varying fields replaced by - their scalar values at ``step``. - """ + """Resolve step-varying fields of a pydantic model.""" resolved_data = { field_name: resolve_value_for_step(getattr(model, field_name), step) diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 23d2f404..f5569d6b 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -15,9 +15,10 @@ from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator from mobility.runtime.assets.file_asset import FileAsset from mobility.activities import Activity +from mobility.activities.activity import resolve_activity_parameters from mobility.surveys import MobilitySurvey from mobility.population import Population -from mobility.simulation_profile import SimulationStep +from mobility.runtime.parameter_profiles import SimulationStep from mobility.transport.modes.core.transport_mode import TransportMode @@ -148,12 +149,11 @@ def _build_state( demand_groups, ) step = SimulationStep(iteration=1) - home_activity = [activity for activity in self.activities if activity.name == "home"][0] + resolved_activity_parameters = resolve_activity_parameters(self.activities, step) stay_home_plan, current_plans = self.initializer.get_stay_home_state( demand_groups, home_night_dur, - home_activity, - step, + resolved_activity_parameters["home"], self.parameters.min_activity_time_constant, ) opportunities = self.initializer.get_opportunities( @@ -275,8 +275,11 @@ def _sample_and_write_destination_sequences( seed: int, ) -> DestinationSequences: """Run destination sampling and persist destination sequences for one iteration.""" + step = SimulationStep(iteration=iteration.iteration) + resolved_activity_parameters = resolve_activity_parameters(self.activities, step) destination_sequences = iteration.destination_sequences( activities=self.activities, + resolved_activity_parameters=resolved_activity_parameters, transport_zones=self.population.transport_zones, remaining_opportunities=state.remaining_opportunities, chains=state.chains_by_activity, @@ -315,6 +318,7 @@ def _update_iteration_state( ) -> pl.DataFrame: """Advance the simulation state by one iteration and return transition events.""" step = SimulationStep(iteration=iteration.iteration) + resolved_activity_parameters = resolve_activity_parameters(self.activities, step) state.current_plans, state.current_plan_steps, transition_events = self.updater.get_new_plans( state.current_plans, state.current_plan_steps, @@ -324,13 +328,13 @@ def _update_iteration_state( state.congestion_state, state.remaining_opportunities, state.activity_dur, - step, + iteration.iteration, + resolved_activity_parameters, destination_sequences, mode_sequences, state.home_night_dur, state.stay_home_plan, self.parameters, - self.activities, ) state.costs, state.congestion_state = self.updater.get_new_costs( state.costs, @@ -345,8 +349,7 @@ def _update_iteration_state( state.remaining_opportunities = self.updater.get_new_opportunities( state.current_plan_steps, state.opportunities, - self.activities, - step, + resolved_activity_parameters, ) return transition_events diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py index 68eb99f6..cd915df1 100644 --- a/mobility/trips/group_day_trips/iterations/iterations.py +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -40,6 +40,7 @@ def destination_sequences( self, *, activities: list[Any] | None = None, + resolved_activity_parameters: dict[str, Any] | None = None, transport_zones: Any = None, remaining_opportunities: pl.DataFrame | None = None, chains: pl.DataFrame | None = None, @@ -55,6 +56,7 @@ def destination_sequences( iteration=self.iteration, base_folder=self.iterations.folder_paths["destination-sequences"], activities=activities, + resolved_activity_parameters=resolved_activity_parameters, transport_zones=transport_zones, remaining_opportunities=remaining_opportunities, chains=chains, diff --git a/mobility/trips/group_day_trips/plans/destination_sequences.py b/mobility/trips/group_day_trips/plans/destination_sequences.py index 013e0840..fa616af5 100644 --- a/mobility/trips/group_day_trips/plans/destination_sequences.py +++ b/mobility/trips/group_day_trips/plans/destination_sequences.py @@ -7,7 +7,6 @@ from .sequence_index import add_index from mobility.runtime.assets.file_asset import FileAsset -from mobility.simulation_profile import SimulationStep class DestinationSequences(FileAsset): @@ -21,6 +20,7 @@ def __init__( iteration: int, base_folder: pathlib.Path, activities: list[Any] | None = None, + resolved_activity_parameters: dict[str, Any] | None = None, transport_zones: Any = None, remaining_opportunities: pl.DataFrame | None = None, chains: pl.DataFrame | None = None, @@ -31,6 +31,7 @@ def __init__( seed: int | None = None, ) -> None: self.activities = activities + self.resolved_activity_parameters = resolved_activity_parameters self.transport_zones = transport_zones self.remaining_opportunities = remaining_opportunities self.chains = chains @@ -74,11 +75,12 @@ def create_and_get_asset(self) -> pl.DataFrame: raise ValueError("Cannot build destination sequences without parameters.") if self.seed is None: raise ValueError("Cannot build destination sequences without a seed.") + if self.resolved_activity_parameters is None: + raise ValueError("Cannot build destination sequences without resolved activity parameters.") - step = SimulationStep(iteration=self.iteration) utilities = self._get_utilities( self.activities, - step, + self.resolved_activity_parameters, self.transport_zones, self.remaining_opportunities, self.costs, @@ -87,7 +89,7 @@ def create_and_get_asset(self) -> pl.DataFrame: destination_probability = self._get_destination_probability( utilities, self.activities, - step, + self.resolved_activity_parameters, self.parameters.dest_prob_cutoff, ) chains = ( @@ -136,19 +138,21 @@ def create_and_get_asset(self) -> pl.DataFrame: def _get_utilities( self, activities: list[Any], - step: SimulationStep, + resolved_activity_parameters: dict[str, Any] | None, transport_zones: Any, opportunities: pl.DataFrame, costs: pl.DataFrame, cost_uncertainty_sd: float, ) -> tuple[pl.LazyFrame, pl.LazyFrame]: """Assemble destination utilities with cost uncertainty.""" + if resolved_activity_parameters is None: + raise ValueError("Cannot build destination utilities without resolved activity parameters.") utilities = [ ( activity.name, activity.get_utilities( transport_zones, - parameters=activity.get_parameters_at_step(step), + parameters=resolved_activity_parameters[activity.name], ), ) for activity in activities @@ -213,7 +217,7 @@ def _get_destination_probability( self, utilities: tuple[pl.LazyFrame, pl.LazyFrame], activities: list[Any], - step: SimulationStep, + resolved_activity_parameters: dict[str, Any] | None, destination_probability_cutoff: float, ) -> pl.DataFrame: """Compute destination probabilities from utilities.""" @@ -222,8 +226,11 @@ def _get_destination_probability( ) costs_by_bin = utilities[0] cost_bin_to_destination = utilities[1] + if resolved_activity_parameters is None: + raise ValueError("Cannot compute destination probabilities without resolved activity parameters.") activities_lambda = { - activity.name: activity.get_parameters_at_step(step).radiation_lambda for activity in activities + activity.name: resolved_activity_parameters[activity.name].radiation_lambda + for activity in activities } return ( costs_by_bin diff --git a/mobility/trips/group_day_trips/plans/plan_initializer.py b/mobility/trips/group_day_trips/plans/plan_initializer.py index 38e82276..0b2c55a5 100644 --- a/mobility/trips/group_day_trips/plans/plan_initializer.py +++ b/mobility/trips/group_day_trips/plans/plan_initializer.py @@ -2,8 +2,7 @@ import polars as pl -from mobility.activities.activity import Activity -from mobility.simulation_profile import SimulationStep +from mobility.activities.activity import ActivityParameters class PlanInitializer: @@ -189,13 +188,12 @@ def get_stay_home_state( self, demand_groups, home_night_dur, - home_activity: Activity, - step: SimulationStep, + home_activity_parameters: ActivityParameters, min_activity_time_constant: float, ): """Create the baseline 'stay home all day' state.""" - value_of_time_stay_home = home_activity.get_parameters_at_step(step).value_of_time_stay_home + value_of_time_stay_home = home_activity_parameters.value_of_time_stay_home stay_home_state = ( demand_groups.select(["demand_group_id", "csp", "n_persons"]) diff --git a/mobility/trips/group_day_trips/plans/plan_updater.py b/mobility/trips/group_day_trips/plans/plan_updater.py index 483bb4a9..0dabe763 100644 --- a/mobility/trips/group_day_trips/plans/plan_updater.py +++ b/mobility/trips/group_day_trips/plans/plan_updater.py @@ -7,7 +7,6 @@ from .destination_sequences import DestinationSequences from .mode_sequences import ModeSequences from ..transitions.transition_schema import TRANSITION_EVENT_COLUMNS -from mobility.simulation_profile import SimulationStep class PlanUpdater: @@ -23,13 +22,13 @@ def get_new_plans( congestion_state: Any, remaining_opportunities: pl.DataFrame, activity_dur: pl.DataFrame, - step: SimulationStep, + iteration: int, + resolved_activity_parameters: dict[str, Any], destination_sequences: DestinationSequences, mode_sequences: ModeSequences, home_night_dur: pl.DataFrame, stay_home_plan: pl.DataFrame, parameters: Any, - activities: list[Any], ) -> tuple[pl.DataFrame, pl.DataFrame, pl.DataFrame]: """Advance one iteration of plan updates.""" @@ -42,8 +41,8 @@ def get_new_plans( congestion_state, remaining_opportunities, activity_dur, - step, - activities, + iteration, + resolved_activity_parameters, parameters.min_activity_time_constant, destination_sequences, mode_sequences, @@ -51,15 +50,13 @@ def get_new_plans( self._assert_current_plans_covered_by_possible_plan_steps( current_plans, possible_plan_steps, - step.iteration, + iteration, ) - home_activity = [activity for activity in activities if activity.name == "home"][0] - possible_plan_utility = self.get_possible_plan_utility( possible_plan_steps, home_night_dur, - home_activity.get_parameters_at_step(step).value_of_time_stay_home, + resolved_activity_parameters["home"].value_of_time_stay_home, stay_home_plan, parameters.min_activity_time_constant, ) @@ -68,7 +65,7 @@ def get_new_plans( current_plans, transition_events = self.apply_transitions( current_plans, transition_prob, - step.iteration, + iteration, ) transition_events = self.add_transition_plan_details(transition_events, possible_plan_steps) current_plan_steps = self.get_current_plan_steps(current_plans, possible_plan_steps) @@ -118,8 +115,8 @@ def get_possible_plan_steps( congestion_state, opportunities, activity_dur, - step: SimulationStep, - activities, + iteration: int, + resolved_activity_parameters: dict[str, Any], min_activity_time_constant, destination_sequences: DestinationSequences, mode_sequences: ModeSequences, @@ -141,16 +138,11 @@ def get_possible_plan_steps( spat_chains = destination_sequences.get_cached_asset().lazy() modes = mode_sequences.get_cached_asset().lazy() - activity_parameters_at_step = { - activity.name: activity.get_parameters_at_step(step) - for activity in activities - } - value_of_time = ( pl.from_dicts( [ {"activity": activity_name, "value_of_time": activity_parameters.value_of_time} - for activity_name, activity_parameters in activity_parameters_at_step.items() + for activity_name, activity_parameters in resolved_activity_parameters.items() ] ).with_columns( activity=pl.col("activity").cast(pl.Enum(activity_dur["activity"].dtype.categories)) @@ -229,7 +221,7 @@ def get_possible_plan_steps( sample = zero_mass_steps.head(5).to_dicts() raise ValueError( "Found carried-forward current_plan_steps with non-positive n_persons while " - f"building possible_plan_steps at iteration={step.iteration}. " + f"building possible_plan_steps at iteration={iteration}. " f"Invalid rows={zero_mass_steps.height}. Sample={sample}" ) @@ -237,7 +229,7 @@ def get_possible_plan_steps( current_plan_steps.lazy() .with_columns( duration_per_pers=pl.col("duration") / pl.col("n_persons"), - iteration=pl.lit(step.iteration).cast(pl.UInt32), + iteration=pl.lit(iteration).cast(pl.UInt32), anchor_to=pl.col("to"), ) .join(demand_groups.select(["demand_group_id", "csp"]).lazy(), on="demand_group_id") @@ -725,18 +717,12 @@ def get_new_opportunities( self, current_plan_steps, opportunities, - activities, - step: SimulationStep, + resolved_activity_parameters: dict[str, Any], ): """Recompute remaining opportunities per (activity, destination).""" logging.info("Computing remaining opportunities at destinations...") - activity_parameters_at_step = { - activity.name: activity.get_parameters_at_step(step) - for activity in activities - } - saturation_fun_parameters = ( pl.from_dicts( [ @@ -745,7 +731,7 @@ def get_new_opportunities( "beta": activity_parameters.saturation_fun_beta, "ref_level": activity_parameters.saturation_fun_ref_level, } - for activity_name, activity_parameters in activity_parameters_at_step.items() + for activity_name, activity_parameters in resolved_activity_parameters.items() ] ).with_columns(activity=pl.col("activity").cast(pl.Enum(opportunities["activity"].dtype.categories))) ) From 5abdccacd528784ba80599356baaa6f9c9ea4157 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 22:18:17 +0200 Subject: [PATCH 14/24] add ParameterProfile test --- ...s_parameter_profiles_change_iteration_2.py | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py diff --git a/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py b/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py new file mode 100644 index 00000000..185a1334 --- /dev/null +++ b/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py @@ -0,0 +1,110 @@ +import pytest +import polars as pl + +import mobility +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import Parameters, GroupDayTrips +from mobility.surveys.france import EMPMobilitySurvey + + +@pytest.mark.dependency( + depends=[ + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed", + ], + scope="session", +) +def test_008c_group_day_trips_parameter_profiles_change_iteration_2(test_data): + transport_zones = mobility.TransportZones( + local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], + radius=test_data["transport_zones_radius"], + ) + + emp = EMPMobilitySurvey() + pop = mobility.Population( + transport_zones, + sample_size=test_data["population_sample_size"], + ) + + def build_modes(): + car_mode = mobility.Car(transport_zones) + walk_mode = mobility.Walk(transport_zones) + bicycle_mode = mobility.Bicycle(transport_zones) + mode_registry = mobility.ModeRegistry([car_mode, walk_mode, bicycle_mode]) + public_transport_mode = mobility.PublicTransport( + transport_zones, + mode_registry=mode_registry, + ) + return [car_mode, walk_mode, bicycle_mode, public_transport_mode] + + static = GroupDayTrips( + population=pop, + modes=build_modes(), + activities=[ + Home(), + Work(value_of_time=5.0), + Other(population=pop), + ], + surveys=[emp], + parameters=Parameters( + n_iterations=2, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=6, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + simulate_weekend=False, + seed=0, + ), + ) + + dynamic = GroupDayTrips( + population=pop, + modes=build_modes(), + activities=[ + Home(), + Work( + value_of_time=mobility.ParameterProfile( + mode="step", + points={1: 5.0, 2: 50.0}, + ) + ), + Other(population=pop), + ], + surveys=[emp], + parameters=Parameters( + n_iterations=2, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=6, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + simulate_weekend=False, + seed=0, + ), + ) + + static_result = static.get() + dynamic_result = dynamic.get() + + static_plan_steps = static_result["weekday_plan_steps"].collect() + dynamic_plan_steps = dynamic_result["weekday_plan_steps"].collect() + static_transitions = static_result["weekday_transitions"].collect() + dynamic_transitions = dynamic_result["weekday_transitions"].collect() + + assert static_plan_steps.height > 0 + assert dynamic_plan_steps.height > 0 + assert static_transitions.height > 0 + assert dynamic_transitions.height > 0 + + static_iter_2 = static_transitions.filter(pl.col("iteration") == 2) + dynamic_iter_2 = dynamic_transitions.filter(pl.col("iteration") == 2) + + assert static_iter_2.height > 0 + assert dynamic_iter_2.height > 0 + + static_utility_sum = static_iter_2["utility_to"].sum() + dynamic_utility_sum = dynamic_iter_2["utility_to"].sum() + + assert dynamic_utility_sum != pytest.approx(static_utility_sum) From 8b9859a2adaf86e146dbaf926bf02dbc72281f3b Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 23:10:35 +0200 Subject: [PATCH 15/24] add ListParameterProfile and ScalarParameterProfile + add run orchestration so that travel costs recompute when a new GTFS feed is added + add a GTFS builder class + integration test for time varying GTFS parameter --- mobility/__init__.py | 11 +- mobility/activities/activity.py | 10 +- mobility/activities/home.py | 6 +- mobility/activities/leisure/leisure.py | 4 +- mobility/activities/other.py | 4 +- mobility/activities/shopping/shop.py | 4 +- mobility/activities/studies/study.py | 4 +- mobility/activities/work/work.py | 4 +- mobility/runtime/parameter_profiles.py | 53 +-- .../costs/transport_costs_aggregator.py | 15 +- .../modes/public_transport/__init__.py | 6 + .../modes/public_transport/gtfs_builder.py | 305 ++++++++++++++++++ .../public_transport/public_transport.py | 24 ++ .../public_transport_generalized_cost.py | 7 +- .../public_transport_graph.py | 3 +- .../public_transport_travel_costs.py | 3 + mobility/trips/group_day_trips/core/run.py | 22 +- ...s_parameter_profiles_change_iteration_2.py | 2 +- ...ips_pt_gtfs_profiles_change_iteration_2.py | 191 +++++++++++ .../test_001_routing_parameters.py | 22 ++ 20 files changed, 646 insertions(+), 54 deletions(-) create mode 100644 mobility/transport/modes/public_transport/gtfs_builder.py create mode 100644 tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py diff --git a/mobility/__init__.py b/mobility/__init__.py index 5d309fb6..cc83b073 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -40,13 +40,22 @@ DetailedCarpoolGeneralizedCostParameters, ) from .transport.modes.public_transport import ( + build_gtfs_zip, + GTFSFeedSpec, + GTFSLineSpec, + GTFSStopSpec, PublicTransport, PublicTransportMode, PublicTransportParameters, PublicTransportRoutingParameters, ) from .transport.modes.core import IntermodalTransfer, ModeRegistry -from .runtime.parameter_profiles import ParameterProfile, SimulationStep +from .runtime.parameter_profiles import ( + ListParameterProfile, + ParameterProfile, + ScalarParameterProfile, + SimulationStep, +) from .transport.graphs.modified.modifiers import ( BorderCrossingSpeedModifier, diff --git a/mobility/activities/activity.py b/mobility/activities/activity.py index 720e3568..b6d6e8e9 100644 --- a/mobility/activities/activity.py +++ b/mobility/activities/activity.py @@ -7,7 +7,11 @@ from mobility.runtime.assets.in_memory_asset import InMemoryAsset from pydantic import BaseModel, ConfigDict, Field -from mobility.runtime.parameter_profiles import ParameterProfile, SimulationStep, resolve_model_for_step +from mobility.runtime.parameter_profiles import ( + ScalarParameterProfile, + SimulationStep, + resolve_model_for_step, +) from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat @@ -127,7 +131,7 @@ class ActivityParameters(BaseModel): model_config = ConfigDict(extra="forbid") value_of_time: Annotated[ - NonNegativeFloat | ParameterProfile, + NonNegativeFloat | ScalarParameterProfile, Field( default=10.0, title="Value of time", @@ -154,7 +158,7 @@ class ActivityParameters(BaseModel): ] value_of_time_v2: Annotated[ - NonNegativeFloat | ParameterProfile | None, + NonNegativeFloat | ScalarParameterProfile | None, Field( default=None, title="Alternative value of time", diff --git a/mobility/activities/home.py b/mobility/activities/home.py index fc35cfdd..2e525e36 100644 --- a/mobility/activities/home.py +++ b/mobility/activities/home.py @@ -3,7 +3,7 @@ from typing import Annotated, List from pydantic import Field -from mobility.runtime.parameter_profiles import ParameterProfile +from mobility.runtime.parameter_profiles import ScalarParameterProfile from mobility.activities.activity import Activity, ActivityParameters @@ -49,12 +49,12 @@ class HomeParameters(ActivityParameters): """Parameters specific to the home activity.""" value_of_time: Annotated[ - float | ParameterProfile, + float | ScalarParameterProfile, Field(default=10.0), ] value_of_time_stay_home: Annotated[ - float | ParameterProfile, + float | ScalarParameterProfile, Field(default=0.0), ] diff --git a/mobility/activities/leisure/leisure.py b/mobility/activities/leisure/leisure.py index c8801dee..e63015b8 100644 --- a/mobility/activities/leisure/leisure.py +++ b/mobility/activities/leisure/leisure.py @@ -12,7 +12,7 @@ from pydantic import Field from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.leisure.leisure_facilities_distribution import LeisureFacilitiesDistribution -from mobility.runtime.parameter_profiles import ParameterProfile +from mobility.runtime.parameter_profiles import ScalarParameterProfile from mobility.validation_types import UnitIntervalFloat @@ -157,7 +157,7 @@ def plot_opportunities_map( class LeisureParameters(ActivityParameters): """Parameters specific to the leisure activity.""" - value_of_time: Annotated[float | ParameterProfile, Field(default=10.0)] + value_of_time: Annotated[float | ScalarParameterProfile, Field(default=10.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[ diff --git a/mobility/activities/other.py b/mobility/activities/other.py index e757113d..266f011f 100644 --- a/mobility/activities/other.py +++ b/mobility/activities/other.py @@ -8,7 +8,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.population import Population -from mobility.runtime.parameter_profiles import ParameterProfile +from mobility.runtime.parameter_profiles import ScalarParameterProfile from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat @@ -81,7 +81,7 @@ class OtherParameters(ActivityParameters): """Parameters specific to the other activity.""" value_of_time: Annotated[ - float | ParameterProfile, + float | ScalarParameterProfile, Field(default=10.0), ] diff --git a/mobility/activities/shopping/shop.py b/mobility/activities/shopping/shop.py index 1015f084..c7d51477 100644 --- a/mobility/activities/shopping/shop.py +++ b/mobility/activities/shopping/shop.py @@ -9,7 +9,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.shopping.shops_turnover_distribution import ShopsTurnoverDistribution -from mobility.runtime.parameter_profiles import ParameterProfile +from mobility.runtime.parameter_profiles import ScalarParameterProfile from mobility.validation_types import UnitIntervalFloat @@ -82,7 +82,7 @@ def get_opportunities(self, transport_zones): class ShopParameters(ActivityParameters): """Parameters specific to the shopping activity.""" - value_of_time: Annotated[float | ParameterProfile, Field(default=10.0)] + value_of_time: Annotated[float | ScalarParameterProfile, Field(default=10.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[list[str], Field(default_factory=lambda: ["2.20", "2.21"])] diff --git a/mobility/activities/studies/study.py b/mobility/activities/studies/study.py index 42280503..011b6938 100644 --- a/mobility/activities/studies/study.py +++ b/mobility/activities/studies/study.py @@ -11,7 +11,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.studies.schools_capacity_distribution import SchoolsCapacityDistribution -from mobility.runtime.parameter_profiles import ParameterProfile +from mobility.runtime.parameter_profiles import ScalarParameterProfile from mobility.validation_types import UnitIntervalFloat @@ -160,7 +160,7 @@ def plot_opportunities_map( class StudyParameters(ActivityParameters): """Parameters specific to the studies activity.""" - value_of_time: Annotated[float | ParameterProfile, Field(default=10.0)] + value_of_time: Annotated[float | ScalarParameterProfile, Field(default=10.0)] saturation_fun_ref_level: Annotated[float, Field(default=1.5, ge=0.0)] saturation_fun_beta: Annotated[float, Field(default=4.0, ge=0.0)] survey_ids: Annotated[list[str], Field(default_factory=lambda: ["1.11"])] diff --git a/mobility/activities/work/work.py b/mobility/activities/work/work.py index a064cb54..9ca5c313 100644 --- a/mobility/activities/work/work.py +++ b/mobility/activities/work/work.py @@ -9,7 +9,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.work.jobs_active_population_distribution import JobsActivePopulationDistribution -from mobility.runtime.parameter_profiles import ParameterProfile +from mobility.runtime.parameter_profiles import ScalarParameterProfile from mobility.validation_types import UnitIntervalFloat @@ -89,7 +89,7 @@ class WorkParameters(ActivityParameters): """Parameters specific to the work activity.""" value_of_time: Annotated[ - float | ParameterProfile, + float | ScalarParameterProfile, Field(default=10.0), ] diff --git a/mobility/runtime/parameter_profiles.py b/mobility/runtime/parameter_profiles.py index 1b5f4ed1..66e58078 100644 --- a/mobility/runtime/parameter_profiles.py +++ b/mobility/runtime/parameter_profiles.py @@ -9,11 +9,7 @@ class SimulationStep(BaseModel): - """Identifies one simulation step. - - Attributes: - iteration: One-based simulation iteration index. - """ + """Identifies one simulation step.""" model_config = ConfigDict(extra="forbid") @@ -21,35 +17,33 @@ class SimulationStep(BaseModel): class ParameterProfile(BaseModel): - """Defines a parameter value profile over simulation iterations. - - The profile is specified by control points keyed by iteration index. - Values can be evaluated with step-wise or linear interpolation. - - Attributes: - mode: Evaluation mode used between control points. - points: Mapping from iteration index to parameter value. - """ + """Base class for parameter profiles evaluated over simulation iterations.""" model_config = ConfigDict(extra="forbid") - mode: Literal["step", "linear"] = "step" - points: dict[int, float] - @model_validator(mode="after") def validate_points(self) -> "ParameterProfile": - """Validates control points after model initialization.""" - if not self.points: - raise ValueError("ParameterProfile.points must not be empty.") + points = getattr(self, "points", None) + if not points: + raise ValueError(f"{self.__class__.__name__}.points must not be empty.") - invalid_steps = [step for step in self.points if step < 1] + invalid_steps = [step for step in points if step < 1] if invalid_steps: - raise ValueError("ParameterProfile.points keys must be >= 1.") + raise ValueError(f"{self.__class__.__name__}.points keys must be >= 1.") return self + def at(self, step: SimulationStep) -> Any: + raise NotImplementedError + + +class ScalarParameterProfile(ParameterProfile): + """Numeric parameter profile supporting step-wise and linear interpolation.""" + + mode: Literal["step", "linear"] = "step" + points: dict[int, float] + def at(self, step: SimulationStep) -> float: - """Evaluates the profile at a simulation step.""" sorted_points = sorted(self.points.items()) iterations = np.array([iteration for iteration, _ in sorted_points], dtype=float) values = np.array([value for _, value in sorted_points], dtype=float) @@ -62,6 +56,19 @@ def at(self, step: SimulationStep) -> float: return float(np.interp(step.iteration, iterations, values)) +class ListParameterProfile(ParameterProfile): + """List-valued parameter profile supporting step-wise changes only.""" + + points: dict[int, list[str]] + + def at(self, step: SimulationStep) -> list[str]: + sorted_points = sorted(self.points.items()) + iterations = [iteration for iteration, _ in sorted_points] + idx = np.searchsorted(iterations, step.iteration, side="right") - 1 + idx = max(idx, 0) + return list(sorted_points[idx][1]) + + def resolve_value_for_step(value: Any, step: SimulationStep) -> Any: """Resolve one value for a simulation step.""" diff --git a/mobility/transport/costs/transport_costs_aggregator.py b/mobility/transport/costs/transport_costs_aggregator.py index 5ed17019..90c27239 100644 --- a/mobility/transport/costs/transport_costs_aggregator.py +++ b/mobility/transport/costs/transport_costs_aggregator.py @@ -16,6 +16,15 @@ def __init__(self, modes): self.modes = modes inputs = {mode.inputs["parameters"].name: mode.inputs["generalized_cost"] for mode in modes} super().__init__(inputs) + + def resolve_for_step(self, step): + """Return a transport-cost aggregator resolved for one simulation step.""" + + resolved_modes = [ + mode.resolve_for_step(step) if hasattr(mode, "resolve_for_step") else mode + for mode in self.modes + ] + return TransportCostsAggregator(resolved_modes) def get( @@ -24,7 +33,7 @@ def get( congestion: bool = False, congestion_state: CongestionState | None = None, aggregate_by_od: bool = True, - detail_distances: bool = False + detail_distances: bool = False, ): logging.info("Aggregating costs...") @@ -95,9 +104,9 @@ def get_costs_by_od_and_mode( modes = sorted(self.modes, key=lambda mode: mode.inputs["parameters"].name != "car") for mode in modes: - + generalized_cost = mode.inputs["generalized_cost"] gc = pl.DataFrame( - mode.inputs["generalized_cost"].get( + generalized_cost.get( metrics, congestion=congestion, detail_distances=detail_distances, diff --git a/mobility/transport/modes/public_transport/__init__.py b/mobility/transport/modes/public_transport/__init__.py index 67945707..91749944 100644 --- a/mobility/transport/modes/public_transport/__init__.py +++ b/mobility/transport/modes/public_transport/__init__.py @@ -4,3 +4,9 @@ PublicTransportMode, PublicTransportParameters, ) +from .gtfs_builder import ( + build_gtfs_zip, + GTFSFeedSpec, + GTFSLineSpec, + GTFSStopSpec, +) diff --git a/mobility/transport/modes/public_transport/gtfs_builder.py b/mobility/transport/modes/public_transport/gtfs_builder.py new file mode 100644 index 00000000..02642cd7 --- /dev/null +++ b/mobility/transport/modes/public_transport/gtfs_builder.py @@ -0,0 +1,305 @@ +from __future__ import annotations + +import io +import shutil +import zipfile +from dataclasses import dataclass +from pathlib import Path + +import numpy as np +import pandas as pd +import shortuuid + + +@dataclass(frozen=True) +class GTFSStopSpec: + """One stop definition used by the simplified GTFS builder.""" + + lon: float + lat: float + name: str | None = None + + +@dataclass(frozen=True) +class GTFSLineSpec: + """One simplified line with fixed stop order and timetable.""" + + stop_ids: list[str] + segment_travel_times: list[float] + start_time: float + end_time: float + period: float + bidirectional: bool = True + + def validate(self) -> None: + """Validate the simplified line specification.""" + + if len(self.stop_ids) < 2: + raise ValueError("GTFSLineSpec.stop_ids must contain at least two stops.") + + if len(self.segment_travel_times) != len(self.stop_ids) - 1: + raise ValueError( + "GTFSLineSpec.segment_travel_times must contain exactly len(stop_ids) - 1 values." + ) + + if self.period <= 0: + raise ValueError("GTFSLineSpec.period must be strictly positive.") + + def to_travel_times(self) -> list[list[float | str]]: + """Return ``[from_stop_id, to_stop_id, travel_time]`` rows for one direction.""" + + self.validate() + return [ + [self.stop_ids[index], self.stop_ids[index + 1], self.segment_travel_times[index]] + for index in range(len(self.segment_travel_times)) + ] + + +@dataclass(frozen=True) +class GTFSFeedSpec: + """Declarative input for generating one simple GTFS zip feed.""" + + agency_id: str + agency_name: str + route_id: str + route_short_name: str + route_type: str + service_id: str + stops: dict[str, GTFSStopSpec] + lines: list[GTFSLineSpec] + + def validate(self) -> None: + """Validate the feed-level specification.""" + + if not self.stops: + raise ValueError("GTFSFeedSpec.stops must not be empty.") + + if not self.lines: + raise ValueError("GTFSFeedSpec.lines must not be empty.") + + unknown_stop_ids = { + stop_id + for line in self.lines + for stop_id in line.stop_ids + if stop_id not in self.stops + } + if unknown_stop_ids: + unknown = ", ".join(sorted(unknown_stop_ids)) + raise ValueError(f"GTFSFeedSpec.lines reference unknown stop ids: {unknown}") + + +def create_gtfs_tables( + agency_id: str, + agency_name: str, + route_id: str, + route_short_name: str, + route_type: str, + service_id: str, + stops: dict[str, tuple[str, list[float]]], + stop_times: list[pd.DataFrame], +) -> tuple[pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame, pd.DataFrame]: + """Create the standard GTFS tables for one simplified feed.""" + + agency = pd.DataFrame( + { + "agency_id": agency_id, + "agency_name": agency_name, + }, + index=[0], + ) + + gtfs_route_types = { + "train": 2, + "bus": 3, + } + + routes = pd.DataFrame( + { + "route_id": route_id, + "agency_id": agency_id, + "route_short_name": route_short_name, + "route_type": gtfs_route_types[route_type], + }, + index=[0], + ) + + calendar = pd.DataFrame( + { + "service_id": service_id, + "monday": 1, + "tuesday": 1, + "wednesday": 1, + "thursday": 1, + "friday": 1, + "saturday": 1, + "sunday": 1, + "start_date": 20000101, + "end_date": 21001231, + }, + index=[0], + ) + + stops_table = pd.DataFrame.from_dict( + [ + { + "stop_id": stop_id, + "stop_name": stop_name, + "stop_lon": coords[0], + "stop_lat": coords[1], + } + for stop_id, (stop_name, coords) in stops.items() + ] + ) + + stop_times_table = pd.concat(stop_times) + trips = pd.DataFrame( + { + "route_id": route_id, + "service_id": service_id, + "trip_id": stop_times_table["trip_id"].unique(), + } + ) + + return agency, routes, trips, calendar, stops_table, stop_times_table + + +def create_stop_times( + travel_times: list[list[float | str]], + start_time: float, + end_time: float, + period: float, +) -> pd.DataFrame: + """Create one GTFS ``stop_times`` table from a simple line description.""" + + travel_times_df = pd.DataFrame( + travel_times, + columns=["from_stop_id", "to_stop_id", "travel_time"], + ) + + travel_times_df["cum_travel_time"] = travel_times_df["travel_time"].cumsum() + travel_times_df["prev_cum_travel_time"] = travel_times_df["cum_travel_time"].shift(1, fill_value=0.0) + + departure_times = np.arange(start_time, end_time + period, period) + trip_ids = [shortuuid.uuid() for _ in range(len(departure_times))] + + stop_times = pd.concat([travel_times_df] * len(departure_times)) + stop_times["trip_id"] = np.repeat(trip_ids, travel_times_df.shape[0]) + stop_times["trip_departure_time"] = np.repeat(departure_times, travel_times_df.shape[0]) + + stop_times["departure_time"] = stop_times["trip_departure_time"] + stop_times["prev_cum_travel_time"] + stop_times["arrival_time"] = stop_times["trip_departure_time"] + stop_times["cum_travel_time"] + + stop_times["departure_time"] = pd.to_datetime(stop_times["departure_time"], unit="s").dt.strftime("%H:%M:%S") + stop_times["arrival_time"] = pd.to_datetime(stop_times["arrival_time"], unit="s").dt.strftime("%H:%M:%S") + + stop_times = pd.concat( + [ + stop_times[["trip_id", "from_stop_id", "departure_time"]] + .rename({"from_stop_id": "stop_id", "departure_time": "time"}, axis=1) + .assign(var="departure"), + stop_times[["trip_id", "to_stop_id", "arrival_time"]] + .rename({"to_stop_id": "stop_id", "arrival_time": "time"}, axis=1) + .assign(var="arrival"), + ] + ) + + stop_times = stop_times.pivot(columns="var", index=["trip_id", "stop_id"], values="time") + stop_times["arrival"] = stop_times["arrival"].fillna(stop_times["departure"]) + stop_times["departure"] = stop_times["departure"].fillna(stop_times["arrival"]) + stop_times = stop_times.sort_values(["trip_id", "departure"]) + stop_times["stop_sequence"] = stop_times.groupby("trip_id").cumcount() + 1 + stop_times = stop_times.rename({"arrival": "arrival_time", "departure": "departure_time"}, axis=1) + + return stop_times.reset_index() + + +def zip_gtfs_tables( + agency: pd.DataFrame, + routes: pd.DataFrame, + trips: pd.DataFrame, + calendar: pd.DataFrame, + stops: pd.DataFrame, + stop_times: pd.DataFrame, + path: str | Path, +) -> None: + """Write GTFS tables into one zip archive.""" + + tables = { + "agency.txt": agency, + "trips.txt": trips, + "routes.txt": routes, + "calendar.txt": calendar, + "stops.txt": stops, + "stop_times.txt": stop_times, + } + + zip_buffer = io.BytesIO() + with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file: + for name, df in tables.items(): + csv_buffer = io.StringIO() + df.to_csv(csv_buffer, index=False) + zip_file.writestr(name, csv_buffer.getvalue()) + + zip_buffer.seek(0) + path = Path(path) + path.parent.mkdir(parents=True, exist_ok=True) + with open(path, "wb") as file: + shutil.copyfileobj(zip_buffer, file) + + +def build_gtfs_zip(feed: GTFSFeedSpec, output_path: str | Path) -> Path: + """Build one GTFS zip from a declarative feed specification.""" + + feed.validate() + + stop_times_tables: list[pd.DataFrame] = [] + for line in feed.lines: + travel_times = line.to_travel_times() + stop_times_tables.append( + create_stop_times( + travel_times=travel_times, + start_time=line.start_time, + end_time=line.end_time, + period=line.period, + ) + ) + + if line.bidirectional: + reverse_travel_times = [[to_stop, from_stop, travel_time] for from_stop, to_stop, travel_time in travel_times] + reverse_travel_times.reverse() + stop_times_tables.append( + create_stop_times( + travel_times=reverse_travel_times, + start_time=line.start_time, + end_time=line.end_time, + period=line.period, + ) + ) + + stops = { + stop_id: (spec.name or stop_id, [spec.lon, spec.lat]) + for stop_id, spec in feed.stops.items() + } + + agency, routes, trips, calendar, stops_table, stop_times_table = create_gtfs_tables( + agency_id=feed.agency_id, + agency_name=feed.agency_name, + route_id=feed.route_id, + route_short_name=feed.route_short_name, + route_type=feed.route_type, + service_id=feed.service_id, + stops=stops, + stop_times=stop_times_tables, + ) + + output_path = Path(output_path) + zip_gtfs_tables( + agency=agency, + routes=routes, + trips=trips, + calendar=calendar, + stops=stops_table, + stop_times=stop_times_table, + path=output_path, + ) + return output_path diff --git a/mobility/transport/modes/public_transport/public_transport.py b/mobility/transport/modes/public_transport/public_transport.py index f56e4dd7..507d120c 100644 --- a/mobility/transport/modes/public_transport/public_transport.py +++ b/mobility/transport/modes/public_transport/public_transport.py @@ -2,6 +2,7 @@ from typing import List +from mobility.runtime.parameter_profiles import SimulationStep, resolve_model_for_step from mobility.spatial.transport_zones import TransportZones from mobility.transport.modes.core.transport_mode import TransportMode, TransportModeParameters from mobility.transport.modes.core.mode_registry import ModeRegistry @@ -146,6 +147,29 @@ def audit_gtfs(self): travel_costs = self.inputs["travel_costs"].audit_gtfs() return travel_costs + def resolve_for_step(self, step: SimulationStep) -> "PublicTransport": + """Return a PT mode with routing parameters resolved for one iteration.""" + + routing_parameters = self.inputs["travel_costs"].inputs["parameters"] + resolved_routing_parameters = resolve_model_for_step(routing_parameters, step) + + if resolved_routing_parameters == routing_parameters: + return self + + travel_costs = self.inputs["travel_costs"] + generalized_cost = self.inputs["generalized_cost"] + + return PublicTransport( + transport_zones=travel_costs.inputs["transport_zones"], + first_leg_mode=travel_costs.first_leg_mode, + last_leg_mode=travel_costs.last_leg_mode, + first_intermodal_transfer=travel_costs.inputs["first_modal_transfer"], + last_intermodal_transfer=travel_costs.inputs["last_modal_transfer"], + routing_parameters=resolved_routing_parameters, + generalized_cost_parameters=generalized_cost.inputs["mid_parameters"], + parameters=self.inputs["parameters"], + ) + @staticmethod def _resolve_leg_mode( leg_mode: TransportMode | None, diff --git a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py index a99ae115..2ce01254 100644 --- a/mobility/transport/modes/public_transport/public_transport_generalized_cost.py +++ b/mobility/transport/modes/public_transport/public_transport_generalized_cost.py @@ -41,10 +41,11 @@ def get( last_leg_mode_name = self.inputs["last_leg_mode_name"] metrics = list(metrics) - costs = self.inputs["travel_costs"].get() + travel_costs = self.inputs["travel_costs"] + costs = travel_costs.get() - study_area = self.inputs["travel_costs"].inputs["transport_zones"].study_area.get() - transport_zones = self.inputs["travel_costs"].inputs["transport_zones"].get() + study_area = travel_costs.inputs["transport_zones"].study_area.get() + transport_zones = travel_costs.inputs["transport_zones"].get() transport_zones = pd.merge(transport_zones, study_area[["local_admin_unit_id", "country"]], on="local_admin_unit_id") diff --git a/mobility/transport/modes/public_transport/public_transport_graph.py b/mobility/transport/modes/public_transport/public_transport_graph.py index aa99e123..77d8cf1f 100644 --- a/mobility/transport/modes/public_transport/public_transport_graph.py +++ b/mobility/transport/modes/public_transport/public_transport_graph.py @@ -11,6 +11,7 @@ from pydantic import BaseModel, ConfigDict, Field, model_validator from mobility.runtime.assets.file_asset import FileAsset +from mobility.runtime.parameter_profiles import ListParameterProfile from mobility.runtime.r_integration.r_script_runner import RScriptRunner from mobility.spatial.transport_zones import TransportZones from mobility.transport.modes.core.defaults import ( @@ -141,7 +142,7 @@ class PublicTransportRoutingParameters(BaseModel): float, Field(default=DEFAULT_LONG_RANGE_MOTORIZED_MAX_BEELINE_DISTANCE_KM, gt=0.0), ] - additional_gtfs_files: Annotated[list[str] | None, Field(default=None)] + additional_gtfs_files: Annotated[list[str] | ListParameterProfile | None, Field(default=None)] expected_agencies: Annotated[list[str] | None, Field(default=None)] @model_validator(mode="after") diff --git a/mobility/transport/modes/public_transport/public_transport_travel_costs.py b/mobility/transport/modes/public_transport/public_transport_travel_costs.py index ca0ffc67..ae4bac84 100644 --- a/mobility/transport/modes/public_transport/public_transport_travel_costs.py +++ b/mobility/transport/modes/public_transport/public_transport_travel_costs.py @@ -55,6 +55,9 @@ def __init__( "PublicTransportTravelCosts requires both `first_modal_transfer` and `last_modal_transfer`." ) + self.first_leg_mode = first_leg_mode + self.last_leg_mode = last_leg_mode + intermodal_graph = IntermodalTransportGraph( transport_zones, parameters, diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index f5569d6b..878dd9b3 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -172,7 +172,7 @@ def _build_state( current_plans=current_plans, remaining_opportunities=opportunities.clone(), costs=self.initializer.get_current_costs( - self.costs_aggregator, + self.costs_aggregator.resolve_for_step(step), congestion=False, ), congestion_state=None, @@ -233,7 +233,9 @@ def _restore_saved_state( str(self.is_weekday), str(resume_from_iteration), ) - state.costs = self.costs_aggregator.get( + state.costs = self.costs_aggregator.resolve_for_step( + SimulationStep(iteration=state.start_iteration) + ).get( congestion=(state.congestion_state is not None), congestion_state=state.congestion_state, ) @@ -248,6 +250,8 @@ def _run_model_iteration( """Execute one simulation iteration and update the mutable run state.""" logging.info("Iteration %s", str(iteration.iteration)) seed = self.rng.getrandbits(64) + step = SimulationStep(iteration=iteration.iteration) + resolved_costs_aggregator = self.costs_aggregator.resolve_for_step(step) destination_sequences = self._sample_and_write_destination_sequences( state, @@ -258,12 +262,14 @@ def _run_model_iteration( state, iteration, destination_sequences, + resolved_costs_aggregator, ) transition_events = self._update_iteration_state( state, iteration, destination_sequences, mode_sequences, + resolved_costs_aggregator, ) iteration.save_transition_events(transition_events) @@ -297,11 +303,12 @@ def _search_and_write_mode_sequences( state: RunState, iteration: Iteration, destination_sequences: DestinationSequences, + resolved_costs_aggregator: TransportCostsAggregator, ) -> ModeSequences: """Run mode-sequence search and persist the results for one iteration.""" mode_sequences = iteration.mode_sequences( destination_sequences=destination_sequences, - costs_aggregator=self.costs_aggregator, + costs_aggregator=resolved_costs_aggregator, parameters=self.parameters, congestion_state=state.congestion_state, ) @@ -315,6 +322,7 @@ def _update_iteration_state( iteration: Iteration, destination_sequences: DestinationSequences, mode_sequences: ModeSequences, + resolved_costs_aggregator: TransportCostsAggregator, ) -> pl.DataFrame: """Advance the simulation state by one iteration and return transition events.""" step = SimulationStep(iteration=iteration.iteration) @@ -324,7 +332,7 @@ def _update_iteration_state( state.current_plan_steps, state.demand_groups, state.chains_by_activity, - self.costs_aggregator, + resolved_costs_aggregator, state.congestion_state, state.remaining_opportunities, state.activity_dur, @@ -341,7 +349,7 @@ def _update_iteration_state( iteration.iteration, self.parameters.n_iter_per_cost_update, state.current_plan_steps, - self.costs_aggregator, + self.costs_aggregator.resolve_for_step(SimulationStep(iteration=iteration.iteration + 1)), congestion_state=state.congestion_state, run_key=iteration.iterations.run_inputs_hash, is_weekday=self.is_weekday, @@ -368,7 +376,9 @@ def _assert_current_plan_steps_are_available(self, state: RunState) -> None: def _build_final_costs(self, state: RunState) -> pl.DataFrame: """Compute the final OD costs to attach to the written outputs.""" - return self.costs_aggregator.get_costs_by_od_and_mode( + return self.costs_aggregator.resolve_for_step( + SimulationStep(iteration=self.parameters.n_iterations) + ).get_costs_by_od_and_mode( ["cost", "distance", "time", "ghg_emissions"], congestion=(state.congestion_state is not None), congestion_state=state.congestion_state, diff --git a/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py b/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py index 185a1334..c98e6feb 100644 --- a/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py +++ b/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py @@ -64,7 +64,7 @@ def build_modes(): activities=[ Home(), Work( - value_of_time=mobility.ParameterProfile( + value_of_time=mobility.ScalarParameterProfile( mode="step", points={1: 5.0, 2: 50.0}, ) diff --git a/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py b/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py new file mode 100644 index 00000000..77ab9ed9 --- /dev/null +++ b/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py @@ -0,0 +1,191 @@ +import os +import pathlib + +import polars as pl +import pytest + +import mobility +from mobility.activities import Home, Other, Work +from mobility.trips.group_day_trips import GroupDayTrips, Parameters +from mobility.surveys.france import EMPMobilitySurvey + + +def _select_subway_endpoints(transport_zones: mobility.TransportZones) -> tuple[dict, dict]: + zones = transport_zones.get().to_crs(4326) + center_local_admin_unit_id = transport_zones.inputs["parameters"].local_admin_unit_id + + center_candidates = zones.loc[zones["local_admin_unit_id"] == center_local_admin_unit_id].copy() + if center_candidates.empty: + raise ValueError("Could not find the central local admin unit in transport zones.") + + center_zone = center_candidates.iloc[0] + other_zones = zones.loc[zones["transport_zone_id"] != center_zone["transport_zone_id"]].copy() + if other_zones.empty: + raise ValueError("Need at least two transport zones to build a synthetic GTFS line.") + + other_zones["distance_to_center"] = other_zones.geometry.distance(center_zone.geometry) + target_zone = other_zones.sort_values("distance_to_center", ascending=False).iloc[0] + + return center_zone, target_zone + + +def _build_ultra_fast_gtfs_zip( + transport_zones: mobility.TransportZones, + *, + output_name: str, +) -> tuple[str, int, int]: + center_zone, target_zone = _select_subway_endpoints(transport_zones) + + center_centroid = center_zone.geometry.centroid + target_centroid = target_zone.geometry.centroid + + feed = mobility.GTFSFeedSpec( + agency_id="test_subway", + agency_name="Test Subway", + route_id="test_subway_route", + route_short_name="TS1", + route_type="train", + service_id="test_subway_service", + stops={ + "center": mobility.GTFSStopSpec( + lon=float(center_centroid.x), + lat=float(center_centroid.y), + name=f"Center {center_zone['transport_zone_id']}", + ), + "target": mobility.GTFSStopSpec( + lon=float(target_centroid.x), + lat=float(target_centroid.y), + name=f"Target {target_zone['transport_zone_id']}", + ), + }, + lines=[ + mobility.GTFSLineSpec( + stop_ids=["center", "target"], + segment_travel_times=[60.0], + start_time=6.0 * 3600.0, + end_time=9.0 * 3600.0, + period=300.0, + bidirectional=True, + ) + ], + ) + + output_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / output_name + gtfs_zip = mobility.build_gtfs_zip(feed, output_path) + + return str(gtfs_zip), int(center_zone["transport_zone_id"]), int(target_zone["transport_zone_id"]) + + +def _build_modes(transport_zones: mobility.TransportZones, additional_gtfs_files): + car_mode = mobility.Car(transport_zones) + walk_mode = mobility.Walk(transport_zones) + bicycle_mode = mobility.Bicycle(transport_zones) + mode_registry = mobility.ModeRegistry([car_mode, walk_mode, bicycle_mode]) + public_transport_mode = mobility.PublicTransport( + transport_zones, + mode_registry=mode_registry, + routing_parameters=mobility.PublicTransportRoutingParameters( + additional_gtfs_files=additional_gtfs_files, + max_traveltime=10.0, + max_perceived_time=10.0, + ), + ) + return [car_mode, walk_mode, bicycle_mode, public_transport_mode] + + +@pytest.mark.dependency( + depends=[ + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed", + ], + scope="session", +) +def test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2(test_data): + transport_zones = mobility.TransportZones( + local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], + radius=test_data["transport_zones_radius"], + ) + gtfs_zip, center_zone_id, target_zone_id = _build_ultra_fast_gtfs_zip( + transport_zones, + output_name="test-fast-subway-line.zip", + ) + + emp = EMPMobilitySurvey() + pop = mobility.Population( + transport_zones, + sample_size=test_data["population_sample_size"], + ) + + common_parameters = Parameters( + n_iterations=2, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=6, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + simulate_weekend=False, + seed=0, + ) + + static = GroupDayTrips( + population=pop, + modes=_build_modes(transport_zones, additional_gtfs_files=[]), + activities=[ + Home(), + Work(value_of_time=5.0), + Other(population=pop), + ], + surveys=[emp], + parameters=common_parameters, + ) + + dynamic = GroupDayTrips( + population=pop, + modes=_build_modes( + transport_zones, + additional_gtfs_files=mobility.ListParameterProfile( + points={ + 1: [], + 2: [gtfs_zip], + } + ), + ), + activities=[ + Home(), + Work(value_of_time=5.0), + Other(population=pop), + ], + surveys=[emp], + parameters=common_parameters, + ) + + static_result = static.get() + dynamic_result = dynamic.get() + + static_costs = static_result["weekday_costs"].collect() + dynamic_costs = dynamic_result["weekday_costs"].collect() + dynamic_transitions = dynamic_result["weekday_transitions"].collect() + + pt_mode_name = "walk/public_transport/walk" + od_filter = ( + (pl.col("from") == center_zone_id) + & (pl.col("to") == target_zone_id) + & (pl.col("mode") == pt_mode_name) + ) + + static_od = static_costs.filter(od_filter) + dynamic_od = dynamic_costs.filter(od_filter) + + assert static_costs.height > 0 + assert dynamic_costs.height > 0 + assert dynamic_transitions.height > 0 + assert static_od.height == 1 + assert dynamic_od.height == 1 + + static_cost = static_od["cost"].item() + dynamic_cost = dynamic_od["cost"].item() + static_time = static_od["time"].item() + dynamic_time = dynamic_od["time"].item() + + assert dynamic_cost < static_cost + assert dynamic_time < static_time diff --git a/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py b/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py index ab08fa2f..091dcf47 100644 --- a/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py +++ b/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py @@ -1,5 +1,10 @@ import pytest +from mobility.runtime.parameter_profiles import ( + ListParameterProfile, + SimulationStep, + resolve_model_for_step, +) from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters from mobility.transport.modes.public_transport.public_transport_graph import ( PublicTransportRoutingParameters, @@ -31,3 +36,20 @@ def test_public_transport_routing_parameters_exposes_explicit_outer_distance(): params = PublicTransportRoutingParameters() assert params.max_beeline_distance == 80.0 + + +def test_public_transport_routing_parameters_resolve_list_profiles_by_iteration(): + params = PublicTransportRoutingParameters( + additional_gtfs_files=ListParameterProfile( + points={ + 1: ["base.zip"], + 2: ["base.zip", "event.zip"], + } + ) + ) + + step_1 = resolve_model_for_step(params, SimulationStep(iteration=1)) + step_2 = resolve_model_for_step(params, SimulationStep(iteration=2)) + + assert step_1.additional_gtfs_files == ["base.zip"] + assert step_2.additional_gtfs_files == ["base.zip", "event.zip"] From ca91e521bcea3bbca2555936fb9eeebbdaf8ba80 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 23:13:15 +0200 Subject: [PATCH 16/24] move validation_types.py to runtime --- mobility/activities/activity.py | 2 +- mobility/activities/leisure/leisure.py | 2 +- mobility/activities/other.py | 2 +- mobility/activities/shopping/shop.py | 2 +- mobility/activities/studies/study.py | 2 +- mobility/activities/work/work.py | 2 +- mobility/{ => runtime}/validation_types.py | 0 7 files changed, 6 insertions(+), 6 deletions(-) rename mobility/{ => runtime}/validation_types.py (100%) diff --git a/mobility/activities/activity.py b/mobility/activities/activity.py index b6d6e8e9..3f41f5bd 100644 --- a/mobility/activities/activity.py +++ b/mobility/activities/activity.py @@ -12,7 +12,7 @@ SimulationStep, resolve_model_for_step, ) -from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat +from mobility.runtime.validation_types import NonNegativeFloat, UnitIntervalFloat class Activity(InMemoryAsset): diff --git a/mobility/activities/leisure/leisure.py b/mobility/activities/leisure/leisure.py index e63015b8..d740e06f 100644 --- a/mobility/activities/leisure/leisure.py +++ b/mobility/activities/leisure/leisure.py @@ -13,7 +13,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.leisure.leisure_facilities_distribution import LeisureFacilitiesDistribution from mobility.runtime.parameter_profiles import ScalarParameterProfile -from mobility.validation_types import UnitIntervalFloat +from mobility.runtime.validation_types import UnitIntervalFloat class Leisure(Activity): diff --git a/mobility/activities/other.py b/mobility/activities/other.py index 266f011f..6153f51b 100644 --- a/mobility/activities/other.py +++ b/mobility/activities/other.py @@ -9,7 +9,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.population import Population from mobility.runtime.parameter_profiles import ScalarParameterProfile -from mobility.validation_types import NonNegativeFloat, UnitIntervalFloat +from mobility.runtime.validation_types import NonNegativeFloat, UnitIntervalFloat class Other(Activity): diff --git a/mobility/activities/shopping/shop.py b/mobility/activities/shopping/shop.py index c7d51477..97a0edc2 100644 --- a/mobility/activities/shopping/shop.py +++ b/mobility/activities/shopping/shop.py @@ -10,7 +10,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.shopping.shops_turnover_distribution import ShopsTurnoverDistribution from mobility.runtime.parameter_profiles import ScalarParameterProfile -from mobility.validation_types import UnitIntervalFloat +from mobility.runtime.validation_types import UnitIntervalFloat class Shop(Activity): diff --git a/mobility/activities/studies/study.py b/mobility/activities/studies/study.py index 011b6938..af3664ad 100644 --- a/mobility/activities/studies/study.py +++ b/mobility/activities/studies/study.py @@ -12,7 +12,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.studies.schools_capacity_distribution import SchoolsCapacityDistribution from mobility.runtime.parameter_profiles import ScalarParameterProfile -from mobility.validation_types import UnitIntervalFloat +from mobility.runtime.validation_types import UnitIntervalFloat class Study(Activity): diff --git a/mobility/activities/work/work.py b/mobility/activities/work/work.py index 9ca5c313..7d63841c 100644 --- a/mobility/activities/work/work.py +++ b/mobility/activities/work/work.py @@ -10,7 +10,7 @@ from mobility.activities.activity import Activity, ActivityParameters from mobility.activities.work.jobs_active_population_distribution import JobsActivePopulationDistribution from mobility.runtime.parameter_profiles import ScalarParameterProfile -from mobility.validation_types import UnitIntervalFloat +from mobility.runtime.validation_types import UnitIntervalFloat class Work(Activity): diff --git a/mobility/validation_types.py b/mobility/runtime/validation_types.py similarity index 100% rename from mobility/validation_types.py rename to mobility/runtime/validation_types.py From 5a2d2f6c1efa7f06f4cb881e7c267f7c5c64a702 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 23:29:06 +0200 Subject: [PATCH 17/24] fix unit test + separate unit and integration CI steps so they can run in order --- .github/workflows/test-reusable.yml | 16 ++++++++++++++-- .../test_001_restore_saved_state.py | 7 +++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-reusable.yml b/.github/workflows/test-reusable.yml index 58ee6e8c..d3ba33c1 100644 --- a/.github/workflows/test-reusable.yml +++ b/.github/workflows/test-reusable.yml @@ -52,10 +52,22 @@ jobs: python -m flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics shell: bash -el {0} - - name: Test with pytest + - name: Test unit with pytest if: ${{ !inputs.use_min_dep_versions }} run: | - python -m pytest --cov=mobility --cov-config=.coveragerc --cov-report=xml:coverage.xml --log-cli-level=INFO --clear_inputs + python -m pytest tests/back/unit --cov=mobility --cov-config=.coveragerc --cov-append --log-cli-level=INFO --clear_inputs + shell: bash -el {0} + + - name: Test integration with pytest + if: ${{ !inputs.use_min_dep_versions }} + run: | + python -m pytest tests/back/integration --cov=mobility --cov-config=.coveragerc --cov-append --log-cli-level=INFO --clear_inputs + shell: bash -el {0} + + - name: Build coverage report + if: ${{ !inputs.use_min_dep_versions }} + run: | + python -m coverage xml -o coverage.xml shell: bash -el {0} - name: Test with pytest without coverage diff --git a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py index 006643d4..af916868 100644 --- a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py +++ b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py @@ -4,6 +4,7 @@ import polars as pl import pytest +from mobility.runtime.parameter_profiles import SimulationStep from mobility.trips.group_day_trips.core.parameters import Parameters from mobility.trips.group_day_trips.core.run import Run, RunState @@ -29,6 +30,11 @@ def __init__(self, congestion_state): self._congestion_state = congestion_state self.load_calls = [] self.get_calls = [] + self.resolve_calls = [] + + def resolve_for_step(self, step): + self.resolve_calls.append(step) + return self def load_congestion_state(self, **kwargs): self.load_calls.append(kwargs) @@ -104,6 +110,7 @@ def test_restore_saved_state_happy_path_restores_mutable_state(): "congestion_state": "congestion-state", } ] + assert run.costs_aggregator.resolve_calls == [SimulationStep(iteration=3)] def test_restore_saved_state_wraps_load_state_errors(): From e92ebfd9afb8c2da23b062922caf0337c3465232 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Mon, 30 Mar 2026 23:51:10 +0200 Subject: [PATCH 18/24] remove some monkeypatches in the unit tests + test for slow then fast GTFS when testing for GTFS changes during a simulation --- ...ips_pt_gtfs_profiles_change_iteration_2.py | 121 +++++++++++++----- tests/back/unit/domain/asset/conftest.py | 30 ----- tests/back/unit/domain/population/conftest.py | 31 ----- .../unit/domain/transport_zones/conftest.py | 31 ----- tests/back/unit/domain/trips/conftest.py | 24 ---- .../impacts/ademe_base_carbone/conftest.py | 54 -------- 6 files changed, 88 insertions(+), 203 deletions(-) diff --git a/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py b/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py index 77ab9ed9..abe57d8b 100644 --- a/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py +++ b/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py @@ -11,33 +11,35 @@ def _select_subway_endpoints(transport_zones: mobility.TransportZones) -> tuple[dict, dict]: - zones = transport_zones.get().to_crs(4326) + study_area = transport_zones.inputs["study_area"].get().to_crs(4326) center_local_admin_unit_id = transport_zones.inputs["parameters"].local_admin_unit_id - center_candidates = zones.loc[zones["local_admin_unit_id"] == center_local_admin_unit_id].copy() + center_candidates = study_area.loc[study_area["local_admin_unit_id"] == center_local_admin_unit_id].copy() if center_candidates.empty: raise ValueError("Could not find the central local admin unit in transport zones.") - center_zone = center_candidates.iloc[0] - other_zones = zones.loc[zones["transport_zone_id"] != center_zone["transport_zone_id"]].copy() - if other_zones.empty: - raise ValueError("Need at least two transport zones to build a synthetic GTFS line.") + center_lau = center_candidates.iloc[0] + other_laus = study_area.loc[study_area["local_admin_unit_id"] != center_lau["local_admin_unit_id"]].copy() + if other_laus.empty: + raise ValueError("Need at least two local admin units to build a synthetic GTFS line.") - other_zones["distance_to_center"] = other_zones.geometry.distance(center_zone.geometry) - target_zone = other_zones.sort_values("distance_to_center", ascending=False).iloc[0] + center_centroid = center_lau.geometry.centroid + other_laus["distance_to_center"] = other_laus.geometry.centroid.distance(center_centroid) + target_lau = other_laus.sort_values("distance_to_center", ascending=True).iloc[0] - return center_zone, target_zone + return center_lau, target_lau -def _build_ultra_fast_gtfs_zip( +def _build_gtfs_zip( transport_zones: mobility.TransportZones, *, output_name: str, -) -> tuple[str, int, int]: - center_zone, target_zone = _select_subway_endpoints(transport_zones) + segment_travel_time: float, +) -> tuple[str, str, str]: + center_lau, target_lau = _select_subway_endpoints(transport_zones) - center_centroid = center_zone.geometry.centroid - target_centroid = target_zone.geometry.centroid + center_centroid = center_lau.geometry.centroid + target_centroid = target_lau.geometry.centroid feed = mobility.GTFSFeedSpec( agency_id="test_subway", @@ -50,18 +52,18 @@ def _build_ultra_fast_gtfs_zip( "center": mobility.GTFSStopSpec( lon=float(center_centroid.x), lat=float(center_centroid.y), - name=f"Center {center_zone['transport_zone_id']}", + name=str(center_lau["local_admin_unit_name"]), ), "target": mobility.GTFSStopSpec( lon=float(target_centroid.x), lat=float(target_centroid.y), - name=f"Target {target_zone['transport_zone_id']}", + name=str(target_lau["local_admin_unit_name"]), ), }, lines=[ mobility.GTFSLineSpec( stop_ids=["center", "target"], - segment_travel_times=[60.0], + segment_travel_times=[segment_travel_time], start_time=6.0 * 3600.0, end_time=9.0 * 3600.0, period=300.0, @@ -73,7 +75,11 @@ def _build_ultra_fast_gtfs_zip( output_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / output_name gtfs_zip = mobility.build_gtfs_zip(feed, output_path) - return str(gtfs_zip), int(center_zone["transport_zone_id"]), int(target_zone["transport_zone_id"]) + return ( + str(gtfs_zip), + str(center_lau["local_admin_unit_id"]), + str(target_lau["local_admin_unit_id"]), + ) def _build_modes(transport_zones: mobility.TransportZones, additional_gtfs_files): @@ -104,9 +110,15 @@ def test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2(test_data): local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], ) - gtfs_zip, center_zone_id, target_zone_id = _build_ultra_fast_gtfs_zip( + slow_gtfs_zip, center_lau_id, target_lau_id = _build_gtfs_zip( + transport_zones, + output_name="test-slow-subway-line.zip", + segment_travel_time=900.0, + ) + fast_gtfs_zip, _, _ = _build_gtfs_zip( transport_zones, output_name="test-fast-subway-line.zip", + segment_travel_time=60.0, ) emp = EMPMobilitySurvey() @@ -129,7 +141,15 @@ def test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2(test_data): static = GroupDayTrips( population=pop, - modes=_build_modes(transport_zones, additional_gtfs_files=[]), + modes=_build_modes( + transport_zones, + additional_gtfs_files=mobility.ListParameterProfile( + points={ + 1: [slow_gtfs_zip], + 2: [slow_gtfs_zip], + } + ), + ), activities=[ Home(), Work(value_of_time=5.0), @@ -145,8 +165,8 @@ def test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2(test_data): transport_zones, additional_gtfs_files=mobility.ListParameterProfile( points={ - 1: [], - 2: [gtfs_zip], + 1: [slow_gtfs_zip], + 2: [fast_gtfs_zip], } ), ), @@ -165,16 +185,51 @@ def test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2(test_data): static_costs = static_result["weekday_costs"].collect() dynamic_costs = dynamic_result["weekday_costs"].collect() dynamic_transitions = dynamic_result["weekday_transitions"].collect() + zones = pl.from_pandas( + transport_zones.get()[["transport_zone_id", "local_admin_unit_id"]] + ).with_columns( + transport_zone_id=pl.col("transport_zone_id").cast(pl.Int32), + local_admin_unit_id=pl.col("local_admin_unit_id").cast(pl.String), + ) pt_mode_name = "walk/public_transport/walk" - od_filter = ( - (pl.col("from") == center_zone_id) - & (pl.col("to") == target_zone_id) - & (pl.col("mode") == pt_mode_name) - ) + def aggregate_lau_pair(costs: pl.DataFrame) -> pl.DataFrame: + return ( + costs.filter(pl.col("mode") == pt_mode_name) + .join( + zones.rename( + { + "transport_zone_id": "from", + "local_admin_unit_id": "from_local_admin_unit_id", + } + ), + on="from", + how="left", + ) + .join( + zones.rename( + { + "transport_zone_id": "to", + "local_admin_unit_id": "to_local_admin_unit_id", + } + ), + on="to", + how="left", + ) + .filter( + (pl.col("from_local_admin_unit_id") == center_lau_id) + & (pl.col("to_local_admin_unit_id") == target_lau_id) + ) + .group_by(["from_local_admin_unit_id", "to_local_admin_unit_id"]) + .agg( + min_cost=pl.col("cost").min(), + min_time=pl.col("time").min(), + pair_count=pl.len(), + ) + ) - static_od = static_costs.filter(od_filter) - dynamic_od = dynamic_costs.filter(od_filter) + static_od = aggregate_lau_pair(static_costs) + dynamic_od = aggregate_lau_pair(dynamic_costs) assert static_costs.height > 0 assert dynamic_costs.height > 0 @@ -182,10 +237,10 @@ def test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2(test_data): assert static_od.height == 1 assert dynamic_od.height == 1 - static_cost = static_od["cost"].item() - dynamic_cost = dynamic_od["cost"].item() - static_time = static_od["time"].item() - dynamic_time = dynamic_od["time"].item() + static_cost = static_od["min_cost"].item() + dynamic_cost = dynamic_od["min_cost"].item() + static_time = static_od["min_time"].item() + dynamic_time = dynamic_od["min_time"].item() assert dynamic_cost < static_cost assert dynamic_time < static_time diff --git a/tests/back/unit/domain/asset/conftest.py b/tests/back/unit/domain/asset/conftest.py index bd86627e..cac283d5 100644 --- a/tests/back/unit/domain/asset/conftest.py +++ b/tests/back/unit/domain/asset/conftest.py @@ -45,36 +45,6 @@ def stop(self): return None pass -# ---------------------------------------------------------------------- -# Patch NumPy private _methods to ignore the _NoValue sentinel (pandas interop) -# ---------------------------------------------------------------------- -@pytest.fixture(autouse=True) -def patch_numpy__methods(monkeypatch): - try: - from numpy.core import _methods as _np_methods - from numpy import _NoValue as _NP_NoValue - except Exception: - return - - def _wrap(func): - def _wrapped(a, axis=None, dtype=None, out=None, - keepdims=_NP_NoValue, initial=_NP_NoValue, where=_NP_NoValue): - if keepdims is _NP_NoValue: - keepdims = False - if initial is _NP_NoValue: - initial = None - if where is _NP_NoValue: - where = True - return func(a, axis=axis, dtype=dtype, out=out, - keepdims=keepdims, initial=initial, where=where) - return _wrapped - - if hasattr(_np_methods, "_sum"): - monkeypatch.setattr(_np_methods, "_sum", _wrap(_np_methods._sum), raising=True) - if hasattr(_np_methods, "_amax"): - monkeypatch.setattr(_np_methods, "_amax", _wrap(_np_methods._amax), raising=True) - - # --------------------------------------------------------- # Parquet stubs helper (for future cache read/write tests) # --------------------------------------------------------- diff --git a/tests/back/unit/domain/population/conftest.py b/tests/back/unit/domain/population/conftest.py index 43a16610..05ac99a1 100644 --- a/tests/back/unit/domain/population/conftest.py +++ b/tests/back/unit/domain/population/conftest.py @@ -157,37 +157,6 @@ def update(self, *a, **k): return None pass -@pytest.fixture(autouse=True) -def patch_numpy__methods(monkeypatch): - """ - Wrap NumPy private _methods._sum/_amax to ignore np._NoValue sentinel. - Prevents pandas/NumPy _NoValueType crash paths. - """ - try: - from numpy import _methods as numpy_private_methods - numpy_no_value = getattr(np, "_NoValue", None) - except Exception: - numpy_private_methods = None - numpy_no_value = None - - def _clean(kwargs: dict): - cleaned = dict(kwargs) - for key in ("initial", "where", "dtype", "out", "keepdims"): - if cleaned.get(key, None) is numpy_no_value: - cleaned.pop(key, None) - return cleaned - - if numpy_private_methods is not None and hasattr(numpy_private_methods, "_sum"): - def safe_sum(a, axis=None, dtype=None, out=None, keepdims=False, initial=np._NoValue, where=np._NoValue): - return np.sum(**_clean(locals())) - monkeypatch.setattr(numpy_private_methods, "_sum", safe_sum, raising=True) - - if numpy_private_methods is not None and hasattr(numpy_private_methods, "_amax"): - def safe_amax(a, axis=None, out=None, keepdims=False, initial=np._NoValue, where=np._NoValue): - return np.amax(**_clean(locals())) - monkeypatch.setattr(numpy_private_methods, "_amax", safe_amax, raising=True) - - @pytest.fixture def parquet_stubs(monkeypatch): """ diff --git a/tests/back/unit/domain/transport_zones/conftest.py b/tests/back/unit/domain/transport_zones/conftest.py index ecc5eb3a..040ecc53 100644 --- a/tests/back/unit/domain/transport_zones/conftest.py +++ b/tests/back/unit/domain/transport_zones/conftest.py @@ -127,37 +127,6 @@ def track(self, sequence, *args, **kwargs): monkeypatch.setattr("rich.progress.Progress", _NoOpProgress, raising=True) -@pytest.fixture(autouse=True) -def patch_numpy__methods(monkeypatch): - """ - Wrap numpy.core._methods._sum and _amax to ignore numpy._NoValue sentinels. - This prevents pandas/NumPy _NoValueType crashes in some environments. - """ - try: - import numpy.core._methods as _np_methods # type: ignore - except Exception: - return - - _NoValue = getattr(np, "_NoValue", object()) - - def _clean_args_and_call(func, *args, **kwargs): - cleaned_args = tuple(None if a is _NoValue else a for a in args) - cleaned_kwargs = {k: v for k, v in kwargs.items() if v is not _NoValue} - return func(*cleaned_args, **cleaned_kwargs) - - if hasattr(_np_methods, "_sum"): - original_sum = _np_methods._sum - def wrapped_sum(*args, **kwargs): - return _clean_args_and_call(original_sum, *args, **kwargs) - monkeypatch.setattr(_np_methods, "_sum", wrapped_sum, raising=True) - - if hasattr(_np_methods, "_amax"): - original_amax = _np_methods._amax - def wrapped_amax(*args, **kwargs): - return _clean_args_and_call(original_amax, *args, **kwargs) - monkeypatch.setattr(_np_methods, "_amax", wrapped_amax, raising=True) - - # ----------------------------------- # Parquet stubs (available if needed) # ----------------------------------- diff --git a/tests/back/unit/domain/trips/conftest.py b/tests/back/unit/domain/trips/conftest.py index ddbc4a9e..352e432c 100644 --- a/tests/back/unit/domain/trips/conftest.py +++ b/tests/back/unit/domain/trips/conftest.py @@ -149,30 +149,6 @@ def update(self, *args, **kwargs): monkeypatch.setattr("rich.progress.Progress", NoOpProgress, raising=True) -# ----------------------------------------------------------------------- -# Autouse: Wrap NumPy private _methods to ignore np._NoValue sentinels -# ----------------------------------------------------------------------- - -@pytest.fixture(autouse=True) -def patch_numpy__methods(monkeypatch): - """ - Wrap NumPy’s private _methods._sum and _amax to strip np._NoValue sentinels - from kwargs that Pandas sometimes forwards (prevents ValueErrors). - """ - from numpy.core import _methods as numpy_private_methods - - def wrap_ignore_no_value(original_function): - def inner(array, *args, **kwargs): - cleaned_kwargs = {k: v for k, v in kwargs.items() if not (v is getattr(np, "_NoValue", None))} - return original_function(array, *args, **cleaned_kwargs) - return inner - - if hasattr(numpy_private_methods, "_sum"): - monkeypatch.setattr(numpy_private_methods, "_sum", wrap_ignore_no_value(numpy_private_methods._sum), raising=True) - if hasattr(numpy_private_methods, "_amax"): - monkeypatch.setattr(numpy_private_methods, "_amax", wrap_ignore_no_value(numpy_private_methods._amax), raising=True) - - # --------------------------------------------------------- # Deterministic shortuuid for stable trip_id generation # --------------------------------------------------------- diff --git a/tests/back/unit/impacts/ademe_base_carbone/conftest.py b/tests/back/unit/impacts/ademe_base_carbone/conftest.py index fb9326bc..f4a4b62c 100644 --- a/tests/back/unit/impacts/ademe_base_carbone/conftest.py +++ b/tests/back/unit/impacts/ademe_base_carbone/conftest.py @@ -154,60 +154,6 @@ def stop(self): pass -@pytest.fixture(autouse=True) -def patch_numpy__methods(monkeypatch: pytest.MonkeyPatch): - """ - Wrap NumPy’s private _methods._sum and _amax to ignore the _NoValue sentinel. - This prevents pandas/NumPy _NoValueType crashes in some environments. - """ - try: - from numpy.core import _methods as _np_methods # type: ignore - import numpy as _np # noqa - - sentinel_candidates: List[Any] = [] - for attr_name in ("_NoValue", "NoValue", "noValue"): - if hasattr(_np, attr_name): - sentinel_candidates.append(getattr(_np, attr_name)) - if hasattr(_np_methods, "_NoValue"): - sentinel_candidates.append(getattr(_np_methods, "_NoValue")) - _SENTINELS = tuple({id(x): x for x in sentinel_candidates}.values()) - - def _strip_no_value_from_kwargs(kwargs: Dict[str, Any]) -> Dict[str, Any]: - clean = {} - for key, val in kwargs.items(): - if val in _SENTINELS: - # Behave like kwargs not provided at all - continue - clean[key] = val - return clean - - if hasattr(_np_methods, "_sum"): - _orig_sum = _np_methods._sum - - def _wrapped_sum(a, axis=None, dtype=None, out=None, keepdims=False, initial=None, where=True): - kwargs = _strip_no_value_from_kwargs( - dict(axis=axis, dtype=dtype, out=out, keepdims=keepdims, initial=initial, where=where) - ) - return _orig_sum(a, **kwargs) - - monkeypatch.setattr(_np_methods, "_sum", _wrapped_sum, raising=True) - - if hasattr(_np_methods, "_amax"): - _orig_amax = _np_methods._amax - - def _wrapped_amax(a, axis=None, out=None, keepdims=False, initial=None, where=True): - kwargs = _strip_no_value_from_kwargs( - dict(axis=axis, out=out, keepdims=keepdims, initial=initial, where=where) - ) - return _orig_amax(a, **kwargs) - - monkeypatch.setattr(_np_methods, "_amax", _wrapped_amax, raising=True) - - except Exception: - # If private API shape differs in the environment, avoid failing tests. - pass - - @pytest.fixture def parquet_stubs(monkeypatch: pytest.MonkeyPatch): """ From 48cca990f654f559c72fde1b4ddeff2ce87955f4 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Wed, 18 Mar 2026 14:45:32 +0100 Subject: [PATCH 19/24] add optional logic to constrain which states transitions are allowed between two iterations --- mobility/__init__.py | 2 +- mobility/trips/group_day_trips/__init__.py | 4 +- .../trips/group_day_trips/core/parameters.py | 124 +++++++- mobility/trips/group_day_trips/core/run.py | 2 + .../group_day_trips/iterations/iterations.py | 4 + .../plans/destination_sequences.py | 71 +++-- .../group_day_trips/plans/plan_updater.py | 37 ++- .../population_trips_candidates.py | 268 +++++++++++++++++ ..._behavior_change_phases_can_be_computed.py | 118 ++++++++ .../test_001_transition_scopes.py | 275 ++++++++++++++++++ 10 files changed, 878 insertions(+), 27 deletions(-) create mode 100644 mobility/trips/group_day_trips/population_trips_candidates.py create mode 100644 tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py create mode 100644 tests/back/unit/choice_models/test_001_transition_scopes.py diff --git a/mobility/__init__.py b/mobility/__init__.py index cc83b073..14ccbc56 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -27,7 +27,7 @@ from .impacts import carbon_computation from .trips.individual_year_trips import IndividualYearTrips -from .trips.group_day_trips import GroupDayTrips +from .trips.group_day_trips import BehaviorChangePhase, BehaviorChangeScope, GroupDayTrips from .transport.modes.bicycle import Bicycle, BicycleMode, BicycleParameters from .transport.modes.car import Car, CarMode, CarParameters diff --git a/mobility/trips/group_day_trips/__init__.py b/mobility/trips/group_day_trips/__init__.py index da0ab775..54379588 100644 --- a/mobility/trips/group_day_trips/__init__.py +++ b/mobility/trips/group_day_trips/__init__.py @@ -1,8 +1,10 @@ -from .core.parameters import Parameters +from .core.parameters import BehaviorChangePhase, BehaviorChangeScope, Parameters from .core.group_day_trips import GroupDayTrips from .core.results import RunResults __all__ = [ + "BehaviorChangePhase", + "BehaviorChangeScope", "GroupDayTrips", "Parameters", "RunResults", diff --git a/mobility/trips/group_day_trips/core/parameters.py b/mobility/trips/group_day_trips/core/parameters.py index e06ae3bb..78a9253d 100644 --- a/mobility/trips/group_day_trips/core/parameters.py +++ b/mobility/trips/group_day_trips/core/parameters.py @@ -1,6 +1,64 @@ -from pydantic import BaseModel, Field, ConfigDict +from enum import Enum from typing import Annotated +from pydantic import BaseModel, ConfigDict, Field, model_validator + + +class BehaviorChangeScope(str, Enum): + """Highest adaptation layer allowed during one behavior-change phase. + + Attributes: + FULL_REPLANNING: Resample motive sequences, then dependent destination + and mode sequences. Stay-home transitions remain available. + DESTINATION_REPLANNING: Keep each currently occupied non-stay-home + motive sequence fixed and resample destination sequences plus + dependent mode sequences. Stay-home is frozen. + MODE_REPLANNING: Keep each currently occupied non-stay-home motive and + destination sequence fixed and resample mode sequences only. + Stay-home is frozen. + """ + + FULL_REPLANNING = "full_replanning" + DESTINATION_REPLANNING = "destination_replanning" + MODE_REPLANNING = "mode_replanning" + + +class BehaviorChangePhase(BaseModel): + """Behavior-change phase applied from ``start_iteration`` onward. + + Attributes: + start_iteration: First simulation iteration where this phase applies. + scope: Highest adaptation layer allowed during the phase. + """ + + model_config = ConfigDict(extra="forbid") + + start_iteration: Annotated[ + int, + Field( + ge=1, + title="Start iteration", + description="First simulation iteration where this behavior-change phase applies.", + ), + ] + + scope: Annotated[ + BehaviorChangeScope, + Field( + title="Behavior change scope", + description=( + "Highest adaptation layer allowed during the phase. " + "`full_replanning` resamples motive, destination, and mode " + "sequences. `destination_replanning` keeps each currently " + "occupied non-stay-home motive sequence fixed and resamples " + "destination plus mode sequences. `mode_replanning` keeps each " + "currently occupied non-stay-home motive and destination " + "sequence fixed and resamples mode sequences only. " + "Stay-home is frozen in restricted phases." + ), + ), + ] + class Parameters(BaseModel): @@ -146,3 +204,67 @@ class Parameters(BaseModel): description="Wether to simulate a weekend day or only a week day.", ), ] + + behavior_change_phases: Annotated[ + list[BehaviorChangePhase] | None, + Field( + default=None, + title="Behavior change phases", + description=( + "Optional per-iteration adaptation policy. Each phase starts at a " + "given iteration and selects the highest state layer that may " + "adapt: `mode_replanning`, `destination_replanning`, or " + "`full_replanning`. Restricted phases apply to currently " + "occupied non-stay-home states and freeze stay-home. If omitted, " + "all iterations use `full_replanning`." + ), + ), + ] + + @model_validator(mode="after") + def validate_behavior_change_phases(self) -> "Parameters": + """Ensure phase definitions are sorted and non-overlapping. + + Returns: + The validated parameter object. + + Raises: + ValueError: If behavior-change phases are not sorted by + ``start_iteration`` or if two phases start on the same + iteration. + """ + if self.behavior_change_phases is None: + return self + + start_iterations = [phase.start_iteration for phase in self.behavior_change_phases] + if start_iterations != sorted(start_iterations): + raise ValueError("Parameters.behavior_change_phases must be sorted by start_iteration.") + + if len(start_iterations) != len(set(start_iterations)): + raise ValueError("Parameters.behavior_change_phases cannot define the same start_iteration twice.") + + return self + + def get_behavior_change_scope(self, iteration: int) -> BehaviorChangeScope: + """Return the active behavior-change scope for a given iteration. + + Args: + iteration: Current simulation iteration (1-based). + + Returns: + The active behavior-change scope. If no phase applies yet, returns + ``BehaviorChangeScope.FULL_REPLANNING``. + """ + if self.behavior_change_phases is None: + return BehaviorChangeScope.FULL_REPLANNING + + active_phase = None + for phase in self.behavior_change_phases: + if phase.start_iteration > iteration: + break + active_phase = phase + + if active_phase is None: + return BehaviorChangeScope.FULL_REPLANNING + + return active_phase.scope diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 878dd9b3..5a17f35a 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -287,6 +287,8 @@ def _sample_and_write_destination_sequences( activities=self.activities, resolved_activity_parameters=resolved_activity_parameters, transport_zones=self.population.transport_zones, + current_plans=state.current_plans, + current_plan_steps=state.current_plan_steps, remaining_opportunities=state.remaining_opportunities, chains=state.chains_by_activity, demand_groups=state.demand_groups, diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py index cd915df1..423e8e31 100644 --- a/mobility/trips/group_day_trips/iterations/iterations.py +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -42,6 +42,8 @@ def destination_sequences( activities: list[Any] | None = None, resolved_activity_parameters: dict[str, Any] | None = None, transport_zones: Any = None, + current_plans: pl.DataFrame | None = None, + current_plan_steps: pl.DataFrame | None = None, remaining_opportunities: pl.DataFrame | None = None, chains: pl.DataFrame | None = None, demand_groups: pl.DataFrame | None = None, @@ -58,6 +60,8 @@ def destination_sequences( activities=activities, resolved_activity_parameters=resolved_activity_parameters, transport_zones=transport_zones, + current_plans=current_plans, + current_plan_steps=current_plan_steps, remaining_opportunities=remaining_opportunities, chains=chains, demand_groups=demand_groups, diff --git a/mobility/trips/group_day_trips/plans/destination_sequences.py b/mobility/trips/group_day_trips/plans/destination_sequences.py index fa616af5..74a31652 100644 --- a/mobility/trips/group_day_trips/plans/destination_sequences.py +++ b/mobility/trips/group_day_trips/plans/destination_sequences.py @@ -22,6 +22,8 @@ def __init__( activities: list[Any] | None = None, resolved_activity_parameters: dict[str, Any] | None = None, transport_zones: Any = None, + current_plans: pl.DataFrame | None = None, + current_plan_steps: pl.DataFrame | None = None, remaining_opportunities: pl.DataFrame | None = None, chains: pl.DataFrame | None = None, demand_groups: pl.DataFrame | None = None, @@ -33,6 +35,8 @@ def __init__( self.activities = activities self.resolved_activity_parameters = resolved_activity_parameters self.transport_zones = transport_zones + self.current_plans = current_plans + self.current_plan_steps = current_plan_steps self.remaining_opportunities = remaining_opportunities self.chains = chains self.demand_groups = demand_groups @@ -77,34 +81,70 @@ def create_and_get_asset(self) -> pl.DataFrame: raise ValueError("Cannot build destination sequences without a seed.") if self.resolved_activity_parameters is None: raise ValueError("Cannot build destination sequences without resolved activity parameters.") + if self.current_plans is None: + raise ValueError("Cannot build destination sequences without current plans.") + from mobility.trips.group_day_trips.population_trips_candidates import get_spatialized_chains + + destination_sequences = get_spatialized_chains( + behavior_change_scope=self.parameters.get_behavior_change_scope(self.iteration), + current_plans=self.current_plans, + current_plan_steps=self.current_plan_steps, + destination_sequence_sampler=self, + activities=self.activities, + transport_zones=self.transport_zones, + remaining_opportunities=self.remaining_opportunities, + iteration=self.iteration, + chains_by_activity=self.chains, + demand_groups=self.demand_groups, + costs=self.costs, + parameters=self.parameters, + seed=self.seed, + ) + + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + destination_sequences.write_parquet(self.cache_path) + return self.get_cached_asset() + + def run( + self, + activities: list[Any], + transport_zones: Any, + remaining_opportunities: pl.DataFrame, + chains: pl.DataFrame, + demand_groups: pl.DataFrame, + costs: pl.DataFrame, + parameters: Any, + seed: int, + ) -> pl.DataFrame: + """Compute destination sequences for one iteration.""" utilities = self._get_utilities( - self.activities, + activities, self.resolved_activity_parameters, - self.transport_zones, - self.remaining_opportunities, - self.costs, - self.parameters.cost_uncertainty_sd, + transport_zones, + remaining_opportunities, + costs, + parameters.cost_uncertainty_sd, ) destination_probability = self._get_destination_probability( utilities, - self.activities, + activities, self.resolved_activity_parameters, - self.parameters.dest_prob_cutoff, + parameters.dest_prob_cutoff, ) chains = ( - self.chains + chains .filter(pl.col("activity_seq_id") != 0) - .join(self.demand_groups.select(["demand_group_id", "home_zone_id"]), on="demand_group_id") + .join(demand_groups.select(["demand_group_id", "home_zone_id"]), on="demand_group_id") .select(["demand_group_id", "home_zone_id", "activity_seq_id", "activity", "is_anchor", "seq_step_index"]) ) - chains = self._spatialize_anchor_activities(chains, destination_probability, self.seed) + chains = self._spatialize_anchor_activities(chains, destination_probability, seed) chains = self._spatialize_other_activities( chains, destination_probability, - self.costs, - self.parameters.alpha, - self.seed, + costs, + parameters.alpha, + seed, ) destination_sequences = ( @@ -129,10 +169,7 @@ def create_and_get_asset(self) -> pl.DataFrame: .drop(["home_zone_id", "activity"]) .with_columns(iteration=pl.lit(self.iteration).cast(pl.UInt32)) ) - - self.cache_path.parent.mkdir(parents=True, exist_ok=True) - destination_sequences.write_parquet(self.cache_path) - return self.get_cached_asset() + return destination_sequences def _get_utilities( diff --git a/mobility/trips/group_day_trips/plans/plan_updater.py b/mobility/trips/group_day_trips/plans/plan_updater.py index 0dabe763..7430762b 100644 --- a/mobility/trips/group_day_trips/plans/plan_updater.py +++ b/mobility/trips/group_day_trips/plans/plan_updater.py @@ -4,6 +4,7 @@ import polars as pl +from mobility.trips.group_day_trips.core.parameters import BehaviorChangeScope from .destination_sequences import DestinationSequences from .mode_sequences import ModeSequences from ..transitions.transition_schema import TRANSITION_EVENT_COLUMNS @@ -61,7 +62,11 @@ def get_new_plans( parameters.min_activity_time_constant, ) - transition_prob = self.get_transition_probabilities(current_plans, possible_plan_utility) + transition_prob = self.get_transition_probabilities( + current_plans, + possible_plan_utility, + parameters.get_behavior_change_scope(iteration), + ) current_plans, transition_events = self.apply_transitions( current_plans, transition_prob, @@ -161,7 +166,6 @@ def get_possible_plan_steps( "mode", "duration_per_pers", "iteration", - "anchor_to", "csp", "cost", "distance", @@ -230,7 +234,6 @@ def get_possible_plan_steps( .with_columns( duration_per_pers=pl.col("duration") / pl.col("n_persons"), iteration=pl.lit(iteration).cast(pl.UInt32), - anchor_to=pl.col("to"), ) .join(demand_groups.select(["demand_group_id", "csp"]).lazy(), on="demand_group_id") .join(cost_by_od_and_modes.lazy(), on=["from", "to", "mode"]) @@ -331,21 +334,41 @@ def get_transition_probabilities( self, current_plans: pl.DataFrame, possible_plan_utility: pl.LazyFrame, + behavior_change_scope: BehaviorChangeScope, transition_cost: float = 0.0, ) -> pl.DataFrame: """Compute transition probabilities from current to candidate plans.""" plan_cols = ["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"] + current_plans_for_transitions = current_plans.lazy() + possible_plan_utility_for_transitions = possible_plan_utility + + if behavior_change_scope != BehaviorChangeScope.FULL_REPLANNING: + current_plans_for_transitions = current_plans_for_transitions.filter(pl.col("mode_seq_id") != 0) + possible_plan_utility_for_transitions = possible_plan_utility_for_transitions.filter( + pl.col("mode_seq_id") != 0 + ) + + scope_pair_constraint = pl.lit(True) + if behavior_change_scope == BehaviorChangeScope.DESTINATION_REPLANNING: + scope_pair_constraint = pl.col("activity_seq_id") == pl.col("activity_seq_id_trans") + elif behavior_change_scope == BehaviorChangeScope.MODE_REPLANNING: + scope_pair_constraint = ( + (pl.col("activity_seq_id") == pl.col("activity_seq_id_trans")) + & (pl.col("dest_seq_id") == pl.col("dest_seq_id_trans")) + ) + transition_probabilities = ( - current_plans.lazy() + current_plans_for_transitions .select(plan_cols + ["utility"]) .rename({"utility": "utility_prev_from"}) - .join(possible_plan_utility, on=plan_cols) + .join(possible_plan_utility_for_transitions, on=plan_cols) .join_where( - possible_plan_utility, + possible_plan_utility_for_transitions, ( (pl.col("demand_group_id") == pl.col("demand_group_id_trans")) + & scope_pair_constraint & ( (pl.col("utility_trans") > pl.col("utility") - 5.0) | ( @@ -518,7 +541,7 @@ def add_transition_plan_details( activity_time=pl.col("duration_per_pers").fill_null(0.0).sum(), travel_time=pl.col("time").fill_null(0.0).sum(), distance=pl.col("distance").fill_null(0.0).sum(), - steps=pl.col("step_desc").sort_by("seq_step_index").str.concat("
"), + steps=pl.col("step_desc").sort_by("seq_step_index").str.join("
"), ) .collect(engine="streaming") ) diff --git a/mobility/trips/group_day_trips/population_trips_candidates.py b/mobility/trips/group_day_trips/population_trips_candidates.py new file mode 100644 index 00000000..08a087a1 --- /dev/null +++ b/mobility/trips/group_day_trips/population_trips_candidates.py @@ -0,0 +1,268 @@ +import polars as pl + +from mobility.trips.group_day_trips.core.parameters import ( + BehaviorChangeScope, + Parameters, +) + + +def get_spatialized_chains( + behavior_change_scope: BehaviorChangeScope, + current_plans: pl.DataFrame, + current_plan_steps: pl.DataFrame | None, + destination_sequence_sampler, + activities, + transport_zones, + remaining_opportunities: pl.DataFrame, + iteration: int, + chains_by_activity: pl.DataFrame, + demand_groups: pl.DataFrame, + costs: pl.DataFrame, + parameters: Parameters, + seed: int, + ) -> pl.DataFrame: + """Get spatialized chains for the current simulation step. + + Args: + behavior_change_scope: Active behavior-change scope for the step. + current_plans: Aggregate plans occupied before the step update. + current_plan_steps: Per-step rows for the currently occupied plans. + destination_sequence_sampler: Sampler used when destination resampling + is allowed. + activities: Available activities for the simulation. + transport_zones: Transport zones used to spatialize destinations. + remaining_opportunities: Remaining destination capacities. + iteration: Current simulation iteration number. + chains_by_activity: Full chain templates indexed by activity sequence. + demand_groups: Demand-group metadata used during spatialization. + costs: Current OD costs used by destination sampling. + parameters: PopulationTrips parameters. + seed: RNG seed used for destination sampling. + + Returns: + Spatialized chains to use for the current step. + """ + if behavior_change_scope == BehaviorChangeScope.FULL_REPLANNING: + chains_to_sample = chains_by_activity + elif behavior_change_scope == BehaviorChangeScope.DESTINATION_REPLANNING: + chains_to_sample = get_active_activity_chains( + chains_by_activity=chains_by_activity, + current_plans=current_plans, + ) + elif behavior_change_scope == BehaviorChangeScope.MODE_REPLANNING: + return get_active_destination_sequences( + current_plans=current_plans, + current_plan_steps=current_plan_steps, + iteration=iteration, + ) + else: + raise ValueError(f"Unsupported behavior change scope: {behavior_change_scope}") + + if chains_to_sample.height == 0: + if get_active_non_stay_home_plans(current_plans).height > 0: + raise ValueError( + "No chains available for active non-stay-home states at " + f"iteration={iteration} with behavior_change_scope={behavior_change_scope.value}." + ) + return empty_spatialized_chains() + + return destination_sequence_sampler.run( + activities, + transport_zones, + remaining_opportunities, + chains_to_sample, + demand_groups, + costs, + parameters, + seed, + ) + + +def get_mode_sequences( + spatialized_chains: pl.DataFrame, + top_k_mode_sequence_search, + iteration: int, + costs_aggregator, + tmp_folders: dict[str, object], + parameters: Parameters, + ) -> pl.DataFrame: + """Get mode sequences for the current simulation step. + + Args: + spatialized_chains: Spatialized chains selected for the current step. + top_k_mode_sequence_search: Searcher that computes top-k mode + sequences for each spatialized chain. + iteration: Current simulation iteration number. + costs_aggregator: Provides OD costs by transport mode. + tmp_folders: Temporary folders for intermediate iteration artifacts. + parameters: GroupDayTrips parameters. + + Returns: + Mode sequences to use for the current step. + """ + if spatialized_chains.height == 0: + return empty_mode_sequences() + + return top_k_mode_sequence_search.run( + iteration, + costs_aggregator, + tmp_folders, + parameters, + ) + + +def get_active_activity_chains( + chains_by_activity: pl.DataFrame, + current_plans: pl.DataFrame, + ) -> pl.DataFrame: + """Keep chain templates for activity sequences currently selected. + + Args: + chains_by_activity: Full chain-template table. + current_plans: Aggregate plans occupied before the step update. + + Returns: + Chain templates restricted to active non-stay-home activity sequences. + """ + active_activity_sequences = get_active_non_stay_home_plans(current_plans).select( + ["demand_group_id", "activity_seq_id"] + ).unique() + + if active_activity_sequences.height == 0: + return chains_by_activity.head(0) + + active_activity_sequences = active_activity_sequences.with_columns( + demand_group_id=pl.col("demand_group_id").cast(chains_by_activity.schema["demand_group_id"]), + activity_seq_id=pl.col("activity_seq_id").cast(chains_by_activity.schema["activity_seq_id"]), + ) + + return chains_by_activity.join( + active_activity_sequences, + on=["demand_group_id", "activity_seq_id"], + how="inner", + ) + + +def get_active_destination_sequences( + current_plans: pl.DataFrame, + current_plan_steps: pl.DataFrame | None, + iteration: int, + ) -> pl.DataFrame: + """Reuse active destination sequences and tag them for a new iteration. + + Args: + current_plans: Aggregate plans occupied before the step update. + current_plan_steps: Per-step rows for the currently occupied plans. + iteration: Current simulation iteration number. + + Returns: + Destination sequences matching the active non-stay-home destination + sequences, restamped with the current iteration. + """ + active_dest_sequences = get_active_non_stay_home_plans(current_plans).select( + ["demand_group_id", "activity_seq_id", "dest_seq_id"] + ).unique() + + if active_dest_sequences.height == 0: + return empty_spatialized_chains() + + if current_plan_steps is None: + raise ValueError( + "No current plan steps available for active non-stay-home " + f"states at iteration={iteration}." + ) + + active_dest_sequences = active_dest_sequences.with_columns( + demand_group_id=pl.col("demand_group_id").cast(pl.UInt32), + activity_seq_id=pl.col("activity_seq_id").cast(pl.UInt32), + dest_seq_id=pl.col("dest_seq_id").cast(pl.UInt32), + ) + + reused = ( + current_plan_steps.lazy() + .join( + active_dest_sequences.lazy(), + on=["demand_group_id", "activity_seq_id", "dest_seq_id"], + how="inner", + ) + .with_columns(iteration=pl.lit(iteration).cast(pl.UInt32())) + .select( + [ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "seq_step_index", + "from", + "to", + "iteration", + ] + ) + .unique( + subset=["demand_group_id", "activity_seq_id", "dest_seq_id", "seq_step_index"], + keep="first", + ) + .collect(engine="streaming") + ) + + if reused.height == 0: + raise ValueError( + "Active non-stay-home states could not be matched to reusable " + f"destination chains at iteration={iteration}." + ) + + return reused + + +def get_active_non_stay_home_plans(current_plans: pl.DataFrame) -> pl.DataFrame: + """Get active non-stay-home plans from the current aggregate plan table. + + Args: + current_plans: Aggregate plans occupied before the step update. + + Returns: + Distinct active non-stay-home plan keys. + """ + return ( + current_plans + .filter(pl.col("activity_seq_id") != 0) + .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"]) + .unique() + ) + + +def empty_spatialized_chains() -> pl.DataFrame: + """Create an empty spatialized-chains table with the expected schema. + + Returns: + Empty spatialized chains. + """ + return pl.DataFrame( + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "from": pl.Int32, + "to": pl.Int32, + "iteration": pl.UInt32, + } + ) + + +def empty_mode_sequences() -> pl.DataFrame: + """Create an empty mode-sequences table with the expected schema. + + Returns: + Empty mode sequences. + """ + return pl.DataFrame( + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "mode": pl.Utf8, + "iteration": pl.UInt32, + } + ) diff --git a/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py b/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py new file mode 100644 index 00000000..994612d2 --- /dev/null +++ b/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py @@ -0,0 +1,118 @@ +import polars as pl +import pytest + +import mobility +from mobility.activities import Home, Other, Work +from mobility.surveys.france import EMPMobilitySurvey +from mobility.trips.group_day_trips import BehaviorChangePhase, BehaviorChangeScope, GroupDayTrips, Parameters + + +@pytest.mark.dependency( + depends=[ + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed" + ], + scope="session", +) +def test_011_population_trips_behavior_change_phases_can_be_computed(test_data): + transport_zones = mobility.TransportZones( + local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], + radius=test_data["transport_zones_radius"], + ) + emp = EMPMobilitySurvey() + + pop = mobility.Population( + transport_zones, + sample_size=test_data["population_sample_size"], + ) + + car_mode = mobility.Car(transport_zones) + walk_mode = mobility.Walk(transport_zones) + + pop_trips = GroupDayTrips( + population=pop, + modes=[car_mode, walk_mode], + activities=[Home(), Work(), Other(population=pop)], + surveys=[emp], + parameters=Parameters( + n_iterations=3, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=3, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + seed=0, + behavior_change_phases=[ + BehaviorChangePhase(start_iteration=1, scope=BehaviorChangeScope.FULL_REPLANNING), + BehaviorChangePhase(start_iteration=2, scope=BehaviorChangeScope.MODE_REPLANNING), + BehaviorChangePhase(start_iteration=3, scope=BehaviorChangeScope.DESTINATION_REPLANNING), + ], + ), + ) + + pop_trips.remove() + result = pop_trips.get() + weekday_plan_steps = result["weekday_plan_steps"].collect() + weekday_transitions = result["weekday_transitions"].collect() + cache_parent = pop_trips.weekday_run.cache_path["plan_steps"].parent + inputs_hash = pop_trips.weekday_run.inputs_hash + destination_sequences_dir = cache_parent / f"{inputs_hash}-destination-sequences" + destination_sequences_1 = pl.read_parquet(next(destination_sequences_dir.glob("*destination_sequences_1.parquet"))) + destination_sequences_2 = pl.read_parquet(next(destination_sequences_dir.glob("*destination_sequences_2.parquet"))) + destination_sequences_3 = pl.read_parquet(next(destination_sequences_dir.glob("*destination_sequences_3.parquet"))) + + assert weekday_plan_steps.height > 0 + assert weekday_transitions.height > 0 + assert weekday_transitions["iteration"].unique().sort().to_list() == [1, 2, 3] + assert destination_sequences_1.height > 0 + assert destination_sequences_2.height > 0 + assert destination_sequences_3.height > 0 + + bad_mode = weekday_transitions.filter( + (pl.col("iteration") == 2) + & ( + (pl.col("activity_seq_id") != pl.col("activity_seq_id_trans")) + | (pl.col("dest_seq_id") != pl.col("dest_seq_id_trans")) + ) + ) + bad_destination = weekday_transitions.filter( + (pl.col("iteration") == 3) + & (pl.col("activity_seq_id") != pl.col("activity_seq_id_trans")) + ) + + mode_replanning_dest_keys = ( + destination_sequences_2 + .select(["demand_group_id", "activity_seq_id", "dest_seq_id"]) + .unique() + ) + initial_dest_keys = ( + destination_sequences_1 + .select(["demand_group_id", "activity_seq_id", "dest_seq_id"]) + .unique() + ) + destination_replanning_activity_keys = ( + destination_sequences_3 + .select(["demand_group_id", "activity_seq_id"]) + .unique() + ) + mode_replanning_activity_keys = ( + destination_sequences_2 + .select(["demand_group_id", "activity_seq_id"]) + .unique() + ) + + new_dest_keys_in_mode_replanning = mode_replanning_dest_keys.join( + initial_dest_keys, + on=["demand_group_id", "activity_seq_id", "dest_seq_id"], + how="anti", + ) + new_activity_keys_in_destination_replanning = destination_replanning_activity_keys.join( + mode_replanning_activity_keys, + on=["demand_group_id", "activity_seq_id"], + how="anti", + ) + + assert new_dest_keys_in_mode_replanning.height == 0 + assert new_activity_keys_in_destination_replanning.height == 0 + assert bad_mode.height == 0 + assert bad_destination.height == 0 diff --git a/tests/back/unit/choice_models/test_001_transition_scopes.py b/tests/back/unit/choice_models/test_001_transition_scopes.py new file mode 100644 index 00000000..dead477e --- /dev/null +++ b/tests/back/unit/choice_models/test_001_transition_scopes.py @@ -0,0 +1,275 @@ +import polars as pl + +from mobility.trips.group_day_trips import BehaviorChangePhase, BehaviorChangeScope, Parameters +from mobility.trips.group_day_trips.plans.plan_updater import PlanUpdater +from mobility.trips.group_day_trips.population_trips_candidates import ( + get_active_activity_chains, + get_active_destination_sequences, + get_spatialized_chains, +) + + +def test_parameters_returns_default_behavior_change_scope(): + parameters = Parameters() + + assert parameters.get_behavior_change_scope(1) == BehaviorChangeScope.FULL_REPLANNING + + +def test_parameters_resolves_active_behavior_change_scope(): + parameters = Parameters( + behavior_change_phases=[ + BehaviorChangePhase(start_iteration=3, scope=BehaviorChangeScope.MODE_REPLANNING), + BehaviorChangePhase(start_iteration=5, scope=BehaviorChangeScope.DESTINATION_REPLANNING), + ] + ) + + assert parameters.get_behavior_change_scope(1) == BehaviorChangeScope.FULL_REPLANNING + assert parameters.get_behavior_change_scope(3) == BehaviorChangeScope.MODE_REPLANNING + assert parameters.get_behavior_change_scope(6) == BehaviorChangeScope.DESTINATION_REPLANNING + + +def test_get_active_activity_chains_keeps_only_non_stay_home_sequences(): + chains_by_activity = pl.DataFrame( + { + "demand_group_id": [1, 1, 2], + "activity_seq_id": [10, 20, 30], + "seq_step_index": [0, 0, 0], + "activity": ["work", "other", "work"], + }, + schema={"demand_group_id": pl.UInt32, "activity_seq_id": pl.UInt32, "seq_step_index": pl.UInt32, "activity": pl.Utf8}, + ) + current_plans = pl.DataFrame( + { + "demand_group_id": [1, 1, 2], + "activity_seq_id": [10, 0, 0], + "dest_seq_id": [100, 0, 0], + "mode_seq_id": [1000, 0, 0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + }, + ) + + result = get_active_activity_chains(chains_by_activity, current_plans) + + assert result.select(["demand_group_id", "activity_seq_id"]).to_dicts() == [ + {"demand_group_id": 1, "activity_seq_id": 10} + ] + + +def test_get_active_destination_sequences_reuses_current_plan_steps(): + current_plans = pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "mode_seq_id": [1000], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + }, + ) + current_plan_steps = pl.DataFrame( + { + "demand_group_id": [1, 1], + "activity_seq_id": [10, 10], + "dest_seq_id": [100, 100], + "mode_seq_id": [1000, 1000], + "seq_step_index": [0, 1], + "from": [21, 22], + "to": [22, 23], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "from": pl.Int32, + "to": pl.Int32, + }, + ) + + result = get_active_destination_sequences( + current_plans=current_plans, + current_plan_steps=current_plan_steps, + iteration=4, + ) + + assert result["iteration"].unique().to_list() == [4] + assert result["seq_step_index"].sort().to_list() == [0, 1] + + +def test_get_spatialized_chains_limits_destination_resampling_to_active_activities(): + class DummySampler: + def __init__(self): + self.seen_chains = None + + def run(self, activities, transport_zones, remaining_opportunities, chains, demand_groups, costs, parameters, seed): + self.seen_chains = chains + return pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "seq_step_index": [0], + "from": [1], + "to": [2], + "iteration": [3], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "from": pl.Int32, + "to": pl.Int32, + "iteration": pl.UInt32, + }, + ) + + destination_sequence_sampler = DummySampler() + + chains_by_activity = pl.DataFrame( + { + "demand_group_id": [1, 1], + "activity_seq_id": [10, 20], + "seq_step_index": [0, 0], + "activity": ["work", "other"], + }, + schema={"demand_group_id": pl.UInt32, "activity_seq_id": pl.UInt32, "seq_step_index": pl.UInt32, "activity": pl.Utf8}, + ) + current_plans = pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "mode_seq_id": [1000], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + }, + ) + + get_spatialized_chains( + behavior_change_scope=BehaviorChangeScope.DESTINATION_REPLANNING, + current_plans=current_plans, + current_plan_steps=None, + destination_sequence_sampler=destination_sequence_sampler, + activities=[], + transport_zones=None, + remaining_opportunities=pl.DataFrame(), + iteration=3, + chains_by_activity=chains_by_activity, + demand_groups=pl.DataFrame(), + costs=pl.DataFrame(), + parameters=Parameters(), + seed=123, + ) + + assert destination_sequence_sampler.seen_chains.select("activity_seq_id").to_series().to_list() == [10] + + +def test_get_transition_probabilities_blocks_stay_home_in_mode_replanning(): + updater = PlanUpdater() + current_plans = pl.DataFrame( + { + "demand_group_id": [1, 1], + "activity_seq_id": [0, 10], + "dest_seq_id": [0, 100], + "mode_seq_id": [0, 1000], + "utility": [0.0, 1.0], + "n_persons": [5.0, 5.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + "n_persons": pl.Float64, + }, + ) + possible_plan_utility = pl.DataFrame( + { + "demand_group_id": [1, 1, 1, 1], + "activity_seq_id": [0, 10, 10, 11], + "dest_seq_id": [0, 100, 100, 101], + "mode_seq_id": [0, 1001, 1002, 1003], + "utility": [10.0, 2.0, 3.0, 4.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + }, + ).lazy() + + result = updater.get_transition_probabilities( + current_plans=current_plans, + possible_plan_utility=possible_plan_utility, + behavior_change_scope=BehaviorChangeScope.MODE_REPLANNING, + ) + + assert result.filter(pl.col("activity_seq_id") != 10).height == 0 + assert result.filter(pl.col("dest_seq_id") != 100).height == 0 + assert result.filter(pl.col("activity_seq_id_trans") != 10).height == 0 + assert result.filter(pl.col("dest_seq_id_trans") != 100).height == 0 + assert result.filter(pl.col("activity_seq_id_trans") == 0).height == 0 + + +def test_get_transition_probabilities_limits_destination_replanning_to_same_activity(): + updater = PlanUpdater() + current_plans = pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "mode_seq_id": [1000], + "utility": [1.0], + "n_persons": [5.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + "n_persons": pl.Float64, + }, + ) + possible_plan_utility = pl.DataFrame( + { + "demand_group_id": [1, 1, 1], + "activity_seq_id": [10, 10, 11], + "dest_seq_id": [100, 101, 100], + "mode_seq_id": [1000, 1001, 1002], + "utility": [1.0, 2.0, 3.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + }, + ).lazy() + + result = updater.get_transition_probabilities( + current_plans=current_plans, + possible_plan_utility=possible_plan_utility, + behavior_change_scope=BehaviorChangeScope.DESTINATION_REPLANNING, + ) + + assert result.select("activity_seq_id_trans").unique().to_series().to_list() == [10] From d17f70542d5c4adaf31d45eeaee1d2126e8b7877 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Tue, 31 Mar 2026 00:40:08 +0200 Subject: [PATCH 20/24] refactor --- .../plans/destination_sequences.py | 148 ++++++++-- .../population_trips_candidates.py | 268 ----------------- .../test_001_transition_scopes.py | 275 ------------------ .../test_003_behavior_change_scopes.py | 242 +++++++++++++++ 4 files changed, 373 insertions(+), 560 deletions(-) delete mode 100644 mobility/trips/group_day_trips/population_trips_candidates.py delete mode 100644 tests/back/unit/choice_models/test_001_transition_scopes.py create mode 100644 tests/back/unit/domain/group_day_trips/test_003_behavior_change_scopes.py diff --git a/mobility/trips/group_day_trips/plans/destination_sequences.py b/mobility/trips/group_day_trips/plans/destination_sequences.py index 74a31652..072b5e0f 100644 --- a/mobility/trips/group_day_trips/plans/destination_sequences.py +++ b/mobility/trips/group_day_trips/plans/destination_sequences.py @@ -5,6 +5,7 @@ import polars as pl from scipy.stats import norm +from mobility.trips.group_day_trips.core.parameters import BehaviorChangeScope from .sequence_index import add_index from mobility.runtime.assets.file_asset import FileAsset @@ -84,23 +85,7 @@ def create_and_get_asset(self) -> pl.DataFrame: if self.current_plans is None: raise ValueError("Cannot build destination sequences without current plans.") - from mobility.trips.group_day_trips.population_trips_candidates import get_spatialized_chains - - destination_sequences = get_spatialized_chains( - behavior_change_scope=self.parameters.get_behavior_change_scope(self.iteration), - current_plans=self.current_plans, - current_plan_steps=self.current_plan_steps, - destination_sequence_sampler=self, - activities=self.activities, - transport_zones=self.transport_zones, - remaining_opportunities=self.remaining_opportunities, - iteration=self.iteration, - chains_by_activity=self.chains, - demand_groups=self.demand_groups, - costs=self.costs, - parameters=self.parameters, - seed=self.seed, - ) + destination_sequences = self._build_destination_sequences_for_scope() self.cache_path.parent.mkdir(parents=True, exist_ok=True) destination_sequences.write_parquet(self.cache_path) @@ -171,6 +156,135 @@ def run( ) return destination_sequences + def _build_destination_sequences_for_scope(self) -> pl.DataFrame: + """Return the destination sequences to use for this iteration.""" + scope = self.parameters.get_behavior_change_scope(self.iteration) + + if scope == BehaviorChangeScope.FULL_REPLANNING: + return self._sample_all_destination_sequences() + + if scope == BehaviorChangeScope.DESTINATION_REPLANNING: + return self._sample_active_destination_sequences() + + if scope == BehaviorChangeScope.MODE_REPLANNING: + return self._reuse_current_destination_sequences() + + raise ValueError(f"Unsupported behavior change scope: {scope}") + + def _sample_all_destination_sequences(self) -> pl.DataFrame: + """Sample destination sequences from all non-stay-home activity chains.""" + return self.run( + self.activities, + self.transport_zones, + self.remaining_opportunities, + self.chains, + self.demand_groups, + self.costs, + self.parameters, + self.seed, + ) + + def _sample_active_destination_sequences(self) -> pl.DataFrame: + """Sample destination sequences for currently active activity sequences only.""" + active_activity_sequences = self._get_active_non_stay_home_plans().select( + ["demand_group_id", "activity_seq_id"] + ).unique() + + if active_activity_sequences.height == 0: + return self._empty_destination_sequences() + + filtered_chains = self.chains.join( + active_activity_sequences.with_columns( + demand_group_id=pl.col("demand_group_id").cast(self.chains.schema["demand_group_id"]), + activity_seq_id=pl.col("activity_seq_id").cast(self.chains.schema["activity_seq_id"]), + ), + on=["demand_group_id", "activity_seq_id"], + how="inner", + ) + + return self.run( + self.activities, + self.transport_zones, + self.remaining_opportunities, + filtered_chains, + self.demand_groups, + self.costs, + self.parameters, + self.seed, + ) + + def _reuse_current_destination_sequences(self) -> pl.DataFrame: + """Reuse the current iteration's destination sequences without resampling.""" + active_dest_sequences = self._get_active_non_stay_home_plans().select( + ["demand_group_id", "activity_seq_id", "dest_seq_id"] + ).unique() + + if active_dest_sequences.height == 0: + return self._empty_destination_sequences() + + if self.current_plan_steps is None: + raise ValueError( + "No current plan steps available for active non-stay-home " + f"plans at iteration={self.iteration}." + ) + + reused = ( + self.current_plan_steps.lazy() + .join( + active_dest_sequences.lazy(), + on=["demand_group_id", "activity_seq_id", "dest_seq_id"], + how="inner", + ) + .with_columns(iteration=pl.lit(self.iteration).cast(pl.UInt32())) + .select( + [ + "demand_group_id", + "activity_seq_id", + "dest_seq_id", + "seq_step_index", + "from", + "to", + "iteration", + ] + ) + .unique( + subset=["demand_group_id", "activity_seq_id", "dest_seq_id", "seq_step_index"], + keep="first", + ) + .collect(engine="streaming") + ) + + if reused.height == 0: + raise ValueError( + "Active non-stay-home plans could not be matched to reusable " + f"destination sequences at iteration={self.iteration}." + ) + + return reused + + def _get_active_non_stay_home_plans(self) -> pl.DataFrame: + """Return the distinct currently active non-stay-home plans.""" + return ( + self.current_plans + .filter(pl.col("activity_seq_id") != 0) + .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"]) + .unique() + ) + + def _empty_destination_sequences(self) -> pl.DataFrame: + """Return an empty destination-sequences dataframe with the expected schema.""" + return pl.DataFrame( + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "from": pl.Int32, + "to": pl.Int32, + "iteration": pl.UInt32, + } + ) + def _get_utilities( self, diff --git a/mobility/trips/group_day_trips/population_trips_candidates.py b/mobility/trips/group_day_trips/population_trips_candidates.py deleted file mode 100644 index 08a087a1..00000000 --- a/mobility/trips/group_day_trips/population_trips_candidates.py +++ /dev/null @@ -1,268 +0,0 @@ -import polars as pl - -from mobility.trips.group_day_trips.core.parameters import ( - BehaviorChangeScope, - Parameters, -) - - -def get_spatialized_chains( - behavior_change_scope: BehaviorChangeScope, - current_plans: pl.DataFrame, - current_plan_steps: pl.DataFrame | None, - destination_sequence_sampler, - activities, - transport_zones, - remaining_opportunities: pl.DataFrame, - iteration: int, - chains_by_activity: pl.DataFrame, - demand_groups: pl.DataFrame, - costs: pl.DataFrame, - parameters: Parameters, - seed: int, - ) -> pl.DataFrame: - """Get spatialized chains for the current simulation step. - - Args: - behavior_change_scope: Active behavior-change scope for the step. - current_plans: Aggregate plans occupied before the step update. - current_plan_steps: Per-step rows for the currently occupied plans. - destination_sequence_sampler: Sampler used when destination resampling - is allowed. - activities: Available activities for the simulation. - transport_zones: Transport zones used to spatialize destinations. - remaining_opportunities: Remaining destination capacities. - iteration: Current simulation iteration number. - chains_by_activity: Full chain templates indexed by activity sequence. - demand_groups: Demand-group metadata used during spatialization. - costs: Current OD costs used by destination sampling. - parameters: PopulationTrips parameters. - seed: RNG seed used for destination sampling. - - Returns: - Spatialized chains to use for the current step. - """ - if behavior_change_scope == BehaviorChangeScope.FULL_REPLANNING: - chains_to_sample = chains_by_activity - elif behavior_change_scope == BehaviorChangeScope.DESTINATION_REPLANNING: - chains_to_sample = get_active_activity_chains( - chains_by_activity=chains_by_activity, - current_plans=current_plans, - ) - elif behavior_change_scope == BehaviorChangeScope.MODE_REPLANNING: - return get_active_destination_sequences( - current_plans=current_plans, - current_plan_steps=current_plan_steps, - iteration=iteration, - ) - else: - raise ValueError(f"Unsupported behavior change scope: {behavior_change_scope}") - - if chains_to_sample.height == 0: - if get_active_non_stay_home_plans(current_plans).height > 0: - raise ValueError( - "No chains available for active non-stay-home states at " - f"iteration={iteration} with behavior_change_scope={behavior_change_scope.value}." - ) - return empty_spatialized_chains() - - return destination_sequence_sampler.run( - activities, - transport_zones, - remaining_opportunities, - chains_to_sample, - demand_groups, - costs, - parameters, - seed, - ) - - -def get_mode_sequences( - spatialized_chains: pl.DataFrame, - top_k_mode_sequence_search, - iteration: int, - costs_aggregator, - tmp_folders: dict[str, object], - parameters: Parameters, - ) -> pl.DataFrame: - """Get mode sequences for the current simulation step. - - Args: - spatialized_chains: Spatialized chains selected for the current step. - top_k_mode_sequence_search: Searcher that computes top-k mode - sequences for each spatialized chain. - iteration: Current simulation iteration number. - costs_aggregator: Provides OD costs by transport mode. - tmp_folders: Temporary folders for intermediate iteration artifacts. - parameters: GroupDayTrips parameters. - - Returns: - Mode sequences to use for the current step. - """ - if spatialized_chains.height == 0: - return empty_mode_sequences() - - return top_k_mode_sequence_search.run( - iteration, - costs_aggregator, - tmp_folders, - parameters, - ) - - -def get_active_activity_chains( - chains_by_activity: pl.DataFrame, - current_plans: pl.DataFrame, - ) -> pl.DataFrame: - """Keep chain templates for activity sequences currently selected. - - Args: - chains_by_activity: Full chain-template table. - current_plans: Aggregate plans occupied before the step update. - - Returns: - Chain templates restricted to active non-stay-home activity sequences. - """ - active_activity_sequences = get_active_non_stay_home_plans(current_plans).select( - ["demand_group_id", "activity_seq_id"] - ).unique() - - if active_activity_sequences.height == 0: - return chains_by_activity.head(0) - - active_activity_sequences = active_activity_sequences.with_columns( - demand_group_id=pl.col("demand_group_id").cast(chains_by_activity.schema["demand_group_id"]), - activity_seq_id=pl.col("activity_seq_id").cast(chains_by_activity.schema["activity_seq_id"]), - ) - - return chains_by_activity.join( - active_activity_sequences, - on=["demand_group_id", "activity_seq_id"], - how="inner", - ) - - -def get_active_destination_sequences( - current_plans: pl.DataFrame, - current_plan_steps: pl.DataFrame | None, - iteration: int, - ) -> pl.DataFrame: - """Reuse active destination sequences and tag them for a new iteration. - - Args: - current_plans: Aggregate plans occupied before the step update. - current_plan_steps: Per-step rows for the currently occupied plans. - iteration: Current simulation iteration number. - - Returns: - Destination sequences matching the active non-stay-home destination - sequences, restamped with the current iteration. - """ - active_dest_sequences = get_active_non_stay_home_plans(current_plans).select( - ["demand_group_id", "activity_seq_id", "dest_seq_id"] - ).unique() - - if active_dest_sequences.height == 0: - return empty_spatialized_chains() - - if current_plan_steps is None: - raise ValueError( - "No current plan steps available for active non-stay-home " - f"states at iteration={iteration}." - ) - - active_dest_sequences = active_dest_sequences.with_columns( - demand_group_id=pl.col("demand_group_id").cast(pl.UInt32), - activity_seq_id=pl.col("activity_seq_id").cast(pl.UInt32), - dest_seq_id=pl.col("dest_seq_id").cast(pl.UInt32), - ) - - reused = ( - current_plan_steps.lazy() - .join( - active_dest_sequences.lazy(), - on=["demand_group_id", "activity_seq_id", "dest_seq_id"], - how="inner", - ) - .with_columns(iteration=pl.lit(iteration).cast(pl.UInt32())) - .select( - [ - "demand_group_id", - "activity_seq_id", - "dest_seq_id", - "seq_step_index", - "from", - "to", - "iteration", - ] - ) - .unique( - subset=["demand_group_id", "activity_seq_id", "dest_seq_id", "seq_step_index"], - keep="first", - ) - .collect(engine="streaming") - ) - - if reused.height == 0: - raise ValueError( - "Active non-stay-home states could not be matched to reusable " - f"destination chains at iteration={iteration}." - ) - - return reused - - -def get_active_non_stay_home_plans(current_plans: pl.DataFrame) -> pl.DataFrame: - """Get active non-stay-home plans from the current aggregate plan table. - - Args: - current_plans: Aggregate plans occupied before the step update. - - Returns: - Distinct active non-stay-home plan keys. - """ - return ( - current_plans - .filter(pl.col("activity_seq_id") != 0) - .select(["demand_group_id", "activity_seq_id", "dest_seq_id", "mode_seq_id"]) - .unique() - ) - - -def empty_spatialized_chains() -> pl.DataFrame: - """Create an empty spatialized-chains table with the expected schema. - - Returns: - Empty spatialized chains. - """ - return pl.DataFrame( - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "seq_step_index": pl.UInt32, - "from": pl.Int32, - "to": pl.Int32, - "iteration": pl.UInt32, - } - ) - - -def empty_mode_sequences() -> pl.DataFrame: - """Create an empty mode-sequences table with the expected schema. - - Returns: - Empty mode sequences. - """ - return pl.DataFrame( - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - "seq_step_index": pl.UInt32, - "mode": pl.Utf8, - "iteration": pl.UInt32, - } - ) diff --git a/tests/back/unit/choice_models/test_001_transition_scopes.py b/tests/back/unit/choice_models/test_001_transition_scopes.py deleted file mode 100644 index dead477e..00000000 --- a/tests/back/unit/choice_models/test_001_transition_scopes.py +++ /dev/null @@ -1,275 +0,0 @@ -import polars as pl - -from mobility.trips.group_day_trips import BehaviorChangePhase, BehaviorChangeScope, Parameters -from mobility.trips.group_day_trips.plans.plan_updater import PlanUpdater -from mobility.trips.group_day_trips.population_trips_candidates import ( - get_active_activity_chains, - get_active_destination_sequences, - get_spatialized_chains, -) - - -def test_parameters_returns_default_behavior_change_scope(): - parameters = Parameters() - - assert parameters.get_behavior_change_scope(1) == BehaviorChangeScope.FULL_REPLANNING - - -def test_parameters_resolves_active_behavior_change_scope(): - parameters = Parameters( - behavior_change_phases=[ - BehaviorChangePhase(start_iteration=3, scope=BehaviorChangeScope.MODE_REPLANNING), - BehaviorChangePhase(start_iteration=5, scope=BehaviorChangeScope.DESTINATION_REPLANNING), - ] - ) - - assert parameters.get_behavior_change_scope(1) == BehaviorChangeScope.FULL_REPLANNING - assert parameters.get_behavior_change_scope(3) == BehaviorChangeScope.MODE_REPLANNING - assert parameters.get_behavior_change_scope(6) == BehaviorChangeScope.DESTINATION_REPLANNING - - -def test_get_active_activity_chains_keeps_only_non_stay_home_sequences(): - chains_by_activity = pl.DataFrame( - { - "demand_group_id": [1, 1, 2], - "activity_seq_id": [10, 20, 30], - "seq_step_index": [0, 0, 0], - "activity": ["work", "other", "work"], - }, - schema={"demand_group_id": pl.UInt32, "activity_seq_id": pl.UInt32, "seq_step_index": pl.UInt32, "activity": pl.Utf8}, - ) - current_plans = pl.DataFrame( - { - "demand_group_id": [1, 1, 2], - "activity_seq_id": [10, 0, 0], - "dest_seq_id": [100, 0, 0], - "mode_seq_id": [1000, 0, 0], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - }, - ) - - result = get_active_activity_chains(chains_by_activity, current_plans) - - assert result.select(["demand_group_id", "activity_seq_id"]).to_dicts() == [ - {"demand_group_id": 1, "activity_seq_id": 10} - ] - - -def test_get_active_destination_sequences_reuses_current_plan_steps(): - current_plans = pl.DataFrame( - { - "demand_group_id": [1], - "activity_seq_id": [10], - "dest_seq_id": [100], - "mode_seq_id": [1000], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - }, - ) - current_plan_steps = pl.DataFrame( - { - "demand_group_id": [1, 1], - "activity_seq_id": [10, 10], - "dest_seq_id": [100, 100], - "mode_seq_id": [1000, 1000], - "seq_step_index": [0, 1], - "from": [21, 22], - "to": [22, 23], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - "seq_step_index": pl.UInt32, - "from": pl.Int32, - "to": pl.Int32, - }, - ) - - result = get_active_destination_sequences( - current_plans=current_plans, - current_plan_steps=current_plan_steps, - iteration=4, - ) - - assert result["iteration"].unique().to_list() == [4] - assert result["seq_step_index"].sort().to_list() == [0, 1] - - -def test_get_spatialized_chains_limits_destination_resampling_to_active_activities(): - class DummySampler: - def __init__(self): - self.seen_chains = None - - def run(self, activities, transport_zones, remaining_opportunities, chains, demand_groups, costs, parameters, seed): - self.seen_chains = chains - return pl.DataFrame( - { - "demand_group_id": [1], - "activity_seq_id": [10], - "dest_seq_id": [100], - "seq_step_index": [0], - "from": [1], - "to": [2], - "iteration": [3], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "seq_step_index": pl.UInt32, - "from": pl.Int32, - "to": pl.Int32, - "iteration": pl.UInt32, - }, - ) - - destination_sequence_sampler = DummySampler() - - chains_by_activity = pl.DataFrame( - { - "demand_group_id": [1, 1], - "activity_seq_id": [10, 20], - "seq_step_index": [0, 0], - "activity": ["work", "other"], - }, - schema={"demand_group_id": pl.UInt32, "activity_seq_id": pl.UInt32, "seq_step_index": pl.UInt32, "activity": pl.Utf8}, - ) - current_plans = pl.DataFrame( - { - "demand_group_id": [1], - "activity_seq_id": [10], - "dest_seq_id": [100], - "mode_seq_id": [1000], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - }, - ) - - get_spatialized_chains( - behavior_change_scope=BehaviorChangeScope.DESTINATION_REPLANNING, - current_plans=current_plans, - current_plan_steps=None, - destination_sequence_sampler=destination_sequence_sampler, - activities=[], - transport_zones=None, - remaining_opportunities=pl.DataFrame(), - iteration=3, - chains_by_activity=chains_by_activity, - demand_groups=pl.DataFrame(), - costs=pl.DataFrame(), - parameters=Parameters(), - seed=123, - ) - - assert destination_sequence_sampler.seen_chains.select("activity_seq_id").to_series().to_list() == [10] - - -def test_get_transition_probabilities_blocks_stay_home_in_mode_replanning(): - updater = PlanUpdater() - current_plans = pl.DataFrame( - { - "demand_group_id": [1, 1], - "activity_seq_id": [0, 10], - "dest_seq_id": [0, 100], - "mode_seq_id": [0, 1000], - "utility": [0.0, 1.0], - "n_persons": [5.0, 5.0], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - "utility": pl.Float64, - "n_persons": pl.Float64, - }, - ) - possible_plan_utility = pl.DataFrame( - { - "demand_group_id": [1, 1, 1, 1], - "activity_seq_id": [0, 10, 10, 11], - "dest_seq_id": [0, 100, 100, 101], - "mode_seq_id": [0, 1001, 1002, 1003], - "utility": [10.0, 2.0, 3.0, 4.0], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - "utility": pl.Float64, - }, - ).lazy() - - result = updater.get_transition_probabilities( - current_plans=current_plans, - possible_plan_utility=possible_plan_utility, - behavior_change_scope=BehaviorChangeScope.MODE_REPLANNING, - ) - - assert result.filter(pl.col("activity_seq_id") != 10).height == 0 - assert result.filter(pl.col("dest_seq_id") != 100).height == 0 - assert result.filter(pl.col("activity_seq_id_trans") != 10).height == 0 - assert result.filter(pl.col("dest_seq_id_trans") != 100).height == 0 - assert result.filter(pl.col("activity_seq_id_trans") == 0).height == 0 - - -def test_get_transition_probabilities_limits_destination_replanning_to_same_activity(): - updater = PlanUpdater() - current_plans = pl.DataFrame( - { - "demand_group_id": [1], - "activity_seq_id": [10], - "dest_seq_id": [100], - "mode_seq_id": [1000], - "utility": [1.0], - "n_persons": [5.0], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - "utility": pl.Float64, - "n_persons": pl.Float64, - }, - ) - possible_plan_utility = pl.DataFrame( - { - "demand_group_id": [1, 1, 1], - "activity_seq_id": [10, 10, 11], - "dest_seq_id": [100, 101, 100], - "mode_seq_id": [1000, 1001, 1002], - "utility": [1.0, 2.0, 3.0], - }, - schema={ - "demand_group_id": pl.UInt32, - "activity_seq_id": pl.UInt32, - "dest_seq_id": pl.UInt32, - "mode_seq_id": pl.UInt32, - "utility": pl.Float64, - }, - ).lazy() - - result = updater.get_transition_probabilities( - current_plans=current_plans, - possible_plan_utility=possible_plan_utility, - behavior_change_scope=BehaviorChangeScope.DESTINATION_REPLANNING, - ) - - assert result.select("activity_seq_id_trans").unique().to_series().to_list() == [10] diff --git a/tests/back/unit/domain/group_day_trips/test_003_behavior_change_scopes.py b/tests/back/unit/domain/group_day_trips/test_003_behavior_change_scopes.py new file mode 100644 index 00000000..ddbf0061 --- /dev/null +++ b/tests/back/unit/domain/group_day_trips/test_003_behavior_change_scopes.py @@ -0,0 +1,242 @@ +import polars as pl + +from mobility.trips.group_day_trips import BehaviorChangePhase, BehaviorChangeScope, Parameters +from mobility.trips.group_day_trips.plans.destination_sequences import DestinationSequences +from mobility.trips.group_day_trips.plans.plan_updater import PlanUpdater + + +def test_parameters_returns_default_behavior_change_scope(): + parameters = Parameters() + + assert parameters.get_behavior_change_scope(1) == BehaviorChangeScope.FULL_REPLANNING + + +def test_parameters_resolves_active_behavior_change_scope(): + parameters = Parameters( + behavior_change_phases=[ + BehaviorChangePhase(start_iteration=3, scope=BehaviorChangeScope.MODE_REPLANNING), + BehaviorChangePhase(start_iteration=5, scope=BehaviorChangeScope.DESTINATION_REPLANNING), + ] + ) + + assert parameters.get_behavior_change_scope(1) == BehaviorChangeScope.FULL_REPLANNING + assert parameters.get_behavior_change_scope(3) == BehaviorChangeScope.MODE_REPLANNING + assert parameters.get_behavior_change_scope(6) == BehaviorChangeScope.DESTINATION_REPLANNING + + +def test_sample_active_destination_sequences_keeps_only_active_activity_sequences(tmp_path): + destination_sequences = DestinationSequences( + run_key="run", + is_weekday=True, + iteration=3, + base_folder=tmp_path, + current_plans=pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "mode_seq_id": [1000], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + }, + ), + chains=pl.DataFrame( + { + "demand_group_id": [1, 1], + "activity_seq_id": [10, 20], + "seq_step_index": [0, 0], + "activity": ["work", "other"], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "activity": pl.Utf8, + }, + ), + activities=[], + transport_zones=None, + remaining_opportunities=pl.DataFrame(), + demand_groups=pl.DataFrame(), + costs=pl.DataFrame(), + parameters=Parameters(), + seed=123, + ) + + seen = {} + + def fake_run(activities, transport_zones, remaining_opportunities, chains, demand_groups, costs, parameters, seed): + seen["chains"] = chains + return pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "seq_step_index": [0], + "from": [1], + "to": [2], + "iteration": [3], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "from": pl.Int32, + "to": pl.Int32, + "iteration": pl.UInt32, + }, + ) + + destination_sequences.run = fake_run + destination_sequences._sample_active_destination_sequences() + + assert seen["chains"].select("activity_seq_id").to_series().to_list() == [10] + + +def test_reuse_current_destination_sequences_reuses_current_plan_steps(tmp_path): + destination_sequences = DestinationSequences( + run_key="run", + is_weekday=True, + iteration=4, + base_folder=tmp_path, + current_plans=pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "mode_seq_id": [1000], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + }, + ), + current_plan_steps=pl.DataFrame( + { + "demand_group_id": [1, 1], + "activity_seq_id": [10, 10], + "dest_seq_id": [100, 100], + "mode_seq_id": [1000, 1001], + "seq_step_index": [0, 1], + "from": [21, 22], + "to": [22, 23], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "seq_step_index": pl.UInt32, + "from": pl.Int32, + "to": pl.Int32, + }, + ), + ) + + result = destination_sequences._reuse_current_destination_sequences() + + assert result["iteration"].unique().to_list() == [4] + assert result["seq_step_index"].sort().to_list() == [0, 1] + + +def test_get_transition_probabilities_blocks_stay_home_in_mode_replanning(): + updater = PlanUpdater() + current_plans = pl.DataFrame( + { + "demand_group_id": [1, 1], + "activity_seq_id": [0, 10], + "dest_seq_id": [0, 100], + "mode_seq_id": [0, 1000], + "utility": [0.0, 1.0], + "n_persons": [5.0, 5.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + "n_persons": pl.Float64, + }, + ) + possible_plan_utility = pl.DataFrame( + { + "demand_group_id": [1, 1, 1, 1], + "activity_seq_id": [0, 10, 10, 11], + "dest_seq_id": [0, 100, 100, 101], + "mode_seq_id": [0, 1001, 1002, 1003], + "utility": [10.0, 2.0, 3.0, 4.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + }, + ).lazy() + + result = updater.get_transition_probabilities( + current_plans=current_plans, + possible_plan_utility=possible_plan_utility, + behavior_change_scope=BehaviorChangeScope.MODE_REPLANNING, + ) + + assert result.filter(pl.col("activity_seq_id") != 10).height == 0 + assert result.filter(pl.col("dest_seq_id") != 100).height == 0 + assert result.filter(pl.col("activity_seq_id_trans") != 10).height == 0 + assert result.filter(pl.col("dest_seq_id_trans") != 100).height == 0 + assert result.filter(pl.col("activity_seq_id_trans") == 0).height == 0 + + +def test_get_transition_probabilities_limits_destination_replanning_to_same_activity(): + updater = PlanUpdater() + current_plans = pl.DataFrame( + { + "demand_group_id": [1], + "activity_seq_id": [10], + "dest_seq_id": [100], + "mode_seq_id": [1000], + "utility": [1.0], + "n_persons": [5.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + "n_persons": pl.Float64, + }, + ) + possible_plan_utility = pl.DataFrame( + { + "demand_group_id": [1, 1, 1], + "activity_seq_id": [10, 10, 11], + "dest_seq_id": [100, 101, 100], + "mode_seq_id": [1000, 1001, 1002], + "utility": [1.0, 2.0, 3.0], + }, + schema={ + "demand_group_id": pl.UInt32, + "activity_seq_id": pl.UInt32, + "dest_seq_id": pl.UInt32, + "mode_seq_id": pl.UInt32, + "utility": pl.Float64, + }, + ).lazy() + + result = updater.get_transition_probabilities( + current_plans=current_plans, + possible_plan_utility=possible_plan_utility, + behavior_change_scope=BehaviorChangeScope.DESTINATION_REPLANNING, + ) + + assert result.select("activity_seq_id_trans").unique().to_series().to_list() == [10] From dbeeaa99d3b7182788d1346e74121df11b374207 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Tue, 31 Mar 2026 00:51:07 +0200 Subject: [PATCH 21/24] add missing method load_congestion_state --- .../costs/transport_costs_aggregator.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/mobility/transport/costs/transport_costs_aggregator.py b/mobility/transport/costs/transport_costs_aggregator.py index 90c27239..d225d4b4 100644 --- a/mobility/transport/costs/transport_costs_aggregator.py +++ b/mobility/transport/costs/transport_costs_aggregator.py @@ -318,6 +318,60 @@ def build_congestion_state(self, od_flows_by_mode, *, run_key=None, is_weekday=N flow_assets_by_mode=flow_assets_by_mode, ) + def load_congestion_state( + self, + *, + run_key, + is_weekday, + last_completed_iteration: int, + cost_update_interval: int, + ) -> CongestionState | None: + """Load the latest persisted congestion state available for a resumed run.""" + + if ( + not self.has_enabled_congestion() + or cost_update_interval <= 0 + or last_completed_iteration <= 0 + ): + return None + + latest_refresh_iteration = max( + iteration + for iteration in range(1, int(last_completed_iteration) + 1) + if self.should_recompute_congested_costs(iteration, cost_update_interval) + ) + + flow_assets_by_mode = {} + empty_flows = pl.DataFrame( + { + "from": pl.Series([], dtype=pl.Int64), + "to": pl.Series([], dtype=pl.Int64), + "vehicle_volume": pl.Series([], dtype=pl.Float64), + } + ).to_pandas() + + for mode in self.iter_congestion_enabled_modes(): + mode_name = mode.inputs["parameters"].name + flow_asset = VehicleODFlowsAsset( + empty_flows, + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(latest_refresh_iteration), + mode_name=mode_name, + ) + if flow_asset.cache_path.exists(): + flow_assets_by_mode[mode_name] = flow_asset + + if not flow_assets_by_mode: + return None + + return CongestionState( + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(latest_refresh_iteration), + flow_assets_by_mode=flow_assets_by_mode, + ) + def has_enabled_congestion(self) -> bool: """Return whether any mode has congestion feedback enabled. From 8c0f9ee2cfe9bb17e6ec6b0b5568671c428d45de Mon Sep 17 00:00:00 2001 From: FlxPo Date: Tue, 31 Mar 2026 01:13:17 +0200 Subject: [PATCH 22/24] fix resume fail + add test to make sure resuming works --- mobility/trips/group_day_trips/core/run.py | 1 + .../iterations/iteration_assets.py | 33 +++++++ .../group_day_trips/iterations/iterations.py | 26 ++++++ .../group_day_trips/plans/plan_updater.py | 14 ++- ...y_trips_can_resume_from_saved_iteration.py | 87 +++++++++++++++++++ .../test_001_restore_saved_state.py | 20 +++++ 6 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 tests/back/integration/test_008e_group_day_trips_can_resume_from_saved_iteration.py diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 5a17f35a..7325a5b0 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -218,6 +218,7 @@ def _restore_saved_state( iterations.discard_future_iterations(iteration=resume_from_iteration) state.current_plans = saved_state.current_plans + state.current_plan_steps = saved_state.current_plan_steps state.remaining_opportunities = saved_state.remaining_opportunities state.congestion_state = self.costs_aggregator.load_congestion_state( run_key=self.inputs_hash, diff --git a/mobility/trips/group_day_trips/iterations/iteration_assets.py b/mobility/trips/group_day_trips/iterations/iteration_assets.py index 71327667..a3a5290a 100644 --- a/mobility/trips/group_day_trips/iterations/iteration_assets.py +++ b/mobility/trips/group_day_trips/iterations/iteration_assets.py @@ -40,6 +40,39 @@ def create_and_get_asset(self) -> pl.DataFrame: return self.get_cached_asset() +class CurrentPlanStepsAsset(FileAsset): + """Persisted step-level details for the current plans after one completed iteration.""" + + def __init__( + self, + *, + run_key: str, + is_weekday: bool, + iteration: int, + base_folder: pathlib.Path, + current_plan_steps: pl.DataFrame | None = None, + ) -> None: + self.current_plan_steps = current_plan_steps + inputs = { + "version": 1, + "run_key": run_key, + "is_weekday": is_weekday, + "iteration": iteration, + } + cache_path = pathlib.Path(base_folder) / f"current_plan_steps_{iteration}.parquet" + super().__init__(inputs, cache_path) + + def get_cached_asset(self) -> pl.DataFrame: + return pl.read_parquet(self.cache_path) + + def create_and_get_asset(self) -> pl.DataFrame: + if self.current_plan_steps is None: + raise ValueError("Cannot save current plan steps without a dataframe.") + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + self.current_plan_steps.write_parquet(self.cache_path) + return self.get_cached_asset() + + class RemainingOpportunitiesAsset(FileAsset): """Persisted remaining opportunities after one completed iteration.""" diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py index 423e8e31..9a7b829a 100644 --- a/mobility/trips/group_day_trips/iterations/iterations.py +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -12,6 +12,7 @@ from ..plans.mode_sequences import ModeSequences from .iteration_assets import ( CurrentPlansAsset, + CurrentPlanStepsAsset, IterationCompleteAsset, RemainingOpportunitiesAsset, RngStateAsset, @@ -24,6 +25,7 @@ class IterationState: """Minimal persisted plan distribution required to resume a run from one iteration.""" current_plans: pl.DataFrame + current_plan_steps: pl.DataFrame remaining_opportunities: pl.DataFrame rng_state: object @@ -98,6 +100,21 @@ def mode_sequences( def load_state(self) -> IterationState: """Load the saved run state for this completed iteration.""" iteration_state_folder = self.iterations.folder_paths["iteration-state"] + current_plan_steps_asset = CurrentPlanStepsAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + ) + if current_plan_steps_asset.cache_path.exists() is False: + raise RuntimeError( + "Saved GroupDayTrips iteration state is incomplete. " + f"Missing current_plan_steps for run_inputs_hash={self.iterations.run_inputs_hash}, " + f"is_weekday={self.iterations.is_weekday}, iteration={self.iteration}. " + "This cache was likely created with an older code version. " + "Clear the saved iteration artifacts and rerun from scratch." + ) + return IterationState( current_plans=CurrentPlansAsset( run_key=self.iterations.run_inputs_hash, @@ -105,6 +122,7 @@ def load_state(self) -> IterationState: iteration=self.iteration, base_folder=iteration_state_folder, ).get(), + current_plan_steps=current_plan_steps_asset.get(), remaining_opportunities=RemainingOpportunitiesAsset( run_key=self.iterations.run_inputs_hash, is_weekday=self.iterations.is_weekday, @@ -131,6 +149,13 @@ def save_state(self, state: RunState, rng_state: object) -> None: base_folder=iteration_state_folder, current_plans=state.current_plans, ).create_and_get_asset() + CurrentPlanStepsAsset( + run_key=self.iterations.run_inputs_hash, + is_weekday=self.iterations.is_weekday, + iteration=self.iteration, + base_folder=iteration_state_folder, + current_plan_steps=state.current_plan_steps, + ).create_and_get_asset() RemainingOpportunitiesAsset( run_key=self.iterations.run_inputs_hash, is_weekday=self.iterations.is_weekday, @@ -234,6 +259,7 @@ def discard_future_iterations(self, *, iteration: int) -> None: "transitions": ["*transition_events_*.parquet"], "iteration-state": [ "*current_plans_*.parquet", + "*current_plan_steps_*.parquet", "*remaining_opportunities_*.parquet", "*rng_state_*.pkl", "*iteration_complete_*.json", diff --git a/mobility/trips/group_day_trips/plans/plan_updater.py b/mobility/trips/group_day_trips/plans/plan_updater.py index 7430762b..965effc5 100644 --- a/mobility/trips/group_day_trips/plans/plan_updater.py +++ b/mobility/trips/group_day_trips/plans/plan_updater.py @@ -236,7 +236,16 @@ def get_possible_plan_steps( iteration=pl.lit(iteration).cast(pl.UInt32), ) .join(demand_groups.select(["demand_group_id", "csp"]).lazy(), on="demand_group_id") - .join(cost_by_od_and_modes.lazy(), on=["from", "to", "mode"]) + # Keep current plans even when refreshed routing costs no longer + # provide a path for one carried-forward OD/mode combination. + # Those plans should remain valid "from" states for the + # transition model, but with a very poor refreshed utility so + # agents can move away from them. + .join( + cost_by_od_and_modes.lazy(), + on=["from", "to", "mode"], + how="left", + ) .join(activity_dur.lazy(), on=["csp", "activity"]) .join(value_of_time.lazy(), on="activity") .join( @@ -245,6 +254,9 @@ def get_possible_plan_steps( how="left", ) .with_columns( + cost=pl.col("cost").fill_null(1e9), + distance=pl.col("distance").fill_null(0.0), + time=pl.col("time").fill_null(0.0), k_saturation_utility=pl.col("k_saturation_utility").fill_null(1.0), min_activity_time=pl.col("mean_duration_per_pers") * math.exp(-min_activity_time_constant), ) diff --git a/tests/back/integration/test_008e_group_day_trips_can_resume_from_saved_iteration.py b/tests/back/integration/test_008e_group_day_trips_can_resume_from_saved_iteration.py new file mode 100644 index 00000000..2ac67c27 --- /dev/null +++ b/tests/back/integration/test_008e_group_day_trips_can_resume_from_saved_iteration.py @@ -0,0 +1,87 @@ +import pytest + +import mobility +from mobility.activities import Home, Other, Work +from mobility.surveys.france import EMPMobilitySurvey +from mobility.trips.group_day_trips import GroupDayTrips, Parameters + + +def _build_group_day_trips(test_data): + transport_zones = mobility.TransportZones( + local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], + radius=test_data["transport_zones_radius"], + ) + + emp = EMPMobilitySurvey() + pop = mobility.Population( + transport_zones, + sample_size=test_data["population_sample_size"], + ) + + car_mode = mobility.Car(transport_zones) + walk_mode = mobility.Walk(transport_zones) + bicycle_mode = mobility.Bicycle(transport_zones) + mode_registry = mobility.ModeRegistry([car_mode, walk_mode, bicycle_mode]) + public_transport_mode = mobility.PublicTransport( + transport_zones, + mode_registry=mode_registry, + ) + + return GroupDayTrips( + population=pop, + modes=[car_mode, walk_mode, bicycle_mode, public_transport_mode], + activities=[Home(), Work(), Other(population=pop)], + surveys=[emp], + parameters=Parameters( + n_iterations=2, + n_iter_per_cost_update=0, + alpha=0.01, + dest_prob_cutoff=0.9, + k_mode_sequences=6, + cost_uncertainty_sd=1.0, + mode_sequence_search_parallel=False, + simulate_weekend=False, + seed=108, + ), + ) + + +@pytest.mark.dependency( + depends=[ + "tests/back/integration/test_008_group_day_trips_can_be_computed.py::test_008_group_day_trips_can_be_computed", + ], + scope="session", +) +def test_008e_group_day_trips_can_resume_from_saved_iteration(test_data): + pop_trips = _build_group_day_trips(test_data) + pop_trips.remove() + + run = pop_trips.weekday_run + iterations, resume_from_iteration = run._prepare_iterations(run.inputs_hash) + + assert resume_from_iteration is None + + state = run._build_state( + iterations=iterations, + resume_from_iteration=resume_from_iteration, + ) + iteration_1 = iterations.iteration(1) + run._run_model_iteration( + state=state, + iteration=iteration_1, + ) + iteration_1.save_state(state, run.rng.getstate()) + + saved_iteration_state = iterations.iteration(1).load_state() + assert saved_iteration_state.current_plans.height > 0 + assert saved_iteration_state.current_plan_steps.height > 0 + + resumed_pop_trips = _build_group_day_trips(test_data) + result = resumed_pop_trips.get() + + plan_steps = result["weekday_plan_steps"].collect() + transitions = result["weekday_transitions"].collect() + + assert plan_steps.height > 0 + assert transitions.height > 0 + assert sorted(transitions["iteration"].unique().to_list()) == [1, 2] diff --git a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py index af916868..e957943e 100644 --- a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py +++ b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py @@ -76,6 +76,7 @@ def test_restore_saved_state_happy_path_restores_mutable_state(): saved_rng = random.Random(999) saved_state = SimpleNamespace( current_plans=pl.DataFrame({"plan_id": [11, 12]}), + current_plan_steps=pl.DataFrame({"step_id": [31, 32]}), remaining_opportunities=pl.DataFrame({"opportunity_id": [21, 22]}), rng_state=saved_rng.getstate(), ) @@ -92,6 +93,7 @@ def test_restore_saved_state_happy_path_restores_mutable_state(): assert iterations.requested_iterations == [2] assert iterations.discarded_iteration == 2 assert state.current_plans.equals(saved_state.current_plans) + assert state.current_plan_steps.equals(saved_state.current_plan_steps) assert state.remaining_opportunities.equals(saved_state.remaining_opportunities) assert state.congestion_state == "congestion-state" assert state.start_iteration == 3 @@ -126,9 +128,27 @@ def test_restore_saved_state_wraps_load_state_errors(): ) +def test_restore_saved_state_wraps_incomplete_saved_state_errors(): + iterations = FakeIterations( + saved_state=RuntimeError( + "Saved GroupDayTrips iteration state is incomplete. Missing current_plan_steps." + ) + ) + run = make_run(congestion_state=None) + state = make_state() + + with pytest.raises(RuntimeError, match="Failed to load saved GroupDayTrips iteration state"): + run._restore_saved_state( + iterations=iterations, + state=state, + resume_from_iteration=2, + ) + + def test_restore_saved_state_wraps_rng_restore_errors(): saved_state = SimpleNamespace( current_plans=pl.DataFrame({"plan_id": [11]}), + current_plan_steps=pl.DataFrame({"step_id": [31]}), remaining_opportunities=pl.DataFrame({"opportunity_id": [21]}), rng_state=object(), ) From 0e108ead77a97d5471a36dfce124f2abea4f8281 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Thu, 2 Apr 2026 14:22:34 +0200 Subject: [PATCH 23/24] iterated assets logic --- mobility/__init__.py | 1 - mobility/activities/activity.py | 21 +- mobility/runtime/parameter_profiles.py | 42 +- mobility/transport/costs/__init__.py | 7 +- .../costs/congestion_state_manager.py | 182 +++++++ mobility/transport/costs/od_flows_asset.py | 23 +- mobility/transport/costs/path/__init__.py | 2 - .../transport/costs/path/path_travel_costs.py | 88 ++-- .../costs/path/path_travel_costs_snapshot.py | 61 --- mobility/transport/costs/transport_costs.py | 403 ++++++++++++++++ .../costs/transport_costs_aggregator.py | 443 ------------------ .../transport/graphs/congested/__init__.py | 3 +- .../graphs/congested/congested_path_graph.py | 83 +++- .../congested_path_graph_snapshot.py | 66 --- .../transport/graphs/contracted/__init__.py | 3 +- .../contracted/contracted_path_graph.py | 10 - .../contracted_path_graph_snapshot.py | 36 -- mobility/transport/modes/bicycle.py | 8 +- mobility/transport/modes/car.py | 14 +- .../detailed/detailed_carpool_travel_costs.py | 44 +- .../detailed_carpool_travel_costs_snapshot.py | 58 --- .../public_transport/public_transport.py | 8 +- .../public_transport_graph.py | 2 +- mobility/transport/modes/walk.py | 8 +- .../group_day_trips/core/group_day_trips.py | 10 +- .../trips/group_day_trips/core/results.py | 33 +- mobility/trips/group_day_trips/core/run.py | 77 ++- .../trips/group_day_trips/core/run_state.py | 3 - .../evaluation/car_traffic_evaluation.py | 12 +- .../evaluation/travel_costs_evaluation.py | 13 +- .../group_day_trips/iterations/iterations.py | 6 +- .../group_day_trips/plans/mode_sequences.py | 16 +- .../group_day_trips/plans/plan_initializer.py | 12 - .../group_day_trips/plans/plan_updater.py | 33 +- .../transitions/transition_metrics.py | 7 +- pyproject.toml | 5 + ...est_008_group_day_trips_can_be_computed.py | 123 +---- ...s_parameter_profiles_change_iteration_2.py | 11 +- ...ips_pt_gtfs_profiles_change_iteration_2.py | 53 ++- ..._behavior_change_phases_can_be_computed.py | 1 - ..._001_travel_costs_aggregator_congestion.py | 17 +- .../test_001_routing_parameters.py | 10 +- .../test_001_restore_saved_state.py | 50 +- ...12_congested_path_graph_iteration_asset.py | 64 +++ 44 files changed, 1059 insertions(+), 1113 deletions(-) create mode 100644 mobility/transport/costs/congestion_state_manager.py delete mode 100644 mobility/transport/costs/path/path_travel_costs_snapshot.py create mode 100644 mobility/transport/costs/transport_costs.py delete mode 100644 mobility/transport/costs/transport_costs_aggregator.py delete mode 100644 mobility/transport/graphs/congested/congested_path_graph_snapshot.py delete mode 100644 mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py delete mode 100644 mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py create mode 100644 tests/back/unit/test_012_congested_path_graph_iteration_asset.py diff --git a/mobility/__init__.py b/mobility/__init__.py index 14ccbc56..690b482b 100644 --- a/mobility/__init__.py +++ b/mobility/__init__.py @@ -54,7 +54,6 @@ ListParameterProfile, ParameterProfile, ScalarParameterProfile, - SimulationStep, ) from .transport.graphs.modified.modifiers import ( diff --git a/mobility/activities/activity.py b/mobility/activities/activity.py index 3f41f5bd..c472be86 100644 --- a/mobility/activities/activity.py +++ b/mobility/activities/activity.py @@ -9,8 +9,7 @@ from pydantic import BaseModel, ConfigDict, Field from mobility.runtime.parameter_profiles import ( ScalarParameterProfile, - SimulationStep, - resolve_model_for_step, + resolve_model_for_iteration, ) from mobility.runtime.validation_types import NonNegativeFloat, UnitIntervalFloat @@ -68,18 +67,18 @@ def __init__( super().__init__(inputs) - def get_parameters_at_step(self, step: SimulationStep) -> "ActivityParameters": - """Returns the activity parameters in effect at a simulation step. + def get_parameters_for_iteration(self, iteration: int) -> "ActivityParameters": + """Returns the activity parameters in effect at one simulation iteration. Args: - step: Simulation step used to evaluate step-varying parameter + iteration: Simulation iteration used to evaluate iteration-varying parameter profiles. Returns: - ActivityParameters: Parameter model with all step-varying fields - resolved to scalar values for ``step``. + ActivityParameters: Parameter model with all iteration-varying fields + resolved to scalar values for ``iteration``. """ - return resolve_model_for_step(self.inputs["parameters"], step) + return resolve_model_for_iteration(self.inputs["parameters"], iteration) def get_utilities(self, transport_zones, parameters: "ActivityParameters" | None = None): @@ -205,11 +204,11 @@ class ActivityParameters(BaseModel): def resolve_activity_parameters( activities: list[Activity], - step: SimulationStep, + iteration: int, ) -> dict[str, ActivityParameters]: - """Resolve all activity parameter models for one simulation step.""" + """Resolve all activity parameter models for one simulation iteration.""" return { - activity.name: activity.get_parameters_at_step(step) + activity.name: activity.get_parameters_for_iteration(iteration) for activity in activities } diff --git a/mobility/runtime/parameter_profiles.py b/mobility/runtime/parameter_profiles.py index 66e58078..5bc398f9 100644 --- a/mobility/runtime/parameter_profiles.py +++ b/mobility/runtime/parameter_profiles.py @@ -3,19 +3,11 @@ from typing import Any, Literal, TypeVar import numpy as np -from pydantic import BaseModel, ConfigDict, Field, model_validator +from pydantic import BaseModel, ConfigDict, model_validator T = TypeVar("T", bound=BaseModel) -class SimulationStep(BaseModel): - """Identifies one simulation step.""" - - model_config = ConfigDict(extra="forbid") - - iteration: int = Field(ge=1) - - class ParameterProfile(BaseModel): """Base class for parameter profiles evaluated over simulation iterations.""" @@ -33,7 +25,7 @@ def validate_points(self) -> "ParameterProfile": return self - def at(self, step: SimulationStep) -> Any: + def at(self, iteration: int) -> Any: raise NotImplementedError @@ -43,17 +35,17 @@ class ScalarParameterProfile(ParameterProfile): mode: Literal["step", "linear"] = "step" points: dict[int, float] - def at(self, step: SimulationStep) -> float: + def at(self, iteration: int) -> float: sorted_points = sorted(self.points.items()) iterations = np.array([iteration for iteration, _ in sorted_points], dtype=float) values = np.array([value for _, value in sorted_points], dtype=float) if self.mode == "step": - idx = np.searchsorted(iterations, step.iteration, side="right") - 1 + idx = np.searchsorted(iterations, iteration, side="right") - 1 idx = max(idx, 0) return float(values[idx]) - return float(np.interp(step.iteration, iterations, values)) + return float(np.interp(iteration, iterations, values)) class ListParameterProfile(ParameterProfile): @@ -61,40 +53,40 @@ class ListParameterProfile(ParameterProfile): points: dict[int, list[str]] - def at(self, step: SimulationStep) -> list[str]: + def at(self, iteration: int) -> list[str]: sorted_points = sorted(self.points.items()) iterations = [iteration for iteration, _ in sorted_points] - idx = np.searchsorted(iterations, step.iteration, side="right") - 1 + idx = np.searchsorted(iterations, iteration, side="right") - 1 idx = max(idx, 0) return list(sorted_points[idx][1]) -def resolve_value_for_step(value: Any, step: SimulationStep) -> Any: - """Resolve one value for a simulation step.""" +def resolve_value_for_iteration(value: Any, iteration: int) -> Any: + """Resolve one value for a simulation iteration.""" if isinstance(value, ParameterProfile): - return value.at(step) + return value.at(iteration) if isinstance(value, BaseModel): - return resolve_model_for_step(value, step) + return resolve_model_for_iteration(value, iteration) if isinstance(value, dict): - return {key: resolve_value_for_step(item, step) for key, item in value.items()} + return {key: resolve_value_for_iteration(item, iteration) for key, item in value.items()} if isinstance(value, list): - return [resolve_value_for_step(item, step) for item in value] + return [resolve_value_for_iteration(item, iteration) for item in value] if isinstance(value, tuple): - return tuple(resolve_value_for_step(item, step) for item in value) + return tuple(resolve_value_for_iteration(item, iteration) for item in value) return value -def resolve_model_for_step(model: T, step: SimulationStep) -> T: - """Resolve step-varying fields of a pydantic model.""" +def resolve_model_for_iteration(model: T, iteration: int) -> T: + """Resolve iteration-varying fields of a pydantic model.""" resolved_data = { - field_name: resolve_value_for_step(getattr(model, field_name), step) + field_name: resolve_value_for_iteration(getattr(model, field_name), iteration) for field_name in model.__class__.model_fields } return model.__class__.model_validate(resolved_data) diff --git a/mobility/transport/costs/__init__.py b/mobility/transport/costs/__init__.py index 1a95aee4..95eda288 100644 --- a/mobility/transport/costs/__init__.py +++ b/mobility/transport/costs/__init__.py @@ -1,11 +1,11 @@ from .od_flows_asset import VehicleODFlowsAsset -from .transport_costs_aggregator import TransportCostsAggregator +from .transport_costs import TransportCosts from .parameters import ( CostOfTimeParameters, GeneralizedCostParameters, PathRoutingParameters, ) -from .path import PathGeneralizedCost, PathTravelCosts, PathTravelCostsSnapshot +from .path import PathGeneralizedCost, PathTravelCosts __all__ = [ "CostOfTimeParameters", @@ -13,7 +13,6 @@ "PathGeneralizedCost", "PathRoutingParameters", "PathTravelCosts", - "PathTravelCostsSnapshot", - "TransportCostsAggregator", + "TransportCosts", "VehicleODFlowsAsset", ] diff --git a/mobility/transport/costs/congestion_state_manager.py b/mobility/transport/costs/congestion_state_manager.py new file mode 100644 index 00000000..6580008d --- /dev/null +++ b/mobility/transport/costs/congestion_state_manager.py @@ -0,0 +1,182 @@ +from __future__ import annotations + +import logging + +import polars as pl + +from mobility.transport.costs.congestion_state import CongestionState +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset + + +class CongestionStateManager: + """Manage persisted congestion states for transport-cost iterations.""" + + def __init__(self, transport_costs) -> None: + """Initialize the manager for one transport-cost configuration. + + Args: + transport_costs: Parent transport-cost asset whose modes define the + congestion-enabled network and flow-building behavior. + """ + self.transport_costs = transport_costs + + def build(self, od_flows_by_mode, *, run_key=None, is_weekday=None, iteration=None): + """Build and persist a congestion state from current OD flows. + + Args: + od_flows_by_mode: Per-mode OD flows aggregated from current plan steps. + run_key: Unique identifier of the run owning the congestion state. + is_weekday: Whether the run is the weekday variant. + iteration: Simulation iteration that produced these flows. + + Returns: + The persisted congestion state for the provided flows, or `None` + when no congestion-enabled mode produced any persisted flow asset. + """ + logging.info("Building congestion state from OD flows...") + congestion_flows_by_mode = { + mode.inputs["parameters"].name: mode.build_congestion_flows(od_flows_by_mode) + for mode in self._iter_congestion_enabled_modes() + } + + merged_road_flows = self._merge_congestion_flows( + congestion_flows_by_mode.get("car"), + congestion_flows_by_mode.get("carpool"), + ) + + flow_assets_by_mode = {} + for mode in self._iter_congestion_enabled_modes(): + mode_name = mode.inputs["parameters"].name + congestion_flows = ( + merged_road_flows + if mode_name in {"car", "carpool"} + else congestion_flows_by_mode.get(mode_name) + ) + + if congestion_flows is None: + continue + + flow_asset = self._create_vehicle_flow_snapshot( + congestion_flows, + run_key=run_key, + is_weekday=is_weekday, + iteration=iteration, + mode_name=mode_name, + ) + if flow_asset is not None: + flow_assets_by_mode[mode_name] = flow_asset + + if not flow_assets_by_mode or run_key is None or is_weekday is None or iteration is None: + return None + + return CongestionState( + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(iteration), + flow_assets_by_mode=flow_assets_by_mode, + ) + + def load( + self, + *, + run_key, + is_weekday, + last_completed_iteration: int, + cost_update_interval: int, + ) -> CongestionState | None: + """Load the congestion state active after the last completed iteration. + + Args: + run_key: Unique identifier of the run owning the congestion state. + is_weekday: Whether the run is the weekday variant. + last_completed_iteration: Latest completed simulation iteration. + cost_update_interval: Number of iterations between congestion updates. + + Returns: + The latest persisted congestion state compatible with the completed + run history, or `None` when no congestion state should exist yet. + """ + if ( + not self.transport_costs.has_enabled_congestion() + or cost_update_interval <= 0 + or last_completed_iteration <= 0 + ): + return None + + latest_refresh_iteration = max( + iteration + for iteration in range(1, int(last_completed_iteration) + 1) + if self.transport_costs.should_recompute_congested_costs(iteration, cost_update_interval) + ) + + flow_assets_by_mode = {} + + for mode in self._iter_congestion_enabled_modes(): + mode_name = mode.inputs["parameters"].name + flow_asset = VehicleODFlowsAsset.from_inputs( + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(latest_refresh_iteration), + mode_name=mode_name, + ) + if flow_asset.cache_path.exists(): + flow_assets_by_mode[mode_name] = flow_asset + + if not flow_assets_by_mode: + return None + + return CongestionState( + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(latest_refresh_iteration), + flow_assets_by_mode=flow_assets_by_mode, + ) + + def _iter_congestion_enabled_modes(self): + """Yield congestion-enabled modes in dependency-safe order.""" + return iter( + sorted( + (mode for mode in self.transport_costs.modes if mode.inputs["parameters"].congestion), + key=lambda mode: ( + mode.inputs["parameters"].name != "car", + mode.inputs["parameters"].name != "carpool", + mode.inputs["parameters"].name, + ), + ) + ) + + def _merge_congestion_flows(self, *congestion_flows): + """Merge multiple congestion-flow tables into one OD vehicle-flow table.""" + valid_flows = [flows for flows in congestion_flows if flows is not None] + if not valid_flows: + return None + + return ( + pl.concat(valid_flows) + .group_by(["from", "to"]) + .agg(pl.col("vehicle_volume").sum()) + .select(["from", "to", "vehicle_volume"]) + ) + + def _create_vehicle_flow_snapshot( + self, + congestion_flows, + *, + run_key=None, + is_weekday=None, + iteration=None, + mode_name: str, + ): + """Persist one mode-specific OD vehicle-flow asset.""" + if run_key is None or is_weekday is None or iteration is None: + return None + + flow_asset = VehicleODFlowsAsset( + congestion_flows.to_pandas(), + run_key=str(run_key), + is_weekday=bool(is_weekday), + iteration=int(iteration), + mode_name=str(mode_name), + ) + flow_asset.get() + return flow_asset diff --git a/mobility/transport/costs/od_flows_asset.py b/mobility/transport/costs/od_flows_asset.py index 19035d4e..4c7252db 100644 --- a/mobility/transport/costs/od_flows_asset.py +++ b/mobility/transport/costs/od_flows_asset.py @@ -18,7 +18,7 @@ class VehicleODFlowsAsset(FileAsset): def __init__( self, - vehicle_od_flows: pd.DataFrame, + vehicle_od_flows: pd.DataFrame | None, *, run_key: str, is_weekday: bool, @@ -38,10 +38,31 @@ def __init__( self._vehicle_od_flows = vehicle_od_flows super().__init__(inputs, cache_path) + @staticmethod + def from_inputs( + *, + run_key: str, + is_weekday: bool, + iteration: int, + mode_name: str, + ) -> "VehicleODFlowsAsset": + return VehicleODFlowsAsset( + vehicle_od_flows=None, + run_key=run_key, + is_weekday=is_weekday, + iteration=iteration, + mode_name=mode_name, + ) + def get_cached_asset(self) -> pd.DataFrame: return pd.read_parquet(self.cache_path) def create_and_get_asset(self) -> pd.DataFrame: + if self._vehicle_od_flows is None: + raise ValueError( + "Cannot create VehicleODFlowsAsset without flow data. " + "Use `from_inputs(...)` only to reconstruct an already persisted asset." + ) self.cache_path.parent.mkdir(parents=True, exist_ok=True) # Ensure the file always exists and has the expected schema, even if empty. diff --git a/mobility/transport/costs/path/__init__.py b/mobility/transport/costs/path/__init__.py index 2d14e8a2..8a930af4 100644 --- a/mobility/transport/costs/path/__init__.py +++ b/mobility/transport/costs/path/__init__.py @@ -1,9 +1,7 @@ from .path_generalized_cost import PathGeneralizedCost from .path_travel_costs import PathTravelCosts -from .path_travel_costs_snapshot import PathTravelCostsSnapshot __all__ = [ "PathGeneralizedCost", "PathTravelCosts", - "PathTravelCostsSnapshot", ] diff --git a/mobility/transport/costs/path/path_travel_costs.py b/mobility/transport/costs/path/path_travel_costs.py index d066e359..8e141ed4 100644 --- a/mobility/transport/costs/path/path_travel_costs.py +++ b/mobility/transport/costs/path/path_travel_costs.py @@ -15,10 +15,9 @@ from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters from mobility.transport.modes.core.osm_capacity_parameters import OSMCapacityParameters from mobility.transport.graphs.modified.modifiers.speed_modifier import SpeedModifier -from mobility.transport.graphs.congested.congested_path_graph_snapshot import CongestedPathGraphSnapshot -from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot +from mobility.transport.graphs.congested.congested_path_graph import CongestedPathGraph +from mobility.transport.graphs.contracted.contracted_path_graph import ContractedPathGraph from mobility.transport.costs.congestion_state import CongestionState -from mobility.transport.costs.path.path_travel_costs_snapshot import PathTravelCostsSnapshot from typing import List @@ -51,6 +50,7 @@ def __init__( congestion: bool = False, congestion_flows_scaling_factor: float = 1.0, speed_modifiers: List[SpeedModifier] = [], + contracted_graph: ContractedPathGraph | None = None, ): """ Initializes a TravelCosts object with the given transport zones and travel mode. @@ -60,23 +60,35 @@ def __init__( mode (str): Mode of transportation for calculating travel costs. """ - path_graph = PathGraph( - mode_name, - transport_zones, - osm_capacity_parameters, - congestion, - congestion_flows_scaling_factor, - speed_modifiers - ) + if contracted_graph is None: + path_graph = PathGraph( + mode_name, + transport_zones, + osm_capacity_parameters, + congestion, + congestion_flows_scaling_factor, + speed_modifiers + ) + simplified_path_graph = path_graph.simplified + modified_path_graph = path_graph.modified + congested_path_graph = path_graph.congested + contracted_path_graph = path_graph.contracted + else: + path_graph = None + contracted_path_graph = contracted_graph + congested_path_graph = contracted_graph.inputs["congested_graph"] + modified_path_graph = congested_path_graph.inputs["modified_graph"] + simplified_path_graph = None inputs = { "transport_zones": transport_zones, "mode_name": mode_name, - "simplified_path_graph": path_graph.simplified, - "modified_path_graph": path_graph.modified, - "congested_path_graph": path_graph.congested, - "contracted_path_graph": path_graph.contracted, - "routing_parameters": routing_parameters + "simplified_path_graph": simplified_path_graph, + "modified_path_graph": modified_path_graph, + "congested_path_graph": congested_path_graph, + "contracted_path_graph": contracted_path_graph, + "routing_parameters": routing_parameters, + "osm_capacity_parameters": osm_capacity_parameters, } cache_path = { @@ -97,9 +109,9 @@ def get(self, congestion: bool = False, congestion_state: CongestionState | None return asset if congestion and congestion_state is not None: - snapshot = self.get_snapshot_asset(congestion_state) - if snapshot is not None: - return snapshot.get() + asset = self.asset_for_congestion_state(congestion_state) + if asset is not None: + return asset.get() return self.get_cached_asset(congestion=congestion) @@ -193,29 +205,49 @@ def compute_costs_by_OD( def get_congested_graph_path(self, flow_asset=None) -> pathlib.Path: """Return the graph path backing the current congested cost view.""" if flow_asset is not None: - return self.build_snapshot_asset(flow_asset).inputs["contracted_graph"].inputs["congested_graph"].get() + return self.asset_for_flow_asset(flow_asset).inputs["contracted_path_graph"].inputs["congested_graph"].get() return self.inputs["congested_path_graph"].get() - def get_snapshot_asset(self, congestion_state: CongestionState) -> PathTravelCostsSnapshot | None: + def asset_for_iteration(self, run, iteration: int): + """Return the travel-cost asset instance corresponding to one simulation iteration.""" + if iteration < 1: + raise ValueError("Iteration should be >= 1.") + if iteration > int(run.parameters.n_iterations): + raise ValueError( + f"Iteration should be <= {int(run.parameters.n_iterations)} for this run." + ) + + flow_asset = self.inputs["congested_path_graph"].get_flow_asset_for_iteration(run, iteration) + if flow_asset is None: + return self + return self.asset_for_flow_asset(flow_asset) + + def get_for_iteration(self, run, iteration: int): + """Materialize the travel costs corresponding to one simulation iteration.""" + return self.asset_for_iteration(run, iteration).get() + + def asset_for_congestion_state(self, congestion_state: CongestionState): flow_asset = congestion_state.for_mode(self.inputs["mode_name"]) if flow_asset is None: return None - return self.build_snapshot_asset(flow_asset) + return self.asset_for_flow_asset(flow_asset) - def build_snapshot_asset(self, flow_asset) -> PathTravelCostsSnapshot: - congested_graph = CongestedPathGraphSnapshot( + def asset_for_flow_asset(self, flow_asset): + congested_graph = CongestedPathGraph( modified_graph=self.inputs["modified_path_graph"], transport_zones=self.inputs["transport_zones"], - vehicle_flows=flow_asset, + handles_congestion=self.inputs["congested_path_graph"].handles_congestion, congestion_flows_scaling_factor=self.inputs["congested_path_graph"].congestion_flows_scaling_factor, + vehicle_flows=flow_asset, ) - contracted_graph = ContractedPathGraphSnapshot(congested_graph) + contracted_graph = ContractedPathGraph(congested_graph) - snapshot = PathTravelCostsSnapshot( + variant = PathTravelCosts( mode_name=self.inputs["mode_name"], transport_zones=self.inputs["transport_zones"], routing_parameters=self.inputs["routing_parameters"], + osm_capacity_parameters=self.inputs["osm_capacity_parameters"], contracted_graph=contracted_graph, ) - return snapshot + return variant diff --git a/mobility/transport/costs/path/path_travel_costs_snapshot.py b/mobility/transport/costs/path/path_travel_costs_snapshot.py deleted file mode 100644 index b074d491..00000000 --- a/mobility/transport/costs/path/path_travel_costs_snapshot.py +++ /dev/null @@ -1,61 +0,0 @@ -import os -import pathlib -import logging -import pandas as pd - -from importlib import resources - -from mobility.runtime.assets.file_asset import FileAsset -from mobility.runtime.r_integration.r_script_runner import RScriptRunner -from mobility.spatial.transport_zones import TransportZones -from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters -from mobility.transport.graphs.contracted.contracted_path_graph_snapshot import ContractedPathGraphSnapshot - - -class PathTravelCostsSnapshot(FileAsset): - """A per-run/iteration travel-cost snapshot based on a contracted graph snapshot.""" - - def __init__( - self, - *, - mode_name: str, - transport_zones: TransportZones, - routing_parameters: PathRoutingParameters, - contracted_graph: ContractedPathGraphSnapshot, - ): - inputs = { - "mode_name": str(mode_name), - "transport_zones": transport_zones, - "routing_parameters": routing_parameters, - "contracted_graph": contracted_graph, - "schema_version": 1, - } - - folder_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - cache_path = folder_path / f"travel_costs_congested_{mode_name}.parquet" - super().__init__(inputs, cache_path) - - def get_cached_asset(self) -> pd.DataFrame: - return pd.read_parquet(self.cache_path) - - def create_and_get_asset(self) -> pd.DataFrame: - logging.info("Computing congested travel costs snapshot...") - - transport_zones: TransportZones = self.inputs["transport_zones"] - contracted_graph: ContractedPathGraphSnapshot = self.inputs["contracted_graph"] - routing_parameters: PathRoutingParameters = self.inputs["routing_parameters"] - - transport_zones.get() - contracted_graph.get() - - script = RScriptRunner(resources.files('mobility.transport.costs.path').joinpath('prepare_dodgr_costs.R')) - script.run( - args=[ - str(transport_zones.cache_path), - str(contracted_graph.cache_path), - str(routing_parameters.max_beeline_distance), - str(self.cache_path), - ] - ) - - return pd.read_parquet(self.cache_path) diff --git a/mobility/transport/costs/transport_costs.py b/mobility/transport/costs/transport_costs.py new file mode 100644 index 00000000..c9a3b5ed --- /dev/null +++ b/mobility/transport/costs/transport_costs.py @@ -0,0 +1,403 @@ +from __future__ import annotations + +import logging +import os +import pathlib + +import polars as pl + +from mobility.transport.costs.congestion_state_manager import CongestionStateManager +from mobility.runtime.assets.file_asset import FileAsset +from mobility.transport.costs.congestion_state import CongestionState + + +class TransportCosts(FileAsset): + """Canonical multimodal transport-cost asset for one run state.""" + + def __init__( + self, + modes, + *, + congestion: bool = False, + congestion_state: CongestionState | None = None, + ): + """Initialize the transport-cost asset. + + Args: + modes: Transport modes contributing generalized costs. + congestion: Whether this asset should build congested costs. + congestion_state: Persisted congestion state applied to congested + modes when building this asset variant. + """ + self.modes = modes + self.congestion_states = CongestionStateManager(self) + inputs = { + mode.inputs["parameters"].name: mode.inputs["generalized_cost"] for mode in modes + } + inputs["version"] = 1 + inputs["congestion"] = bool(congestion) + inputs["congestion_state"] = congestion_state + + cache_path = ( + pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) + / "transport_costs" + / "transport_costs.parquet" + ) + super().__init__(inputs, cache_path) + + def for_iteration(self, iteration: int) -> "TransportCosts": + """Return the static transport-cost variant for one iteration. + + Args: + iteration: One-based simulation iteration. + + Returns: + A transport-cost asset whose modes have been resolved for the given + iteration, before any run-specific congestion state is applied. + """ + + resolved_modes = [ + mode.for_iteration(iteration) if hasattr(mode, "for_iteration") else mode + for mode in self.modes + ] + return TransportCosts( + resolved_modes, + congestion=self.inputs["congestion"], + congestion_state=self.inputs["congestion_state"], + ) + + def asset_for_congestion(self, congestion: bool) -> "TransportCosts": + """Return the transport-cost variant for a congestion flag. + + Args: + congestion: Whether to return the congested or free-flow variant. + + Returns: + A transport-cost asset configured for the requested congestion mode. + """ + return TransportCosts( + self.modes, + congestion=bool(congestion), + congestion_state=None, + ) + + def asset_for_congestion_state( + self, + congestion_state: CongestionState | None, + ) -> "TransportCosts": + """Return the transport-cost variant for an explicit congestion state. + + Args: + congestion_state: Persisted congestion state to apply. + + Returns: + A transport-cost asset bound to the provided congestion state. + """ + return TransportCosts( + self.modes, + congestion=(congestion_state is not None), + congestion_state=congestion_state, + ) + + def asset_for_iteration(self, run, iteration: int) -> "TransportCosts": + """Return the transport-cost asset used at one run iteration. + + Args: + run: GroupDayTrips run providing run identity and parameters. + iteration: One-based simulation iteration. + + Returns: + The transport-cost asset used as input for the requested iteration. + + Raises: + ValueError: If the iteration is outside the run bounds. + """ + if iteration < 1: + raise ValueError("Iteration should be >= 1.") + if iteration > int(run.parameters.n_iterations): + raise ValueError( + f"Iteration should be <= {int(run.parameters.n_iterations)} for this run." + ) + + asset = self.for_iteration(int(iteration)) + + congestion_state = asset.load_congestion_state( + run_key=run.inputs_hash, + is_weekday=run.is_weekday, + last_completed_iteration=iteration - 1, + cost_update_interval=run.parameters.n_iter_per_cost_update, + ) + return asset.asset_for_congestion_state(congestion_state) + + def get_for_iteration(self, run, iteration: int): + """Materialize the transport costs used at one run iteration. + + Args: + run: GroupDayTrips run providing run identity and parameters. + iteration: One-based simulation iteration. + + Returns: + The canonical full-detail cost table used at the requested + simulation iteration. + """ + return self.asset_for_iteration(run, iteration).get() + + def get_cached_asset(self) -> pl.DataFrame: + """Return the persisted canonical full-detail cost table. + + Returns: + The cached multimodal cost table for this asset variant. + """ + logging.info("Transport costs already prepared. Reusing the file : %s", str(self.cache_path)) + return pl.read_parquet(self.cache_path) + + def create_and_get_asset(self) -> pl.DataFrame: + """Build and persist the canonical full-detail cost table. + + Returns: + The newly built multimodal cost table for this asset variant. + """ + costs = self._build_full_detail_costs() + self.cache_path.parent.mkdir(parents=True, exist_ok=True) + costs.write_parquet(self.cache_path) + return costs + + def _build_full_detail_costs(self) -> pl.DataFrame: + """Build the canonical OD-by-mode cost table.""" + costs = [] + + # Put the car first so that road congestion is computed first. + modes = sorted(self.modes, key=lambda mode: mode.inputs["parameters"].name != "car") + + for mode in modes: + generalized_cost = mode.inputs["generalized_cost"] + gc = pl.DataFrame( + generalized_cost.get( + ["cost", "distance", "time"], + congestion=self.inputs["congestion"], + detail_distances=True, + congestion_state=self.inputs["congestion_state"], + ) + ) + costs.append(gc) + + costs = pl.concat(costs, how="diagonal") + + dist_cols = [col for col in costs.columns if "_distance" in col] + if dist_cols: + dist_cols = {col: pl.col(col).fill_null(0.0) for col in dist_cols} + costs = costs.with_columns(**dist_cols) + + costs = costs.with_columns( + ghg_emissions_per_trip=self._ghg_emissions_per_trip_expr(costs.columns, modes) + ) + + return costs.with_columns( + pl.col("from").cast(pl.Int32), + pl.col("to").cast(pl.Int32), + ) + + def _ghg_emissions_per_trip_expr(self, columns: list[str], modes) -> pl.Expr: + """Compute per-trip GHG emissions from detailed distance columns.""" + expressions = [] + + for mode in modes: + params = mode.inputs["parameters"] + if params.multimodal: + distance_column = "public_transport_distance" + elif params.name == "carpool": + distance_column = "carpooling_distance" + else: + distance_column = f"{params.name}_distance" + + if distance_column not in columns: + continue + + expressions.append(pl.col(distance_column) * float(params.ghg_intensity)) + + if not expressions: + return pl.lit(0.0) + + total = expressions[0] + for expression in expressions[1:]: + total = total + expression + return total + + def get_costs_by_od_and_mode( + self, + metrics: list, + detail_distances: bool = False, + ) -> pl.DataFrame: + """Project the canonical table to one OD-by-mode cost view. + + Args: + metrics: Metrics to include in the projected table. + detail_distances: Whether to include detailed distance columns. + + Returns: + An OD-by-mode table with the requested metrics. + """ + metrics = list(metrics) + costs = FileAsset.get(self) + + dist_cols = [col for col in costs.columns if col.endswith("_distance")] + selected_metrics = [metric for metric in metrics if metric != "ghg_emissions"] + if ( + ("ghg_emissions" in metrics or "ghg_emissions_per_trip" in metrics) + and "ghg_emissions_per_trip" not in selected_metrics + ): + selected_metrics.append("ghg_emissions_per_trip") + if detail_distances: + selected_metrics.extend(dist_cols) + + selected_metrics = list(dict.fromkeys(selected_metrics)) + columns = ["from", "to", "mode"] + selected_metrics + + available_columns = [column for column in columns if column in costs.columns] + return costs.select(available_columns) + + def get_costs_by_od( + self, + metrics: list, + ) -> pl.DataFrame: + """Aggregate the canonical table to one OD-only expected-cost view. + + Args: + metrics: Metrics required to compute the OD aggregation. + + Returns: + An OD-only expected generalized-cost table. + """ + costs = self.get_costs_by_od_and_mode(metrics, detail_distances=False) + costs = costs.with_columns((pl.col("cost").neg().exp()).alias("prob")) + costs = costs.with_columns( + (pl.col("prob") / pl.col("prob").sum().over(["from", "to"])).alias("prob") + ) + costs = costs.with_columns((pl.col("prob") * pl.col("cost")).alias("cost")) + return costs.group_by(["from", "to"]).agg(pl.col("cost").sum()) + + def get_prob_by_od_and_mode( + self, + metrics: list, + ): + """Return mode probabilities for each OD pair. + + Args: + metrics: Metrics required to compute the mode probabilities. + + Returns: + An OD-by-mode probability table. + """ + costs = FileAsset.get(self) + + prob = ( + costs + .with_columns(exp_u=pl.col("cost").neg().exp()) + .with_columns(prob=pl.col("exp_u") / pl.col("exp_u").sum().over(["from", "to"])) + .sort(["prob"], descending=True) + .with_columns( + prob_cum=pl.col("prob").cum_sum().over(["from", "to"]), + p_count=pl.col("prob").cum_count().over(["from", "to"]), + ) + .with_columns( + prob_cum=pl.col("prob_cum").shift(1, fill_value=0.0).over(["from", "to"]) + ) + .filter((pl.col("prob_cum") < 0.999)) + .with_columns(prob=pl.col("prob") / pl.col("prob").sum().over(["from", "to"])) + .select(["from", "to", "mode", "prob"]) + ) + + return prob + + def build_congestion_state(self, od_flows_by_mode, *, run_key=None, is_weekday=None, iteration=None): + """Build and persist a congestion state from current OD flows. + + Args: + od_flows_by_mode: Per-mode OD flows aggregated from current plans. + run_key: Unique identifier of the run owning the state. + is_weekday: Whether the run is the weekday variant. + iteration: Simulation iteration that produced the OD flows. + + Returns: + The persisted congestion state, or `None` when no congestion state + should be produced from the provided flows. + """ + return self.congestion_states.build( + od_flows_by_mode, + run_key=run_key, + is_weekday=is_weekday, + iteration=iteration, + ) + + def load_congestion_state( + self, + *, + run_key, + is_weekday, + last_completed_iteration: int, + cost_update_interval: int, + ) -> CongestionState | None: + """Load the congestion state active after the completed run history. + + Args: + run_key: Unique identifier of the run owning the state. + is_weekday: Whether the run is the weekday variant. + last_completed_iteration: Latest completed simulation iteration. + cost_update_interval: Number of iterations between congestion updates. + + Returns: + The latest persisted congestion state compatible with the provided + completed run history, or `None` when no congestion state exists yet. + """ + return self.congestion_states.load( + run_key=run_key, + is_weekday=is_weekday, + last_completed_iteration=last_completed_iteration, + cost_update_interval=cost_update_interval, + ) + + def has_enabled_congestion(self) -> bool: + """Return whether any mode uses congestion-sensitive costs. + + Returns: + `True` when at least one mode is congestion-enabled. + """ + return any(mode.inputs["parameters"].congestion for mode in self.modes) + + def should_recompute_congested_costs(self, iteration: int, update_interval: int) -> bool: + """Return whether congestion should be recomputed at one iteration. + + Args: + iteration: One-based simulation iteration. + update_interval: Number of iterations between congestion updates. + + Returns: + `True` when the iteration triggers a congestion refresh. + """ + return update_interval > 0 and (iteration - 1) % update_interval == 0 + + def get_costs_for_next_iteration( + self, + *, + run, + iteration: int, + od_flows_by_mode, + ): + """Build next-iteration OD costs from current OD flows. + + Args: + run: GroupDayTrips run providing run identity. + iteration: One-based simulation iteration that just completed. + od_flows_by_mode: Per-mode OD flows aggregated from current plans. + + Returns: + The OD-only cost table to use as input for the next iteration. + """ + congestion_state = self.build_congestion_state( + od_flows_by_mode, + run_key=run.inputs_hash, + is_weekday=run.is_weekday, + iteration=iteration, + ) + next_asset = self.asset_for_congestion_state(congestion_state) + return next_asset.get_costs_by_od(["cost", "distance"]) diff --git a/mobility/transport/costs/transport_costs_aggregator.py b/mobility/transport/costs/transport_costs_aggregator.py deleted file mode 100644 index d225d4b4..00000000 --- a/mobility/transport/costs/transport_costs_aggregator.py +++ /dev/null @@ -1,443 +0,0 @@ -from __future__ import annotations - -import polars as pl -import logging - -from typing import List - -from mobility.runtime.assets.in_memory_asset import InMemoryAsset -from mobility.transport.costs.congestion_state import CongestionState -from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset - - -class TransportCostsAggregator(InMemoryAsset): - - def __init__(self, modes): - self.modes = modes - inputs = {mode.inputs["parameters"].name: mode.inputs["generalized_cost"] for mode in modes} - super().__init__(inputs) - - def resolve_for_step(self, step): - """Return a transport-cost aggregator resolved for one simulation step.""" - - resolved_modes = [ - mode.resolve_for_step(step) if hasattr(mode, "resolve_for_step") else mode - for mode in self.modes - ] - return TransportCostsAggregator(resolved_modes) - - - def get( - self, - metrics=["cost", "distance"], - congestion: bool = False, - congestion_state: CongestionState | None = None, - aggregate_by_od: bool = True, - detail_distances: bool = False, - ): - - logging.info("Aggregating costs...") - - if aggregate_by_od is True: - costs = self.get_costs_by_od(metrics, congestion, congestion_state=congestion_state) - else: - costs = self.get_costs_by_od_and_mode( - metrics, - congestion, - detail_distances, - congestion_state=congestion_state, - ) - - return costs - - - def get_costs_by_od(self, metrics: List, congestion: bool, congestion_state: CongestionState | None = None): - - costs = self.get_costs_by_od_and_mode( - metrics, - congestion, - detail_distances=False, - congestion_state=congestion_state, - ) - - costs = costs.with_columns([ - (pl.col("cost").neg().exp()).alias("prob") - ]) - - costs = costs.with_columns([ - (pl.col("prob") / pl.col("prob").sum().over(["from", "to"])).alias("prob") - ]) - - costs = costs.with_columns([ - (pl.col("prob") * pl.col("cost")).alias("cost") - ]) - - costs = costs.group_by(["from", "to"]).agg([ - pl.col("cost").sum() - ]) - - return costs - - - def get_costs_by_od_and_mode( - self, - metrics: List, - congestion: bool, - detail_distances: bool = False, - congestion_state: CongestionState | None = None, - ): - - # Hack to match the current API and compute the GHG emissions from - # detailed distances and GHG intensities in this method, but this - # should be done by the generalized_cost method of each mode. - if "ghg_emissions" in metrics: - original_detail_distances = detail_distances - detail_distances = True - compute_ghg_emissions = True - metrics = [m for m in metrics if m != "ghg_emissions"] - else: - compute_ghg_emissions=False - - costs = [] - - # Put the car first so that road congestion is computed first - modes = sorted(self.modes, key=lambda mode: mode.inputs["parameters"].name != "car") - - for mode in modes: - generalized_cost = mode.inputs["generalized_cost"] - gc = pl.DataFrame( - generalized_cost.get( - metrics, - congestion=congestion, - detail_distances=detail_distances, - congestion_state=congestion_state, - ) - ) - - costs.append( - pl.DataFrame(gc) - ) - - costs = pl.concat(costs, how="diagonal") - - # Replace null distances by zeros - if detail_distances is True: - dist_cols = [col for col in costs.columns if "_distance" in col] - dist_cols = {col: pl.col(col).fill_null(0.0) for col in dist_cols} - costs = costs.with_columns(**dist_cols) - - costs = costs.with_columns([ - pl.col("from").cast(pl.Int32), - pl.col("to").cast(pl.Int32) - ]) - - # Final step of the GHG emissions computation hack above - if compute_ghg_emissions: - - # Build a mode -> GHG emissions polars formula dict - # (uses the multimodal flag to handle the public transport mode, - # this should be improved) - pl_columns = {} - dist_col_names = [] - - for mode in modes: - - mode_name = "public_transport" if mode.inputs["parameters"].multimodal else mode.inputs["parameters"].name - ghg_col_name = mode_name + "_ghg_emissions" - dist_col_name = mode_name + "_distance" - - pl_columns[ghg_col_name] = ( - pl.col(dist_col_name) * mode.inputs["parameters"].ghg_intensity - ) - - dist_col_names.append(dist_col_name) - - - # Compute the GHG emissions with the formulas and then sum them - costs = ( - costs - .with_columns(**pl_columns) - .with_columns( - ghg_emissions_per_trip=pl.sum_horizontal( - list(pl_columns.keys()) - ) - ) - .drop(list(pl_columns.keys())) - ) - - # Keep the detailed distances only if asked in the first place - if original_detail_distances is False: - costs = ( - costs - .drop(dist_col_names) - ) - - - return costs - - - def get_prob_by_od_and_mode( - self, - metrics: List, - congestion: bool, - congestion_state: CongestionState | None = None, - ): - - costs = self.get_costs_by_od_and_mode( - metrics, - congestion, - detail_distances=False, - congestion_state=congestion_state, - ) - - prob = ( - - costs - .with_columns(exp_u=pl.col("cost").neg().exp()) - .with_columns(prob=pl.col("exp_u")/pl.col("exp_u").sum().over(["from", "to"])) - - # Keep only the first 99.9 % of the distribution - .sort(["prob"], descending=True) - .with_columns( - prob_cum=pl.col("prob").cum_sum().over(["from", "to"]), - p_count=pl.col("prob").cum_count().over(["from", "to"]) - ) - .with_columns( - prob_cum=pl.col("prob_cum").shift(1, fill_value=0.0).over(["from", "to"]) - ) - - .filter((pl.col("prob_cum") < 0.999)) - .with_columns(prob=pl.col("prob")/pl.col("prob").sum().over(["from", "to"])) - - .select(["from", "to", "mode", "prob"]) - ) - - return prob - - - def iter_congestion_enabled_modes(self): - """Yield congestion-enabled modes in dependency-safe order.""" - return iter( - sorted( - (mode for mode in self.modes if mode.inputs["parameters"].congestion), - key=lambda mode: ( - mode.inputs["parameters"].name != "car", - mode.inputs["parameters"].name != "carpool", - mode.inputs["parameters"].name, - ), - ) - ) - - def merge_congestion_flows(self, *congestion_flows): - """Merge multiple OD vehicle-flow contributions into one table. - - Args: - *congestion_flows: Optional ``pl.DataFrame`` objects with - ``["from", "to", "vehicle_volume"]``. - - Returns: - pl.DataFrame | None: Merged OD vehicle flows, or ``None`` when no - contribution is provided. - """ - valid_flows = [flows for flows in congestion_flows if flows is not None] - if not valid_flows: - return None - - return ( - pl.concat(valid_flows) - .group_by(["from", "to"]) - .agg(pl.col("vehicle_volume").sum()) - .select(["from", "to", "vehicle_volume"]) - ) - - def create_vehicle_flow_snapshot( - self, - congestion_flows, - *, - run_key=None, - is_weekday=None, - iteration=None, - mode_name: str, - ): - """Persist congestion flows as a period-scoped snapshot asset.""" - if run_key is None or is_weekday is None or iteration is None: - return None - - flow_asset = VehicleODFlowsAsset( - congestion_flows.to_pandas(), - run_key=str(run_key), - is_weekday=bool(is_weekday), - iteration=int(iteration), - mode_name=str(mode_name), - ) - flow_asset.get() - return flow_asset - - def build_congestion_state(self, od_flows_by_mode, *, run_key=None, is_weekday=None, iteration=None): - """Build the explicit congestion state for the current iteration.""" - logging.info("Building congestion state from OD flows...") - congestion_flows_by_mode = { - mode.inputs["parameters"].name: mode.build_congestion_flows(od_flows_by_mode) - for mode in self.iter_congestion_enabled_modes() - } - - merged_road_flows = self.merge_congestion_flows( - congestion_flows_by_mode.get("car"), - congestion_flows_by_mode.get("carpool"), - ) - - flow_assets_by_mode = {} - for mode in self.iter_congestion_enabled_modes(): - mode_name = mode.inputs["parameters"].name - congestion_flows = ( - merged_road_flows - if mode_name in {"car", "carpool"} - else congestion_flows_by_mode.get(mode_name) - ) - - if congestion_flows is None: - continue - - flow_asset = self.create_vehicle_flow_snapshot( - congestion_flows, - run_key=run_key, - is_weekday=is_weekday, - iteration=iteration, - mode_name=mode_name, - ) - if flow_asset is not None: - flow_assets_by_mode[mode_name] = flow_asset - - if not flow_assets_by_mode or run_key is None or is_weekday is None or iteration is None: - return None - - return CongestionState( - run_key=str(run_key), - is_weekday=bool(is_weekday), - iteration=int(iteration), - flow_assets_by_mode=flow_assets_by_mode, - ) - - def load_congestion_state( - self, - *, - run_key, - is_weekday, - last_completed_iteration: int, - cost_update_interval: int, - ) -> CongestionState | None: - """Load the latest persisted congestion state available for a resumed run.""" - - if ( - not self.has_enabled_congestion() - or cost_update_interval <= 0 - or last_completed_iteration <= 0 - ): - return None - - latest_refresh_iteration = max( - iteration - for iteration in range(1, int(last_completed_iteration) + 1) - if self.should_recompute_congested_costs(iteration, cost_update_interval) - ) - - flow_assets_by_mode = {} - empty_flows = pl.DataFrame( - { - "from": pl.Series([], dtype=pl.Int64), - "to": pl.Series([], dtype=pl.Int64), - "vehicle_volume": pl.Series([], dtype=pl.Float64), - } - ).to_pandas() - - for mode in self.iter_congestion_enabled_modes(): - mode_name = mode.inputs["parameters"].name - flow_asset = VehicleODFlowsAsset( - empty_flows, - run_key=str(run_key), - is_weekday=bool(is_weekday), - iteration=int(latest_refresh_iteration), - mode_name=mode_name, - ) - if flow_asset.cache_path.exists(): - flow_assets_by_mode[mode_name] = flow_asset - - if not flow_assets_by_mode: - return None - - return CongestionState( - run_key=str(run_key), - is_weekday=bool(is_weekday), - iteration=int(latest_refresh_iteration), - flow_assets_by_mode=flow_assets_by_mode, - ) - - def has_enabled_congestion(self) -> bool: - """Return whether any mode has congestion feedback enabled. - - Returns: - bool: True when at least one configured mode has congestion enabled. - """ - return any(mode.inputs["parameters"].congestion for mode in self.modes) - - def should_recompute_congested_costs(self, iteration: int, update_interval: int) -> bool: - """Return whether congested costs should be recomputed this iteration. - - Args: - iteration (int): Current model iteration, using 1-based indexing. - update_interval (int): Number of iterations between congestion - recomputations. Zero disables congestion updates. - - Returns: - bool: True when congestion updates are enabled and this iteration - matches the configured recomputation schedule. - """ - return update_interval > 0 and (iteration - 1) % update_interval == 0 - - def get_costs_for_next_iteration( - self, - *, - iteration: int, - cost_update_interval: int, - od_flows_by_mode, - congestion_state: CongestionState | None = None, - run_key=None, - is_weekday=None, - ): - """Return the costs to use after processing the current iteration. - - When congestion is enabled and the update interval matches, this - recomputes congested costs from the current iteration OD flows before - returning the current congested view. Otherwise, it returns the current - cost view unchanged. - - Args: - iteration (int): Current model iteration, using 1-based indexing. - cost_update_interval (int): Number of iterations between congestion - recomputations. Zero disables congestion updates. - od_flows_by_mode (pl.DataFrame): Aggregated OD flows with one row per - ``["from", "to", "mode"]`` and a ``flow_volume`` column. - run_key (str | None): Optional run identifier used to isolate - per-run congestion snapshots. - is_weekday (bool | None): Whether the current simulation pass is the - weekday pass. Used to isolate weekday/weekend flow snapshots. - - Returns: - tuple[pl.DataFrame, CongestionState | None]: The OD costs to use - after processing the current iteration, and the explicit - congestion state that produced them. - """ - if self.should_recompute_congested_costs(iteration, cost_update_interval): - congestion_state = self.build_congestion_state( - od_flows_by_mode, - run_key=run_key, - is_weekday=is_weekday, - iteration=iteration, - ) - return ( - self.get( - congestion=(congestion_state is not None), - congestion_state=congestion_state, - ), - congestion_state, - ) diff --git a/mobility/transport/graphs/congested/__init__.py b/mobility/transport/graphs/congested/__init__.py index 97f6fece..712e45ed 100644 --- a/mobility/transport/graphs/congested/__init__.py +++ b/mobility/transport/graphs/congested/__init__.py @@ -1,4 +1,3 @@ from .congested_path_graph import CongestedPathGraph -from .congested_path_graph_snapshot import CongestedPathGraphSnapshot -__all__ = ["CongestedPathGraph", "CongestedPathGraphSnapshot"] +__all__ = ["CongestedPathGraph"] diff --git a/mobility/transport/graphs/congested/congested_path_graph.py b/mobility/transport/graphs/congested/congested_path_graph.py index 774c235c..190a7315 100644 --- a/mobility/transport/graphs/congested/congested_path_graph.py +++ b/mobility/transport/graphs/congested/congested_path_graph.py @@ -1,17 +1,14 @@ import os import pathlib import logging -import dataclasses -import json from importlib import resources from mobility.runtime.assets.file_asset import FileAsset from mobility.runtime.r_integration.r_script_runner import RScriptRunner +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset from mobility.transport.graphs.modified.modified_path_graph import ModifiedPathGraph from mobility.spatial.transport_zones import TransportZones -from typing import List - class CongestedPathGraph(FileAsset): def __init__( @@ -19,13 +16,15 @@ def __init__( modified_graph: ModifiedPathGraph, transport_zones: TransportZones, handles_congestion: bool = False, - congestion_flows_scaling_factor: float = 1.0 + congestion_flows_scaling_factor: float = 1.0, + vehicle_flows: VehicleODFlowsAsset | None = None, ): inputs = { "mode_name": modified_graph.mode_name, "modified_graph": modified_graph, "transport_zones": transport_zones, + "vehicle_flows": vehicle_flows, "handles_congestion": handles_congestion, "congestion_flows_scaling_factor": congestion_flows_scaling_factor } @@ -45,11 +44,17 @@ def get_cached_asset(self) -> pathlib.Path: return self.cache_path - def create_and_get_asset(self, enable_congestion: bool = False, flows_file_path: pathlib.Path | None = None) -> pathlib.Path: + def create_and_get_asset(self) -> pathlib.Path: logging.info("Loading graph with traffic...") - if flows_file_path is None: + vehicle_flows = self.inputs["vehicle_flows"] + if vehicle_flows is None: flows_file_path = self.flows_file_path + enable_congestion = False + else: + vehicle_flows.get() + flows_file_path = vehicle_flows.cache_path + enable_congestion = True self.load_graph( self.inputs["modified_graph"].get(), @@ -85,17 +90,59 @@ def load_graph( return None + def asset_for_iteration(self, run, iteration: int) -> "CongestedPathGraph": + """Return the graph instance corresponding to the congestion active at one iteration.""" + if iteration < 1: + raise ValueError("Iteration should be >= 1.") + if iteration > int(run.parameters.n_iterations): + raise ValueError( + f"Iteration should be <= {int(run.parameters.n_iterations)} for this run." + ) + + flow_asset = self.get_flow_asset_for_iteration(run, iteration) + if flow_asset is None: + return self + + return CongestedPathGraph( + modified_graph=self.inputs["modified_graph"], + transport_zones=self.inputs["transport_zones"], + vehicle_flows=flow_asset, + handles_congestion=self.inputs["handles_congestion"], + congestion_flows_scaling_factor=self.inputs["congestion_flows_scaling_factor"], + ) - def update(self, od_flows, flow_asset=None): - - if self.inputs["handles_congestion"] is True: - - if flow_asset is None: - od_flows.write_parquet(self.flows_file_path) - self.create_and_get_asset(enable_congestion=True) - else: - # flow_asset is expected to already be a parquet with the right schema. - flow_asset.get() - self.create_and_get_asset(enable_congestion=True, flows_file_path=flow_asset.cache_path) + def get_for_iteration(self, run, iteration: int): + """Materialize the graph payload corresponding to one simulation iteration.""" + return self.asset_for_iteration(run, iteration).get() + + def get_flow_asset_for_iteration(self, run, iteration: int) -> VehicleODFlowsAsset | None: + """Return the persisted flow asset backing the congestion active at one iteration.""" + if self.inputs["handles_congestion"] is False: + return None + + cost_update_interval = int(run.parameters.n_iter_per_cost_update) + if cost_update_interval <= 0 or iteration <= 1: + return None + + source_iteration = max( + update_iteration + for update_iteration in range(1, int(iteration)) + if (update_iteration - 1) % cost_update_interval == 0 + ) + + flow_asset = VehicleODFlowsAsset.from_inputs( + run_key=str(run.inputs_hash), + is_weekday=bool(run.is_weekday), + iteration=int(source_iteration), + mode_name=str(self.inputs["mode_name"]), + ) + if flow_asset.cache_path.exists() is False: + raise RuntimeError( + "Missing persisted congestion flow asset for " + f"run_key={run.inputs_hash}, is_weekday={run.is_weekday}, " + f"mode={self.inputs['mode_name']}, source_iteration={source_iteration}. " + "Rerun the simulation from scratch." + ) + return flow_asset diff --git a/mobility/transport/graphs/congested/congested_path_graph_snapshot.py b/mobility/transport/graphs/congested/congested_path_graph_snapshot.py deleted file mode 100644 index e390ec4d..00000000 --- a/mobility/transport/graphs/congested/congested_path_graph_snapshot.py +++ /dev/null @@ -1,66 +0,0 @@ -import os -import pathlib -import logging - -from importlib import resources - -from mobility.runtime.assets.file_asset import FileAsset -from mobility.runtime.r_integration.r_script_runner import RScriptRunner -from mobility.transport.graphs.modified.modified_path_graph import ModifiedPathGraph -from mobility.spatial.transport_zones import TransportZones -from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset - - -class CongestedPathGraphSnapshot(FileAsset): - """A per-run/iteration congested graph snapshot. - - This is the "variant" layer: it depends on a stable modified graph and a - VehicleODFlowsAsset, so different seeds/iterations produce distinct cache - files without invalidating upstream base graphs. - """ - - def __init__( - self, - modified_graph: ModifiedPathGraph, - transport_zones: TransportZones, - vehicle_flows: VehicleODFlowsAsset, - congestion_flows_scaling_factor: float, - ): - inputs = { - "mode_name": modified_graph.mode_name, - "modified_graph": modified_graph, - "transport_zones": transport_zones, - "vehicle_flows": vehicle_flows, - "congestion_flows_scaling_factor": float(congestion_flows_scaling_factor), - "schema_version": 1, - } - - mode_name = modified_graph.mode_name - folder_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - file_name = pathlib.Path("path_graph_" + mode_name) / "congested" / (mode_name + "-congested-path-graph") - cache_path = folder_path / file_name - - super().__init__(inputs, cache_path) - - def get_cached_asset(self) -> pathlib.Path: - logging.info("Congested snapshot graph already prepared. Reusing: " + str(self.cache_path)) - return self.cache_path - - def create_and_get_asset(self) -> pathlib.Path: - vehicle_flows: VehicleODFlowsAsset = self.inputs["vehicle_flows"] - logging.info("Building congested snapshot graph...") - vehicle_flows.get() # ensure parquet exists - - script = RScriptRunner(resources.files('mobility.transport.graphs.congested').joinpath('load_path_graph.R')) - script.run( - args=[ - str(self.inputs["modified_graph"].get()), - str(self.inputs["transport_zones"].cache_path), - "True", - str(vehicle_flows.cache_path), - str(self.inputs["congestion_flows_scaling_factor"]), - str(self.cache_path), - ] - ) - - return self.cache_path diff --git a/mobility/transport/graphs/contracted/__init__.py b/mobility/transport/graphs/contracted/__init__.py index 29207c29..77599fea 100644 --- a/mobility/transport/graphs/contracted/__init__.py +++ b/mobility/transport/graphs/contracted/__init__.py @@ -1,4 +1,3 @@ from .contracted_path_graph import ContractedPathGraph -from .contracted_path_graph_snapshot import ContractedPathGraphSnapshot -__all__ = ["ContractedPathGraph", "ContractedPathGraphSnapshot"] +__all__ = ["ContractedPathGraph"] diff --git a/mobility/transport/graphs/contracted/contracted_path_graph.py b/mobility/transport/graphs/contracted/contracted_path_graph.py index 67798ee9..46741027 100644 --- a/mobility/transport/graphs/contracted/contracted_path_graph.py +++ b/mobility/transport/graphs/contracted/contracted_path_graph.py @@ -6,7 +6,6 @@ from mobility.runtime.assets.file_asset import FileAsset from mobility.runtime.r_integration.r_script_runner import RScriptRunner from mobility.transport.graphs.congested.congested_path_graph import CongestedPathGraph -from mobility.spatial.transport_zones import TransportZones class ContractedPathGraph(FileAsset): @@ -59,14 +58,5 @@ def contract_graph( ) return None - - def update(self, od_flows, flow_asset=None): - - if self.congested_graph.handles_congestion is True: - - logging.info("Rebuilding contracted graph given OD flows and congestion...") - - self.congested_graph.update(od_flows, flow_asset=flow_asset) - self.create_and_get_asset() diff --git a/mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py b/mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py deleted file mode 100644 index d5bdf166..00000000 --- a/mobility/transport/graphs/contracted/contracted_path_graph_snapshot.py +++ /dev/null @@ -1,36 +0,0 @@ -import os -import pathlib -import logging - -from importlib import resources - -from mobility.runtime.assets.file_asset import FileAsset -from mobility.runtime.r_integration.r_script_runner import RScriptRunner -from mobility.transport.graphs.congested.congested_path_graph_snapshot import CongestedPathGraphSnapshot - - -class ContractedPathGraphSnapshot(FileAsset): - """A per-run/iteration contracted graph derived from a congested snapshot.""" - - def __init__(self, congested_graph: CongestedPathGraphSnapshot): - inputs = {"congested_graph": congested_graph, "schema_version": 1} - - mode_name = congested_graph.inputs["mode_name"] - folder_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) - file_name = pathlib.Path("path_graph_" + mode_name) / "contracted" / (mode_name + "-contracted-path-graph") - cache_path = folder_path / file_name - - super().__init__(inputs, cache_path) - - def get_cached_asset(self) -> pathlib.Path: - logging.info("Contracted snapshot graph already prepared. Reusing: " + str(self.cache_path)) - return self.cache_path - - def create_and_get_asset(self) -> pathlib.Path: - logging.info("Contracting snapshot graph...") - - congested_graph_path = self.inputs["congested_graph"].get() - script = RScriptRunner(resources.files('mobility.transport.graphs.contracted').joinpath('contract_path_graph.R')) - script.run(args=[str(congested_graph_path), str(self.cache_path)]) - - return self.cache_path diff --git a/mobility/transport/modes/bicycle.py b/mobility/transport/modes/bicycle.py index 39147700..7f976060 100644 --- a/mobility/transport/modes/bicycle.py +++ b/mobility/transport/modes/bicycle.py @@ -41,7 +41,13 @@ def __init__( cost_of_time=CostOfTimeParameters() ) - travel_costs = PathTravelCosts(mode_name, transport_zones, routing_parameters, osm_capacity_parameters, speed_modifiers=speed_modifiers) + travel_costs = PathTravelCosts( + mode_name=mode_name, + transport_zones=transport_zones, + routing_parameters=routing_parameters, + osm_capacity_parameters=osm_capacity_parameters, + speed_modifiers=speed_modifiers, + ) generalized_cost = PathGeneralizedCost(travel_costs, generalized_cost_parameters, mode_name) super().__init__( diff --git a/mobility/transport/modes/car.py b/mobility/transport/modes/car.py index 4c2aa6c6..e5712882 100644 --- a/mobility/transport/modes/car.py +++ b/mobility/transport/modes/car.py @@ -66,13 +66,13 @@ def __init__( travel_costs = PathTravelCosts( - mode_name, - transport_zones, - routing_parameters, - osm_capacity_parameters, - mode_congestion, - congestion_flows_scaling_factor, - speed_modifiers + mode_name=mode_name, + transport_zones=transport_zones, + routing_parameters=routing_parameters, + osm_capacity_parameters=osm_capacity_parameters, + congestion=mode_congestion, + congestion_flows_scaling_factor=congestion_flows_scaling_factor, + speed_modifiers=speed_modifiers, ) generalized_cost = PathGeneralizedCost( diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py index 5e985685..913fa81b 100644 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py +++ b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs.py @@ -14,11 +14,9 @@ from mobility.runtime.assets.file_asset import FileAsset from mobility.runtime.r_integration.r_script_runner import RScriptRunner from mobility.transport.costs.congestion_state import CongestionState +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset from mobility.transport.modes.core.modal_transfer import IntermodalTransfer from mobility.transport.costs.path.path_travel_costs import PathTravelCosts -from mobility.transport.modes.carpool.detailed.detailed_carpool_travel_costs_snapshot import ( - DetailedCarpoolTravelCostsSnapshot, -) class DetailedCarpoolTravelCosts(FileAsset): @@ -27,12 +25,14 @@ def __init__( car_travel_costs: PathTravelCosts, parameters: "DetailedCarpoolRoutingParameters", modal_transfer: IntermodalTransfer, + road_flow_asset: VehicleODFlowsAsset | None = None, ): inputs = { "car_travel_costs": car_travel_costs, "parameters": parameters, - "modal_transfer": modal_transfer + "modal_transfer": modal_transfer, + "road_flow_asset": road_flow_asset, } cache_path = { @@ -54,9 +54,9 @@ def get(self, congestion: bool = False, congestion_state: CongestionState | None return asset if congestion and congestion_state is not None: - snapshot = self.get_snapshot_asset(congestion_state) - if snapshot is not None: - return snapshot.get() + asset = self.asset_for_congestion_state(congestion_state) + if asset is not None: + return asset.get() return self.get_cached_asset(congestion=congestion) @@ -106,7 +106,7 @@ def compute_travel_costs( script = RScriptRunner(resources.files('mobility.transport.modes.carpool.detailed').joinpath('compute_carpool_travel_costs.R')) if congestion is True: - graph = car_travel_costs.get_congested_graph_path() + graph = car_travel_costs.get_congested_graph_path(self.inputs["road_flow_asset"]) else: graph = car_travel_costs.modified_path_graph.get() @@ -126,21 +126,43 @@ def compute_travel_costs( return costs - def get_snapshot_asset( + def asset_for_congestion_state( self, congestion_state: CongestionState, - ) -> DetailedCarpoolTravelCostsSnapshot | None: + ): flow_asset = congestion_state.for_mode("carpool") if flow_asset is None: return None - return DetailedCarpoolTravelCostsSnapshot( + return self.asset_for_flow_asset(flow_asset) + + def asset_for_flow_asset(self, flow_asset: VehicleODFlowsAsset): + return DetailedCarpoolTravelCosts( car_travel_costs=self.inputs["car_travel_costs"], parameters=self.inputs["parameters"], modal_transfer=self.inputs["modal_transfer"], road_flow_asset=flow_asset, ) + def asset_for_iteration(self, run, iteration: int): + if iteration < 1: + raise ValueError("Iteration should be >= 1.") + if iteration > int(run.parameters.n_iterations): + raise ValueError( + f"Iteration should be <= {int(run.parameters.n_iterations)} for this run." + ) + + flow_asset = self.inputs["car_travel_costs"].inputs["congested_path_graph"].get_flow_asset_for_iteration( + run, + iteration, + ) + if flow_asset is None: + return self + return self.asset_for_flow_asset(flow_asset) + + def get_for_iteration(self, run, iteration: int): + return self.asset_for_iteration(run, iteration).get() + class DetailedCarpoolRoutingParameters(BaseModel): """ diff --git a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py b/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py deleted file mode 100644 index ab301238..00000000 --- a/mobility/transport/modes/carpool/detailed/detailed_carpool_travel_costs_snapshot.py +++ /dev/null @@ -1,58 +0,0 @@ -import json -import os -import pathlib - -import pandas as pd - -from importlib import resources - -from mobility.runtime.assets.file_asset import FileAsset -from mobility.runtime.r_integration.r_script_runner import RScriptRunner - - -class DetailedCarpoolTravelCostsSnapshot(FileAsset): - """Per-congestion-state carpool travel costs derived from a road snapshot.""" - - def __init__( - self, - *, - car_travel_costs, - parameters, - modal_transfer, - road_flow_asset, - ): - inputs = { - "car_travel_costs": car_travel_costs, - "parameters": parameters, - "modal_transfer": modal_transfer, - "road_flow_asset": road_flow_asset, - "schema_version": 1, - } - - cache_path = pathlib.Path(os.environ["MOBILITY_PROJECT_DATA_FOLDER"]) / "travel_costs_congested_carpool.parquet" - super().__init__(inputs, cache_path) - - def get_cached_asset(self) -> pd.DataFrame: - return pd.read_parquet(self.cache_path) - - def create_and_get_asset(self) -> pd.DataFrame: - car_travel_costs = self.inputs["car_travel_costs"] - graph = car_travel_costs.get_congested_graph_path(self.inputs["road_flow_asset"]) - - script = RScriptRunner( - resources.files("mobility.transport.modes.carpool.detailed").joinpath( - "compute_carpool_travel_costs.R" - ) - ) - script.run( - args=[ - str(car_travel_costs.transport_zones.cache_path), - str(car_travel_costs.transport_zones.study_area.cache_path["polygons"]), - str(graph), - str(graph), - json.dumps(self.inputs["modal_transfer"].model_dump(mode="json")), - str(self.cache_path), - ] - ) - - return pd.read_parquet(self.cache_path) diff --git a/mobility/transport/modes/public_transport/public_transport.py b/mobility/transport/modes/public_transport/public_transport.py index 507d120c..84162045 100644 --- a/mobility/transport/modes/public_transport/public_transport.py +++ b/mobility/transport/modes/public_transport/public_transport.py @@ -2,7 +2,7 @@ from typing import List -from mobility.runtime.parameter_profiles import SimulationStep, resolve_model_for_step +from mobility.runtime.parameter_profiles import resolve_model_for_iteration from mobility.spatial.transport_zones import TransportZones from mobility.transport.modes.core.transport_mode import TransportMode, TransportModeParameters from mobility.transport.modes.core.mode_registry import ModeRegistry @@ -147,11 +147,11 @@ def audit_gtfs(self): travel_costs = self.inputs["travel_costs"].audit_gtfs() return travel_costs - def resolve_for_step(self, step: SimulationStep) -> "PublicTransport": + def for_iteration(self, iteration: int) -> "PublicTransport": """Return a PT mode with routing parameters resolved for one iteration.""" - + routing_parameters = self.inputs["travel_costs"].inputs["parameters"] - resolved_routing_parameters = resolve_model_for_step(routing_parameters, step) + resolved_routing_parameters = resolve_model_for_iteration(routing_parameters, iteration) if resolved_routing_parameters == routing_parameters: return self diff --git a/mobility/transport/modes/public_transport/public_transport_graph.py b/mobility/transport/modes/public_transport/public_transport_graph.py index 77d8cf1f..bf3c4043 100644 --- a/mobility/transport/modes/public_transport/public_transport_graph.py +++ b/mobility/transport/modes/public_transport/public_transport_graph.py @@ -142,7 +142,7 @@ class PublicTransportRoutingParameters(BaseModel): float, Field(default=DEFAULT_LONG_RANGE_MOTORIZED_MAX_BEELINE_DISTANCE_KM, gt=0.0), ] - additional_gtfs_files: Annotated[list[str] | ListParameterProfile | None, Field(default=None)] + additional_gtfs_files: Annotated[ListParameterProfile | list[str] | None, Field(default=None)] expected_agencies: Annotated[list[str] | None, Field(default=None)] @model_validator(mode="after") diff --git a/mobility/transport/modes/walk.py b/mobility/transport/modes/walk.py index b4c63e3d..261a0138 100644 --- a/mobility/transport/modes/walk.py +++ b/mobility/transport/modes/walk.py @@ -42,10 +42,10 @@ def __init__( ) travel_costs = PathTravelCosts( - mode_name, - transport_zones, - routing_parameters, - osm_capacity_parameters + mode_name=mode_name, + transport_zones=transport_zones, + routing_parameters=routing_parameters, + osm_capacity_parameters=osm_capacity_parameters, ) generalized_cost = PathGeneralizedCost( diff --git a/mobility/trips/group_day_trips/core/group_day_trips.py b/mobility/trips/group_day_trips/core/group_day_trips.py index 71e0923a..2e59d7ae 100644 --- a/mobility/trips/group_day_trips/core/group_day_trips.py +++ b/mobility/trips/group_day_trips/core/group_day_trips.py @@ -2,7 +2,7 @@ from typing import Dict, List from mobility.runtime.assets.asset import Asset -from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator +from mobility.transport.costs.transport_costs import TransportCosts from .parameters import Parameters from .run import Run from mobility.activities import Activity, Home, Other @@ -36,7 +36,7 @@ def __init__( The wrapper validates its high-level inputs, normalizes constructor parameters into a `Parameters` instance, builds a shared - `TransportCostsAggregator`, and creates one underlying `Run` + `TransportCosts`, and creates one underlying `Run` asset for weekdays plus one for weekends. The weekend run is enabled or disabled according to `simulate_weekend`. @@ -99,11 +99,11 @@ def __init__( owner_name="GroupDayTrips", ) - costs_aggregator = TransportCostsAggregator(modes) + transport_costs = TransportCosts(modes) weekday_run = Run( population=population, - costs_aggregator=costs_aggregator, + transport_costs=transport_costs, activities=activities, modes=modes, surveys=surveys, @@ -114,7 +114,7 @@ def __init__( weekend_run = Run( population=population, - costs_aggregator=costs_aggregator, + transport_costs=transport_costs, activities=activities, modes=modes, surveys=surveys, diff --git a/mobility/trips/group_day_trips/core/results.py b/mobility/trips/group_day_trips/core/results.py index b294f9ff..8dde4830 100644 --- a/mobility/trips/group_day_trips/core/results.py +++ b/mobility/trips/group_day_trips/core/results.py @@ -35,6 +35,8 @@ def __init__( transitions, surveys, modes, + parameters, + run, ): self.inputs_hash = inputs_hash self.is_weekday = is_weekday @@ -47,6 +49,8 @@ def __init__( self.transitions = transitions self.surveys = surveys self.modes = modes + self.parameters = parameters + self.run = run self.metrics_methods = { "global_metrics": self.global_metrics, @@ -106,7 +110,12 @@ def aggregate(df): time=(pl.col("time") * pl.col("n_persons")).sum(), distance=(pl.col("distance") * pl.col("n_persons")).sum(), ) - .unpivot(index="country") + .unpivot( + index="country", + on=["n_trips", "time", "distance"], + variable_name="variable", + value_name="value", + ) .collect(engine="streaming") ) @@ -170,7 +179,12 @@ def aggregate(df): time=(pl.col("time") * pl.col("n_persons")).sum(), distance=(pl.col("distance") * pl.col("n_persons")).sum(), ) - .melt(variable) + .unpivot( + index=variable, + on=["n_trips", "time", "distance"], + variable_name="variable", + value_name="value", + ) .collect(engine="streaming") ) @@ -201,7 +215,12 @@ def aggregate(df): if plot: comparison_plot_df = ( comparison.select(["variable", variable, "value", "value_ref"]) - .melt(["variable", variable], variable_name="value_type") + .unpivot( + index=["variable", variable], + on=["value", "value_ref"], + variable_name="value_type", + value_name="value", + ) .sort(variable) ) @@ -270,7 +289,12 @@ def immobility(self, plot: bool = True): if plot: immobility_m = ( immobility.select(["country", "csp", "n_persons_imm", "n_persons_imm_ref"]) - .melt(["country", "csp"], value_name="n_pers_immobility") + .unpivot( + index=["country", "csp"], + on=["n_persons_imm", "n_persons_imm_ref"], + variable_name="variable", + value_name="n_pers_immobility", + ) .sort("csp") ) fig = px.bar( @@ -581,7 +605,6 @@ def plot_od_flows( if mode == "count": population_df["mode"] = population_df["mode"].fillna("unknown_mode") count_modes = population_df.groupby("mode")[["mode"]].count() - print(count_modes) return count_modes if mode == "public_transport": mode_name = "Public transport" diff --git a/mobility/trips/group_day_trips/core/run.py b/mobility/trips/group_day_trips/core/run.py index 7325a5b0..cc820a9b 100644 --- a/mobility/trips/group_day_trips/core/run.py +++ b/mobility/trips/group_day_trips/core/run.py @@ -6,19 +6,17 @@ import polars as pl -from mobility.transport.costs.congestion_state import CongestionState from ..iterations import Iteration, Iterations from ..plans import DestinationSequences, ModeSequences, PlanInitializer, PlanUpdater from .parameters import Parameters from .results import RunResults from .run_state import RunState -from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator +from mobility.transport.costs.transport_costs import TransportCosts from mobility.runtime.assets.file_asset import FileAsset from mobility.activities import Activity from mobility.activities.activity import resolve_activity_parameters from mobility.surveys import MobilitySurvey from mobility.population import Population -from mobility.runtime.parameter_profiles import SimulationStep from mobility.transport.modes.core.transport_mode import TransportMode @@ -29,7 +27,7 @@ def __init__( self, *, population: Population, - costs_aggregator: TransportCostsAggregator, + transport_costs: TransportCosts, activities: List[Activity], modes: List[TransportMode], surveys: List[MobilitySurvey], @@ -41,7 +39,6 @@ def __init__( inputs = { "version": 1, "population": population, - "costs_aggregator": costs_aggregator, "activities": activities, "modes": modes, "surveys": surveys, @@ -49,7 +46,8 @@ def __init__( "is_weekday": is_weekday, "enabled": enabled, } - + + self.transport_costs = transport_costs self.rng = random.Random(parameters.seed) if parameters.seed is not None else random.Random() self.initializer = PlanInitializer() self.updater = PlanUpdater() @@ -148,8 +146,7 @@ def _build_state( chains_by_activity, demand_groups, ) - step = SimulationStep(iteration=1) - resolved_activity_parameters = resolve_activity_parameters(self.activities, step) + resolved_activity_parameters = resolve_activity_parameters(self.activities, 1) stay_home_plan, current_plans = self.initializer.get_stay_home_state( demand_groups, home_night_dur, @@ -171,11 +168,7 @@ def _build_state( opportunities=opportunities, current_plans=current_plans, remaining_opportunities=opportunities.clone(), - costs=self.initializer.get_current_costs( - self.costs_aggregator.resolve_for_step(step), - congestion=False, - ), - congestion_state=None, + costs=self.transport_costs.asset_for_iteration(self, 1).get_costs_by_od(["cost", "distance"]), start_iteration=1, ) self._restore_saved_state( @@ -220,12 +213,6 @@ def _restore_saved_state( state.current_plans = saved_state.current_plans state.current_plan_steps = saved_state.current_plan_steps state.remaining_opportunities = saved_state.remaining_opportunities - state.congestion_state = self.costs_aggregator.load_congestion_state( - run_key=self.inputs_hash, - is_weekday=self.is_weekday, - last_completed_iteration=resume_from_iteration, - cost_update_interval=self.parameters.n_iter_per_cost_update, - ) state.start_iteration = resume_from_iteration + 1 logging.info( @@ -234,11 +221,11 @@ def _restore_saved_state( str(self.is_weekday), str(resume_from_iteration), ) - state.costs = self.costs_aggregator.resolve_for_step( - SimulationStep(iteration=state.start_iteration) - ).get( - congestion=(state.congestion_state is not None), - congestion_state=state.congestion_state, + state.costs = self.transport_costs.asset_for_iteration( + self, + state.start_iteration, + ).get_costs_by_od( + ["cost", "distance"], ) @@ -251,8 +238,7 @@ def _run_model_iteration( """Execute one simulation iteration and update the mutable run state.""" logging.info("Iteration %s", str(iteration.iteration)) seed = self.rng.getrandbits(64) - step = SimulationStep(iteration=iteration.iteration) - resolved_costs_aggregator = self.costs_aggregator.resolve_for_step(step) + resolved_transport_costs = self.transport_costs.for_iteration(iteration.iteration) destination_sequences = self._sample_and_write_destination_sequences( state, @@ -263,14 +249,14 @@ def _run_model_iteration( state, iteration, destination_sequences, - resolved_costs_aggregator, + resolved_transport_costs, ) transition_events = self._update_iteration_state( state, iteration, destination_sequences, mode_sequences, - resolved_costs_aggregator, + resolved_transport_costs, ) iteration.save_transition_events(transition_events) @@ -282,8 +268,7 @@ def _sample_and_write_destination_sequences( seed: int, ) -> DestinationSequences: """Run destination sampling and persist destination sequences for one iteration.""" - step = SimulationStep(iteration=iteration.iteration) - resolved_activity_parameters = resolve_activity_parameters(self.activities, step) + resolved_activity_parameters = resolve_activity_parameters(self.activities, iteration.iteration) destination_sequences = iteration.destination_sequences( activities=self.activities, resolved_activity_parameters=resolved_activity_parameters, @@ -306,14 +291,13 @@ def _search_and_write_mode_sequences( state: RunState, iteration: Iteration, destination_sequences: DestinationSequences, - resolved_costs_aggregator: TransportCostsAggregator, + resolved_transport_costs: TransportCosts, ) -> ModeSequences: """Run mode-sequence search and persist the results for one iteration.""" mode_sequences = iteration.mode_sequences( destination_sequences=destination_sequences, - costs_aggregator=resolved_costs_aggregator, + transport_costs=resolved_transport_costs, parameters=self.parameters, - congestion_state=state.congestion_state, ) mode_sequences.get() return mode_sequences @@ -325,18 +309,16 @@ def _update_iteration_state( iteration: Iteration, destination_sequences: DestinationSequences, mode_sequences: ModeSequences, - resolved_costs_aggregator: TransportCostsAggregator, + resolved_transport_costs: TransportCosts, ) -> pl.DataFrame: """Advance the simulation state by one iteration and return transition events.""" - step = SimulationStep(iteration=iteration.iteration) - resolved_activity_parameters = resolve_activity_parameters(self.activities, step) + resolved_activity_parameters = resolve_activity_parameters(self.activities, iteration.iteration) state.current_plans, state.current_plan_steps, transition_events = self.updater.get_new_plans( state.current_plans, state.current_plan_steps, state.demand_groups, state.chains_by_activity, - resolved_costs_aggregator, - state.congestion_state, + resolved_transport_costs, state.remaining_opportunities, state.activity_dur, iteration.iteration, @@ -347,15 +329,13 @@ def _update_iteration_state( state.stay_home_plan, self.parameters, ) - state.costs, state.congestion_state = self.updater.get_new_costs( + state.costs = self.updater.get_new_costs( state.costs, iteration.iteration, self.parameters.n_iter_per_cost_update, state.current_plan_steps, - self.costs_aggregator.resolve_for_step(SimulationStep(iteration=iteration.iteration + 1)), - congestion_state=state.congestion_state, - run_key=iteration.iterations.run_inputs_hash, - is_weekday=self.is_weekday, + self.transport_costs.for_iteration(iteration.iteration + 1), + run=self, ) state.remaining_opportunities = self.updater.get_new_opportunities( state.current_plan_steps, @@ -379,12 +359,11 @@ def _assert_current_plan_steps_are_available(self, state: RunState) -> None: def _build_final_costs(self, state: RunState) -> pl.DataFrame: """Compute the final OD costs to attach to the written outputs.""" - return self.costs_aggregator.resolve_for_step( - SimulationStep(iteration=self.parameters.n_iterations) + return self.transport_costs.asset_for_iteration( + self, + self.parameters.n_iterations, ).get_costs_by_od_and_mode( - ["cost", "distance", "time", "ghg_emissions"], - congestion=(state.congestion_state is not None), - congestion_state=state.congestion_state, + ["cost", "distance", "time", "ghg_emissions_per_trip"] ) @@ -462,6 +441,8 @@ def results(self) -> RunResults: transitions=cached["transitions"], surveys=self.surveys, modes=self.modes, + parameters=self.parameters, + run=self, ) diff --git a/mobility/trips/group_day_trips/core/run_state.py b/mobility/trips/group_day_trips/core/run_state.py index 770445d3..0e5dc5ea 100644 --- a/mobility/trips/group_day_trips/core/run_state.py +++ b/mobility/trips/group_day_trips/core/run_state.py @@ -2,8 +2,6 @@ import polars as pl -from mobility.transport.costs.congestion_state import CongestionState - @dataclass class RunState: @@ -17,6 +15,5 @@ class RunState: current_plans: pl.DataFrame remaining_opportunities: pl.DataFrame costs: pl.DataFrame - congestion_state: CongestionState | None start_iteration: int current_plan_steps: pl.DataFrame | None = None diff --git a/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py b/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py index 9214134e..20991748 100644 --- a/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py +++ b/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py @@ -12,7 +12,8 @@ def __init__(self, results): def get( - self + self, + iteration: int = 1 ): car_mode = [m for m in self.results.modes if m.inputs["parameters"].name == "car"] @@ -21,9 +22,12 @@ def get( raise ValueError("No car mode in the model.") car_mode = car_mode[0] + travel_costs = car_mode.inputs["travel_costs"] - freeflow_graph = self.build_graph_lines_dataframe(car_mode.inputs["travel_costs"].modified_path_graph) - congested_graph = self.build_graph_lines_dataframe(car_mode.inputs["travel_costs"].congested_path_graph) + congested_graph_asset = travel_costs.asset_for_iteration(self.results.run, iteration).inputs["congested_path_graph"] + + freeflow_graph = self.build_graph_lines_dataframe(travel_costs.modified_path_graph) + congested_graph = self.build_graph_lines_dataframe(congested_graph_asset) comparison = ( freeflow_graph @@ -48,7 +52,7 @@ def get( crs="EPSG:3035" ) - fp = car_mode.inputs["travel_costs"].modified_path_graph.cache_path.parent / "congestion.gpkg" + fp = travel_costs.modified_path_graph.cache_path.parent / f"congestion-iter-{iteration}.gpkg" gdf.to_file( fp, diff --git a/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py b/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py index d6942782..1af3c326 100644 --- a/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py +++ b/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py @@ -31,7 +31,8 @@ def get( self, ref_costs: List, variable: str = "time", - plot: bool = True + plot: bool = True, + iteration: int = 1, ): """ Compares the travel costs (time, distance) of the model with reference @@ -75,8 +76,11 @@ def get( pl.DataFrame Input ref_costs dataframe with a distance_model and a time_model column. """ - - costs = self.results.costs + costs = ( + self.results.run.transport_costs + .asset_for_iteration(self.results.run, iteration) + .get_costs_by_od_and_mode(["time", "distance"]) + ) transport_zones = self.results.transport_zones.get() ref_costs = self.convert_to_dataframe(ref_costs) @@ -84,7 +88,7 @@ def get( ref_costs = ( ref_costs - .join(costs.collect(), on=["from", "to", "mode"], suffix="_model") + .join(costs, on=["from", "to", "mode"], suffix="_model") ) if plot: @@ -93,6 +97,7 @@ def get( x=variable, y=variable + "_model", color="mode", + title=f"Travel costs comparison at iteration {iteration}", hover_data={ "origin": True, "destination": True, diff --git a/mobility/trips/group_day_trips/iterations/iterations.py b/mobility/trips/group_day_trips/iterations/iterations.py index 9a7b829a..c446a06a 100644 --- a/mobility/trips/group_day_trips/iterations/iterations.py +++ b/mobility/trips/group_day_trips/iterations/iterations.py @@ -78,9 +78,8 @@ def mode_sequences( self, *, destination_sequences: DestinationSequences, - costs_aggregator: Any = None, + transport_costs: Any = None, parameters: Any = None, - congestion_state: Any = None, ) -> ModeSequences: """Return the mode-sequences asset for this iteration.""" return ModeSequences( @@ -89,11 +88,10 @@ def mode_sequences( iteration=self.iteration, base_folder=self.iterations.folder_paths["modes"], destination_sequences=destination_sequences, - costs_aggregator=costs_aggregator, + transport_costs=transport_costs, working_folder=self.iterations.base_folder, sequence_index_folder=self.iterations.folder_paths["sequences-index"], parameters=parameters, - congestion_state=congestion_state, ) diff --git a/mobility/trips/group_day_trips/plans/mode_sequences.py b/mobility/trips/group_day_trips/plans/mode_sequences.py index c0025c18..b7af7523 100644 --- a/mobility/trips/group_day_trips/plans/mode_sequences.py +++ b/mobility/trips/group_day_trips/plans/mode_sequences.py @@ -32,18 +32,16 @@ def __init__( iteration: int, base_folder: pathlib.Path, destination_sequences: FileAsset | None = None, - costs_aggregator: Any = None, + transport_costs: Any = None, working_folder: pathlib.Path | None = None, sequence_index_folder: pathlib.Path | None = None, parameters: Any = None, - congestion_state: Any = None, ) -> None: self.destination_sequences = destination_sequences - self.costs_aggregator = costs_aggregator + self.transport_costs = transport_costs self.working_folder = working_folder self.sequence_index_folder = sequence_index_folder self.parameters = parameters - self.congestion_state = congestion_state inputs = { "version": 1, "run_key": run_key, @@ -64,8 +62,8 @@ def create_and_get_asset(self) -> pl.DataFrame: """Compute and persist mode sequences for one iteration.""" if self.destination_sequences is None: raise ValueError("Cannot build mode sequences without destination sequences.") - if self.costs_aggregator is None: - raise ValueError("Cannot build mode sequences without a costs aggregator.") + if self.transport_costs is None: + raise ValueError("Cannot build mode sequences without transport costs.") if self.working_folder is None: raise ValueError("Cannot build mode sequences without a working folder.") if self.sequence_index_folder is None: @@ -93,16 +91,14 @@ def create_and_get_asset(self) -> pl.DataFrame: .sort("dest_seq_id") ) - modes = modes_list_to_dict(self.costs_aggregator.modes) + modes = modes_list_to_dict(self.transport_costs.modes) mode_id = {name: index for index, name in enumerate(modes)} id_to_mode = {index: name for index, name in enumerate(modes)} costs = ( - self.costs_aggregator.get_costs_by_od_and_mode( + self.transport_costs.get_costs_by_od_and_mode( ["cost"], - congestion=(self.congestion_state is not None), detail_distances=False, - congestion_state=self.congestion_state, ) .with_columns( mode_id=pl.col("mode").replace_strict(mode_id, return_dtype=pl.UInt8()), diff --git a/mobility/trips/group_day_trips/plans/plan_initializer.py b/mobility/trips/group_day_trips/plans/plan_initializer.py index 0b2c55a5..cd8488c5 100644 --- a/mobility/trips/group_day_trips/plans/plan_initializer.py +++ b/mobility/trips/group_day_trips/plans/plan_initializer.py @@ -278,15 +278,3 @@ def get_opportunities(self, chains, activities, transport_zones): ) return opportunities - - def get_current_costs(self, costs, congestion): - """Fetch current OD costs and cast endpoint IDs.""" - - current_costs = costs.get(congestion=congestion).with_columns( - [ - pl.col("from").cast(pl.Int32()), - pl.col("to").cast(pl.Int32()), - ] - ) - - return current_costs diff --git a/mobility/trips/group_day_trips/plans/plan_updater.py b/mobility/trips/group_day_trips/plans/plan_updater.py index 965effc5..61123c45 100644 --- a/mobility/trips/group_day_trips/plans/plan_updater.py +++ b/mobility/trips/group_day_trips/plans/plan_updater.py @@ -19,8 +19,7 @@ def get_new_plans( current_plan_steps: pl.DataFrame | None, demand_groups: pl.DataFrame, chains: pl.DataFrame, - costs_aggregator: Any, - congestion_state: Any, + transport_costs: Any, remaining_opportunities: pl.DataFrame, activity_dur: pl.DataFrame, iteration: int, @@ -38,8 +37,7 @@ def get_new_plans( current_plan_steps, demand_groups, chains, - costs_aggregator, - congestion_state, + transport_costs, remaining_opportunities, activity_dur, iteration, @@ -116,8 +114,7 @@ def get_possible_plan_steps( current_plan_steps, demand_groups, chains, - costs_aggregator, - congestion_state, + transport_costs, opportunities, activity_dur, iteration: int, @@ -128,11 +125,9 @@ def get_possible_plan_steps( ): """Enumerate candidate plan steps and compute per-step utilities.""" - cost_by_od_and_modes = costs_aggregator.get_costs_by_od_and_mode( + cost_by_od_and_modes = transport_costs.get_costs_by_od_and_mode( ["cost", "distance", "time"], - congestion=(congestion_state is not None), detail_distances=False, - congestion_state=congestion_state, ) chains_w_home = ( @@ -723,15 +718,16 @@ def get_new_costs( iteration, n_iter_per_cost_update, current_plan_steps, - costs_aggregator, - congestion_state=None, - run_key=None, - is_weekday=None, + transport_costs, + run, ): """Return the OD costs to use after the current iteration.""" - if n_iter_per_cost_update <= 0: - return costs, congestion_state + if ( + n_iter_per_cost_update <= 0 + or transport_costs.should_recompute_congested_costs(iteration, n_iter_per_cost_update) is False + ): + return costs od_flows_by_mode = ( current_plan_steps.filter(pl.col("activity_seq_id") != 0) @@ -739,13 +735,10 @@ def get_new_costs( .agg(flow_volume=pl.col("n_persons").sum()) ) - return costs_aggregator.get_costs_for_next_iteration( + return transport_costs.get_costs_for_next_iteration( + run=run, iteration=iteration, - cost_update_interval=n_iter_per_cost_update, od_flows_by_mode=od_flows_by_mode, - congestion_state=congestion_state, - run_key=run_key, - is_weekday=is_weekday, ) def get_new_opportunities( diff --git a/mobility/trips/group_day_trips/transitions/transition_metrics.py b/mobility/trips/group_day_trips/transitions/transition_metrics.py index 1e2b8bd0..d2641458 100644 --- a/mobility/trips/group_day_trips/transitions/transition_metrics.py +++ b/mobility/trips/group_day_trips/transitions/transition_metrics.py @@ -161,7 +161,8 @@ def _load_demand_group_keys( empty/non-positive. """ required = ["demand_group_id", "home_zone_id", "csp", "n_cars", "n_persons"] - missing = [c for c in required if c not in demand_groups.columns] + available = set(demand_groups.collect_schema().names()) + missing = [c for c in required if c not in available] if missing: raise ValueError( "Missing required demand-group columns for `state_waterfall`: " @@ -431,8 +432,8 @@ def _build_state_pair_details(transitions_enriched: pl.DataFrame) -> pl.DataFram ) .group_by(["iteration", "state_pair"]) .agg( - from_steps=pl.col("from_steps").unique().sort().str.concat("

"), - to_steps=pl.col("to_steps").unique().sort().str.concat("

"), + from_steps=pl.col("from_steps").unique().sort().str.join("

"), + to_steps=pl.col("to_steps").unique().sort().str.join("

"), home_start_desc=pl.col("home_start_desc").drop_nulls().first(), n_persons_moved_total=pl.col("n_persons_moved").sum(), demand_group_desc=pl.format( diff --git a/pyproject.toml b/pyproject.toml index cf84aa3e..f7cf8b27 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,3 +81,8 @@ mobility = [ where = ["."] include = ["mobility*"] exclude = ["certs", "certs.*"] + +[tool.pytest.ini_options] +markers = [ + "dependency: mark a test as depending on one or more other tests", +] diff --git a/tests/back/integration/test_008_group_day_trips_can_be_computed.py b/tests/back/integration/test_008_group_day_trips_can_be_computed.py index 7c42e79f..51d6b6bd 100644 --- a/tests/back/integration/test_008_group_day_trips_can_be_computed.py +++ b/tests/back/integration/test_008_group_day_trips_can_be_computed.py @@ -1,8 +1,4 @@ -import enum -import json -import os import pytest -import pandas as pd import mobility from mobility.activities import Home, Other, Work @@ -10,113 +6,6 @@ from mobility.surveys.france import EMPMobilitySurvey -@pytest.fixture -def safe_json(monkeypatch): - """ - Make json.dump/json.dumps (and orjson.dumps if present) resilient to - non-serializable objects during this test. - """ - def _fallback(o): - if isinstance(o, enum.Enum): - return getattr(o, "value", o.name) - for attr in ("model_dump", "dict"): - m = getattr(o, attr, None) - if callable(m): - try: - return m() - except Exception: - pass - return getattr(o, "__dict__", str(o)) - - orig_dump = json.dump - orig_dumps = json.dumps - - def safe_dump(obj, fp, *args, **kwargs): - kwargs.setdefault("default", _fallback) - return orig_dump(obj, fp, *args, **kwargs) - - def safe_dumps(obj, *args, **kwargs): - kwargs.setdefault("default", _fallback) - return orig_dumps(obj, *args, **kwargs) - - monkeypatch.setattr(json, "dump", safe_dump, raising=True) - monkeypatch.setattr(json, "dumps", safe_dumps, raising=True) - - try: - import orjson # type: ignore - _orig_orjson_dumps = orjson.dumps - - def safe_orjson_dumps(obj, *args, **kwargs): - try: - return _orig_orjson_dumps(obj, *args, **kwargs) - except TypeError: - txt = json.dumps(obj, default=_fallback) - import json as _json - return _orig_orjson_dumps(_json.loads(txt), *args, **kwargs) - - monkeypatch.setattr(orjson, "dumps", safe_orjson_dumps, raising=False) - except Exception: - pass - - -def _to_pandas(val): - """ - Convert various table-like results to a pandas DataFrame: - - pandas DataFrame -> as is - - Polars LazyFrame/DataFrame -> collect/to_pandas - - PySpark DataFrame -> toPandas - - dict with a path-like -> read_parquet - - path-like -> read_parquet - - object with .collect() -> collect then recurse - """ - # pandas - if hasattr(val, "shape") and hasattr(val, "columns"): - return val # assume pandas - - # Polars - try: - import polars as pl # type: ignore - if isinstance(val, pl.LazyFrame): - return val.collect().to_pandas() - if isinstance(val, pl.DataFrame): - return val.to_pandas() - except Exception: - pass - - # PySpark - try: - from pyspark.sql import DataFrame as SparkDF # type: ignore - if isinstance(val, SparkDF): - return val.toPandas() - except Exception: - pass - - # dict with path or dataframe-ish - if isinstance(val, dict): - # common keys - for k in ("weekday_plan_steps", "plan_steps", "path", "data", "output"): - if k in val: - return _to_pandas(val[k]) - - # has .collect() -> collect then recurse - if hasattr(val, "collect") and callable(getattr(val, "collect")): - try: - collected = val.collect() - return _to_pandas(collected) - except Exception: - pass - - # path-like -> parquet - if isinstance(val, (str, os.PathLike)): - return pd.read_parquet(val) - - # last attempt: try treating as path-like string - try: - return pd.read_parquet(str(val)) - except Exception: - raise AssertionError(f"Expected DataFrame/collectable/path-like, got {type(val)}") - - @pytest.mark.dependency( depends=[ "tests/back/integration/test_001_transport_zones_can_be_created.py::test_001_transport_zones_can_be_created", @@ -125,7 +14,7 @@ def _to_pandas(val): ], scope="session", ) -def test_008_group_day_trips_can_be_computed(test_data, safe_json): +def test_008_group_day_trips_can_be_computed(test_data): transport_zones = mobility.TransportZones( local_admin_unit_id=test_data["transport_zones_local_admin_unit_id"], radius=test_data["transport_zones_radius"], @@ -147,7 +36,7 @@ def test_008_group_day_trips_can_be_computed(test_data, safe_json): mode_registry=mode_registry, ) - pop_trips = GroupDayTrips( + group_day_trips = GroupDayTrips( population=pop, modes=[car_mode, walk_mode, bicycle_mode, public_transport_mode], activities=[Home(), Work(), Other(population=pop)], @@ -164,10 +53,6 @@ def test_008_group_day_trips_can_be_computed(test_data, safe_json): ), ) - result = pop_trips.get() - # result is expected to expose 'weekday_plan_steps' - plan_steps_raw = result["weekday_plan_steps"] if isinstance(result, dict) else getattr(result, "weekday_plan_steps", result) - df = _to_pandas(plan_steps_raw) + plan_steps = group_day_trips.weekday_run.get()["plan_steps"].collect() - assert hasattr(df, "shape"), f"Expected a DataFrame-like, got {type(df)}" - assert df.shape[0] > 0 + assert plan_steps.height > 0 diff --git a/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py b/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py index c98e6feb..69d77a5d 100644 --- a/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py +++ b/tests/back/integration/test_008c_group_day_trips_parameter_profiles_change_iteration_2.py @@ -85,13 +85,10 @@ def build_modes(): ), ) - static_result = static.get() - dynamic_result = dynamic.get() - - static_plan_steps = static_result["weekday_plan_steps"].collect() - dynamic_plan_steps = dynamic_result["weekday_plan_steps"].collect() - static_transitions = static_result["weekday_transitions"].collect() - dynamic_transitions = dynamic_result["weekday_transitions"].collect() + static_plan_steps = static.weekday_run.get()["plan_steps"].collect() + dynamic_plan_steps = dynamic.weekday_run.get()["plan_steps"].collect() + static_transitions = static.weekday_run.get()["transitions"].collect() + dynamic_transitions = dynamic.weekday_run.get()["transitions"].collect() assert static_plan_steps.height > 0 assert dynamic_plan_steps.height > 0 diff --git a/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py b/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py index abe57d8b..437b9dde 100644 --- a/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py +++ b/tests/back/integration/test_008d_group_day_trips_pt_gtfs_profiles_change_iteration_2.py @@ -1,33 +1,32 @@ import os import pathlib +import geopandas as gpd import polars as pl import pytest - import mobility from mobility.activities import Home, Other, Work from mobility.trips.group_day_trips import GroupDayTrips, Parameters from mobility.surveys.france import EMPMobilitySurvey -def _select_subway_endpoints(transport_zones: mobility.TransportZones) -> tuple[dict, dict]: - study_area = transport_zones.inputs["study_area"].get().to_crs(4326) - center_local_admin_unit_id = transport_zones.inputs["parameters"].local_admin_unit_id - - center_candidates = study_area.loc[study_area["local_admin_unit_id"] == center_local_admin_unit_id].copy() - if center_candidates.empty: - raise ValueError("Could not find the central local admin unit in transport zones.") +def _select_subway_endpoints(transport_zones: mobility.TransportZones) -> tuple[dict, dict, str, str]: + transport_zones_df = transport_zones.get() + center_local_admin_unit_id = str(transport_zones.inputs["parameters"].local_admin_unit_id) - center_lau = center_candidates.iloc[0] - other_laus = study_area.loc[study_area["local_admin_unit_id"] != center_lau["local_admin_unit_id"]].copy() - if other_laus.empty: - raise ValueError("Need at least two local admin units to build a synthetic GTFS line.") + center_lau = transport_zones_df.loc[ + transport_zones_df["local_admin_unit_id"] == center_local_admin_unit_id + ].iloc[[0]].copy() + center_lau_id = str(center_lau.iloc[0]["local_admin_unit_id"]) + other_laus = transport_zones_df.loc[transport_zones_df["local_admin_unit_id"] != center_lau_id].copy() + assert not other_laus.empty, "Need at least two local admin units to build a synthetic GTFS line." - center_centroid = center_lau.geometry.centroid - other_laus["distance_to_center"] = other_laus.geometry.centroid.distance(center_centroid) - target_lau = other_laus.sort_values("distance_to_center", ascending=True).iloc[0] + center_centroid = center_lau.geometry.iloc[0].centroid + other_laus_projected = other_laus.copy() + other_laus_projected["distance_to_center"] = other_laus_projected.geometry.centroid.distance(center_centroid) + target_lau = other_laus.loc[other_laus_projected.sort_values("distance_to_center", ascending=True).index[:1]].copy() - return center_lau, target_lau + return center_lau, target_lau, center_lau_id, str(target_lau.iloc[0]["local_admin_unit_id"]) def _build_gtfs_zip( @@ -36,11 +35,17 @@ def _build_gtfs_zip( output_name: str, segment_travel_time: float, ) -> tuple[str, str, str]: - center_lau, target_lau = _select_subway_endpoints(transport_zones) - - center_centroid = center_lau.geometry.centroid - target_centroid = target_lau.geometry.centroid + center_lau, target_lau, center_lau_id, target_lau_id = _select_subway_endpoints(transport_zones) + centroids = gpd.GeoDataFrame( + geometry=[ + center_lau.geometry.centroid.iloc[0], + target_lau.geometry.centroid.iloc[0], + ], + crs=3035, + ).to_crs(4326) + center_centroid = centroids.geometry.iloc[0] + target_centroid = centroids.geometry.iloc[1] feed = mobility.GTFSFeedSpec( agency_id="test_subway", agency_name="Test Subway", @@ -52,12 +57,12 @@ def _build_gtfs_zip( "center": mobility.GTFSStopSpec( lon=float(center_centroid.x), lat=float(center_centroid.y), - name=str(center_lau["local_admin_unit_name"]), + name="Center", ), "target": mobility.GTFSStopSpec( lon=float(target_centroid.x), lat=float(target_centroid.y), - name=str(target_lau["local_admin_unit_name"]), + name="Target", ), }, lines=[ @@ -77,8 +82,8 @@ def _build_gtfs_zip( return ( str(gtfs_zip), - str(center_lau["local_admin_unit_id"]), - str(target_lau["local_admin_unit_id"]), + center_lau_id, + target_lau_id, ) diff --git a/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py b/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py index 994612d2..02ad1844 100644 --- a/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py +++ b/tests/back/integration/test_011_population_trips_behavior_change_phases_can_be_computed.py @@ -50,7 +50,6 @@ def test_011_population_trips_behavior_change_phases_can_be_computed(test_data): ), ) - pop_trips.remove() result = pop_trips.get() weekday_plan_steps = result["weekday_plan_steps"].collect() weekday_transitions = result["weekday_transitions"].collect() diff --git a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py index 1ec853e3..206fce97 100644 --- a/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py +++ b/tests/back/unit/choice_models/test_001_travel_costs_aggregator_congestion.py @@ -6,7 +6,7 @@ from pydantic import BaseModel from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset -from mobility.transport.costs.transport_costs_aggregator import TransportCostsAggregator +from mobility.transport.costs.transport_costs import TransportCosts class _FakeModeParameters(BaseModel): @@ -26,7 +26,7 @@ def _make_mode(*, name: str, congestion: bool): def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): # Use a minimal mode stub with congestion enabled so the test only exercises # the aggregator decision logic, not the real routing/cost stack. - aggregator = TransportCostsAggregator(modes=[_make_mode(name="car", congestion=True)]) + aggregator = TransportCosts(modes=[_make_mode(name="car", congestion=True)]) od_flows_by_mode = pl.DataFrame( {"from": [1], "to": [2], "mode": ["car"], "flow_volume": [10.0]} ) @@ -36,13 +36,13 @@ def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): # Mock the expensive side effects and the final cost lookup: this test is a # regression guard for "did we trigger congestion recomputation at all?". with patch.object(aggregator, "build_congestion_state", return_value=congestion_state) as build_mock: - with patch.object(aggregator, "get", return_value="costs") as get_mock: - result_costs, result_congestion_state = aggregator.get_costs_for_next_iteration( + with patch.object(aggregator, "asset_for_congestion_state", return_value=SimpleNamespace( + get_costs_by_od=lambda metrics: "costs" + )) as asset_mock: + result_costs = aggregator.get_costs_for_next_iteration( + run=SimpleNamespace(inputs_hash="run-key", is_weekday=True), iteration=1, - cost_update_interval=1, od_flows_by_mode=od_flows_by_mode, - run_key="run-key", - is_weekday=True, ) # If congestion is enabled and the update interval matches, the aggregator @@ -53,9 +53,8 @@ def test_get_costs_for_next_iteration_recomputes_when_congestion_enabled(): is_weekday=True, iteration=1, ) - get_mock.assert_called_once_with(congestion=True, congestion_state=congestion_state) + asset_mock.assert_called_once_with(congestion_state) assert result_costs == "costs" - assert result_congestion_state is congestion_state def test_vehicle_od_flow_snapshot_hash_differs_between_weekday_and_weekend(): diff --git a/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py b/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py index 091dcf47..a942c7b7 100644 --- a/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py +++ b/tests/back/unit/costs/travel_costs/test_001_routing_parameters.py @@ -2,8 +2,7 @@ from mobility.runtime.parameter_profiles import ( ListParameterProfile, - SimulationStep, - resolve_model_for_step, + resolve_model_for_iteration, ) from mobility.transport.costs.parameters.path_routing_parameters import PathRoutingParameters from mobility.transport.modes.public_transport.public_transport_graph import ( @@ -25,7 +24,8 @@ def test_path_routing_parameters_requires_explicit_or_legacy_definition(): def test_path_routing_parameters_normalizes_legacy_speed_time_inputs(): - params = PathRoutingParameters(filter_max_speed=60.0, filter_max_time=1.0) + with pytest.deprecated_call(): + params = PathRoutingParameters(filter_max_speed=60.0, filter_max_time=1.0) assert params.max_beeline_distance == 60.0 assert params.filter_max_speed is None @@ -48,8 +48,8 @@ def test_public_transport_routing_parameters_resolve_list_profiles_by_iteration( ) ) - step_1 = resolve_model_for_step(params, SimulationStep(iteration=1)) - step_2 = resolve_model_for_step(params, SimulationStep(iteration=2)) + step_1 = resolve_model_for_iteration(params, 1) + step_2 = resolve_model_for_iteration(params, 2) assert step_1.additional_gtfs_files == ["base.zip"] assert step_2.additional_gtfs_files == ["base.zip", "event.zip"] diff --git a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py index e957943e..ab7b38ca 100644 --- a/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py +++ b/tests/back/unit/domain/group_day_trips/test_001_restore_saved_state.py @@ -4,7 +4,6 @@ import polars as pl import pytest -from mobility.runtime.parameter_profiles import SimulationStep from mobility.trips.group_day_trips.core.parameters import Parameters from mobility.trips.group_day_trips.core.run import Run, RunState @@ -26,31 +25,29 @@ def discard_future_iterations(self, *, iteration): class FakeCostsAggregator: - def __init__(self, congestion_state): - self._congestion_state = congestion_state - self.load_calls = [] + def __init__(self): self.get_calls = [] self.resolve_calls = [] - def resolve_for_step(self, step): - self.resolve_calls.append(step) + def for_iteration(self, iteration): + self.resolve_calls.append(iteration) return self - def load_congestion_state(self, **kwargs): - self.load_calls.append(kwargs) - return self._congestion_state + def asset_for_iteration(self, run, iteration): + self.resolve_calls.append(iteration) + return self - def get(self, **kwargs): - self.get_calls.append(kwargs) + def get_costs_by_od(self, metrics): + self.get_calls.append(metrics) return pl.DataFrame({"cost": [1.5]}) -def make_run(*, congestion_state): +def make_run(): run = object.__new__(Run) run.inputs_hash = "run-hash" run.is_weekday = True run.parameters = Parameters(n_iter_per_cost_update=3) - run.costs_aggregator = FakeCostsAggregator(congestion_state=congestion_state) + run.transport_costs = FakeCostsAggregator() run.rng = random.Random(123) return run @@ -67,7 +64,6 @@ def make_state(): current_plans=pl.DataFrame({"plan_id": [0]}), remaining_opportunities=pl.DataFrame({"opportunity_id": [0]}), costs=pl.DataFrame({"cost": [0.0]}), - congestion_state=None, start_iteration=1, ) @@ -81,7 +77,7 @@ def test_restore_saved_state_happy_path_restores_mutable_state(): rng_state=saved_rng.getstate(), ) iterations = FakeIterations(saved_state=saved_state) - run = make_run(congestion_state="congestion-state") + run = make_run() state = make_state() run._restore_saved_state( @@ -95,29 +91,15 @@ def test_restore_saved_state_happy_path_restores_mutable_state(): assert state.current_plans.equals(saved_state.current_plans) assert state.current_plan_steps.equals(saved_state.current_plan_steps) assert state.remaining_opportunities.equals(saved_state.remaining_opportunities) - assert state.congestion_state == "congestion-state" assert state.start_iteration == 3 assert state.costs.equals(pl.DataFrame({"cost": [1.5]})) - assert run.costs_aggregator.load_calls == [ - { - "run_key": "run-hash", - "is_weekday": True, - "last_completed_iteration": 2, - "cost_update_interval": 3, - } - ] - assert run.costs_aggregator.get_calls == [ - { - "congestion": True, - "congestion_state": "congestion-state", - } - ] - assert run.costs_aggregator.resolve_calls == [SimulationStep(iteration=3)] + assert run.transport_costs.get_calls == [["cost", "distance"]] + assert run.transport_costs.resolve_calls == [3] def test_restore_saved_state_wraps_load_state_errors(): iterations = FakeIterations(saved_state=ValueError("broken state")) - run = make_run(congestion_state=None) + run = make_run() state = make_state() with pytest.raises(RuntimeError, match="Failed to load saved GroupDayTrips iteration state"): @@ -134,7 +116,7 @@ def test_restore_saved_state_wraps_incomplete_saved_state_errors(): "Saved GroupDayTrips iteration state is incomplete. Missing current_plan_steps." ) ) - run = make_run(congestion_state=None) + run = make_run() state = make_state() with pytest.raises(RuntimeError, match="Failed to load saved GroupDayTrips iteration state"): @@ -153,7 +135,7 @@ def test_restore_saved_state_wraps_rng_restore_errors(): rng_state=object(), ) iterations = FakeIterations(saved_state=saved_state) - run = make_run(congestion_state=None) + run = make_run() state = make_state() with pytest.raises(RuntimeError, match="Failed to restore RNG state"): diff --git a/tests/back/unit/test_012_congested_path_graph_iteration_asset.py b/tests/back/unit/test_012_congested_path_graph_iteration_asset.py new file mode 100644 index 00000000..9cfc61d3 --- /dev/null +++ b/tests/back/unit/test_012_congested_path_graph_iteration_asset.py @@ -0,0 +1,64 @@ +from pathlib import Path +from types import SimpleNamespace + +import pandas as pd + +from mobility.runtime.assets.in_memory_asset import InMemoryAsset +from mobility.transport.costs.od_flows_asset import VehicleODFlowsAsset +from mobility.transport.graphs.congested.congested_path_graph import CongestedPathGraph + + +class FakeUpstreamAsset(InMemoryAsset): + def __init__(self, *, name: str, mode_name: str | None = None): + self._hash_name = name + self.mode_name = mode_name if mode_name is not None else name + super().__init__({"name": name}) + + def compute_inputs_hash(self) -> str: + return f"fake-{self._hash_name}" + + def get(self): + return Path("unused") + + +def test_congested_graph_iteration_asset_resolves_latest_active_refresh(monkeypatch, tmp_path): + monkeypatch.setenv("MOBILITY_PROJECT_DATA_FOLDER", str(tmp_path)) + monkeypatch.setattr( + CongestedPathGraph, + "compute_inputs_hash", + lambda self: "fake-congested-graph-hash", + ) + + modified_graph = FakeUpstreamAsset(name="modified", mode_name="car") + transport_zones = FakeUpstreamAsset(name="zones") + + VehicleODFlowsAsset( + pd.DataFrame({"from": [1], "to": [2], "vehicle_volume": [3.0]}), + run_key="run-key", + is_weekday=True, + iteration=1, + mode_name="car", + ).get() + + graph = CongestedPathGraph( + modified_graph=modified_graph, + transport_zones=transport_zones, + handles_congestion=True, + congestion_flows_scaling_factor=0.5, + ) + run = SimpleNamespace( + inputs_hash="run-key", + is_weekday=True, + parameters=SimpleNamespace(n_iter_per_cost_update=2, n_iterations=3), + ) + + assert graph.get_flow_asset_for_iteration(run, 1) is None + + flow_asset = graph.get_flow_asset_for_iteration(run, 2) + assert flow_asset is not None + assert flow_asset.inputs["iteration"] == 1 + + iter_graph = graph.asset_for_iteration(run, 2) + assert isinstance(iter_graph, CongestedPathGraph) + assert iter_graph.inputs["vehicle_flows"] is not None + assert iter_graph.inputs["vehicle_flows"].cache_path == flow_asset.cache_path From 634a436809b3e869e3c263cbdf43071783133907 Mon Sep 17 00:00:00 2001 From: FlxPo Date: Thu, 2 Apr 2026 14:24:16 +0200 Subject: [PATCH 24/24] evaluations use last iteration --- .../group_day_trips/evaluation/car_traffic_evaluation.py | 4 +++- .../group_day_trips/evaluation/travel_costs_evaluation.py | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py b/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py index 20991748..f1805da4 100644 --- a/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py +++ b/mobility/trips/group_day_trips/evaluation/car_traffic_evaluation.py @@ -13,8 +13,10 @@ def __init__(self, results): def get( self, - iteration: int = 1 + iteration: int | None = None ): + if iteration is None: + iteration = int(self.results.parameters.n_iterations) car_mode = [m for m in self.results.modes if m.inputs["parameters"].name == "car"] diff --git a/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py b/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py index 1af3c326..bad2f45e 100644 --- a/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py +++ b/mobility/trips/group_day_trips/evaluation/travel_costs_evaluation.py @@ -32,7 +32,7 @@ def get( ref_costs: List, variable: str = "time", plot: bool = True, - iteration: int = 1, + iteration: int | None = None, ): """ Compares the travel costs (time, distance) of the model with reference @@ -76,6 +76,9 @@ def get( pl.DataFrame Input ref_costs dataframe with a distance_model and a time_model column. """ + if iteration is None: + iteration = int(self.results.parameters.n_iterations) + costs = ( self.results.run.transport_costs .asset_for_iteration(self.results.run, iteration)