From f379f6b998e9842aa4f098c8723bc3fc9c66c74e Mon Sep 17 00:00:00 2001 From: Pax1601 Date: Tue, 11 Jul 2023 17:30:05 +0200 Subject: [PATCH] Tweaks to IADS creation and menus --- client/demo.js | 2 +- client/public/stylesheets/olympus.css | 17 - .../public/stylesheets/other/contextmenus.css | 61 +- .../olympus/images/buttons/spawn/more.svg | 70 + client/src/@types/unitdatabase.d.ts | 2 +- client/src/constants/constants.ts | 3 +- client/src/controls/airbasecontextmenu.ts | 1 + .../src/controls/coalitionareacontextmenu.ts | 93 +- client/src/controls/mapcontextmenu.ts | 26 +- client/src/index.ts | 2 - client/src/map/coalitionarea.ts | 13 +- client/src/map/map.ts | 14 +- client/src/other/utils.ts | 52 +- client/src/units/citiesDatabase.ts | 7137 +++++++++++++++++ client/src/units/groundunitdatabase.ts | 7 + client/src/units/unit.ts | 4 +- client/src/units/unitdatabase.ts | 30 + client/src/units/unitsmanager.ts | 48 +- client/views/other/contextmenus.ejs | 47 +- 19 files changed, 7511 insertions(+), 118 deletions(-) create mode 100644 client/public/themes/olympus/images/buttons/spawn/more.svg create mode 100644 client/src/units/citiesDatabase.ts diff --git a/client/demo.js b/client/demo.js index ca78a542..d7fcebf0 100644 --- a/client/demo.js +++ b/client/demo.js @@ -343,7 +343,7 @@ class DemoDataGenerator { }; mission(req, res){ - var ret = {mission: {theatre: "Nevada"}}; + var ret = {mission: {theatre: "Syria"}}; ret.time = Date.now(); var auth = req.get("Authorization"); if (auth) { diff --git a/client/public/stylesheets/olympus.css b/client/public/stylesheets/olympus.css index 58b587cd..f35985db 100644 --- a/client/public/stylesheets/olympus.css +++ b/client/public/stylesheets/olympus.css @@ -1195,14 +1195,6 @@ input[type=number]::-webkit-outer-spin-button { background-color: var(--primary-neutral); } -.ol-context-menu>div:nth-child(2) { - align-items: center; - display: flex; - flex-direction: row; - justify-content: space-between; - padding-right: 0px; -} - .ol-context-menu>ul { max-height: 200px; overflow-x: hidden; @@ -1218,21 +1210,12 @@ input[type=number]::-webkit-outer-spin-button { margin: 0px; } -.ol-context-menu>div:nth-child(n+3) { - align-items: center; - display: flex; - flex-direction: column; - justify-content: space-between; - row-gap: 5px; -} - .ol-context-menu .ol-select-container { align-self: stretch; flex: 0 0 auto; width: 100%; } - .ol-contexmenu-button { border: none; border-radius: 0px; diff --git a/client/public/stylesheets/other/contextmenus.css b/client/public/stylesheets/other/contextmenus.css index 6b691787..7e812f74 100644 --- a/client/public/stylesheets/other/contextmenus.css +++ b/client/public/stylesheets/other/contextmenus.css @@ -4,10 +4,34 @@ height: fit-content; position: absolute; row-gap: 5px; - width: 280px; + width: 300px; z-index: 9999; } +#map-contextmenu>div:nth-child(2) { + align-items: center; + display: flex; + flex-direction: row; + justify-content: space-between; + padding-right: 0px; +} + +#map-contextmenu>div:nth-child(3) { + align-items: center; + display: flex; + flex-direction: row; + justify-content: space-between; + padding-right: 0px; +} + +#map-contextmenu>div:nth-child(n+4) { + align-items: center; + display: flex; + flex-direction: column; + justify-content: space-between; + row-gap: 5px; +} + #aircraft-spawn-menu, #helicopter-spawn-menu, #groundunit-spawn-menu, @@ -40,6 +64,7 @@ } .deploy-unit-button { + margin-top: 5px; text-align: center; width: 100%; } @@ -180,16 +205,14 @@ background-color: orange; } -#aircraft-spawn-menu .ol-slider-value, -#helicopter-spawn-menu .ol-slider-value { +.ol-context-menu .ol-slider-value { color: var(--accent-light-blue); cursor: pointer; font-size: 14px; font-weight: bold; } -#aircraft-spawn-altitude-slider, -#helicopter-spawn-altitude-slider { +.ol-context-menu .ol-slider-container { padding: 0px 10px; } @@ -357,7 +380,7 @@ height: fit-content; position: absolute; row-gap: 5px; - width: 250px; + width: 300px; z-index: 9999; } @@ -371,6 +394,10 @@ align-self: flex-start; } +#coalition-units-checkbox { + padding: 10px 10px; +} + #iads-menu .ol-select-options>* { padding-top: 8px; padding-bottom: 8px; @@ -391,3 +418,25 @@ #iads-menu { row-gap: 10px; } + +#coalition-area-contextmenu>div:nth-child(2) { + align-items: center; + display: flex; + flex-direction: row; + justify-content: space-between; + padding-right: 0px; +} + +#coalition-area-contextmenu>div:nth-child(n+3) { + align-items: center; + display: flex; + flex-direction: column; + justify-content: space-between; + row-gap: 5px; +} + +.create-iads-button { + margin-top: 5px; + text-align: center; + width: 100%; +} \ No newline at end of file diff --git a/client/public/themes/olympus/images/buttons/spawn/more.svg b/client/public/themes/olympus/images/buttons/spawn/more.svg new file mode 100644 index 00000000..abeb13eb --- /dev/null +++ b/client/public/themes/olympus/images/buttons/spawn/more.svg @@ -0,0 +1,70 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/client/src/@types/unitdatabase.d.ts b/client/src/@types/unitdatabase.d.ts index f76a38a5..5c2f801a 100644 --- a/client/src/@types/unitdatabase.d.ts +++ b/client/src/@types/unitdatabase.d.ts @@ -14,7 +14,7 @@ interface LoadoutBlueprint { interface UnitBlueprint { name: string; - era?: string[]; + era: string[]; label: string; shortLabel: string; type?: string; diff --git a/client/src/constants/constants.ts b/client/src/constants/constants.ts index 0584f11c..66053969 100644 --- a/client/src/constants/constants.ts +++ b/client/src/constants/constants.ts @@ -142,7 +142,8 @@ export const COALITIONAREA_DRAW_POLYGON = "Draw Coalition Area"; export const visibilityControls: string[] = ["human", "dcs", "aircraft", "groundunit-sam", "groundunit-other", "navyunit", "airbase"]; export const visibilityControlsTootlips: string[] = ["Toggle human players visibility", "Toggle DCS controlled units visibility", "Toggle aircrafts visibility", "Toggle SAM units visibility", "Toggle ground units (not SAM) visibility", "Toggle navy units visibility", "Toggle airbases visibility"]; -export const IADSRoles: {[key: string]: number}= {"AAA": 0.8, "MANPADS": 0.3, "SAM Sites": 0.1, "Radar": 0.05}; +export const IADSTypes = ["AAA", "MANPADS", "SAM Sites", "Radar"]; +export const IADSDensities: {[key: string]: number}= {"AAA": 0.8, "MANPADS": 0.3, "SAM Sites": 0.1, "Radar": 0.05}; export enum DataIndexes { startOfData = 0, diff --git a/client/src/controls/airbasecontextmenu.ts b/client/src/controls/airbasecontextmenu.ts index 7b9559d0..434217bc 100644 --- a/client/src/controls/airbasecontextmenu.ts +++ b/client/src/controls/airbasecontextmenu.ts @@ -62,6 +62,7 @@ export class AirbaseContextMenu extends ContextMenu { setActiveCoalition(this.#airbase.getCoalition()); getMap().showMapContextMenu(this.getX(), this.getY(), this.getLatLng()); getMap().getMapContextMenu().hideUpperBar(); + getMap().getMapContextMenu().hideLowerBar(); getMap().getMapContextMenu().hideAltitudeSlider(); getMap().getMapContextMenu().showSubMenu("aircraft"); getMap().getMapContextMenu().setAirbaseName(this.#airbase.getName()); diff --git a/client/src/controls/coalitionareacontextmenu.ts b/client/src/controls/coalitionareacontextmenu.ts index 5abdd79a..61e253f0 100644 --- a/client/src/controls/coalitionareacontextmenu.ts +++ b/client/src/controls/coalitionareacontextmenu.ts @@ -1,31 +1,38 @@ import { LatLng } from "leaflet"; import { getMap, getUnitsManager } from ".."; -import { GAME_MASTER, IADSRoles } from "../constants/constants"; +import { GAME_MASTER, IADSTypes } from "../constants/constants"; import { CoalitionArea } from "../map/coalitionarea"; import { ContextMenu } from "./contextmenu"; import { Dropdown } from "./dropdown"; import { Slider } from "./slider"; import { Switch } from "./switch"; +import { groundUnitDatabase } from "../units/groundunitdatabase"; export class CoalitionAreaContextMenu extends ContextMenu { #coalitionSwitch: Switch; #coalitionArea: CoalitionArea | null = null; #iadsDensitySlider: Slider; - #iadsRoleDropdown: Dropdown; - - //#iadsPeriodDropdown: Dropdown; + #iadsDistributionSlider: Slider; + #iadsTypesDropdown: Dropdown; + #iadsErasDropdown: Dropdown; + #iadsRangesDropdown: Dropdown; constructor(id: string) { super(id); this.#coalitionSwitch = new Switch("coalition-area-switch", (value: boolean) => this.#onSwitchClick(value)); this.#coalitionSwitch.setValue(false); - this.#iadsRoleDropdown = new Dropdown("iads-units-role-options", () => { }); - //this.#iadsPeriodDropdown = new Dropdown("iads-period-options", () => {}); + this.#iadsTypesDropdown = new Dropdown("iads-units-type-options", () => { }); + this.#iadsErasDropdown = new Dropdown("iads-era-options", () => {}); + this.#iadsRangesDropdown = new Dropdown("iads-range-options", () => {}); this.#iadsDensitySlider = new Slider("iads-density-slider", 5, 100, "%", (value: number) => { }); + this.#iadsDistributionSlider = new Slider("iads-distribution-slider", 5, 100, "%", (value: number) => { }); this.#iadsDensitySlider.setIncrement(5); this.#iadsDensitySlider.setValue(50); this.#iadsDensitySlider.setActive(true); + this.#iadsDistributionSlider.setIncrement(5); + this.#iadsDistributionSlider.setValue(50); + this.#iadsDistributionSlider.setActive(true); document.addEventListener("coalitionAreaContextMenuShow", (e: any) => { if (this.getVisibleSubMenu() !== e.detail.type) @@ -34,6 +41,12 @@ export class CoalitionAreaContextMenu extends ContextMenu { this.hideSubMenus(); }); + document.addEventListener("coalitionAreaBringToBack", (e: any) => { + if (this.#coalitionArea) + getMap().bringCoalitionAreaToBack(this.#coalitionArea); + getMap().hideCoalitionAreaContextMenu(); + }); + document.addEventListener("coalitionAreaDelete", (e: any) => { if (this.#coalitionArea) getMap().deleteCoalitionArea(this.#coalitionArea); @@ -41,36 +54,25 @@ export class CoalitionAreaContextMenu extends ContextMenu { }); document.addEventListener("contextMenuCreateIads", (e: any) => { - const values: { [key: string]: boolean } = {}; - const element = this.#iadsRoleDropdown.getOptionElements(); - for (let idx = 0; idx < element.length; idx++) { - const option = element.item(idx) as HTMLElement; - const key = option.querySelector("span")?.innerText; - const value = option.querySelector("input")?.checked; - if (key !== undefined && value !== undefined) - values[key] = value; - } - const area = this.getCoalitionArea(); if (area) - getUnitsManager().createIADS(area, values, this.#iadsDensitySlider.getValue()); + getUnitsManager().createIADS(area, this.#getCheckboxOptions(this.#iadsTypesDropdown), this.#getCheckboxOptions(this.#iadsErasDropdown), this.#getCheckboxOptions(this.#iadsRangesDropdown), this.#iadsDensitySlider.getValue(), this.#iadsDistributionSlider.getValue()); }) /* Create the checkboxes to select the unit roles */ - this.#iadsRoleDropdown.setOptionsElements(Object.keys(IADSRoles).map((unitRole: string) => { - var div = document.createElement("div"); - div.classList.add("ol-checkbox"); - var label = document.createElement("label"); - label.title = `Add ${unitRole}s to the IADS`; - var input = document.createElement("input"); - input.type = "checkbox"; - input.checked = true; - var span = document.createElement("span"); - span.innerText = unitRole; - label.appendChild(input); - label.appendChild(span); - div.appendChild(label); - return div as HTMLElement; + this.#iadsTypesDropdown.setOptionsElements(IADSTypes.map((role: string) => { + return this.#createCheckboxOption(role); + })); + + + /* Create the checkboxes to select the unit periods */ + this.#iadsErasDropdown.setOptionsElements(groundUnitDatabase.getEras().map((era: string) => { + return this.#createCheckboxOption(era); + })); + + /* Create the checkboxes to select the unit ranges */ + this.#iadsRangesDropdown.setOptionsElements(groundUnitDatabase.getRanges().map((range: string) => { + return this.#createCheckboxOption(range); })); this.hide(); @@ -118,4 +120,33 @@ export class CoalitionAreaContextMenu extends ContextMenu { }); } } + + #createCheckboxOption(text: string) { + var div = document.createElement("div"); + div.classList.add("ol-checkbox"); + var label = document.createElement("label"); + label.title = `Add ${text}s to the IADS`; + var input = document.createElement("input"); + input.type = "checkbox"; + input.checked = true; + var span = document.createElement("span"); + span.innerText = text; + label.appendChild(input); + label.appendChild(span); + div.appendChild(label); + return div as HTMLElement; + } + + #getCheckboxOptions(dropdown: Dropdown) { + var values: { [key: string]: boolean } = {}; + const element = dropdown.getOptionElements(); + for (let idx = 0; idx < element.length; idx++) { + const option = element.item(idx) as HTMLElement; + const key = option.querySelector("span")?.innerText; + const value = option.querySelector("input")?.checked; + if (key !== undefined && value !== undefined) + values[key] = value; + } + return values; + } } \ No newline at end of file diff --git a/client/src/controls/mapcontextmenu.ts b/client/src/controls/mapcontextmenu.ts index a87c66d2..c90445e0 100644 --- a/client/src/controls/mapcontextmenu.ts +++ b/client/src/controls/mapcontextmenu.ts @@ -86,7 +86,7 @@ export class MapContextMenu extends ContextMenu { if (this.getVisibleSubMenu() !== e.detail.type) this.showSubMenu(e.detail.type); else - this.hideSubMenus(); + this.hideSubMenus(e.detail.type); }); document.addEventListener("contextMenuDeployAircraft", () => { @@ -191,6 +191,11 @@ export class MapContextMenu extends ContextMenu { } showSubMenu(type: string) { + if (type === "more") + this.getContainer()?.querySelector("#more-options-button-bar")?.classList.toggle("hide"); + else if (["aircraft", "groundunit"].includes(type)) + this.getContainer()?.querySelector("#more-options-button-bar")?.classList.toggle("hide", true); + this.getContainer()?.querySelector("#aircraft-spawn-menu")?.classList.toggle("hide", type !== "aircraft"); this.getContainer()?.querySelector("#aircraft-spawn-button")?.classList.toggle("is-open", type === "aircraft"); this.getContainer()?.querySelector("#helicopter-spawn-menu")?.classList.toggle("hide", type !== "helicopter"); @@ -220,7 +225,8 @@ export class MapContextMenu extends ContextMenu { this.setVisibleSubMenu(type); } - hideSubMenus() { + hideSubMenus(type: string) { + this.getContainer()?.querySelector("#more-options-button-bar")?.classList.toggle("hide", ["aircraft", "groundunit"].includes(type)); this.getContainer()?.querySelector("#aircraft-spawn-menu")?.classList.toggle("hide", true); this.getContainer()?.querySelector("#aircraft-spawn-button")?.classList.toggle("is-open", false); this.getContainer()?.querySelector("#helicopter-spawn-menu")?.classList.toggle("hide", true); @@ -257,6 +263,14 @@ export class MapContextMenu extends ContextMenu { this.getContainer()?.querySelector(".upper-bar")?.classList.toggle("hide", true); } + showLowerBar() { + this.getContainer()?.querySelector("#more-options-button-bar")?.classList.toggle("hide", false); + } + + hideLowerBar() { + this.getContainer()?.querySelector("#more-optionsbutton-bar")?.classList.toggle("hide", true); + } + showAltitudeSlider() { this.getContainer()?.querySelector("#aircraft-spawn-altitude-slider")?.classList.toggle("hide", false); } @@ -430,8 +444,8 @@ export class MapContextMenu extends ContextMenu { this.#groundUnitTypeDropdown.reset(); this.#groundUnitNameDropdown.reset(); - const roles = groundUnitDatabase.getTypes(); - this.#groundUnitTypeDropdown.setOptions(roles); + const types = groundUnitDatabase.getTypes(); + this.#groundUnitTypeDropdown.setOptions(types); this.clip(); } @@ -470,8 +484,8 @@ export class MapContextMenu extends ContextMenu { this.#navyUnitTypeDropdown.reset(); this.#navyUnitNameDropdown.reset(); - const roles = navyUnitDatabase.getTypes(); - this.#navyUnitTypeDropdown.setOptions(roles); + const types = navyUnitDatabase.getTypes(); + this.#navyUnitTypeDropdown.setOptions(types); this.clip(); } diff --git a/client/src/index.ts b/client/src/index.ts index 1e07d6d7..07787e68 100644 --- a/client/src/index.ts +++ b/client/src/index.ts @@ -17,7 +17,6 @@ import { Dropdown } from "./controls/dropdown"; import { HotgroupPanel } from "./panels/hotgrouppanel"; import { SVGInjector } from "@tanem/svg-injector"; import { BLUE_COMMANDER, GAME_MASTER, RED_COMMANDER } from "./constants/constants"; -import { NavyUnitDatabase, navyUnitDatabase } from "./units/navyunitdatabase"; var map: Map; @@ -206,7 +205,6 @@ function setupEvents() { else img.onload = () => SVGInjector(img); }) - } export function getMap() { diff --git a/client/src/map/coalitionarea.ts b/client/src/map/coalitionarea.ts index cd45557b..10efb786 100644 --- a/client/src/map/coalitionarea.ts +++ b/client/src/map/coalitionarea.ts @@ -27,6 +27,7 @@ export class CoalitionArea extends Polygon { this.setCoalition("blue"); else if (getUnitsManager().getCommandMode() == RED_COMMANDER) this.setCoalition("red"); + } setCoalition(coalition: string) { @@ -89,6 +90,12 @@ export class CoalitionArea extends Polygon { this.setStyle({opacity: opacity, fillOpacity: opacity * 0.25}); } + onRemove(map: Map): this { + super.onRemove(map); + this.#handles.concat(this.#middleHandles).forEach((handle: CoalitionAreaHandle | CoalitionAreaMiddleHandle) => handle.removeFrom(getMap())); + return this; + } + #setColors() { const coalitionColor = this.getCoalition() === "blue" ? "#247be2" : "#ff5858"; this.setStyle({ color: this.getSelected() ? "white" : coalitionColor, fillColor: coalitionColor }); @@ -159,10 +166,4 @@ export class CoalitionArea extends Polygon { this.setEditing(false); }); } - - onRemove(map: Map): this { - super.onRemove(map); - this.#handles.concat(this.#middleHandles).forEach((handle: CoalitionAreaHandle | CoalitionAreaMiddleHandle) => handle.removeFrom(getMap())); - return this; - } } \ No newline at end of file diff --git a/client/src/map/map.ts b/client/src/map/map.ts index c3ff9608..6c50858a 100644 --- a/client/src/map/map.ts +++ b/client/src/map/map.ts @@ -392,6 +392,12 @@ export class Map extends L.Map { return this.#coalitionAreas.find((area: CoalitionArea) => { return area.getSelected() }); } + bringCoalitionAreaToBack(coalitionArea: CoalitionArea) { + coalitionArea.bringToBack(); + this.#coalitionAreas.splice(this.#coalitionAreas.indexOf(coalitionArea), 1); + this.#coalitionAreas.unshift(coalitionArea); + } + /* Event handlers */ #onClick(e: any) { if (!this.#preventLeftClick) { @@ -423,14 +429,18 @@ export class Map extends L.Map { if (this.#state === IDLE) { if (this.#state == IDLE) { this.showMapContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng); + var clickedCoalitionArea = null; + /* Coalition areas are ordered in the #coalitionAreas array according to their zindex. Select the upper one */ for (let coalitionArea of this.#coalitionAreas) { if (coalitionArea.getBounds().contains(e.latlng)) { - if (coalitionArea.getSelected()) - this.showCoalitionAreaContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng, coalitionArea); + if (coalitionArea.getSelected()) + clickedCoalitionArea = coalitionArea; else this.getMapContextMenu().setCoalitionArea(coalitionArea); } } + if (clickedCoalitionArea) + this.showCoalitionAreaContextMenu(e.originalEvent.x, e.originalEvent.y, e.latlng, clickedCoalitionArea); } } else if (this.#state === MOVE_UNIT) { diff --git a/client/src/other/utils.ts b/client/src/other/utils.ts index 2a50102b..de64dab7 100644 --- a/client/src/other/utils.ts +++ b/client/src/other/utils.ts @@ -35,14 +35,14 @@ export function distance(lat1: number, lon1: number, lat2: number, lon2: number) return d; } -export function coordinatesFromBearingAndDistance(lat1: number, lon1: number, brng: number, dist: number) { +export function bearingAndDistanceToLatLng(lat: number, lon: number, brng: number, dist: number) { const R = 6371e3; // metres - const φ1 = deg2rad(lat1); // φ, λ in radians - const λ1 = deg2rad(lon1); + const φ1 = deg2rad(lat); // φ, λ in radians + const λ1 = deg2rad(lon); const φ2 = Math.asin( Math.sin(φ1)*Math.cos(dist/R) + Math.cos(φ1)*Math.sin(dist/R)*Math.cos(brng) ); const λ2 = λ1 + Math.atan2(Math.sin(brng)*Math.sin(dist/R)*Math.cos(φ1), Math.cos(dist/R)-Math.sin(φ1)*Math.sin(φ2)); - return {lat: rad2deg(φ2), lng: rad2deg(λ2)}; + return new LatLng(rad2deg(φ2), rad2deg(λ2)); } export function ConvertDDToDMS(D: number, lng: boolean) { @@ -205,6 +205,11 @@ export function nmToFt(nm: number) { return nm * 6076.12; } +export function polyContains(latlng: LatLng, polygon: Polygon) { + var poly = polygon.toGeoJSON(); + return turf.inside(turf.point([latlng.lng, latlng.lat]), poly); +} + export function randomPointInPoly(polygon: Polygon): LatLng { var bounds = polygon.getBounds(); var x_min = bounds.getEast(); @@ -226,12 +231,45 @@ export function randomPointInPoly(polygon: Polygon): LatLng { } export function polygonArea(polygon: Polygon) { - var poly = polygon.toGeoJSON(); + var poly = polygon.toGeoJSON(); return turf.area(poly); } -export function randomUnitBlueprintByRole(unitDatabse: UnitDatabase, role: string) { - const unitBlueprints = unitDatabse.getByRole(role); +export function randomUnitBlueprint(unitDatabase: UnitDatabase, options: {type?: string, role?: string, ranges?: string[], eras?: string[]} ) { + /* Start from all the unit blueprints in the database */ + var unitBlueprints = Object.values(unitDatabase.getBlueprints()); + + /* If a specific type or role is provided, use only the blueprints of that type or role */ + if (options.type && options.role) { + console.error("Can't create random unit if both type and role are provided. Either create by type or by role.") + return null; + } + + if (options.type) { + unitBlueprints = unitDatabase.getByType(options.type); + } + else if (options.role) { + unitBlueprints = unitDatabase.getByType(options.role); + } + + /* Keep only the units that have a range included in the requested values */ + if (options.ranges) { + unitBlueprints = unitBlueprints.filter((unitBlueprint: UnitBlueprint) => { + //@ts-ignore + return unitBlueprint.range? options.ranges.includes(unitBlueprint.range): true; + }); + } + + /* Keep only the units that have an era included in the requested values */ + if (options.eras) { + unitBlueprints = unitBlueprints.filter((unitBlueprint: UnitBlueprint) => { + //@ts-ignore + return options.eras.reduce((value, era) => { + return value? value: unitBlueprint.era.includes(era); + }, false); + }); + } + var index = Math.floor(Math.random() * unitBlueprints.length); return unitBlueprints[index]; } diff --git a/client/src/units/citiesDatabase.ts b/client/src/units/citiesDatabase.ts new file mode 100644 index 00000000..5979ff28 --- /dev/null +++ b/client/src/units/citiesDatabase.ts @@ -0,0 +1,7137 @@ +export var citiesDatabase: {lat: number, lng: number, pop: number}[] = [ + { + lat: 41.0136, + lng: 28.955, + pop: 16079000, + }, + { + lat: 39.93, + lng: 32.85, + pop: 5503985, + }, + { + lat: 31.9497, + lng: 35.9328, + pop: 4007526, + }, + { + lat: 25.2631, + lng: 55.2972, + pop: 3331420, + }, + { + lat: 29.3697, + lng: 47.9783, + pop: 3000000, + }, + { + lat: 40.1833, + lng: 29.05, + pop: 2901396, + }, + { + lat: 36.8874, + lng: 30.7075, + pop: 2426356, + }, + { + lat: 32.6447, + lng: 51.6675, + pop: 2219343, + }, + { + lat: 36.2333, + lng: -115.2654, + pop: 2150373, + }, + { + lat: 37.0628, + lng: 37.3792, + pop: 2028563, + }, + { + lat: 37.1583, + lng: 38.7917, + pop: 1985753, + }, + { + lat: 36.2, + lng: 37.16, + pop: 1916781, + }, + { + lat: 36.8, + lng: 34.6333, + pop: 1814468, + }, + { + lat: 37, + lng: 35.3213, + pop: 1765981, + }, + { + lat: 33.5131, + lng: 36.2919, + pop: 1754000, + }, + { + lat: 29.61, + lng: 52.5425, + pop: 1565572, + }, + { + lat: 24.4667, + lng: 54.3667, + pop: 1483000, + }, + { + lat: 23.6139, + lng: 58.5922, + pop: 1421409, + }, + { + lat: 32.08, + lng: 34.78, + pop: 1388400, + }, + { + lat: 41.2903, + lng: 36.3336, + pop: 1335716, + }, + { + lat: 30.515, + lng: 47.81, + pop: 1326564, + }, + { + lat: 31.3203, + lng: 48.6692, + pop: 1261042, + }, + { + lat: 25.3575, + lng: 55.3908, + pop: 1247749, + }, + { + lat: 41.0167, + lng: 39.55, + pop: 1215351, + }, + { + lat: 25.2867, + lng: 51.5333, + pop: 1186023, + }, + { + lat: 47.2333, + lng: 39.7, + pop: 1137704, + }, + { + lat: 41.7225, + lng: 44.7925, + pop: 1118035, + }, + { + lat: 40.1814, + lng: 44.5144, + pop: 1075800, + }, + { + lat: 46.4775, + lng: 30.7326, + pop: 1017699, + }, + { + lat: 47.0228, + lng: 28.8353, + pop: 702300, + }, + { + lat: 26.225, + lng: 50.5775, + pop: 436000, + }, + { + lat: 33.8869, + lng: 35.5131, + pop: 361366, + }, + { + lat: 35.1725, + lng: 33.365, + pop: 330000, + }, + { + lat: 15.2137, + lng: 145.7546, + pop: 2500, + }, + { + lat: 13.4745, + lng: 144.7504, + pop: 1051, + }, + { + lat: 45.0333, + lng: 38.9667, + pop: 948827, + }, + { + lat: 39.9244, + lng: 32.8856, + pop: 914501, + }, + { + lat: 41.047, + lng: 28.658, + pop: 891120, + }, + { + lat: 26.4333, + lng: 50.1, + pop: 903312, + }, + { + lat: 39.7767, + lng: 30.5206, + pop: 871187, + }, + { + lat: 36.9831, + lng: 35.3328, + pop: 792536, + }, + { + lat: 41.0344, + lng: 28.8564, + pop: 734369, + }, + { + lat: 34.7333, + lng: 36.7167, + pop: 775404, + }, + { + lat: 41, + lng: 28.8, + pop: 770317, + }, + { + lat: 39.9086, + lng: 41.2769, + pop: 767848, + }, + { + lat: 24.2075, + lng: 55.7447, + pop: 766936, + }, + { + lat: 30.2833, + lng: 57.0833, + pop: 738374, + }, + { + lat: 35.5167, + lng: 35.7833, + pop: 700000, + }, + { + lat: 35.1333, + lng: 36.75, + pop: 696863, + }, + { + lat: 40.8747, + lng: 29.235, + pop: 693599, + }, + { + lat: 25.3833, + lng: 49.5833, + pop: 660788, + }, + { + lat: 40.11, + lng: 29.0821, + pop: 643681, + }, + { + lat: 25.25, + lng: 51.4, + pop: 605712, + }, + { + lat: 32.8192, + lng: 34.9992, + pop: 600000, + }, + { + lat: 42.9833, + lng: 47.4833, + pop: 592976, + }, + { + lat: 35.3529, + lng: -119.0359, + pop: 590845, + }, + { + lat: 29.4964, + lng: 60.8628, + pop: 587730, + }, + { + lat: 32.3399, + lng: 36.2052, + pop: 580000, + }, + { + lat: 32.55, + lng: 35.85, + pop: 569068, + }, + { + lat: 34.4367, + lng: 35.8344, + pop: 530000, + }, + { + lat: 46.35, + lng: 48.035, + pop: 532504, + }, + { + lat: 31.8822, + lng: 54.3397, + pop: 529673, + }, + { + lat: 27.1833, + lng: 56.2667, + pop: 526648, + }, + { + lat: 26.556, + lng: 49.996, + pop: 524182, + }, + { + lat: 44.605, + lng: 33.5225, + pop: 522057, + }, + { + lat: 46.975, + lng: 31.995, + pop: 498748, + }, + { + lat: 32.3436, + lng: 62.1194, + pop: 500000, + }, + { + lat: 25.4136, + lng: 55.4456, + pop: 490035, + }, + { + lat: 32.0833, + lng: 36.1, + pop: 481300, + }, + { + lat: 40.8872, + lng: 29.19, + pop: 461155, + }, + { + lat: 41.0719, + lng: 28.9664, + pop: 437026, + }, + { + lat: 41.0339, + lng: 28.8903, + pop: 444561, + }, + { + lat: 45.05, + lng: 41.9833, + pop: 450680, + }, + { + lat: 47.0958, + lng: 37.5494, + pop: 449498, + }, + { + lat: 40.9792, + lng: 28.7214, + pop: 435625, + }, + { + lat: 37.5833, + lng: 36.9333, + pop: 443575, + }, + { + lat: 41.005, + lng: 39.7225, + pop: 426882, + }, + { + lat: 43.5853, + lng: 39.7203, + pop: 411524, + }, + { + lat: 36.9981, + lng: 35.3439, + pop: 407054, + }, + { + lat: 29.35, + lng: 47.6833, + pop: 393432, + }, + { + lat: 27, + lng: 49.6544, + pop: 392948, + }, + { + lat: 34.5277, + lng: -117.3536, + pop: 389060, + }, + { + lat: 23.5333, + lng: 58.3833, + pop: 383257, + }, + { + lat: 34.6935, + lng: -118.1753, + pop: 381732, + }, + { + lat: 36.2025, + lng: 36.1606, + pop: 377793, + }, + { + lat: 39.75, + lng: 37.0167, + pop: 377561, + }, + { + lat: 40.8, + lng: 29.4333, + pop: 371000, + }, + { + lat: 30.3392, + lng: 48.3042, + pop: 370180, + }, + { + lat: 30.3833, + lng: 47.7, + pop: 370000, + }, + { + lat: 40.7625, + lng: 29.9175, + pop: 363416, + }, + { + lat: 43.2167, + lng: 27.9167, + pop: 348668, + }, + { + lat: 44.9484, + lng: 34.1, + pop: 341799, + }, + { + lat: 41.1669, + lng: 29.0572, + pop: 342503, + }, + { + lat: 36.9165, + lng: 34.8951, + pop: 339676, + }, + { + lat: 40.9683, + lng: 29.2617, + pop: 327798, + }, + { + lat: 41.0011, + lng: 28.6419, + pop: 331525, + }, + { + lat: 40.6828, + lng: 46.3606, + pop: 331400, + }, + { + lat: 39.6333, + lng: 27.8833, + pop: 331788, + }, + { + lat: 41.0225, + lng: 28.8717, + pop: 289331, + }, + { + lat: 36.55, + lng: 32, + pop: 312319, + }, + { + lat: 36.0133, + lng: -115.0381, + pop: 311250, + }, + { + lat: 43.04, + lng: 44.6775, + pop: 306978, + }, + { + lat: 35.95, + lng: 39.01, + pop: 299824, + }, + { + lat: 36.5817, + lng: 36.165, + pop: 297943, + }, + { + lat: 25.4416, + lng: 49.6642, + pop: 298562, + }, + { + lat: 40.5455, + lng: 34.957, + pop: 294807, + }, + { + lat: 43.3125, + lng: 45.6986, + pop: 291687, + }, + { + lat: 46.6425, + lng: 32.625, + pop: 291428, + }, + { + lat: 32.0178, + lng: 36.0464, + pop: 280000, + }, + { + lat: 44.1667, + lng: 28.6333, + pop: 283872, + }, + { + lat: 41.15, + lng: 27.8, + pop: 279251, + }, + { + lat: 31.5831, + lng: 64.3692, + pop: 276831, + }, + { + lat: 34.4175, + lng: -118.4964, + pop: 275230, + }, + { + lat: 44.7167, + lng: 37.75, + pop: 273278, + }, + { + lat: 40.7833, + lng: 30.4, + pop: 271515, + }, + { + lat: 35.3333, + lng: 40.15, + pop: 271800, + }, + { + lat: 41.1856, + lng: 28.7406, + pop: 270549, + }, + { + lat: 43.4833, + lng: 43.6167, + pop: 265162, + }, + { + lat: 40.0806, + lng: 29.5097, + pop: 268155, + }, + { + lat: 32.3825, + lng: 48.4019, + pop: 264709, + }, + { + lat: 37.075, + lng: 36.25, + pop: 264373, + }, + { + lat: 36.2883, + lng: -115.0888, + pop: 259638, + }, + { + lat: 40.8161, + lng: 29.3006, + pop: 255468, + }, + { + lat: 31.95, + lng: 34.8, + pop: 249860, + }, + { + lat: 41.0369, + lng: 29.1786, + pop: 251937, + }, + { + lat: 47.2167, + lng: 38.9167, + pop: 250287, + }, + { + lat: 37.1939, + lng: 40.5861, + pop: 252656, + }, + { + lat: 45.4233, + lng: 28.0425, + pop: 249432, + }, + { + lat: 36.3276, + lng: -119.3269, + pop: 249804, + }, + { + lat: 41.02, + lng: 28.5775, + pop: 247736, + }, + { + lat: 32.7003, + lng: 51.5211, + pop: 247128, + }, + { + lat: 41.1342, + lng: 29.0922, + pop: 246700, + }, + { + lat: 32.0889, + lng: 34.8864, + pop: 236169, + }, + { + lat: 40.8417, + lng: 31.1583, + pop: 240633, + }, + { + lat: 30.4411, + lng: 47.9725, + pop: 240300, + }, + { + lat: 34.6747, + lng: 33.0442, + pop: 235056, + }, + { + lat: 23.6703, + lng: 58.1891, + pop: 237816, + }, + { + lat: 32.6347, + lng: 51.3653, + pop: 235281, + }, + { + lat: 36.7833, + lng: 31.4333, + pop: 230597, + }, + { + lat: 40.9833, + lng: 37.8833, + pop: 229214, + }, + { + lat: 28.9264, + lng: 50.8514, + pop: 223504, + }, + { + lat: 26.2833, + lng: 50.2, + pop: 219679, + }, + { + lat: 36.0091, + lng: -115.2278, + pop: 219566, + }, + { + lat: 32.3286, + lng: 34.8567, + pop: 217244, + }, + { + lat: 36.0952, + lng: -115.2636, + pop: 217441, + }, + { + lat: 23.6167, + lng: 58.5667, + pop: 214901, + }, + { + lat: 33.5606, + lng: 35.3758, + pop: 200000, + }, + { + lat: 33.8936, + lng: 35.5403, + pop: 150000, + }, + { + lat: 32.0833, + lng: 34.8333, + pop: 193774, + }, + { + lat: 40.7347, + lng: 31.6075, + pop: 205525, + }, + { + lat: 32.0167, + lng: 34.7667, + pop: 194300, + }, + { + lat: 32.8667, + lng: 59.2167, + pop: 203636, + }, + { + lat: 25.69, + lng: 51.51, + pop: 202031, + }, + { + lat: 40.3139, + lng: 36.5542, + pop: 201294, + }, + { + lat: 34.4285, + lng: -119.7202, + pop: 198240, + }, + { + lat: 36.1783, + lng: -115.0487, + pop: 196411, + }, + { + lat: 37.2306, + lng: 39.7653, + pop: 195910, + }, + { + lat: 37.1847, + lng: 38.7908, + pop: 195552, + }, + { + lat: 37.1819, + lng: 33.2181, + pop: 194018, + }, + { + lat: 39.8417, + lng: 33.5139, + pop: 193093, + }, + { + lat: 45, + lng: 41.1167, + pop: 190709, + }, + { + lat: 32.3311, + lng: 50.8594, + pop: 190441, + }, + { + lat: 36.0872, + lng: -115.1355, + pop: 189852, + }, + { + lat: 36.5117, + lng: 40.7422, + pop: 188160, + }, + { + lat: 37.05, + lng: 41.22, + pop: 184231, + }, + { + lat: 45.2692, + lng: 27.9575, + pop: 180302, + }, + { + lat: 41.2792, + lng: 31.4208, + pop: 175605, + }, + { + lat: 29.437, + lng: 55.6802, + pop: 175000, + }, + { + lat: 33.2708, + lng: 35.1961, + pop: 160000, + }, + { + lat: 32.8667, + lng: 51.5667, + pop: 173329, + }, + { + lat: 41.6458, + lng: 41.6417, + pop: 169095, + }, + { + lat: 32.07, + lng: 34.8236, + pop: 159200, + }, + { + lat: 23.8494, + lng: 57.4386, + pop: 170000, + }, + { + lat: 31.8667, + lng: 36, + pop: 169434, + }, + { + lat: 34.5944, + lng: -118.1057, + pop: 167987, + }, + { + lat: 41.2833, + lng: 28, + pop: 166789, + }, + { + lat: 40.7833, + lng: 29.7333, + pop: 165503, + }, + { + lat: 35.9333, + lng: 36.6333, + pop: 165000, + }, + { + lat: 29.1322, + lng: 48.1261, + pop: 164212, + }, + { + lat: 40.6667, + lng: 29.8333, + pop: 162584, + }, + { + lat: 30.5589, + lng: 49.1981, + pop: 162797, + }, + { + lat: 30.4067, + lng: 55.9939, + pop: 161909, + }, + { + lat: 25.3722, + lng: 51.2047, + pop: 161240, + }, + { + lat: 30.96, + lng: 61.86, + pop: 160902, + }, + { + lat: 37.0289, + lng: 35.8125, + pop: 160474, + }, + { + lat: 32.2222, + lng: 35.2611, + pop: 156906, + }, + { + lat: 39.7464, + lng: 39.4914, + pop: 157452, + }, + { + lat: 32.5589, + lng: 36.0147, + pop: 155693, + }, + { + lat: 34.447, + lng: 35.8178, + pop: 150000, + }, + { + lat: 29.2694, + lng: 51.22, + pop: 155567, + }, + { + lat: 41.6344, + lng: 32.3375, + pop: 155016, + }, + { + lat: 46.8489, + lng: 35.3675, + pop: 154992, + }, + { + lat: 40.35, + lng: 27.9667, + pop: 154359, + }, + { + lat: 26.65, + lng: 50.1667, + pop: 153933, + }, + { + lat: 24.362, + lng: 56.7344, + pop: 151349, + }, + { + lat: 45.3619, + lng: 36.4711, + pop: 149566, + }, + { + lat: 42.25, + lng: 42.7, + pop: 147900, + }, + { + lat: 39.7186, + lng: 43.0508, + pop: 149188, + }, + { + lat: 32.3325, + lng: 35.7517, + pop: 148870, + }, + { + lat: 40.65, + lng: 35.8331, + pop: 149084, + }, + { + lat: 41.3764, + lng: 33.7764, + pop: 148931, + }, + { + lat: 29.8742, + lng: 52.8025, + pop: 148858, + }, + { + lat: 26.0031, + lng: 63.0544, + pop: 147791, + }, + { + lat: 44.05, + lng: 43.0667, + pop: 145836, + }, + { + lat: 32.6189, + lng: 36.1021, + pop: 146481, + }, + { + lat: 40.6556, + lng: 29.275, + pop: 144407, + }, + { + lat: 37.5167, + lng: 34.05, + pop: 145389, + }, + { + lat: 43.25, + lng: 46.5833, + pop: 141259, + }, + { + lat: 33.4472, + lng: 36.3361, + pop: 136427, + }, + { + lat: 37.332, + lng: 42.187, + pop: 143124, + }, + { + lat: 37.01, + lng: 37.7972, + pop: 142389, + }, + { + lat: 44.6, + lng: 40.0833, + pop: 141970, + }, + { + lat: 41.0247, + lng: 40.5222, + pop: 141143, + }, + { + lat: 28.5, + lng: 53.5606, + pop: 141634, + }, + { + lat: 41.1992, + lng: 36.7275, + pop: 138840, + }, + { + lat: 32.0167, + lng: 34.75, + pop: 128800, + }, + { + lat: 41.0736, + lng: 28.2478, + pop: 137861, + }, + { + lat: 39.9208, + lng: 44.0444, + pop: 137613, + }, + { + lat: 46.8403, + lng: 29.6433, + pop: 133807, + }, + { + lat: 40.9153, + lng: 38.3894, + pop: 135920, + }, + { + lat: 40.0528, + lng: 47.4614, + pop: 136000, + }, + { + lat: 32.46, + lng: 48.3592, + pop: 135116, + }, + { + lat: 32.0089, + lng: 51.8667, + pop: 134952, + }, + { + lat: 31.0286, + lng: 61.5011, + pop: 134950, + }, + { + lat: 33.8, + lng: 35.6, + pop: 130000, + }, + { + lat: 31.8981, + lng: 34.8081, + pop: 132671, + }, + { + lat: 33.4833, + lng: 36.35, + pop: 114363, + }, + { + lat: 30.4397, + lng: 48.1664, + pop: 133097, + }, + { + lat: 41.1986, + lng: 32.6264, + pop: 131989, + }, + { + lat: 41.5472, + lng: 45.0111, + pop: 128680, + }, + { + lat: 43.9167, + lng: 42.7167, + pop: 128779, + }, + { + lat: 37.45, + lng: 35.8, + pop: 130495, + }, + { + lat: 28.6781, + lng: 57.7406, + pop: 130429, + }, + { + lat: 40.8265, + lng: 29.3745, + pop: 129655, + }, + { + lat: 47.1667, + lng: 39.7333, + pop: 126769, + }, + { + lat: 33.464, + lng: 36.3044, + pop: 101827, + }, + { + lat: 37.0758, + lng: -113.5752, + pop: 127890, + }, + { + lat: 42.8803, + lng: 47.6383, + pop: 123988, + }, + { + lat: 29.1061, + lng: 58.3569, + pop: 127396, + }, + { + lat: 41.1333, + lng: 37.2833, + pop: 126702, + }, + { + lat: 33.5711, + lng: 36.4011, + pop: 123494, + }, + { + lat: 40.7894, + lng: 43.8475, + pop: 121976, + }, + { + lat: 36.9167, + lng: 31.1, + pop: 124335, + }, + { + lat: 37.3697, + lng: 36.1, + pop: 124053, + }, + { + lat: 44.2222, + lng: 42.0575, + pop: 122395, + }, + { + lat: 42.05, + lng: 48.3, + pop: 123720, + }, + { + lat: 30.5958, + lng: 50.2417, + pop: 122604, + }, + { + lat: 13.4692, + lng: 144.7332, + pop: 122411, + }, + { + lat: 36.085, + lng: 35.9806, + pop: 121109, + }, + { + lat: 41.4564, + lng: 31.7986, + pop: 120395, + }, + { + lat: 23.3908, + lng: 57.4244, + pop: 120000, + }, + { + lat: 43.2167, + lng: 44.7667, + pop: 117936, + }, + { + lat: 36.3761, + lng: 33.9322, + pop: 119303, + }, + { + lat: 44.6333, + lng: 41.9333, + pop: 117446, + }, + { + lat: 36.8278, + lng: -119.683, + pop: 118488, + }, + { + lat: 40.7333, + lng: 29.9667, + pop: 118066, + }, + { + lat: 41.3333, + lng: 27.9667, + pop: 116882, + }, + { + lat: 33.9697, + lng: 35.6156, + pop: 102221, + }, + { + lat: 41.0333, + lng: 37.5, + pop: 116154, + }, + { + lat: 25.7667, + lng: 55.95, + pop: 115949, + }, + { + lat: 36.7167, + lng: 37.1167, + pop: 116034, + }, + { + lat: 26.475, + lng: 50.0417, + pop: 115000, + }, + { + lat: 40.6078, + lng: 43.0958, + pop: 115891, + }, + { + lat: 46.7556, + lng: 36.7889, + pop: 114205, + }, + { + lat: 44.0333, + lng: 42.85, + pop: 113056, + }, + { + lat: 22.5667, + lng: 58.1167, + pop: 115040, + }, + { + lat: 31.5231, + lng: 49.8861, + pop: 114343, + }, + { + lat: 27.2025, + lng: 60.6847, + pop: 113750, + }, + { + lat: 37.4167, + lng: 41.3697, + pop: 113367, + }, + { + lat: 36.7108, + lng: 38.9478, + pop: 113194, + }, + { + lat: 33.8333, + lng: 35.9167, + pop: 100000, + }, + { + lat: 24.1456, + lng: 49.0653, + pop: 111214, + }, + { + lat: 28.9383, + lng: 53.6483, + pop: 110825, + }, + { + lat: 35.0118, + lng: 37.0525, + pop: 110683, + }, + { + lat: 45.1939, + lng: 33.3681, + pop: 108248, + }, + { + lat: 30.6683, + lng: 51.5881, + pop: 108505, + }, + { + lat: 30.0342, + lng: 47.9294, + pop: 107620, + }, + { + lat: 32.1714, + lng: 34.9083, + pop: 100800, + }, + { + lat: 39.5736, + lng: -119.7161, + pop: 106900, + }, + { + lat: 36.0778, + lng: 37.3733, + pop: 106460, + }, + { + lat: 25.2919, + lng: 60.6431, + pop: 106739, + }, + { + lat: 40.77, + lng: 47.0489, + pop: 106100, + }, + { + lat: 37.075, + lng: 41.2153, + pop: 105856, + }, + { + lat: 39.8208, + lng: 34.8083, + pop: 105167, + }, + { + lat: 29.9758, + lng: 48.4722, + pop: 105080, + }, + { + lat: 36.9764, + lng: 38.4269, + pop: 104302, + }, + { + lat: 46.3167, + lng: 44.2667, + pop: 103535, + }, + { + lat: 32.0456, + lng: 48.8567, + pop: 101878, + }, + { + lat: 23.2325, + lng: 56.4973, + pop: 101640, + }, + { + lat: 31.9364, + lng: 49.3039, + pop: 100497, + }, + { + lat: 32.1653, + lng: 34.8458, + pop: 93989, + }, + { + lat: 40.5986, + lng: 33.6192, + pop: 96025, + }, + { + lat: 40.8128, + lng: 44.4883, + pop: 90525, + }, + { + lat: 25.1223, + lng: 56.3342, + pop: 93673, + }, + { + lat: 46.8333, + lng: 29.4833, + pop: 91882, + }, + { + lat: 43.5667, + lng: 27.8333, + pop: 90419, + }, + { + lat: 34.8833, + lng: 35.8833, + pop: 89457, + }, + { + lat: 32.0333, + lng: 35.7333, + pop: 88900, + }, + { + lat: 33.3833, + lng: 35.45, + pop: 80000, + }, + { + lat: 25.18, + lng: 51.61, + pop: 87970, + }, + { + lat: 33.45, + lng: 36.25, + pop: 84044, + }, + { + lat: 37.3131, + lng: 40.735, + pop: 86948, + }, + { + lat: 34.9167, + lng: 33.6333, + pop: 84900, + }, + { + lat: 35.8367, + lng: 38.5481, + pop: 84000, + }, + { + lat: 32.7019, + lng: 35.3033, + pop: 83400, + }, + { + lat: 40.1431, + lng: 29.9792, + pop: 81723, + }, + { + lat: 32.1833, + lng: 34.8667, + pop: 74000, + }, + { + lat: 26.25, + lng: 50.6167, + pop: 75000, + }, + { + lat: 31.9275, + lng: 34.8625, + pop: 75500, + }, + { + lat: 45.19, + lng: 28.8, + pop: 73707, + }, + { + lat: 39.9323, + lng: 48.9203, + pop: 70684, + }, + { + lat: 22.9333, + lng: 57.5333, + pop: 72076, + }, + { + lat: 32.0714, + lng: 34.81, + pop: 59518, + }, + { + lat: 33.2631, + lng: 35.2389, + pop: 61973, + }, + { + lat: 44.15, + lng: 43.4667, + pop: 67054, + }, + { + lat: 24.2592, + lng: 55.7839, + pop: 67963, + }, + { + lat: 41.2, + lng: 47.1667, + pop: 68360, + }, + { + lat: 42.8167, + lng: 47.1167, + pop: 65080, + }, + { + lat: 40.2597, + lng: 40.2278, + pop: 66633, + }, + { + lat: 34.7667, + lng: 32.4167, + pop: 63600, + }, + { + lat: 32.7125, + lng: 36.5667, + pop: 64730, + }, + { + lat: 43, + lng: 41.0167, + pop: 64441, + }, + { + lat: 46.6383, + lng: 27.7292, + pop: 63035, + }, + { + lat: 46.3017, + lng: 30.6569, + pop: 59800, + }, + { + lat: 26.219, + lng: 50.538, + pop: 44769, + }, + { + lat: 32.15, + lng: 34.8833, + pop: 56659, + }, + { + lat: 40.6172, + lng: 47.15, + pop: 59036, + }, + { + lat: 32.8, + lng: 35.1, + pop: 55464, + }, + { + lat: 32.0956, + lng: 34.9567, + pop: 56300, + }, + { + lat: 46.2167, + lng: 27.6667, + pop: 55837, + }, + { + lat: 33.4728, + lng: 36.3344, + pop: 50880, + }, + { + lat: 39.1511, + lng: -119.7476, + pop: 57957, + }, + { + lat: 32.5194, + lng: 35.1536, + pop: 55300, + }, + { + lat: 40.4597, + lng: 39.4778, + pop: 57269, + }, + { + lat: 26.1128, + lng: 50.5139, + pop: 52700, + }, + { + lat: 32.1903, + lng: 34.9686, + pop: 51683, + }, + { + lat: 31.9333, + lng: 34.8, + pop: 50200, + }, + { + lat: 33.5186, + lng: 35.3661, + pop: 50000, + }, + { + lat: 40.5, + lng: 44.7667, + pop: 52808, + }, + { + lat: 32.0636, + lng: 34.8553, + pop: 41900, + }, + { + lat: 33.5667, + lng: 36.3667, + pop: 45974, + }, + { + lat: 32.2723, + lng: 35.8914, + pop: 50745, + }, + { + lat: 41.9817, + lng: 44.1124, + pop: 48143, + }, + { + lat: 40.2739, + lng: 44.6256, + pop: 44400, + }, + { + lat: 32.0522, + lng: 34.9511, + pop: 46896, + }, + { + lat: 34.1236, + lng: 35.6511, + pop: 40000, + }, + { + lat: 32.15, + lng: 34.8333, + pop: 46700, + }, + { + lat: 26.1736, + lng: 50.5478, + pop: 40000, + }, + { + lat: 32.9136, + lng: 35.2961, + pop: 45300, + }, + { + lat: 31.8558, + lng: 34.73, + pop: 42314, + }, + { + lat: 36.1008, + lng: -115.0379, + pop: 45105, + }, + { + lat: 42.5083, + lng: 41.8667, + pop: 42998, + }, + { + lat: 32.8333, + lng: 35.0833, + pop: 39900, + }, + { + lat: 25.5533, + lng: 55.5475, + pop: 44411, + }, + { + lat: 32.0333, + lng: 34.85, + pop: 36706, + }, + { + lat: 32.8056, + lng: 35.1694, + pop: 41600, + }, + { + lat: 40.15, + lng: 44.04, + pop: 38635, + }, + { + lat: 41.1111, + lng: 42.7022, + pop: 42226, + }, + { + lat: 34.4, + lng: 35.9, + pop: 30000, + }, + { + lat: 35.125, + lng: 33.9417, + pop: 40920, + }, + { + lat: 40.8297, + lng: 46.0189, + pop: 40600, + }, + { + lat: 41.4708, + lng: 48.8097, + pop: 39900, + }, + { + lat: 40.3744, + lng: 47.1267, + pop: 38500, + }, + { + lat: 33.1256, + lng: 35.8239, + pop: 37022, + }, + { + lat: 40.6531, + lng: 47.7406, + pop: 36200, + }, + { + lat: 36.1365, + lng: -115.137, + pop: 36307, + }, + { + lat: 32.0333, + lng: 34.8833, + pop: 29146, + }, + { + lat: 41.0933, + lng: 45.3661, + pop: 35102, + }, + { + lat: 41.1833, + lng: 41.8181, + pop: 35081, + }, + { + lat: 32.0781, + lng: 34.8475, + pop: 25298, + }, + { + lat: 22.6833, + lng: 58.55, + pop: 35000, + }, + { + lat: 33.92, + lng: 35.67, + pop: 28000, + }, + { + lat: 25.2525, + lng: 51.5592, + pop: 29703, + }, + { + lat: 35.3403, + lng: 33.3192, + pop: 33207, + }, + { + lat: 33.1258, + lng: 35.4428, + pop: 30000, + }, + { + lat: 42.1167, + lng: 48.1833, + pop: 29716, + }, + { + lat: 41.6336, + lng: 46.6433, + pop: 31300, + }, + { + lat: 39.8697, + lng: 48.06, + pop: 31310, + }, + { + lat: 40.0128, + lng: 48.4789, + pop: 30918, + }, + { + lat: 47.2167, + lng: 27.8167, + pop: 30804, + }, + { + lat: 32.3171, + lng: 34.9358, + pop: 28025, + }, + { + lat: 33.5, + lng: 36.3667, + pop: 22535, + }, + { + lat: 45.9167, + lng: 28.1836, + pop: 30018, + }, + { + lat: 40.4097, + lng: 44.6431, + pop: 25039, + }, + { + lat: 40.65, + lng: 47.4761, + pop: 29600, + }, + { + lat: 35.3683, + lng: -118.9225, + pop: 29110, + }, + { + lat: 32.2322, + lng: 34.9483, + pop: 26200, + }, + { + lat: 26.12, + lng: 50.65, + pop: 20000, + }, + { + lat: 40.5905, + lng: 46.3239, + pop: 25758, + }, + { + lat: 34.0063, + lng: 36.2073, + pop: 24000, + }, + { + lat: 32.1151, + lng: 34.9751, + pop: 21848, + }, + { + lat: 33.8333, + lng: 35.5333, + pop: 9000, + }, + { + lat: 32.2822, + lng: 34.9833, + pop: 21451, + }, + { + lat: 39.9539, + lng: 44.5506, + pop: 21300, + }, + { + lat: 40.2975, + lng: 44.3617, + pop: 21600, + }, + { + lat: 40.8792, + lng: 45.1472, + pop: 20509, + }, + { + lat: 40.0433, + lng: 48.9356, + pop: 21504, + }, + { + lat: 47.3833, + lng: 28.8167, + pop: 21065, + }, + { + lat: 26.1497, + lng: 50.4653, + pop: 18000, + }, + { + lat: 26.2186, + lng: 50.4756, + pop: 18000, + }, + { + lat: 40.3589, + lng: 45.1267, + pop: 20765, + }, + { + lat: 41.3597, + lng: 48.5125, + pop: 20791, + }, + { + lat: 40.79, + lng: 48.1519, + pop: 20660, + }, + { + lat: 40.5692, + lng: 48.4008, + pop: 20200, + }, + { + lat: 41.1189, + lng: 45.4539, + pop: 20200, + }, + { + lat: 46.3167, + lng: 28.6667, + pop: 20113, + }, + { + lat: 34.2264, + lng: 35.66, + pop: 9613, + }, + { + lat: 33.4292, + lng: 36.3611, + pop: 12330, + }, + { + lat: 33.8219, + lng: 35.5875, + pop: 13000, + }, + { + lat: 41.9167, + lng: 45.4833, + pop: 19629, + }, + { + lat: 41.0761, + lng: 49.1139, + pop: 18655, + }, + { + lat: 34.7024, + lng: 33.0453, + pop: 14477, + }, + { + lat: 47.1333, + lng: 28.6167, + pop: 18376, + }, + { + lat: 39.9311, + lng: 48.3697, + pop: 17900, + }, + { + lat: 26.1008, + lng: 50.4878, + pop: 14800, + }, + { + lat: 26.1833, + lng: 56.25, + pop: 17777, + }, + { + lat: 41.4264, + lng: 48.4356, + pop: 16500, + }, + { + lat: 46.6333, + lng: 29.4, + pop: 15939, + }, + { + lat: 40.3383, + lng: 48.1608, + pop: 15385, + }, + { + lat: 26.2306, + lng: 50.5108, + pop: 12000, + }, + { + lat: 41.9406, + lng: 41.9906, + pop: 14785, + }, + { + lat: 36.6087, + lng: -119.5434, + pop: 14666, + }, + { + lat: 40.5183, + lng: 47.6542, + pop: 14273, + }, + { + lat: 40.3019, + lng: 44.5831, + pop: 10198, + }, + { + lat: 33.4517, + lng: 35.2908, + pop: 10965, + }, + { + lat: 41.6389, + lng: 42.9861, + pop: 14000, + }, + { + lat: 40.9922, + lng: 45.6289, + pop: 13700, + }, + { + lat: 42.0267, + lng: 35.1511, + pop: 13354, + }, + { + lat: 46.95, + lng: 28.7833, + pop: 12515, + }, + { + lat: 33.2814, + lng: 35.3964, + pop: 10000, + }, + { + lat: 46.8167, + lng: 28.5833, + pop: 12491, + }, + { + lat: 40.345, + lng: 46.9289, + pop: 12563, + }, + { + lat: 45.9, + lng: 28.6689, + pop: 12355, + }, + { + lat: 39.7756, + lng: 47.6186, + pop: 12263, + }, + { + lat: 46.5167, + lng: 28.7833, + pop: 11997, + }, + { + lat: 40.3147, + lng: 44.5936, + pop: 9513, + }, + { + lat: 41.4225, + lng: 46.9242, + pop: 11415, + }, + { + lat: 35.379, + lng: -118.9578, + pop: 11443, + }, + { + lat: 43.1667, + lng: 44.8, + pop: 10333, + }, + { + lat: 35.3832, + lng: -118.9743, + pop: 11025, + }, + { + lat: 46.8833, + lng: 29.2167, + pop: 10872, + }, + { + lat: 47.25, + lng: 28.3, + pop: 10808, + }, + { + lat: 40.5244, + lng: 46.1069, + pop: 10700, + }, + { + lat: 35.3636, + lng: -118.965, + pop: 10517, + }, + { + lat: 40.5067, + lng: 46.825, + pop: 10100, + }, + { + lat: 40.77, + lng: 46.4111, + pop: 10228, + }, + { + lat: 47.0833, + lng: 28.1833, + pop: 10063, + }, + { + lat: 36.6211, + lng: -119.3188, + pop: 9680, + }, + { + lat: 40.5656, + lng: 45.8161, + pop: 8657, + }, + { + lat: 35.3972, + lng: -118.9892, + pop: 8726, + }, + { + lat: 46.3336, + lng: 28.9614, + pop: 8471, + }, + { + lat: 40.2183, + lng: 47.7083, + pop: 8450, + }, + { + lat: 41.7258, + lng: 46.4083, + pop: 8134, + }, + { + lat: 41.8464, + lng: 44.7194, + pop: 7940, + }, + { + lat: 39.7611, + lng: 45.3333, + pop: 7633, + }, + { + lat: 46.4833, + lng: 28.25, + pop: 7443, + }, + { + lat: 40.6103, + lng: 46.7897, + pop: 7400, + }, + { + lat: 40.1067, + lng: 46.0383, + pop: 7246, + }, + { + lat: 46.5153, + lng: 29.6631, + pop: 7078, + }, + { + lat: 41.0708, + lng: 47.4583, + pop: 6876, + }, + { + lat: 47.2167, + lng: 29.1667, + pop: 6708, + }, + { + lat: 34.5506, + lng: 36.0781, + pop: 4730, + }, + { + lat: 39.7953, + lng: 47.1131, + pop: 5700, + }, + { + lat: 39.7583, + lng: 46.7483, + pop: 4446, + }, + { + lat: 40.5367, + lng: 48.9328, + pop: 3945, + }, + { + lat: 39.9833, + lng: 46.9167, + pop: 3770, + }, + { + lat: 46.2667, + lng: 28.2167, + pop: 3429, + }, + { + lat: 39.6408, + lng: 46.5469, + pop: 2190, + }, + { + lat: 39.7203, + lng: 44.8531, + pop: 2000, + }, + { + lat: 42.5194, + lng: 43.15, + pop: 2047, + }, + { + lat: 40.9078, + lng: 49.0733, + pop: 1600, + }, + { + lat: 39.9111, + lng: 46.7892, + pop: 1397, + }, + { + lat: 36.2692, + lng: 36.5672, + pop: 98534, + }, + { + lat: 34.598, + lng: -112.3185, + pop: 97901, + }, + { + lat: 41.2719, + lng: 36.3508, + pop: 97564, + }, + { + lat: 32.45, + lng: 34.9167, + pop: 95700, + }, + { + lat: 41.5722, + lng: 35.9147, + pop: 97452, + }, + { + lat: 30.3586, + lng: 50.7981, + pop: 96728, + }, + { + lat: 29.6194, + lng: 51.6542, + pop: 96683, + }, + { + lat: 36.3274, + lng: -119.6549, + pop: 95459, + }, + { + lat: 40.6667, + lng: 36.5667, + pop: 95361, + }, + { + lat: 37.025, + lng: 37.9769, + pop: 95149, + }, + { + lat: 45.1333, + lng: 42.0333, + pop: 93658, + }, + { + lat: 41.4267, + lng: 32.0758, + pop: 91569, + }, + { + lat: 31.9077, + lng: 35.0076, + pop: 90013, + }, + { + lat: 25.1264, + lng: 62.3225, + pop: 90762, + }, + { + lat: 36.4128, + lng: 35.8867, + pop: 90456, + }, + { + lat: 35.6386, + lng: 36.6717, + pop: 90000, + }, + { + lat: 40.6833, + lng: 30.6253, + pop: 89301, + }, + { + lat: 36.3225, + lng: 41.8642, + pop: 88023, + }, + { + lat: 36.8461, + lng: 40.0489, + pop: 87684, + }, + { + lat: 32.6539, + lng: 51.7553, + pop: 86063, + }, + { + lat: 46.7111, + lng: 38.2733, + pop: 85760, + }, + { + lat: 22.968, + lng: 57.298, + pop: 85000, + }, + { + lat: 47.1, + lng: 39.4167, + pop: 80721, + }, + { + lat: 44.8667, + lng: 37.3667, + pop: 81447, + }, + { + lat: 32.2444, + lng: 54.0186, + pop: 80712, + }, + { + lat: 23.3, + lng: 57.9833, + pop: 80538, + }, + { + lat: 40.39, + lng: 36.09, + pop: 79916, + }, + { + lat: 44.4994, + lng: 34.17, + pop: 79458, + }, + { + lat: 39.8144, + lng: 35.1903, + pop: 79314, + }, + { + lat: 32.4797, + lng: 51.7753, + pop: 79023, + }, + { + lat: 30.4356, + lng: 49.1056, + pop: 78353, + }, + { + lat: 36.5275, + lng: 37.9553, + pop: 78255, + }, + { + lat: 45.4333, + lng: 40.5667, + pop: 78149, + }, + { + lat: 44.575, + lng: 38.0725, + pop: 77212, + }, + { + lat: 32.1942, + lng: 48.2436, + pop: 77148, + }, + { + lat: 35.35, + lng: 35.9167, + pop: 75505, + }, + { + lat: 37.341, + lng: 41.894, + pop: 76523, + }, + { + lat: 31.9519, + lng: 34.8881, + pop: 75700, + }, + { + lat: 34.5352, + lng: -117.2109, + pop: 75311, + }, + { + lat: 32.3061, + lng: 54.0081, + pop: 75271, + }, + { + lat: 39.9078, + lng: 30.0367, + pop: 74441, + }, + { + lat: 31.28, + lng: 49.6036, + pop: 74285, + }, + { + lat: 44.2167, + lng: 43.1333, + pop: 74141, + }, + { + lat: 34.3688, + lng: 41.0945, + pop: 74100, + }, + { + lat: 37.3914, + lng: 36.8522, + pop: 73770, + }, + { + lat: 37.6764, + lng: 31.7261, + pop: 73768, + }, + { + lat: 29.5839, + lng: 50.5189, + pop: 73472, + }, + { + lat: 36.85, + lng: 31.05, + pop: 73260, + }, + { + lat: 41.1417, + lng: 28.4631, + pop: 72966, + }, + { + lat: 40.875, + lng: 35.4633, + pop: 71916, + }, + { + lat: 45.3517, + lng: 28.8364, + pop: 71411, + }, + { + lat: 23.5242, + lng: 58.4989, + pop: 70000, + }, + { + lat: 45.0489, + lng: 35.3792, + pop: 69145, + }, + { + lat: 29.0769, + lng: 48.0838, + pop: 68763, + }, + { + lat: 36.1995, + lng: -119.34, + pop: 68395, + }, + { + lat: 36.0643, + lng: -119.0338, + pop: 67887, + }, + { + lat: 37.025, + lng: 36.6345, + pop: 67674, + }, + { + lat: 30.7458, + lng: 49.7086, + pop: 67427, + }, + { + lat: 40.9333, + lng: 38.2333, + pop: 66736, + }, + { + lat: 37.575, + lng: 32.7747, + pop: 66794, + }, + { + lat: 45.25, + lng: 38.1167, + pop: 66285, + }, + { + lat: 36.0243, + lng: 32.8026, + pop: 65920, + }, + { + lat: 28.4167, + lng: 48.5, + pop: 65000, + }, + { + lat: 37.4592, + lng: 30.5953, + pop: 64943, + }, + { + lat: 37.4183, + lng: 31.8506, + pop: 64687, + }, + { + lat: 32.8889, + lng: 36.0431, + pop: 63676, + }, + { + lat: 33.6, + lng: 36.3, + pop: 63554, + }, + { + lat: 40.5833, + lng: 36.9667, + pop: 64119, + }, + { + lat: 30.8128, + lng: 56.5639, + pop: 63744, + }, + { + lat: 44.7833, + lng: 44.1667, + pop: 62495, + }, + { + lat: 23.32, + lng: 58.908, + pop: 63133, + }, + { + lat: 36.6333, + lng: 33.4333, + pop: 62853, + }, + { + lat: 32.3464, + lng: 51.5044, + pop: 62454, + }, + { + lat: 32.3117, + lng: 35.0272, + pop: 61941, + }, + { + lat: 44.1044, + lng: 39.0772, + pop: 62269, + }, + { + lat: 34.9167, + lng: 36.7333, + pop: 61176, + }, + { + lat: 37.3658, + lng: 40.2697, + pop: 61830, + }, + { + lat: 33.0058, + lng: 35.0989, + pop: 60000, + }, + { + lat: 35.0025, + lng: 40.5117, + pop: 60780, + }, + { + lat: 27.8389, + lng: 52.0619, + pop: 60187, + }, + { + lat: 32.6064, + lng: 35.2881, + pop: 60000, + }, + { + lat: 44.6333, + lng: 40.7333, + pop: 60164, + }, + { + lat: 43.1333, + lng: 45.55, + pop: 59954, + }, + { + lat: 27.3708, + lng: 62.3342, + pop: 60114, + }, + { + lat: 43.75, + lng: 44.0333, + pop: 57883, + }, + { + lat: 46.1833, + lng: 30.35, + pop: 57210, + }, + { + lat: 42.5633, + lng: 47.8636, + pop: 58690, + }, + { + lat: 40.1728, + lng: 44.2925, + pop: 57500, + }, + { + lat: 39.9319, + lng: 48.9203, + pop: 58253, + }, + { + lat: 45.8667, + lng: 40.1333, + pop: 57771, + }, + { + lat: 46.4833, + lng: 41.5333, + pop: 57622, + }, + { + lat: 44.9233, + lng: 37.9806, + pop: 57229, + }, + { + lat: 31.9678, + lng: 51.2894, + pop: 57071, + }, + { + lat: 30.795, + lng: 50.5644, + pop: 57036, + }, + { + lat: 29.1489, + lng: 48.1057, + pop: 56554, + }, + { + lat: 28.2211, + lng: 61.2158, + pop: 56584, + }, + { + lat: 34.5006, + lng: -114.3113, + pop: 56510, + }, + { + lat: 36.7994, + lng: 36.5178, + pop: 56409, + }, + { + lat: 31.2414, + lng: 48.6525, + pop: 56252, + }, + { + lat: 43.15, + lng: 45.9, + pop: 56226, + }, + { + lat: 32.3897, + lng: 51.3767, + pop: 55984, + }, + { + lat: 35.4389, + lng: 36.6511, + pop: 55843, + }, + { + lat: 40.3, + lng: 35.8833, + pop: 55673, + }, + { + lat: 41.2667, + lng: 27.9667, + pop: 54268, + }, + { + lat: 25.25, + lng: 51.3732, + pop: 54339, + }, + { + lat: 43.35, + lng: 46.1, + pop: 52908, + }, + { + lat: 27.95, + lng: 57.7, + pop: 52624, + }, + { + lat: 34.0167, + lng: 36.7167, + pop: 52502, + }, + { + lat: 41.2125, + lng: 36.4569, + pop: 52258, + }, + { + lat: 35.7662, + lng: -119.2635, + pop: 52206, + }, + { + lat: 44.7686, + lng: 39.8733, + pop: 52082, + }, + { + lat: 34.4536, + lng: 40.9367, + pop: 52020, + }, + { + lat: 45.6167, + lng: 38.9333, + pop: 51925, + }, + { + lat: 30.1164, + lng: 55.1186, + pop: 51620, + }, + { + lat: 33.7986, + lng: 35.825, + pop: 50000, + }, + { + lat: 31.5608, + lng: 48.1831, + pop: 51431, + }, + { + lat: 34.56, + lng: 38.2672, + pop: 51323, + }, + { + lat: 43.85, + lng: 46.7167, + pop: 49247, + }, + { + lat: 34.1794, + lng: 36.4208, + pop: 50000, + }, + { + lat: 39.8153, + lng: 46.7519, + pop: 49848, + }, + { + lat: 32.9278, + lng: 35.0817, + pop: 48900, + }, + { + lat: 37.7147, + lng: 33.5508, + pop: 49766, + }, + { + lat: 40.9333, + lng: 40.05, + pop: 49496, + }, + { + lat: 41.4411, + lng: 27.9216, + pop: 49106, + }, + { + lat: 40.161, + lng: 34.377, + pop: 49082, + }, + { + lat: 35.0183, + lng: 40.4533, + pop: 48922, + }, + { + lat: 41.4333, + lng: 31.75, + pop: 48381, + }, + { + lat: 30.6497, + lng: 48.6647, + pop: 48642, + }, + { + lat: 44.8667, + lng: 40.6167, + pop: 48439, + }, + { + lat: 34.9833, + lng: 36.0833, + pop: 47982, + }, + { + lat: 40.1703, + lng: 31.9211, + pop: 48274, + }, + { + lat: 36.3, + lng: 30.15, + pop: 48131, + }, + { + lat: 23.3103, + lng: 57.9455, + pop: 47718, + }, + { + lat: 37.1042, + lng: 40.93, + pop: 47580, + }, + { + lat: 33.9667, + lng: 36.6667, + pop: 47136, + }, + { + lat: 34.5119, + lng: 36.5764, + pop: 46772, + }, + { + lat: 40.8333, + lng: 35.65, + pop: 46608, + }, + { + lat: 34.8333, + lng: 36.7333, + pop: 45853, + }, + { + lat: 34.25, + lng: 35.65, + pop: 45000, + }, + { + lat: 31.6033, + lng: 55.4003, + pop: 45453, + }, + { + lat: 47.25, + lng: 39.8667, + pop: 45078, + }, + { + lat: 46.755, + lng: 33.375, + pop: 45069, + }, + { + lat: 34.5849, + lng: -112.4473, + pop: 45063, + }, + { + lat: 32.6153, + lng: 51.5556, + pop: 43183, + }, + { + lat: 36.891, + lng: 38.3536, + pop: 44821, + }, + { + lat: 35.8126, + lng: 36.3176, + pop: 44322, + }, + { + lat: 41.1833, + lng: 31.3833, + pop: 44286, + }, + { + lat: 32.7944, + lng: 35.5333, + pop: 44200, + }, + { + lat: 41.088, + lng: 40.7232, + pop: 44304, + }, + { + lat: 30.8989, + lng: 52.6867, + pop: 44341, + }, + { + lat: 41.4653, + lng: 34.7708, + pop: 44004, + }, + { + lat: 25.935, + lng: 49.6661, + pop: 44000, + }, + { + lat: 32.4711, + lng: 34.9675, + pop: 42100, + }, + { + lat: 32.8333, + lng: 35.0833, + pop: 42000, + }, + { + lat: 35.1822, + lng: 35.9403, + pop: 43151, + }, + { + lat: 33.35, + lng: 36.2333, + pop: 43456, + }, + { + lat: 25.3603, + lng: 60.3994, + pop: 43732, + }, + { + lat: 32.2667, + lng: 35.0103, + pop: 43100, + }, + { + lat: 40.945, + lng: 40.2644, + pop: 43499, + }, + { + lat: 24.75, + lng: 56.4667, + pop: 43312, + }, + { + lat: 36.6, + lng: 30.55, + pop: 43226, + }, + { + lat: 39.6658, + lng: 35.8836, + pop: 42919, + }, + { + lat: 40.3381, + lng: 42.5731, + pop: 42683, + }, + { + lat: 36.2235, + lng: -115.9974, + pop: 42471, + }, + { + lat: 43.7333, + lng: 44.7, + pop: 42155, + }, + { + lat: 42.15, + lng: 41.6667, + pop: 41465, + }, + { + lat: 45.4686, + lng: 39.4519, + pop: 42019, + }, + { + lat: 36.3481, + lng: 37.5308, + pop: 41786, + }, + { + lat: 36.75, + lng: 36.2167, + pop: 41409, + }, + { + lat: 43.3167, + lng: 44.9167, + pop: 41469, + }, + { + lat: 36.9533, + lng: 36.2033, + pop: 41368, + }, + { + lat: 32.8333, + lng: 35.0667, + pop: 39416, + }, + { + lat: 45.2667, + lng: 37.3667, + pop: 41133, + }, + { + lat: 37.2489, + lng: 37.8658, + pop: 41142, + }, + { + lat: 41.19, + lng: 40.9831, + pop: 41084, + }, + { + lat: 35.1205, + lng: -114.5461, + pop: 41064, + }, + { + lat: 32.7997, + lng: 51.6956, + pop: 40945, + }, + { + lat: 33.775, + lng: 35.9, + pop: 40000, + }, + { + lat: 26.9581, + lng: 56.2719, + pop: 40678, + }, + { + lat: 28.6489, + lng: 51.3794, + pop: 40722, + }, + { + lat: 25.3333, + lng: 56.35, + pop: 39515, + }, + { + lat: 31.5081, + lng: 50.8319, + pop: 40528, + }, + { + lat: 39.9458, + lng: 41.1053, + pop: 40350, + }, + { + lat: 41.0172, + lng: 34.0383, + pop: 40245, + }, + { + lat: 35.8636, + lng: 36.8006, + pop: 39901, + }, + { + lat: 40.9667, + lng: 35.6667, + pop: 40194, + }, + { + lat: 44.2503, + lng: 28.2614, + pop: 39780, + }, + { + lat: 43.6825, + lng: 43.5339, + pop: 38192, + }, + { + lat: 32.4611, + lng: 35.3, + pop: 39004, + }, + { + lat: 33.8067, + lng: 36.7403, + pop: 39903, + }, + { + lat: 26.5578, + lng: 54.0194, + pop: 39853, + }, + { + lat: 44.4667, + lng: 39.7333, + pop: 39762, + }, + { + lat: 40.9667, + lng: 39.9, + pop: 39624, + }, + { + lat: 31.9, + lng: 35.2, + pop: 38998, + }, + { + lat: 40.6603, + lng: 29.3236, + pop: 39110, + }, + { + lat: 44.8667, + lng: 38.15, + pop: 39374, + }, + { + lat: 37.1667, + lng: 42.1333, + pop: 39000, + }, + { + lat: 39.9139, + lng: 28.1603, + pop: 39058, + }, + { + lat: 41.0833, + lng: 31.1167, + pop: 38846, + }, + { + lat: 41.5097, + lng: 34.2142, + pop: 38849, + }, + { + lat: 45.7086, + lng: 34.3933, + pop: 38714, + }, + { + lat: 32.5553, + lng: 51.5097, + pop: 37740, + }, + { + lat: 45.3667, + lng: 41.7167, + pop: 38100, + }, + { + lat: 34.6894, + lng: 40.8308, + pop: 37935, + }, + { + lat: 43.2944, + lng: 45.8839, + pop: 37373, + }, + { + lat: 36, + lng: 36.6667, + pop: 37490, + }, + { + lat: 34.2283, + lng: 37.2406, + pop: 37820, + }, + { + lat: 25.0742, + lng: 56.3553, + pop: 37545, + }, + { + lat: 44.6333, + lng: 39.1333, + pop: 37475, + }, + { + lat: 43.5, + lng: 44.75, + pop: 37442, + }, + { + lat: 37.6942, + lng: 37.8614, + pop: 37323, + }, + { + lat: 35.0653, + lng: 36.3422, + pop: 37109, + }, + { + lat: 43.2167, + lng: 46.8667, + pop: 37171, + }, + { + lat: 34.5814, + lng: -117.4397, + pop: 37229, + }, + { + lat: 43.1833, + lng: 44.55, + pop: 37029, + }, + { + lat: 43.8172, + lng: 28.5828, + pop: 36364, + }, + { + lat: 36.5083, + lng: 36.8692, + pop: 36562, + }, + { + lat: 41.1764, + lng: 29.6128, + pop: 36516, + }, + { + lat: 33.0167, + lng: 35.2708, + pop: 36000, + }, + { + lat: 29.1267, + lng: 54.0422, + pop: 36410, + }, + { + lat: 32.6368, + lng: 35.99, + pop: 34948, + }, + { + lat: 46.8, + lng: 33.4667, + pop: 35900, + }, + { + lat: 36.1569, + lng: 37.7078, + pop: 35409, + }, + { + lat: 34.6683, + lng: 36.2597, + pop: 35445, + }, + { + lat: 32.9658, + lng: 35.4983, + pop: 35700, + }, + { + lat: 32.4583, + lng: 35.8583, + pop: 35085, + }, + { + lat: 45.35, + lng: 42.85, + pop: 35745, + }, + { + lat: 41.4833, + lng: 31.8333, + pop: 35323, + }, + { + lat: 39.6381, + lng: 34.4672, + pop: 35561, + }, + { + lat: 35.9025, + lng: 36.0606, + pop: 35460, + }, + { + lat: 33.5333, + lng: 36.2167, + pop: 33571, + }, + { + lat: 35.2609, + lng: 36.3822, + pop: 35000, + }, + { + lat: 22.9339, + lng: 57.775, + pop: 35173, + }, + { + lat: 32.8536, + lng: 35.1978, + pop: 34000, + }, + { + lat: 40.95, + lng: 39.9333, + pop: 34831, + }, + { + lat: 44.3211, + lng: 28.6133, + pop: 34398, + }, + { + lat: 40.95, + lng: 38.7333, + pop: 34592, + }, + { + lat: 44.4167, + lng: 43.9167, + pop: 34690, + }, + { + lat: 29.2331, + lng: 56.6022, + pop: 34517, + }, + { + lat: 27.6672, + lng: 54.1411, + pop: 34469, + }, + { + lat: 35.4293, + lng: -119.0306, + pop: 34350, + }, + { + lat: 45.3594, + lng: 40.7072, + pop: 34215, + }, + { + lat: 40.6422, + lng: 29.1203, + pop: 34076, + }, + { + lat: 37.6834, + lng: -113.0956, + pop: 34246, + }, + { + lat: 31.5775, + lng: 54.4369, + pop: 34237, + }, + { + lat: 36.4889, + lng: 36.1944, + pop: 33540, + }, + { + lat: 41.0656, + lng: 37.7714, + pop: 33253, + }, + { + lat: 37.5764, + lng: 36.3506, + pop: 33193, + }, + { + lat: 32.7356, + lng: 36.0669, + pop: 32236, + }, + { + lat: 37.4247, + lng: 37.6928, + pop: 32846, + }, + { + lat: 34.8167, + lng: 36.1167, + pop: 32213, + }, + { + lat: 36.965, + lng: 37.5092, + pop: 32653, + }, + { + lat: 29.7742, + lng: 52.7236, + pop: 32261, + }, + { + lat: 26.2667, + lng: 50.15, + pop: 32067, + }, + { + lat: 46.05, + lng: 38.1667, + pop: 32180, + }, + { + lat: 35.217, + lng: -114.0105, + pop: 32204, + }, + { + lat: 32.9667, + lng: 36.0667, + pop: 31683, + }, + { + lat: 46.63, + lng: 31.1, + pop: 32100, + }, + { + lat: 41.0056, + lng: 38.8167, + pop: 32008, + }, + { + lat: 32.8667, + lng: 35.3, + pop: 31100, + }, + { + lat: 36.5866, + lng: 37.0463, + pop: 31534, + }, + { + lat: 32.2714, + lng: 50.9775, + pop: 31739, + }, + { + lat: 29.205, + lng: 52.69, + pop: 31711, + }, + { + lat: 39.8642, + lng: 36.5983, + pop: 31748, + }, + { + lat: 33.9667, + lng: 36.0167, + pop: 30000, + }, + { + lat: 33, + lng: 36.1167, + pop: 31258, + }, + { + lat: 23.5889, + lng: 58.4083, + pop: 31409, + }, + { + lat: 27.8236, + lng: 52.3303, + pop: 31436, + }, + { + lat: 39.8503, + lng: 33.4536, + pop: 31308, + }, + { + lat: 36.4731, + lng: 41.6161, + pop: 31161, + }, + { + lat: 47.2514, + lng: 35.7058, + pop: 31016, + }, + { + lat: 43.55, + lng: 43.85, + pop: 30832, + }, + { + lat: 32.5767, + lng: 51.455, + pop: 30002, + }, + { + lat: 32.2553, + lng: 50.5711, + pop: 30504, + }, + { + lat: 45.1, + lng: 43.45, + pop: 30530, + }, + { + lat: 33.7436, + lng: 36.7012, + pop: 30450, + }, + { + lat: 33.8667, + lng: 35.5667, + pop: 30000, + }, + { + lat: 44.415, + lng: 27.8236, + pop: 30217, + }, + { + lat: 42.2257, + lng: 43.9701, + pop: 30432, + }, + { + lat: 26.5581, + lng: 54.8806, + pop: 30435, + }, + { + lat: 44.0872, + lng: 41.9733, + pop: 30369, + }, + { + lat: 35.6139, + lng: 36.5611, + pop: 30000, + }, + { + lat: 32.5025, + lng: 35.6922, + pop: 29590, + }, + { + lat: 40.75, + lng: 36.3167, + pop: 30123, + }, + { + lat: 27.76, + lng: 54.0072, + pop: 29987, + }, + { + lat: 44.6672, + lng: 34.3978, + pop: 29668, + }, + { + lat: 27.3423, + lng: 53.1768, + pop: 29380, + }, + { + lat: 36.8503, + lng: 40.0706, + pop: 29347, + }, + { + lat: 35.2897, + lng: 36.7433, + pop: 29100, + }, + { + lat: 23.6522, + lng: 53.6536, + pop: 29095, + }, + { + lat: 30.2364, + lng: 49.7119, + pop: 29015, + }, + { + lat: 36.1242, + lng: -115.3324, + pop: 28861, + }, + { + lat: 37.486, + lng: 37.297, + pop: 28582, + }, + { + lat: 47.2667, + lng: 29.1667, + pop: 28500, + }, + { + lat: 40.3748, + lng: 36.9031, + pop: 28413, + }, + { + lat: 32.6417, + lng: 35.9417, + pop: 27902, + }, + { + lat: 33.0381, + lng: 40.2844, + pop: 28400, + }, + { + lat: 40.6975, + lng: 29.5114, + pop: 28232, + }, + { + lat: 41.0475, + lng: 39.2798, + pop: 28209, + }, + { + lat: 23.3833, + lng: 57.8167, + pop: 28088, + }, + { + lat: 40.1836, + lng: 31.3506, + pop: 28091, + }, + { + lat: 41.1158, + lng: 45.4853, + pop: 28000, + }, + { + lat: 35.6308, + lng: -117.6622, + pop: 27989, + }, + { + lat: 37.1303, + lng: -113.4878, + pop: 27689, + }, + { + lat: 41.8111, + lng: 41.7753, + pop: 27546, + }, + { + lat: 31.8889, + lng: 35.1675, + pop: 26604, + }, + { + lat: 31.1267, + lng: 53.2592, + pop: 27524, + }, + { + lat: 40.9142, + lng: 40.1125, + pop: 27428, + }, + { + lat: 35.5938, + lng: -119.3671, + pop: 27505, + }, + { + lat: 44.7167, + lng: 43, + pop: 27471, + }, + { + lat: 36.4733, + lng: 37.0972, + pop: 27086, + }, + { + lat: 44.7528, + lng: 33.8608, + pop: 27351, + }, + { + lat: 37.5375, + lng: 40.8892, + pop: 27304, + }, + { + lat: 43.65, + lng: 44.0667, + pop: 27074, + }, + { + lat: 29.8519, + lng: 51.5869, + pop: 26918, + }, + { + lat: 30.6131, + lng: 53.1953, + pop: 26933, + }, + { + lat: 33.7389, + lng: 36.6, + pop: 26671, + }, + { + lat: 36.1, + lng: 32.9667, + pop: 26840, + }, + { + lat: 40.8761, + lng: 37.7406, + pop: 26737, + }, + { + lat: 45.5, + lng: 41.2333, + pop: 26761, + }, + { + lat: 46.6742, + lng: 28.0597, + pop: 26266, + }, + { + lat: 33.725, + lng: 36.0972, + pop: 26285, + }, + { + lat: 40.8167, + lng: 39.6167, + pop: 26626, + }, + { + lat: 33.0711, + lng: 36.1842, + pop: 26268, + }, + { + lat: 32.6714, + lng: 35.2406, + pop: 25600, + }, + { + lat: 26.5833, + lng: 49.9833, + pop: 25500, + }, + { + lat: 36.699, + lng: -119.5575, + pop: 26424, + }, + { + lat: 41.4944, + lng: 36.0789, + pop: 26337, + }, + { + lat: 43.2044, + lng: 46.0911, + pop: 25672, + }, + { + lat: 37.1886, + lng: 32.2456, + pop: 26287, + }, + { + lat: 31.4142, + lng: 51.5694, + pop: 26260, + }, + { + lat: 41.9975, + lng: 43.5986, + pop: 26135, + }, + { + lat: 43.95, + lng: 43.6333, + pop: 26106, + }, + { + lat: 39.645, + lng: 41.5083, + pop: 25969, + }, + { + lat: 40.9697, + lng: 27.9553, + pop: 25873, + }, + { + lat: 36.2472, + lng: 29.9828, + pop: 25893, + }, + { + lat: 41.61, + lng: 35.595, + pop: 25854, + }, + { + lat: 45.9675, + lng: 33.8003, + pop: 25769, + }, + { + lat: 36.1167, + lng: 36.1333, + pop: 25118, + }, + { + lat: 30.0542, + lng: 50.1639, + pop: 25730, + }, + { + lat: 32.7711, + lng: 35.0394, + pop: 23700, + }, + { + lat: 32.61, + lng: 35.6081, + pop: 25000, + }, + { + lat: 41.0547, + lng: 30.8503, + pop: 25497, + }, + { + lat: 41.3636, + lng: 41.6792, + pop: 25500, + }, + { + lat: 44.1394, + lng: 43.0169, + pop: 24919, + }, + { + lat: 42.1625, + lng: 42.3417, + pop: 25318, + }, + { + lat: 40.1658, + lng: 38.0942, + pop: 25404, + }, + { + lat: 33.6967, + lng: 36.3739, + pop: 25194, + }, + { + lat: 44.6706, + lng: 41.838, + pop: 25279, + }, + { + lat: 40.7928, + lng: 42.6086, + pop: 25187, + }, + { + lat: 36.5988, + lng: -119.4471, + pop: 25168, + }, + { + lat: 29.9275, + lng: 56.5722, + pop: 25152, + }, + { + lat: 34.8661, + lng: -117.0471, + pop: 25123, + }, + { + lat: 45.1336, + lng: 33.5772, + pop: 24282, + }, + { + lat: 30.8947, + lng: 49.4092, + pop: 25009, + }, + { + lat: 34.2919, + lng: 35.9546, + pop: 25000, + }, + { + lat: 32.4097, + lng: 35.2808, + pop: 24439, + }, + { + lat: 40.6303, + lng: 48.6414, + pop: 24681, + }, + { + lat: 46.6333, + lng: 32.5833, + pop: 24639, + }, + { + lat: 36.5625, + lng: 35.3803, + pop: 24559, + }, + { + lat: 46.85, + lng: 40.3167, + pop: 24561, + }, + { + lat: 40.0494, + lng: 43.6608, + pop: 24560, + }, + { + lat: 36.5715, + lng: -119.6143, + pop: 24545, + }, + { + lat: 40.555, + lng: 44.9536, + pop: 23200, + }, + { + lat: 44.7506, + lng: 44.9797, + pop: 24472, + }, + { + lat: 32.8022, + lng: 51.6211, + pop: 24433, + }, + { + lat: 35.2661, + lng: 36.7114, + pop: 24105, + }, + { + lat: 36.5453, + lng: -119.3987, + pop: 24383, + }, + { + lat: 32.2514, + lng: 48.8161, + pop: 24216, + }, + { + lat: 36.1333, + lng: 36.45, + pop: 23700, + }, + { + lat: 27.8417, + lng: 51.9394, + pop: 24083, + }, + { + lat: 32.5542, + lng: 51.525, + pop: 23203, + }, + { + lat: 34.2511, + lng: 36.0111, + pop: 24000, + }, + { + lat: 41.0096, + lng: 44.3841, + pop: 23782, + }, + { + lat: 41.3903, + lng: 41.4194, + pop: 23846, + }, + { + lat: 33.7075, + lng: 35.9039, + pop: 23000, + }, + { + lat: 41.95, + lng: 34.5833, + pop: 23720, + }, + { + lat: 44.1167, + lng: 42.9833, + pop: 22891, + }, + { + lat: 34.6931, + lng: 32.9992, + pop: 22369, + }, + { + lat: 39.9211, + lng: 40.6947, + pop: 23589, + }, + { + lat: 45.7167, + lng: 42.9, + pop: 23579, + }, + { + lat: 40.8006, + lng: 32.1986, + pop: 23547, + }, + { + lat: 32.7667, + lng: 34.9667, + pop: 22200, + }, + { + lat: 23.55, + lng: 56.25, + pop: 23466, + }, + { + lat: 40.7931, + lng: 37.0164, + pop: 23369, + }, + { + lat: 43.1939, + lng: 45.2833, + pop: 23282, + }, + { + lat: 33.4333, + lng: 36.0833, + pop: 22831, + }, + { + lat: 41.8922, + lng: 33.0044, + pop: 23329, + }, + { + lat: 31.4086, + lng: 48.7942, + pop: 23211, + }, + { + lat: 33.2075, + lng: 35.5697, + pop: 23076, + }, + { + lat: 37.5467, + lng: 34.4844, + pop: 23252, + }, + { + lat: 40.4633, + lng: 42.7858, + pop: 23231, + }, + { + lat: 28.9306, + lng: 51.0689, + pop: 23178, + }, + { + lat: 32.0167, + lng: 35.7667, + pop: 21908, + }, + { + lat: 34.3914, + lng: 36.3958, + pop: 22250, + }, + { + lat: 40.6867, + lng: 37.3992, + pop: 22783, + }, + { + lat: 43.7731, + lng: 41.9169, + pop: 21067, + }, + { + lat: 32.6267, + lng: 51.4392, + pop: 22693, + }, + { + lat: 29.0664, + lng: 58.4047, + pop: 22761, + }, + { + lat: 41.0494, + lng: 39.2353, + pop: 22630, + }, + { + lat: 31.2656, + lng: 56.8056, + pop: 22729, + }, + { + lat: 39.6104, + lng: -119.777, + pop: 22622, + }, + { + lat: 36.0841, + lng: -119.5613, + pop: 22616, + }, + { + lat: 44.4256, + lng: 39.5319, + pop: 22468, + }, + { + lat: 40.0633, + lng: 44.4408, + pop: 21376, + }, + { + lat: 35.95, + lng: 36.7, + pop: 21848, + }, + { + lat: 41.5861, + lng: 32.6406, + pop: 22333, + }, + { + lat: 36.2, + lng: 36.5167, + pop: 21934, + }, + { + lat: 39.5627, + lng: -119.1906, + pop: 22343, + }, + { + lat: 37.2, + lng: 36.5833, + pop: 22242, + }, + { + lat: 40.3756, + lng: 43.4125, + pop: 22282, + }, + { + lat: 31.485, + lng: 48.2686, + pop: 22057, + }, + { + lat: 37.3192, + lng: 37.5686, + pop: 22192, + }, + { + lat: 40.8667, + lng: 35.2167, + pop: 22179, + }, + { + lat: 33.6, + lng: 36.515, + pop: 20559, + }, + { + lat: 32.6594, + lng: 35.11, + pop: 21383, + }, + { + lat: 41.0036, + lng: 36.6319, + pop: 21847, + }, + { + lat: 39.895, + lng: 37.7531, + pop: 21753, + }, + { + lat: 41.3081, + lng: 32.1417, + pop: 21655, + }, + { + lat: 41.0736, + lng: 36.0403, + pop: 21692, + }, + { + lat: 30.4775, + lng: 54.2128, + pop: 21690, + }, + { + lat: 41.2, + lng: 32.3292, + pop: 21625, + }, + { + lat: 42.2689, + lng: 42.0678, + pop: 21596, + }, + { + lat: 36.3756, + lng: 36.9942, + pop: 21039, + }, + { + lat: 33.2539, + lng: 35.2717, + pop: 20000, + }, + { + lat: 32.2269, + lng: 50.7931, + pop: 21352, + }, + { + lat: 39.8728, + lng: 44.5192, + pop: 21311, + }, + { + lat: 36.5667, + lng: 36.1333, + pop: 20459, + }, + { + lat: 40.35, + lng: 30.0167, + pop: 20976, + }, + { + lat: 34.3722, + lng: 41.9875, + pop: 21000, + }, + { + lat: 31.8711, + lng: 35.4442, + pop: 20300, + }, + { + lat: 39.8303, + lng: 44.7025, + pop: 20800, + }, + { + lat: 42.1083, + lng: 43.0417, + pop: 20814, + }, + { + lat: 43.65, + lng: 43.55, + pop: 20718, + }, + { + lat: 28.6689, + lng: 59.0733, + pop: 20720, + }, + { + lat: 37.4278, + lng: 34.8711, + pop: 20683, + }, + { + lat: 41.3333, + lng: 41.3, + pop: 20565, + }, + { + lat: 34.8658, + lng: -118.2155, + pop: 20574, + }, + { + lat: 43.4, + lng: 42.9167, + pop: 20513, + }, + { + lat: 39.6333, + lng: 43.3778, + pop: 20450, + }, + { + lat: 40.7333, + lng: 38.4333, + pop: 20405, + }, + { + lat: 40.9, + lng: 31.05, + pop: 20266, + }, + { + lat: 32.7781, + lng: 51.6461, + pop: 20301, + }, + { + lat: 43.2419, + lng: 46, + pop: 20013, + }, + { + lat: 28.8714, + lng: 52.0917, + pop: 20320, + }, + { + lat: 41.4969, + lng: 44.8108, + pop: 20211, + }, + { + lat: 32.555, + lng: 51.5731, + pop: 19406, + }, + { + lat: 37.0669, + lng: 36.1464, + pop: 20127, + }, + { + lat: 34.2028, + lng: 35.6544, + pop: 20000, + }, + { + lat: 40.1894, + lng: 39.1267, + pop: 20084, + }, + { + lat: 40.6172, + lng: 43.9758, + pop: 19543, + }, + { + lat: 46.7333, + lng: 29.7, + pop: 20000, + }, + { + lat: 43.2242, + lng: 46.1942, + pop: 19727, + }, + { + lat: 43.0333, + lng: 44.2333, + pop: 20043, + }, + { + lat: 36.8032, + lng: -114.133, + pop: 20019, + }, + { + lat: 35.4794, + lng: -119.2013, + pop: 19897, + }, + { + lat: 30.895, + lng: 50.0931, + pop: 19857, + }, + { + lat: 32.5167, + lng: 36.4833, + pop: 19683, + }, + { + lat: 40.0731, + lng: 35.4947, + pop: 19786, + }, + { + lat: 41.4167, + lng: 35.05, + pop: 19650, + }, + { + lat: 34.4686, + lng: 41.9167, + pop: 19629, + }, + { + lat: 35.1944, + lng: -118.8306, + pop: 19568, + }, + { + lat: 43.4833, + lng: 44.1333, + pop: 19494, + }, + { + lat: 34.9478, + lng: 33.5881, + pop: 19199, + }, + { + lat: 40.8106, + lng: 41.5269, + pop: 19510, + }, + { + lat: 37.1487, + lng: -113.3517, + pop: 19501, + }, + { + lat: 43.1833, + lng: 44.3167, + pop: 19412, + }, + { + lat: 31.4619, + lng: 48.0739, + pop: 19481, + }, + { + lat: 36.7678, + lng: 35.7922, + pop: 18587, + }, + { + lat: 32.8454, + lng: 36.2499, + pop: 19158, + }, + { + lat: 27.8914, + lng: 53.4344, + pop: 19347, + }, + { + lat: 46.1667, + lng: 34.8, + pop: 19253, + }, + { + lat: 40.0186, + lng: 30.1814, + pop: 19244, + }, + { + lat: 27.5014, + lng: 52.5858, + pop: 18837, + }, + { + lat: 26.5992, + lng: 54.9361, + pop: 19213, + }, + { + lat: 32.0006, + lng: 54.2075, + pop: 19123, + }, + { + lat: 46.7, + lng: 41.7333, + pop: 19032, + }, + { + lat: 29.3606, + lng: 51.0683, + pop: 18913, + }, + { + lat: 28.9864, + lng: 51.0375, + pop: 18702, + }, + { + lat: 31.9436, + lng: 34.8392, + pop: 18401, + }, + { + lat: 35.3886, + lng: -119.2058, + pop: 18875, + }, + { + lat: 41.2422, + lng: 33.3283, + pop: 18863, + }, + { + lat: 31.9833, + lng: 35.7667, + pop: 17754, + }, + { + lat: 32.5, + lng: 34.9167, + pop: 17759, + }, + { + lat: 45.45, + lng: 29.2667, + pop: 18745, + }, + { + lat: 43.1642, + lng: 45.6228, + pop: 18534, + }, + { + lat: 40.8139, + lng: 32.8908, + pop: 18694, + }, + { + lat: 39.6731, + lng: 33.6136, + pop: 18139, + }, + { + lat: 34.4398, + lng: -117.5248, + pop: 18599, + }, + { + lat: 36.65, + lng: 36.2167, + pop: 17925, + }, + { + lat: 31.9408, + lng: 54.2736, + pop: 18309, + }, + { + lat: 31.9414, + lng: 54.2828, + pop: 18309, + }, + { + lat: 29.5, + lng: 53.3167, + pop: 18477, + }, + { + lat: 47.3907, + lng: 35.0027, + pop: 18468, + }, + { + lat: 31.7492, + lng: 54.2103, + pop: 18464, + }, + { + lat: 47.0333, + lng: 28.95, + pop: 17210, + }, + { + lat: 43.2081, + lng: 44.8186, + pop: 17734, + }, + { + lat: 32.5, + lng: 35.5, + pop: 18200, + }, + { + lat: 31.5419, + lng: 60.0364, + pop: 18304, + }, + { + lat: 40.5619, + lng: 42.3464, + pop: 18281, + }, + { + lat: 29.2736, + lng: 53.2203, + pop: 18187, + }, + { + lat: 33.6797, + lng: 35.5583, + pop: 17000, + }, + { + lat: 28.4758, + lng: 57.8481, + pop: 18185, + }, + { + lat: 43.1667, + lng: 46, + pop: 17970, + }, + { + lat: 33.6422, + lng: 36.2978, + pop: 17521, + }, + { + lat: 32.3836, + lng: 51.5147, + pop: 17966, + }, + { + lat: 35.25, + lng: 36.5833, + pop: 17578, + }, + { + lat: 36.1231, + lng: 37.3369, + pop: 17767, + }, + { + lat: 36.2583, + lng: 41.9431, + pop: 18000, + }, + { + lat: 34.4818, + lng: -118.6316, + pop: 18017, + }, + { + lat: 35.1, + lng: 33.3667, + pop: 16774, + }, + { + lat: 45.4575, + lng: 28.2711, + pop: 17736, + }, + { + lat: 26.2258, + lng: 60.2142, + pop: 17732, + }, + { + lat: 41.0314, + lng: 36.2683, + pop: 17628, + }, + { + lat: 34.9203, + lng: 40.5594, + pop: 17537, + }, + { + lat: 29.9125, + lng: 53.3086, + pop: 17642, + }, + { + lat: 35.3697, + lng: 36.38, + pop: 17313, + }, + { + lat: 41.2433, + lng: 42.3639, + pop: 17606, + }, + { + lat: 32.3781, + lng: 51.3181, + pop: 17335, + }, + { + lat: 44.1778, + lng: 43.5, + pop: 17451, + }, + { + lat: 46.1167, + lng: 32.9167, + pop: 17344, + }, + { + lat: 45.6855, + lng: 28.6134, + pop: 17400, + }, + { + lat: 35.3736, + lng: 36.6017, + pop: 17052, + }, + { + lat: 40.8483, + lng: 43.3317, + pop: 17373, + }, + { + lat: 30.0775, + lng: 53.1331, + pop: 17131, + }, + { + lat: 46.9753, + lng: 28.8194, + pop: 15934, + }, + { + lat: 40.07, + lng: 47.2047, + pop: 16998, + }, + { + lat: 40.2981, + lng: 41.6325, + pop: 17054, + }, + { + lat: 40.9833, + lng: 39.8, + pop: 15503, + }, + { + lat: 44.3381, + lng: 28.0336, + pop: 17022, + }, + { + lat: 41.1333, + lng: 41.0167, + pop: 16902, + }, + { + lat: 31.94, + lng: 51.6478, + pop: 16899, + }, + { + lat: 32.8542, + lng: 36.6292, + pop: 16745, + }, + { + lat: 40.7408, + lng: 44.8631, + pop: 16600, + }, + { + lat: 25.6439, + lng: 57.7744, + pop: 16860, + }, + { + lat: 46.0833, + lng: 40.8583, + pop: 16838, + }, + { + lat: 36.4575, + lng: 41.7061, + pop: 16798, + }, + { + lat: 44.8514, + lng: 34.9725, + pop: 16784, + }, + { + lat: 40.9, + lng: 38.4167, + pop: 16758, + }, + { + lat: 46.05, + lng: 28.8333, + pop: 16605, + }, + { + lat: 32.4725, + lng: 35.7928, + pop: 16000, + }, + { + lat: 32.7333, + lng: 36.2, + pop: 16240, + }, + { + lat: 37.5465, + lng: 35.3987, + pop: 16653, + }, + { + lat: 35.3208, + lng: 36.6225, + pop: 16267, + }, + { + lat: 41.0833, + lng: 39.3833, + pop: 16335, + }, + { + lat: 43.9333, + lng: 42.5167, + pop: 16512, + }, + { + lat: 40.646, + lng: 34.261, + pop: 16525, + }, + { + lat: 45.0544, + lng: 34.6022, + pop: 16428, + }, + { + lat: 32.8353, + lng: 35.9714, + pop: 15985, + }, + { + lat: 36.2333, + lng: 36.2167, + pop: 15692, + }, + { + lat: 32.3936, + lng: 51.3408, + pop: 16086, + }, + { + lat: 40.7475, + lng: 40.2419, + pop: 16213, + }, + { + lat: 39.9756, + lng: 41.8711, + pop: 16178, + }, + { + lat: 43.6003, + lng: 46.7789, + pop: 16165, + }, + { + lat: 34.8868, + lng: 38.8721, + pop: 16173, + }, + { + lat: 39.6568, + lng: -119.6694, + pop: 16131, + }, + { + lat: 40.4425, + lng: 47.6767, + pop: 16018, + }, + { + lat: 33.2692, + lng: 35.7706, + pop: 15973, + }, + { + lat: 41.9486, + lng: 34.3367, + pop: 16004, + }, + { + lat: 46.7006, + lng: 32.5478, + pop: 15984, + }, + { + lat: 27.7975, + lng: 53.685, + pop: 16000, + }, + { + lat: 46.1167, + lng: 48.0833, + pop: 15984, + }, + { + lat: 33.1047, + lng: 50.9589, + pop: 15828, + }, + { + lat: 37.0164, + lng: 41.9544, + pop: 15759, + }, + { + lat: 35.0004, + lng: -114.5748, + pop: 15872, + }, + { + lat: 43.4333, + lng: 28.3333, + pop: 15834, + }, + { + lat: 36.0561, + lng: 40.7303, + pop: 15806, + }, + { + lat: 31.4469, + lng: 49.5294, + pop: 15802, + }, + { + lat: 32.7025, + lng: 51.1536, + pop: 15673, + }, + { + lat: 35.9632, + lng: 38.0356, + pop: 15477, + }, + { + lat: 33.0528, + lng: 51.0825, + pop: 15550, + }, + { + lat: 33.4242, + lng: 36.2244, + pop: 13993, + }, + { + lat: 40.52, + lng: 35.2953, + pop: 15655, + }, + { + lat: 27.4064, + lng: 57.5014, + pop: 15634, + }, + { + lat: 34.7087, + lng: 33.0504, + pop: 14578, + }, + { + lat: 40.9667, + lng: 31.45, + pop: 15573, + }, + { + lat: 32.8019, + lng: 51.6636, + pop: 15524, + }, + { + lat: 30.8733, + lng: 55.2706, + pop: 15532, + }, + { + lat: 40.0172, + lng: 32.3483, + pop: 15540, + }, + { + lat: 36.3667, + lng: 36.2, + pop: 14751, + }, + { + lat: 31.4825, + lng: 48.8747, + pop: 15312, + }, + { + lat: 47.2848, + lng: 39.4823, + pop: 15334, + }, + { + lat: 40.879, + lng: 37.4532, + pop: 14954, + }, + { + lat: 40.8372, + lng: 44.2675, + pop: 15000, + }, + { + lat: 35.0333, + lng: 33.9833, + pop: 14963, + }, + { + lat: 30.7461, + lng: 50.7461, + pop: 15218, + }, + { + lat: 28.8833, + lng: 51.275, + pop: 15198, + }, + { + lat: 39.8033, + lng: 29.6178, + pop: 15181, + }, + { + lat: 46.5167, + lng: 32.5167, + pop: 15163, + }, + { + lat: 41.45, + lng: 45.1, + pop: 15100, + }, + { + lat: 34.2597, + lng: 36.4236, + pop: 15000, + }, + { + lat: 33.6333, + lng: 35.7833, + pop: 14728, + }, + { + lat: 32.4917, + lng: 36.7111, + pop: 15000, + }, + { + lat: 39.2592, + lng: -119.5653, + pop: 15036, + }, + { + lat: 32.5379, + lng: 34.9122, + pop: 13962, + }, + { + lat: 37.544, + lng: 41.72, + pop: 14976, + }, + { + lat: 35.9033, + lng: 36.7258, + pop: 14530, + }, + { + lat: 40.8736, + lng: 30.9508, + pop: 14895, + }, + { + lat: 36.6975, + lng: 38.9567, + pop: 14825, + }, + { + lat: 35.1578, + lng: -117.8721, + pop: 14914, + }, + { + lat: 35.8407, + lng: -114.9257, + pop: 14868, + }, + { + lat: 41.7494, + lng: 32.3864, + pop: 14776, + }, + { + lat: 43.17, + lng: 45.3711, + pop: 14720, + }, + { + lat: 42.4167, + lng: 27.7, + pop: 14789, + }, + { + lat: 45.85, + lng: 41.5167, + pop: 14761, + }, + { + lat: 40.9333, + lng: 38.1333, + pop: 14659, + }, + { + lat: 45.3694, + lng: 44.2281, + pop: 14722, + }, + { + lat: 46.6186, + lng: 31.5392, + pop: 14705, + }, + { + lat: 30.2625, + lng: 51.9833, + pop: 14633, + }, + { + lat: 33.6497, + lng: 35.4433, + pop: 12888, + }, + { + lat: 40.8856, + lng: 39.2922, + pop: 14592, + }, + { + lat: 26.9636, + lng: 56.0622, + pop: 14525, + }, + { + lat: 35.3753, + lng: 36.6872, + pop: 14307, + }, + { + lat: 33.7421, + lng: 36.6435, + pop: 14228, + }, + { + lat: 37.4025, + lng: 40.9561, + pop: 14233, + }, + { + lat: 43.2162, + lng: 46.0381, + pop: 14111, + }, + { + lat: 40.262, + lng: 36.313, + pop: 14335, + }, + { + lat: 39.71, + lng: 39.7017, + pop: 14390, + }, + { + lat: 46.1269, + lng: 30.385, + pop: 14321, + }, + { + lat: 37.4431, + lng: 36.0322, + pop: 14308, + }, + { + lat: 32.4467, + lng: 35.1703, + pop: 13640, + }, + { + lat: 35.2659, + lng: -118.9159, + pop: 14269, + }, + { + lat: 39.6936, + lng: 35.5111, + pop: 14198, + }, + { + lat: 34.7181, + lng: 33.0856, + pop: 13421, + }, + { + lat: 43.2036, + lng: 46.1322, + pop: 13824, + }, + { + lat: 41.05, + lng: 39.1333, + pop: 13955, + }, + { + lat: 42.65, + lng: 27.7333, + pop: 14146, + }, + { + lat: 44.27, + lng: 28.56, + pop: 13968, + }, + { + lat: 40.9, + lng: 30.4833, + pop: 13973, + }, + { + lat: 35.6781, + lng: -119.2413, + pop: 14085, + }, + { + lat: 25.7347, + lng: 51.5475, + pop: 13511, + }, + { + lat: 43.1636, + lng: 45.4725, + pop: 13836, + }, + { + lat: 36.255, + lng: 42.0164, + pop: 14000, + }, + { + lat: 41.0333, + lng: 37.1, + pop: 13922, + }, + { + lat: 27.4744, + lng: 52.6114, + pop: 13557, + }, + { + lat: 39.9106, + lng: 44.7278, + pop: 13600, + }, + { + lat: 46.6791, + lng: 32.7228, + pop: 12812, + }, + { + lat: 28.4061, + lng: 54.1881, + pop: 13809, + }, + { + lat: 36.3947, + lng: 36.6889, + pop: 13661, + }, + { + lat: 36.2828, + lng: 36.8519, + pop: 13525, + }, + { + lat: 40.5572, + lng: 39.2919, + pop: 13771, + }, + { + lat: 43.25, + lng: 46.1333, + pop: 13405, + }, + { + lat: 32.4167, + lng: 35.6833, + pop: 13056, + }, + { + lat: 47.0833, + lng: 39.5667, + pop: 13692, + }, + { + lat: 36.5833, + lng: 31.8833, + pop: 13563, + }, + { + lat: 34.8969, + lng: 36.1346, + pop: 13244, + }, + { + lat: 27.2856, + lng: 61.9964, + pop: 13580, + }, + { + lat: 32.8425, + lng: 36.34, + pop: 13315, + }, + { + lat: 32.9411, + lng: 50.1211, + pop: 13475, + }, + { + lat: 41.925, + lng: 44.4222, + pop: 13423, + }, + { + lat: 30.8939, + lng: 61.6803, + pop: 13357, + }, + { + lat: 33.93, + lng: 35.745, + pop: 12000, + }, + { + lat: 41.4647, + lng: 47.74, + pop: 13405, + }, + { + lat: 32.0078, + lng: 51.2156, + pop: 13317, + }, + { + lat: 35.41, + lng: 36.39, + pop: 12925, + }, + { + lat: 34.7833, + lng: 36.4333, + pop: 13020, + }, + { + lat: 35.1276, + lng: -118.4744, + pop: 13346, + }, + { + lat: 41.6667, + lng: 48.1333, + pop: 13232, + }, + { + lat: 36.5133, + lng: 41.9542, + pop: 13281, + }, + { + lat: 41.3228, + lng: 47.1133, + pop: 13260, + }, + { + lat: 32.7109, + lng: 36.0266, + pop: 12640, + }, + { + lat: 31.19, + lng: 50.4419, + pop: 13269, + }, + { + lat: 29.2911, + lng: 56.9131, + pop: 13263, + }, + { + lat: 40.9814, + lng: 47.8458, + pop: 13190, + }, + { + lat: 41.1333, + lng: 44.65, + pop: 13000, + }, + { + lat: 40.16, + lng: 47.1722, + pop: 13002, + }, + { + lat: 27.5236, + lng: 57.8811, + pop: 13169, + }, + { + lat: 46.3425, + lng: 30.5653, + pop: 13036, + }, + { + lat: 37.4711, + lng: 41.9139, + pop: 13091, + }, + { + lat: 37.4792, + lng: 40.4864, + pop: 13117, + }, + { + lat: 44.8832, + lng: 39.1902, + pop: 12745, + }, + { + lat: 45.3908, + lng: 47.3658, + pop: 13125, + }, + { + lat: 43.5167, + lng: 43.7, + pop: 12813, + }, + { + lat: 32.6428, + lng: 51.5, + pop: 11264, + }, + { + lat: 25.6208, + lng: 51.0819, + pop: 13085, + }, + { + lat: 37.0519, + lng: 31.7842, + pop: 13084, + }, + { + lat: 26.5758, + lng: 59.6397, + pop: 13070, + }, + { + lat: 32.5444, + lng: 50.7461, + pop: 12971, + }, + { + lat: 30.0547, + lng: 54.3717, + pop: 13032, + }, + { + lat: 45.9072, + lng: 43.3558, + pop: 12998, + }, + { + lat: 35.0611, + lng: 36.6972, + pop: 12194, + }, + { + lat: 34.5596, + lng: -117.9558, + pop: 12961, + }, + { + lat: 34.3436, + lng: 36.4756, + pop: 12000, + }, + { + lat: 32.4197, + lng: 52.6483, + pop: 12714, + }, + { + lat: 43.1878, + lng: 44.9036, + pop: 12734, + }, + { + lat: 42.2903, + lng: 43.2819, + pop: 12803, + }, + { + lat: 35.2645, + lng: -114.0091, + pop: 12858, + }, + { + lat: 34.7594, + lng: -112.412, + pop: 12854, + }, + { + lat: 43.2906, + lng: 45.3014, + pop: 12738, + }, + { + lat: 35.6342, + lng: 36.6322, + pop: 12276, + }, + { + lat: 45.1142, + lng: 34.0142, + pop: 12711, + }, + { + lat: 30.9817, + lng: 50.4233, + pop: 12772, + }, + { + lat: 43.4847, + lng: 44.5881, + pop: 12614, + }, + { + lat: 43.4333, + lng: 43.575, + pop: 10829, + }, + { + lat: 40.1806, + lng: 45.72, + pop: 12363, + }, + { + lat: 40.3053, + lng: 37.8306, + pop: 12637, + }, + { + lat: 36.6964, + lng: 32.6203, + pop: 12601, + }, + { + lat: 40.9667, + lng: 39.7333, + pop: 11077, + }, + { + lat: 44.1128, + lng: 28.5558, + pop: 12333, + }, + { + lat: 34.1542, + lng: 36.7442, + pop: 12508, + }, + { + lat: 44.165, + lng: 28.455, + pop: 12376, + }, + { + lat: 43.3458, + lng: 44.2028, + pop: 12501, + }, + { + lat: 43.2586, + lng: 45.5392, + pop: 12340, + }, + { + lat: 36.2082, + lng: -119.0897, + pop: 12551, + }, + { + lat: 32.3378, + lng: 51.1961, + pop: 12292, + }, + { + lat: 34.6097, + lng: -117.8339, + pop: 12497, + }, + { + lat: 34.2419, + lng: 35.9794, + pop: 12000, + }, + { + lat: 43.4269, + lng: 28.1617, + pop: 12429, + }, + { + lat: 39.9011, + lng: 38.7686, + pop: 12456, + }, + { + lat: 26.5583, + lng: 49.9503, + pop: 11460, + }, + { + lat: 43.2514, + lng: 45.9072, + pop: 12224, + }, + { + lat: 36.5244, + lng: -119.5602, + pop: 12413, + }, + { + lat: 32.3156, + lng: 50.6783, + pop: 12308, + }, + { + lat: 36.2936, + lng: 37.0444, + pop: 11918, + }, + { + lat: 40.14, + lng: 45.3064, + pop: 11987, + }, + { + lat: 43.3117, + lng: 45.1594, + pop: 12221, + }, + { + lat: 32.2854, + lng: 35.8113, + pop: 11586, + }, + { + lat: 43.1126, + lng: 45.7339, + pop: 12092, + }, + { + lat: 40.3167, + lng: 38.7667, + pop: 12250, + }, + { + lat: 42.665, + lng: 46.22, + pop: 12159, + }, + { + lat: 45.6833, + lng: 28.4028, + pop: 12185, + }, + { + lat: 27.1944, + lng: 60.4558, + pop: 12217, + }, + { + lat: 46.5331, + lng: 48.3456, + pop: 12214, + }, + { + lat: 34.5683, + lng: 36.2764, + pop: 12000, + }, + { + lat: 46.8333, + lng: 33.4167, + pop: 12123, + }, + { + lat: 32.6653, + lng: 35.7333, + pop: 11706, + }, + { + lat: 43.6756, + lng: 43.455, + pop: 12001, + }, + { + lat: 30.0042, + lng: 53.0067, + pop: 12000, + }, + { + lat: 41.8833, + lng: 34.9167, + pop: 12049, + }, + { + lat: 47.0708, + lng: 32.7997, + pop: 12045, + }, + { + lat: 31.9383, + lng: 51.0533, + pop: 11980, + }, + { + lat: 33.1839, + lng: 36.2264, + pop: 11802, + }, + { + lat: 40.9131, + lng: 37.5169, + pop: 11851, + }, + { + lat: 36.9883, + lng: 32.4569, + pop: 11970, + }, + { + lat: 36.6667, + lng: 34.4167, + pop: 11923, + }, + { + lat: 47.2717, + lng: 35.2248, + pop: 11949, + }, + { + lat: 40.9422, + lng: 39.1942, + pop: 11934, + }, + { + lat: 31.9911, + lng: 54.2322, + pop: 11691, + }, + { + lat: 42.4333, + lng: 47.3167, + pop: 11862, + }, + { + lat: 47.1708, + lng: 37.6954, + pop: 10350, + }, + { + lat: 46.2667, + lng: 30.4333, + pop: 11741, + }, + { + lat: 47.1333, + lng: 28.8667, + pop: 10669, + }, + { + lat: 33.2092, + lng: 35.2992, + pop: 10000, + }, + { + lat: 33.5581, + lng: 36.2222, + pop: 10045, + }, + { + lat: 43.6119, + lng: 43.3269, + pop: 11717, + }, + { + lat: 36.8175, + lng: 38.0111, + pop: 11570, + }, + { + lat: 38.8957, + lng: -119.7492, + pop: 11761, + }, + { + lat: 46.7353, + lng: 36.3473, + pop: 11679, + }, + { + lat: 32.4689, + lng: 51.5578, + pop: 10851, + }, + { + lat: 43.5667, + lng: 43.5833, + pop: 11575, + }, + { + lat: 26.2483, + lng: 60.7525, + pop: 11605, + }, + { + lat: 43.4911, + lng: 43.5528, + pop: 9669, + }, + { + lat: 46.6977, + lng: 35.1554, + pop: 11481, + }, + { + lat: 36.8833, + lng: 36.2333, + pop: 11187, + }, + { + lat: 46.9122, + lng: 28.8839, + pop: 10175, + }, + { + lat: 42.3264, + lng: 42.6006, + pop: 11281, + }, + { + lat: 36.6389, + lng: 32.8925, + pop: 11332, + }, + { + lat: 29.9789, + lng: 48.5206, + pop: 11173, + }, + { + lat: 30.0617, + lng: 48.4508, + pop: 11173, + }, + { + lat: 39.7667, + lng: 30.95, + pop: 11242, + }, + { + lat: 44.45, + lng: 42.5, + pop: 11215, + }, + { + lat: 46.1083, + lng: 28.5972, + pop: 11123, + }, + { + lat: 36.1417, + lng: 33.3178, + pop: 11088, + }, + { + lat: 34.2425, + lng: 37.0589, + pop: 11064, + }, + { + lat: 46.6833, + lng: 47.85, + pop: 11079, + }, + { + lat: 36.7667, + lng: 31.3889, + pop: 11000, + }, + { + lat: 47.0667, + lng: 28.6833, + pop: 10380, + }, + { + lat: 34.0833, + lng: 36.7667, + pop: 10984, + }, + { + lat: 44.4361, + lng: 34.1106, + pop: 10310, + }, + { + lat: 46.8678, + lng: 28.7689, + pop: 10907, + }, + { + lat: 45.5019, + lng: 32.7025, + pop: 11039, + }, + { + lat: 43.5261, + lng: 43.5594, + pop: 11004, + }, + { + lat: 36.1389, + lng: 36.83, + pop: 10657, + }, + { + lat: 41.6281, + lng: 48.6828, + pop: 10894, + }, + { + lat: 40.7444, + lng: 43.625, + pop: 10985, + }, + { + lat: 36.2167, + lng: 36.1667, + pop: 10354, + }, + { + lat: 33.4861, + lng: 36.6011, + pop: 10548, + }, + { + lat: 33.7333, + lng: 35.45, + pop: 10000, + }, + { + lat: 32.6872, + lng: 34.9383, + pop: 10639, + }, + { + lat: 37.3406, + lng: 40.8258, + pop: 10846, + }, + { + lat: 41.3, + lng: 27.95, + pop: 10601, + }, + { + lat: 44.5528, + lng: 34.2875, + pop: 9117, + }, + { + lat: 36.6667, + lng: 34.3833, + pop: 10907, + }, + { + lat: 32.2983, + lng: 48.4289, + pop: 10858, + }, + { + lat: 40.1428, + lng: 44.1164, + pop: 9870, + }, + { + lat: 41.3833, + lng: 27.9333, + pop: 10072, + }, + { + lat: 41.7333, + lng: 45.3333, + pop: 10871, + }, + { + lat: 40.9368, + lng: 45.8258, + pop: 10797, + }, + { + lat: 34.3, + lng: 35.8, + pop: 10000, + }, + { + lat: 36.7167, + lng: 36.2333, + pop: 10574, + }, + { + lat: 40.3217, + lng: 44.4814, + pop: 10656, + }, + { + lat: 35.683, + lng: 36.533, + pop: 10353, + }, + { + lat: 36.2333, + lng: 36.8167, + pop: 10394, + }, + { + lat: 32.6872, + lng: 36.3508, + pop: 10510, + }, + { + lat: 45.4978, + lng: 34.295, + pop: 10766, + }, + { + lat: 35.0211, + lng: 33.42, + pop: 10466, + }, + { + lat: 41.4783, + lng: 46.6175, + pop: 10700, + }, + { + lat: 30.3611, + lng: 51.1572, + pop: 10764, + }, + { + lat: 36.8667, + lng: 36.2, + pop: 10482, + }, + { + lat: 44.6667, + lng: 45.65, + pop: 10641, + }, + { + lat: 33.85, + lng: 35.6667, + pop: 10000, + }, + { + lat: 32.6322, + lng: 36.3386, + pop: 10466, + }, + { + lat: 31.4103, + lng: 56.2825, + pop: 10761, + }, + { + lat: 45.0448, + lng: 42.1104, + pop: 10695, + }, + { + lat: 31.6325, + lng: 49.8897, + pop: 10698, + }, + { + lat: 44.7444, + lng: 44.2031, + pop: 10721, + }, + { + lat: 29.2417, + lng: 57.3253, + pop: 10670, + }, + { + lat: 37.4944, + lng: 30.9817, + pop: 10707, + }, + { + lat: 40.3833, + lng: 35.5167, + pop: 10703, + }, + { + lat: 44.6142, + lng: 33.6083, + pop: 10196, + }, + { + lat: 46.3544, + lng: 34.3361, + pop: 10647, + }, + { + lat: 41.9747, + lng: 33.7608, + pop: 10594, + }, + { + lat: 33.3986, + lng: 36.4531, + pop: 10473, + }, + { + lat: 43.0878, + lng: 46.5631, + pop: 10532, + }, + { + lat: 40.2847, + lng: 30.3172, + pop: 10591, + }, + { + lat: 46.1958, + lng: 41.0778, + pop: 10593, + }, + { + lat: 36.0833, + lng: 36.5, + pop: 10296, + }, + { + lat: 29.5636, + lng: 51.3369, + pop: 10508, + }, + { + lat: 41.8389, + lng: 43.3792, + pop: 10546, + }, + { + lat: 40, + lng: 29.9, + pop: 10527, + }, + { + lat: 46.6167, + lng: 29.9167, + pop: 10436, + }, + { + lat: 32.3772, + lng: 51.1883, + pop: 10279, + }, + { + lat: 40.78, + lng: 43.1353, + pop: 10497, + }, + { + lat: 40.0986, + lng: 44.4681, + pop: 9550, + }, + { + lat: 36.834, + lng: 37.999, + pop: 10436, + }, + { + lat: 23.4675, + lng: 58.1061, + pop: 10396, + }, + { + lat: 36.305, + lng: -119.2083, + pop: 10441, + }, + { + lat: 30.1811, + lng: 56.8019, + pop: 10407, + }, + { + lat: 40.1167, + lng: 35.2667, + pop: 10407, + }, + { + lat: 46.7559, + lng: 33.4247, + pop: 10360, + }, + { + lat: 36.2941, + lng: -119.1459, + pop: 10349, + }, + { + lat: 44.1736, + lng: 28.4083, + pop: 10216, + }, + { + lat: 25.7089, + lng: 55.7972, + pop: 10190, + }, + { + lat: 36.1164, + lng: 36.5147, + pop: 10084, + }, + { + lat: 40.8333, + lng: 33.25, + pop: 10307, + }, + { + lat: 29.5978, + lng: 57.4386, + pop: 10286, + }, + { + lat: 27.4753, + lng: 59.4717, + pop: 10292, + }, + { + lat: 32.6828, + lng: 36.2233, + pop: 9784, + }, + { + lat: 40.9419, + lng: 45.7358, + pop: 10130, + }, + { + lat: 46.5036, + lng: 30.3244, + pop: 10148, + }, + { + lat: 39.7981, + lng: 42.6744, + pop: 10191, + }, + { + lat: 45.6333, + lng: 27.8, + pop: 10126, + }, + { + lat: 28.8678, + lng: 52.7533, + pop: 10120, + }, + { + lat: 46.9139, + lng: 28.9708, + pop: 9966, + }, + { + lat: 31.9989, + lng: 50.6617, + pop: 10113, + }, + { + lat: 26.2361, + lng: 61.3986, + pop: 10115, + }, + { + lat: 37.471, + lng: 42.317, + pop: 10094, + }, + { + lat: 43.1581, + lng: 44.1569, + pop: 10075, + }, + { + lat: 43.071, + lng: 46.6345, + pop: 10014, + }, + { + lat: 34.6527, + lng: -118.2163, + pop: 10079, + }, + { + lat: 46.0903, + lng: 47.7306, + pop: 10036, + }, + { + lat: 40.8808, + lng: 45.3917, + pop: 9864, + }, + { + lat: 39.75, + lng: 28.9167, + pop: 10042, + }, + { + lat: 35.1409, + lng: -118.4968, + pop: 10051, + }, + { + lat: 27.6594, + lng: 52.6575, + pop: 9982, + }, + { + lat: 43.2317, + lng: 45.5722, + pop: 9783, + }, + { + lat: 40.1331, + lng: 45.4367, + pop: 9880, + }, + { + lat: 36.9667, + lng: 35.05, + pop: 8689, + }, + { + lat: 27.1992, + lng: 54.3667, + pop: 9959, + }, + { + lat: 31.9336, + lng: 51.3306, + pop: 9923, + }, + { + lat: 33.0736, + lng: 50.1647, + pop: 9933, + }, + { + lat: 35.6169, + lng: 36.5953, + pop: 9595, + }, + { + lat: 43.1328, + lng: 45.7797, + pop: 9738, + }, + { + lat: 32.7039, + lng: 51.8381, + pop: 9712, + }, + { + lat: 47.2039, + lng: 30.9125, + pop: 9845, + }, + { + lat: 41.1289, + lng: 43.1328, + pop: 9833, + }, + { + lat: 42.3503, + lng: 42.9983, + pop: 9770, + }, + { + lat: 28.745, + lng: 53.8033, + pop: 9719, + }, + { + lat: 40.1333, + lng: 38.7333, + pop: 9759, + }, + { + lat: 47.0189, + lng: 34.9212, + pop: 9719, + }, + { + lat: 32.8658, + lng: 51.5972, + pop: 9690, + }, + { + lat: 36.8708, + lng: 39.025, + pop: 9653, + }, + { + lat: 40.7814, + lng: 43.8964, + pop: 9668, + }, + { + lat: 43.1797, + lng: 45.4081, + pop: 9584, + }, + { + lat: 45.1278, + lng: 39.5725, + pop: 9617, + }, + { + lat: 40.5194, + lng: 28.8281, + pop: 9625, + }, + { + lat: 44.6833, + lng: 27.9519, + pop: 9642, + }, + { + lat: 46.3667, + lng: 28.5167, + pop: 9562, + }, + { + lat: 46.6317, + lng: 32.4452, + pop: 9565, + }, + { + lat: 33.6878, + lng: 36.1008, + pop: 9371, + }, + { + lat: 44.8228, + lng: 44.6592, + pop: 9602, + }, + { + lat: 39.7175, + lng: 44.8764, + pop: 9306, + }, + { + lat: 46.3629, + lng: 33.5302, + pop: 9539, + }, + { + lat: 43.3725, + lng: 46.445, + pop: 9442, + }, + { + lat: 43.2, + lng: 45.7889, + pop: 9300, + }, + { + lat: 45.4464, + lng: 34.7344, + pop: 9460, + }, + { + lat: 43.9625, + lng: 42.9875, + pop: 9427, + }, + { + lat: 47.1503, + lng: 29.2925, + pop: 9381, + }, + { + lat: 40.21, + lng: 39.6511, + pop: 9387, + }, + { + lat: 29.0147, + lng: 61.45, + pop: 9359, + }, + { + lat: 28.0842, + lng: 54.0483, + pop: 9318, + }, + { + lat: 44.5167, + lng: 34.1833, + pop: 8571, + }, + { + lat: 47.0875, + lng: 28.8703, + pop: 8694, + }, + { + lat: 44.8981, + lng: 28.7419, + pop: 9213, + }, + { + lat: 46.2581, + lng: 33.2843, + pop: 9224, + }, + { + lat: 31.8719, + lng: 56.0239, + pop: 9232, + }, + { + lat: 29.885, + lng: 57.7306, + pop: 9205, + }, + { + lat: 47.25, + lng: 28.7667, + pop: 9122, + }, + { + lat: 40, + lng: 36.22, + pop: 9154, + }, + { + lat: 45.85, + lng: 28.6944, + pop: 9138, + }, + { + lat: 27.8722, + lng: 52.0289, + pop: 8753, + }, + { + lat: 35.5464, + lng: 36.6431, + pop: 8817, + }, + { + lat: 29.6, + lng: 55.5369, + pop: 9112, + }, + { + lat: 43.3186, + lng: 45.9878, + pop: 8972, + }, + { + lat: 35.2477, + lng: -116.6834, + pop: 9100, + }, + { + lat: 41.6222, + lng: 35.5314, + pop: 8864, + }, + { + lat: 46.7833, + lng: 29.6167, + pop: 9000, + }, + { + lat: 35.0025, + lng: 40.5117, + pop: 9000, + }, + { + lat: 39.4737, + lng: -118.7779, + pop: 9068, + }, + { + lat: 40.1, + lng: 31.6833, + pop: 9039, + }, + { + lat: 39.8056, + lng: 40.0364, + pop: 9032, + }, + { + lat: 40.75, + lng: 33.7667, + pop: 8981, + }, + { + lat: 42.3244, + lng: 42.4222, + pop: 8987, + }, + { + lat: 41.45, + lng: 44.5333, + pop: 8967, + }, + { + lat: 41.5, + lng: 31.8667, + pop: 8678, + }, + { + lat: 32.3828, + lng: 35.6619, + pop: 8647, + }, + { + lat: 44.2333, + lng: 42.0167, + pop: 8836, + }, + { + lat: 28.3106, + lng: 54.3347, + pop: 8927, + }, + { + lat: 40.1467, + lng: 45.2642, + pop: 8553, + }, + { + lat: 35.9969, + lng: 36.7867, + pop: 8540, + }, + { + lat: 46.1353, + lng: 41.9656, + pop: 8798, + }, + { + lat: 29.4769, + lng: 54.3314, + pop: 8799, + }, + { + lat: 37.1742, + lng: -113.6809, + pop: 8786, + }, + { + lat: 41.1244, + lng: 44.2819, + pop: 8700, + }, + { + lat: 40.283, + lng: 35.267, + pop: 8696, + }, + { + lat: 35.1268, + lng: -119.4243, + pop: 8730, + }, + { + lat: 32.5756, + lng: 59.7983, + pop: 8715, + }, + { + lat: 36.5433, + lng: -119.2914, + pop: 8701, + }, + { + lat: 37.1703, + lng: 34.6083, + pop: 8679, + }, + { + lat: 42.5658, + lng: 47.5631, + pop: 8627, + }, + { + lat: 40.1639, + lng: 39.8925, + pop: 8657, + }, + { + lat: 37.0728, + lng: 40.6519, + pop: 8551, + }, + { + lat: 44.7494, + lng: 43.4386, + pop: 8544, + }, + { + lat: 37.6494, + lng: 30.5339, + pop: 8537, + }, + { + lat: 40.1575, + lng: 33.7175, + pop: 8531, + }, + { + lat: 32.2631, + lng: 51.5622, + pop: 9924, + }, + { + lat: 32.0686, + lng: 61.8058, + pop: 10000, + }, + { + lat: 33.7711, + lng: 35.6858, + pop: 10000, + }, + { + lat: 30.4667, + lng: 53.45, + pop: 9776, + }, + { + lat: 36.5833, + lng: 31.8833, + pop: 9527, + }, + { + lat: 43.2167, + lng: 46.8667, + pop: 9458, + }, + { + lat: 40.9447, + lng: 47.9411, + pop: 9507, + }, + { + lat: 44.2659, + lng: 43.7562, + pop: 9516, + }, + { + lat: 30.4344, + lng: 63.3183, + pop: 9482, + }, + { + lat: 43.0997, + lng: 44.6317, + pop: 9217, + }, + { + lat: 32.1447, + lng: 48.3925, + pop: 9177, + }, + { + lat: 44.0817, + lng: 42.9606, + pop: 9079, + }, + { + lat: 43.42, + lng: 43.92, + pop: 9010, + }, + { + lat: 40.5808, + lng: 46.8503, + pop: 8830, + }, + { + lat: 32.2539, + lng: 50.5975, + pop: 8699, + }, + { + lat: 40.9533, + lng: 45.6792, + pop: 8702, + }, + { + lat: 43.3469, + lng: 44.6975, + pop: 8590, + }, + { + lat: 46.5467, + lng: 30.6306, + pop: 8558, + }, + { + lat: 43.1486, + lng: 44.7069, + pop: 8508, + }, + { + lat: 40.9053, + lng: 45.5564, + pop: 1155, + }, +] \ No newline at end of file diff --git a/client/src/units/groundunitdatabase.ts b/client/src/units/groundunitdatabase.ts index a52f58fc..b6e94fe6 100644 --- a/client/src/units/groundunitdatabase.ts +++ b/client/src/units/groundunitdatabase.ts @@ -233,6 +233,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "Bunker": { "name": "Bunker", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "Bunker", "shortLabel": "Bunker", "filename": "", @@ -370,6 +371,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "Sandbox": { "name": "Sandbox", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "Sandbox", "shortLabel": "Sandbox", "filename": "", @@ -1085,6 +1087,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "house1arm": { "name": "house1arm", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "house1arm", "shortLabel": "house1arm", "filename": "", @@ -1092,6 +1095,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "house2arm": { "name": "house2arm", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "house2arm", "shortLabel": "house2arm", "filename": "", @@ -1099,6 +1103,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "outpost_road": { "name": "outpost_road", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "outpost_road", "shortLabel": "outpost_road", "filename": "", @@ -1106,6 +1111,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "outpost": { "name": "outpost", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "outpost", "shortLabel": "outpost", "filename": "", @@ -1113,6 +1119,7 @@ export class GroundUnitDatabase extends UnitDatabase { }, "houseA_arm": { "name": "houseA_arm", + "era": ["Early Cold War", "Mid Cold War", "Late Cold War", "Modern"], "label": "houseA_arm", "shortLabel": "houseA_arm", "filename": "", diff --git a/client/src/units/unit.ts b/client/src/units/unit.ts index ba412afd..ca4d66a9 100644 --- a/client/src/units/unit.ts +++ b/client/src/units/unit.ts @@ -1,7 +1,7 @@ import { Marker, LatLng, Polyline, Icon, DivIcon, CircleMarker, Map, Point } from 'leaflet'; import { getMap, getUnitsManager } from '..'; -import { enumToCoalition, enumToEmissioNCountermeasure, getMarkerCategoryByName, enumToROE, enumToReactionToThreat, enumToState, getUnitDatabaseByCategory, mToFt, msToKnots, rad2deg, bearing, coordinatesFromBearingAndDistance, deg2rad } from '../other/utils'; -import { addDestination, attackUnit, changeAltitude, changeSpeed, createFormation as setLeader, deleteUnit, getUnits, landAt, setAltitude, setReactionToThreat, setROE, setSpeed, refuel, setAdvacedOptions, followUnit, setEmissionsCountermeasures, setSpeedType, setAltitudeType, setOnOff, setFollowRoads, bombPoint, carpetBomb, bombBuilding, fireAtArea } from '../server/server'; +import { enumToCoalition, enumToEmissioNCountermeasure, getMarkerCategoryByName, enumToROE, enumToReactionToThreat, enumToState, getUnitDatabaseByCategory, mToFt, msToKnots, rad2deg, bearing, deg2rad } from '../other/utils'; +import { addDestination, attackUnit, changeAltitude, changeSpeed, createFormation as setLeader, deleteUnit, landAt, setAltitude, setReactionToThreat, setROE, setSpeed, refuel, setAdvacedOptions, followUnit, setEmissionsCountermeasures, setSpeedType, setAltitudeType, setOnOff, setFollowRoads, bombPoint, carpetBomb, bombBuilding, fireAtArea } from '../server/server'; import { CustomMarker } from '../map/custommarker'; import { SVGInjector } from '@tanem/svg-injector'; import { UnitDatabase } from './unitdatabase'; diff --git a/client/src/units/unitdatabase.ts b/client/src/units/unitdatabase.ts index fc1bf302..68fc7120 100644 --- a/client/src/units/unitdatabase.ts +++ b/client/src/units/unitdatabase.ts @@ -5,6 +5,10 @@ export class UnitDatabase { } + getBlueprints() { + return this.blueprints; + } + /* Returns a list of all possible roles in a database */ getRoles() { var roles: string[] = []; @@ -33,6 +37,32 @@ export class UnitDatabase { return types; } + /* Returns a list of all possible periods in a database */ + getEras() { + var eras: string[] = []; + for (let unit in this.blueprints) { + var unitEras = this.blueprints[unit].era; + if (unitEras) { + for (let era of unitEras) { + if (era !== "" && !eras.includes(era)) + eras.push(era); + } + } + } + return eras; + } + + /* Returns a list of all possible ranges in a database */ + getRanges() { + var ranges: string[] = []; + for (let unit in this.blueprints) { + var range = this.blueprints[unit].range; + if (range && range !== "" && !ranges.includes(range)) + ranges.push(range); + } + return ranges; + } + /* Gets a specific blueprint by name */ getByName(name: string) { if (name in this.blueprints) diff --git a/client/src/units/unitsmanager.ts b/client/src/units/unitsmanager.ts index 8f2fb8ad..bd35acbf 100644 --- a/client/src/units/unitsmanager.ts +++ b/client/src/units/unitsmanager.ts @@ -2,13 +2,14 @@ import { LatLng, LatLngBounds } from "leaflet"; import { getHotgroupPanel, getInfoPopup, getMap, getMissionHandler } from ".."; import { Unit } from "./unit"; import { cloneUnit, setLastUpdateTime, spawnGroundUnits } from "../server/server"; -import { deg2rad, keyEventWasInInput, latLngToMercator, mToFt, mercatorToLatLng, msToKnots, polygonArea, randomPointInPoly, randomUnitBlueprintByRole } from "../other/utils"; +import { bearingAndDistanceToLatLng, deg2rad, keyEventWasInInput, latLngToMercator, mToFt, mercatorToLatLng, msToKnots, polyContains, polygonArea, randomPointInPoly, randomUnitBlueprint } from "../other/utils"; import { CoalitionArea } from "../map/coalitionarea"; import { Airbase } from "../missionhandler/airbase"; import { groundUnitDatabase } from "./groundunitdatabase"; -import { DataIndexes, HIDE_ALL, IADSRoles, IDLE, MOVE_UNIT } from "../constants/constants"; +import { DataIndexes, HIDE_ALL, IADSDensities, IDLE, MOVE_UNIT } from "../constants/constants"; import { DataExtractor } from "./dataextractor"; import { Contact } from "../@types/unit"; +import { citiesDatabase } from "./citiesDatabase"; export class UnitsManager { #units: { [ID: number]: Unit }; @@ -544,28 +545,31 @@ export class UnitsManager { } } - createIADS(coalitionArea: CoalitionArea, options: {[key: string]: boolean}, density: number) { - const activeRoles = Object.keys(options).filter((key: string) => { return options[key]; }); - const airbases = getMissionHandler().getAirbases(); - const pointsNumber = polygonArea(coalitionArea) / 1e7 * density / 100; - for (let i = 0; i < pointsNumber; i++) { - const latlng = randomPointInPoly(coalitionArea); - var minDistance: number = Infinity; - var maxDistance: number = 0; - Object.values(airbases).forEach((airbase: Airbase) => { - var distance = airbase.getLatLng().distanceTo(latlng); - if (distance < minDistance) minDistance = distance; - if (distance > maxDistance) maxDistance = distance; - }); + createIADS(coalitionArea: CoalitionArea, types: {[key: string]: boolean}, eras: {[key: string]: boolean}, ranges: {[key: string]: boolean}, density: number, distribution: number) { + const activeTypes = Object.keys(types).filter((key: string) => { return types[key]; }); + const activeEras = Object.keys(eras).filter((key: string) => { return eras[key]; }); + const activeRanges = Object.keys(ranges).filter((key: string) => { return ranges[key]; }); - const role = activeRoles[Math.floor(Math.random() * activeRoles.length)]; - const probability = Math.pow(1 - minDistance / 50e3, 5) * IADSRoles[role]; - if (Math.random() < probability){ - const unitBlueprint = randomUnitBlueprintByRole(groundUnitDatabase, role); - spawnGroundUnits([{unitType: unitBlueprint.name, location: latlng}], coalitionArea.getCoalition(), true); - getMap().addTemporaryMarker(latlng, unitBlueprint.name, coalitionArea.getCoalition()); + citiesDatabase.forEach((city: {lat: number, lng: number, pop: number}) => { + if (polyContains(new LatLng(city.lat, city.lng), coalitionArea)) { + var pointsNumber = 2 + Math.pow(city.pop, 0.2) * density / 100; + for (let i = 0; i < pointsNumber; i++) { + var bearing = Math.random() * 360; + var distance = Math.random() * distribution * 100; + const latlng = bearingAndDistanceToLatLng(city.lat, city.lng, bearing, distance); + if (polyContains(latlng, coalitionArea)) { + const type = activeTypes[Math.floor(Math.random() * activeTypes.length)]; + if (Math.random() < IADSDensities[type]) { + const unitBlueprint = randomUnitBlueprint(groundUnitDatabase, {type: type, eras: activeEras, ranges: activeRanges}); + if (unitBlueprint) { + spawnGroundUnits([{unitType: unitBlueprint.name, location: latlng}], coalitionArea.getCoalition(), true); + getMap().addTemporaryMarker(latlng, unitBlueprint.name, coalitionArea.getCoalition()); + } + } + } + } } - } + }) } exportToFile() { diff --git a/client/views/other/contextmenus.ejs b/client/views/other/contextmenus.ejs index cc2fe2aa..6ea1c23c 100644 --- a/client/views/other/contextmenus.ejs +++ b/client/views/other/contextmenus.ejs @@ -1,21 +1,27 @@
-
+
- + +
+
+
+ + -
@@ -229,36 +235,49 @@ class="ol-contexmenu-button">
-
+
Unit types
- +
- -
- +
+
+
Units ranges
+
+ +
+
+
+ + + -->
IADS density
- + +
+
+
+
IADS distribution
+
+